-
-
[原创]看雪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期)