您的位置:首页 > 其它

170608 逆向-CrackMe之018和一个简单的论坛CM

2017-06-08 20:41 405 查看
1625-5 王子昂 总结《2017年6月8日》 【连续第249天总结】

A.CrackMe(18)和一个简单的论坛CM

B.中间两个难度是?,留到最后解决

18拖入PEiD,无壳,第一次反编译C++程序

拖入OD,运行。还好有GUI,大概是mfc吧。只有一个输入框和确认按钮

随便输入,点确认。弹窗错误

暂停后ALT+K查看调用堆栈,跟delphi简短一目了然的堆栈不同,非常多,并且存在好多个messagebox的调用,只有最下面两个是用户模块的。现在思考一下,这个调用堆栈应该就是call的结构吧,最外面两个应该是有关的。

当时懵逼。直接查找错误的提示字符串,也没有。

查看GetWindowTextA的调用,下断。

再点确认,果然被断到了,跟到ret的时候在堆栈中发现了字符串,跟出了三个call以后回到了用户模块。

此时就很简单了,一目了然,一个len的API,判断是否为空,一个strcmp的API,正确Serial直接保存在内存中直接拖入即可。并且正确和错误提示也是直接保存在内存中的,理应能查找到。再进行一次查找,出现了截然不同的结果。

估计查找是仅查找当前模块。因此在查找的时候要注意是否位于用户模块。

太简单了,再来一个。

去论坛找了一个看起来比较简单的http://www.52pojie.cn/thread-608526-1-1.html

易语言写的,无壳

也没直接搜到字符串,跟之前一样,直接找getwindowstexta的API,下断就找到了用户模块

这个程序的汇编里有许多case,之间没见过

不过一步一步跟下去,直到找到关键跳转,NOP之就能爆破成功

然后看关键跳转的判断变量,再往上循着找,看是在哪里改变的

中间能看到堆栈和寄存器中多次 出现了一个字符串“241123”,估计是正确Serial,可以输看看

跟到一个call里面,下断,F7跟进去,发现是一个依次判断每个字符是否相等的函数

至此就完全明白了

C.明日计划

VB的两种编译方式的细节
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: