首页
社区
课程
招聘
[原创]看雪CTF2017第二题lelfeiCM的writeup
发表于: 2017-6-4 01:10 5173

[原创]看雪CTF2017第二题lelfeiCM的writeup

2017-6-4 01:10
5173




由于是console程序,并且没有隐藏字符串,通过OD/IDA找到关键字符串,所在函数就是关键算法函数:



其实就在main函数中,然后看获取输入之后干了什么。

首先检查输入长度是不是在8到20之间,不是提示key len error

是不是都是数值,不是就提示key format error...


下面接着就是算法的重要部分了,一看到下面的函数,就知道有点小类结构了



先把类结构大致整理出来,方面后续分析

然后就是几个关键函数:

1.1 初始化数据

这个地方首先就想到了每次GetTickCount不一样,那么算法怎么保证结果相同呢,便想到肯定跟index顺序无关,后面验证果然是,我就把401A60给patch了一下,然初始化的序号结构没有打乱顺序,保持0-0x3ff,如下


这样之后,就可以很方便查看数据变换,观察这两个字段即可


后面所有相关函数中有关index转换的也不用关注,因为他变来变去都是0-0x3ff,就只需要关注具体数据操作了。

然后其他函数功能分析也就简单了。

下面简单列一下,不做详细说明了(很简单,就是数组操作过来过去的)



输入的key关键处理部分

先前想着输入的key用9做位移,做加法,干么呢...一直绕不清,后来重新看f_keyobj_key1_s2_401970,觉得是进位处理,一下子就灵光了,这是实现乘法运算(1024位的乘法,真实折腾,nb)。

这样算法也基本清楚了。


怎么校验的呢?

1. 计算结果长度必须是奇数


[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 1
支持
分享
打赏 + 1.00雪花
打赏次数 1 雪花 + 1.00
 
赞赏  CCkicker   +1.00 2017/06/06
最新回复 (5)
雪    币: 1355
活跃值: (344)
能力值: ( LV13,RANK:920 )
在线值:
发帖
回帖
粉丝
2
很棒,支持你!
2017-6-6 09:36
0
雪    币: 7357
活跃值: (3878)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
3
为什么你们3篇都是用python跑的?
2017-6-6 14:37
0
雪    币: 10072
活跃值: (3028)
能力值: ( LV15,RANK:515 )
在线值:
发帖
回帖
粉丝
4
海风月影 为什么你们3篇都是用python跑的?
大神的意思可以直接求逆?
2017-6-6 22:07
0
雪    币: 269
活跃值: (906)
能力值: ( LV12,RANK:345 )
在线值:
发帖
回帖
粉丝
5
大神的意思是你们比较厉害
2017-6-7 10:01
0
雪    币: 10072
活跃值: (3028)
能力值: ( LV15,RANK:515 )
在线值:
发帖
回帖
粉丝
6
AJISky 大神的意思是你们比较厉害
大神洗我脑壳
2017-6-7 12:06
0
游客
登录 | 注册 方可回帖
返回