逆向分析CrackMe系列——CrackMe004

逆向分析CrackMe系列——CrackMe004

这次进行CrackMe004的逆向分析, 由于003的难度较大,后面再分析,
(。・∀・)ノ
(本系列的CrackMe资源均来自我爱破解网).

1. 老规矩,先运行程序。发现没有按钮,但是会提示 “注册成功后将会显示朱茵女神的美图一张” :

在这里插入图片描述
2. 用PEID进行检查,发现用Delphi语言编写,没有加壳

3. 先用插件进行字符串搜索:
在这里插入图片描述
4. 发现可疑字符串:

在这里插入图片描述
5. 进行跟踪,发现该字符串的下部分为一个函数调用,猜测它为一个窗口函数,在输入正确时进行提示。

在这里插入图片描述
6. 继续分析,发现下面部分存在一个跳转,找到跳转的地方:

在这里插入图片描述
7. 其中带有正确显示字符串的部分会被跳过,该跳转前还有一个cmp函数,我们猜测此处为检查序列号和用户名的地方。下断!然而并部暂停,说明该部分的代码都没有被执行,猜测应该是用户名检验未通过,所以不会进行序列号的检查。再在整个代码前下断,发现依然断不下来(不管是改变输入的用户名还是序列号),完蛋!

在这里插入图片描述
8. 别方,在不停的尝试后居然断了下来!!! 那么问题来了,是怎么断下来的呢?
不停地在窗口瞎点,发现点击灰色框(也就是将显示朱茵女神照片的图框)后程序就断下了,哈哈哈哈… 事实证明,还是要“手贱”

在这里插入图片描述
9. 开始单步调试,一边按F8一边观察堆栈和寄存器,看看有没有什么线索出现;
—在004057FFD处发现入栈了一个字符串“42”,该字符串存于[ebp-8]中
—在0045800E处入栈了输入的用户名“wwwwwwwwwww”,字符串存于[ebp-10]中
   然后继续F8,发现程序进入了一个死循环从00457FDC地址处一直运行到0045802F处后再跳回00457FDC处:

在这里插入图片描述
10. 分析到这里,基本验证了刚刚的猜测,此处进行用户名的检查,如果用户名检查不通过,是不会继续往下继续执行的。好说,我们将这个jnz 00457FDC语句用两个nop进行替换:

在这里插入图片描述
11. 再继续往下执行,成功断到00458031处;刚刚我们分析了,下面的jnz 004580B3语句将直接跳过正确显示的字符串:

在这里插入图片描述
12. 我们同样地直接将这个jnz 004580B3 用两个nop进行替换,

扫描二维码关注公众号,回复: 16784633 查看本文章

在这里插入图片描述
13. 继续执行,同时观察堆栈和寄存器,发现:
—00458060处将字符串“15”入栈,该字符存于[ebp-18]中
—00458073处将字符串输入的用户名“wwwwwwwwwww”入栈,该字符存于[ebp-20]
同时发现从0045803F处一直执行到00458092处后又将跳转回0045803F处,这与上面的情况一样:

在这里插入图片描述
14. 好说,继续将jnz 用两个nop进行替换

在这里插入图片描述
15. 马上就要成功提示了,好激动!继续执行,发现单步F8执行完代码后没啥动静,有点方!! /(ㄒoㄒ)/~~

16. 别急,直接F9,终于一睹女神的芳颜,哈哈哈… o( ̄▽ ̄)ブ ;
至于“恭喜恭喜!注册成功!”的字符串是将鼠标停留在图片上后就会显示

在这里插入图片描述
17. 好,冷静一下,开始分析真正的注册码和注册码的生成算法。


算法分析篇幅较大,见另一篇博客

猜你喜欢

转载自blog.csdn.net/weixin_39561364/article/details/108207230