软件安全实验四——实验报告
实验要求
下载Crackme程序,综合运用0lyDbg、IDA 和UltraEdit 等工具进行注册登录功能的破解。完成实验报告,
实验过程
破解目标选择 crakeme001:Acid burn;
实验环境为 windows 11.
一 体验 Acid burn
打开Acid burn,体验如何使用:

Serial/Name界面,输入一个用户名,尝试输入几个序列号,都返回Try Aagin:

Serial界面同样:

目标应该就是破解出正确的序列号了。
二 ollyDbg 破解序列号
启动ollyDbg,打开acid burn文件:
看到一大串类似于汇编语言的代码。
点击运行,然后在acid burn输入账号和序列号:
发现定位到了0042FB03,这里有一个JNZ跳转指令
JNZ SHORT 0042FB1F
,根据ZF是否为0决定是否跳转。不跳转就往下执行,输出”Congratz !!”和“Good job dude =)”字符串,否则会跳转到0042FB1F,即输出”Try Again!“和”Sorry,The serial is incorrect.“字符串。在JNZ跳转指令前面,有一段调用函数指令CALL 004039FC
,那这个函数应该就是用来判等的。同时右下方出现了一些字符串,立马发现我们在acid burn输入的账号”jinqq“和序列号”12345“,同时下面还有一个字符串”CW-8692-CRACKED“,如果是通过是否相等来判断的话,合理怀疑这串就是正确的序列号。
测试一下,果然是这个:
三 IDA 破解 强制跳转”Good job”
先在IDA官网注册账号:IDA Free,下载IDA FREE 9.0并获取License Key。然后安装IDA,并在安装目录下放置下载的License Key。

用IDA打开acid burn,进入界面,包含反汇编视图、函数窗口、输出窗口:
通过搜索 “Sorry”,定位到这里。
可以看到,在 “Sorry” 代码块的前面就是 “Good job dude =)” 代码块,并且前面有一个跳转指令jnz short loc_42FB1F
,前面有一个call函数,应该是用来判等的,然后根据ZF为0还是为1来决定是否跳转。
我们希望它不进行跳转,执行下面的 “Good job dude =)” 分支,因此将这一行换成无意义的一行。
选择jnz short loc_42FB1F
这一行,再点击菜单栏 Edit > Patch Program > Assemble,然后将该行改成nop
,确定。

然后再将修改的保存:
重新运行acid burn,发现成功: