首页
社区
课程
招聘
[原创]看雪CTF2017 第七题 CrakeMe逆向分析
发表于: 2017-6-14 22:54 3625

[原创]看雪CTF2017 第七题 CrakeMe逆向分析

2017-6-14 22:54
3625

1.用OD加载程序,直接崩溃

看到开头是这样,明显不正常,经过检查,发现TLS中有代码:

TLS中通过PEB结构拿到当前程序的入口点0x414429,然后执行异或解密程序,用OD加载的可以勾选strongOD中下图所示的选项:

重启就会停在TLS入口点了,同时要删掉OD自动在入口添加的断点:

不然解密之后就是图1的结果。

输入注册码断在这:

这明显是程序内设置的断点,查找异常处理:

可以找到上边这个全局异常处理,同时可以看到异常处理函数:

结合前面的断点就很清楚了,产生Int3 断点之后,程序自己处理,把eip+9,程序跳到:

继续处理,同时会发送一个自定义消息,消息处理函数:

sub_40E37A,该函数重要内容如下:

1.限定编辑框最长长度为20

2.验证函数:

3.第一步验证:

主要分3步,

第一步把输入的字符串每一位异或0xcc

第二步,查表计算,这个不怎么好描述,用python描述大致如下:

第三部,处理第二步的结果:

验证函数:

sub__411825

主要函数:

sub_411975

先把之前处理的结果由16进制转成字符串--

00411987    E8 93FFFFFF     CALL    <crackme.hex2string_41191F>

假设字符串为:

A30B1B828ABB4A9BA9BB93AAA36B82AA024AB243

然后求得每一个字符在下面数组中的下标

004119F4    E8 53F5FFFF     CALL    <crackme.strstr_410F4C>

0012FB34  30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46  0123456789ABCDEF

比如A的下标为index=A

然后把low=index/4  ,hgt=index%4的结果保存起来,

最后与一个保存好的数组比较。

如果相等返回1,不相等返回0

相等则进行下边的shellcode解码:

解码算法大概:

shellcode解码正确为:



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

收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//