-
-
[原创]第三题 crackMe
-
2017-10-28 17:32 2381
-
调试器载入CM,直接运行则退出,显然存在anti,于是考虑附加。
附加后,定位到验证函数,又有一堆anti,有一个影响到程序进行的anti call
010A5132 push edx 010A5133 call <crackme.异常111> //nop 010A5138 add esp,C
接着无视弹出的异常,跟到这里
if ( !j__memcmp(v10, &v5[-v6], v4) )//这里跟进去 { sub_42D0B4(); if ( sub_42D9AB((int)&unk_49B000, (int)v13) == 1 ) MessageBoxA(0, "ok", "CrackMe", 0); }
找到段尾
010A7EFE | xor ecx,ebp | 010A7F00 | call crackme.109D1E5 | 010A7F05 | add esp,1B4 | 010A7F0B | cmp ebp,esp | 010A7F0D | call crackme.109DE51 //CALL1 010A7F12 | mov esp,ebp | 010A7F14 | pop ebp | 010A7F15 | ret |
CALL1处将会在未nop<crackme.异常111>时出现明码比较,于是nop该call,在下方构造一个死循环,并下断点,重新运行程序,输入0x40个c,再附加断下,得到明码:key:183920f00e15a0433ee3a8fc90dd9ac164c4142ccf63ca189a8f645ec96ff8de
再来看这里:
if ( !j__memcmp(v10, &v5[-v6], v4) ) { sub_42D0B4(); if ( sub_42D9AB((int)&unk_49B000, (int)v13) == 1 )//这里跟进去 MessageBoxA(0, "ok", "CrackMe", 0); }
发现存在多解,举几个例子:
123deadbeef183920f00e15a0433ee3a8fc90dd9ac164c4142ccf63ca189a8f645ec96ff8de 123a183920f00e15a0433ee3a8fc90dd9ac164c4142ccf63ca189a8f645ec96ff8de %d...%d%x...%x183920f00e15a0433ee3a8fc90dd9ac164c4142ccf63ca189a8f645ec96ff8de
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法
赞赏
他的文章
[原创] 第三题 寻踪觅源 WP
3463
[原创] 第二题 WP
2249
[原创]第四题 club_pwn exp
3073
[原创]第三题 crackMe
2382
[原创]第二题 ctf2017_Fpc
3335
看原图