首页
社区
课程
招聘
[原创]叹息之墙分析
发表于: 2018-9-30 04:51 7440

[原创]叹息之墙分析

2018-9-30 04:51
7440
做完我真的叹息了。

0x1:
  控制流平坦化虽然可怕,但是找到几个关键的代码块即可完成分析。
代码块1:


0xF0FE40就是你输入的序列号对应的数组
F0F000是个大小为350的常量数组,

这个代码块就是把你输入的序列号对应的常量挨个加起来,注意虽然常量是DWORD类型,加的时候是QWORD类型,
逻辑如下

接着看第二个块

前面把序列号算出来的KEY放到了parm+8的地方,大小是8
前面8个字节是个常量,

把这2个qword的变量当作参数传给 00E71020 函数,然后判断返回值是不是 6E616B34

如果是 6E616B34 ,程序就验证成功了。我们接着看 00E71020 是个什么函数 ,不难发现,其实这就是一个
pow函数,不过参数都是qword,为什么返回了个dword呢,有诡异,接着看

原来问题在这,看到了吗,__aullrem是qword下的取余操作,原来程序为了能返回成一个dword,加了一次结果的取余操作。
那么我们知道了程序求的是
0x65757832 ^ key = 0x6E616B34 ,且pow会发生取余截断,那么我们需要算出key是多少,代码如下

很快,就得出了一批结果

拿到这些key后,我们可以先放到一遍,

现在的问题是,怎么样从常量表里面找到k(k <= 9)个数,使其满足和等于我们刚刚算的KEY呢。
一开始我以为这是ksum问题,于是从2-9计算了一遍,到了k = 7的时候就明显慢的不行了。

这样解答肯定是有问题的,于是研究下那个常量数组,排下序,看下有没有什么规律。
看到前面几个数好像是按着15825810递增的,

后来发现,有一些数不是 15825810递增 的,
比如

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2018-9-30 04:55 被xiaofu编辑 ,原因:
上传的附件:
收藏
免费 2
支持
分享
最新回复 (1)
雪    币: 1157
活跃值: (847)
能力值: ( LV8,RANK:150 )
在线值:
发帖
回帖
粉丝
2
曲高和寡
2019-10-18 09:29
0
游客
登录 | 注册 方可回帖
返回
//