检查外壳

先运行程序,程序有Nag、Serial、Serial/Name。

检查外壳。可以看到程序没有shell,是用Delphi写的。

移除Nag

这个程序没有shell,直接用OD运行。对于不熟悉Delphi语言的人来说,这一块还是有点坑的。

一开始我以为是消息框弹出来的。直接用OD搜索,发现调用了三个MessageBox函数。我很开心。我破断点发现地址0x42A1A9的MessageBox函数和Nag有关。这个消息框是由0x42A170函数调用的,jmp直接跳过了这个函数。保存后发现没有弹出窗口提示序列号输入是否正确。。。很尴尬。。。

重新研究后发现0x42A170函数是一个固定函数,不同的参数弹出的窗口内容会有所不同。尝试了各种方法,都失败了。无奈之下,我只好用最原始的方法,一步一步来。。。

这是节目入口

0x0042FD97是Nag的一个函数。继续一步一步进入调试,可以找到可用的跳转。

在Nag函数的断点下,可以看到Nag函数前面有一个je跳转,跳转位置也很好。直接修改je为jmp,强制跳转,保存,第一步成功!!!

连续剧

接下来,言归正传,破解序列号。这里借助IDA,检查函数0x42A170的引用。调用这个函数有四个地方,这是这里的主要焦点

点进去之后可以看到熟悉的东西。。。用OD定位这个函数,破断点。

经过调试,我们找到了验证串口的主要功能。

这里的逻辑还是很简单的,只是简单的比较。这里的Serial是固定值“你好老兄!”,会进入连环和“你好哥们!”做个对比。

序列号/名称

回到IDA,回到交叉引用,刚才说有四个函数调用0x42A170,又来了另一个函数中的0x42F998。很明显,这就是Serial/Name的验证功能。继续使用OD定位该功能

调试显示Serial的构成是有规律的,CW-****-CRACKED。

算法不难。首先会判断Name的长度不能小于4。其次,将Name的第一个字符取出,用十六进制表示,这个数字乘以0×29再乘以2,得到的数字用十进制表示,加到CW-* * * * *-CRACKED上,得到最终的Serial。

附上一个简单的python脚本:

user = raw_input

打印“CW-”+str* int* 2)+“-CRICED”

1.《破解入门 逆向破解基础系列(第一篇)》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《破解入门 逆向破解基础系列(第一篇)》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/fangchan/1687730.html