-
首先我们运行一遍程序,浏览程序的大致流程。点击程序后会出现一个nag窗口,如下图。
-
随后进入主界面,布局如下。
-
Serial/Name界面如下:
-
Serial界面如下:
-
首先我们从去除nag窗口开始,将源程序在OD中打开,使用F8进行向下进行,进行过程中发现当程序进行完一个call调用后,出现nag窗口。第一次尝试直接将该Call行数nop掉,查看结果发现程序不能正常运行,为出现主界面而是直接出现了单个窗口。
图 1 导入程序
图 2 程序函数及nag窗口
图 3 nop替换代码
图 4 nop 后的运行结果 -
所以我们在第一个call函数处设置断点,然后F7进入后继续使用F8步过查看是哪个函数调用了nag窗口。
图 5 设置断点后F7步入
图 6 发现了调用nag窗口的函数 -
尝试使用NOP替换,发现运行发生错误。
图 7 错误窗口 -
再次设置断点,重复以上步骤。
图 8 nag窗口函数
图 9 实现nag窗口
图 10 nop替换
图 11 成功去除nag窗口 -
将程序保存为Acid burn nag.exe,后续的实验在该程序上继续进行。
-
接下来进行Serial的破解。我们首先随便输入一串数字,点击确认按钮,查看变化。
图 12 出现提示框 -
进行搜索查看“所有被引用的字符串”,输入“Try Again”进行搜索。
图 13 搜索结果 -
发现失败的判断是由一个call 配合jnz 来实现跳转的,如果call后的结果ZF不为0则跳转到失败代码,如果为0则进入成功代码。
图 14 汇编代码 -
进入call函数发现,其将我们所输入的字符串同一个给定的字符串进行比较,发现字符串为“Hello Dude!”
图 15 发现字符串 -
我们将其输入,再次点击确认按钮,发现运行成功。
图 16 运行成功 -
当然我们也可以从汇编代码入手实现修改,将条件判断转移换成直接跳转到正确代码段,随便输入字符串,发现无论输入什么都可以显示成功界面。
图 17 修改汇编代码
图 18 成功界面 -
接下来是Serial/Name界面的破解。原理同上,我们先随便输入一段代码,进行测试,发现出现错误提示窗口,我们进行字符串搜索,查找相关地址,以及汇编代码。
图 19 查找结果
图 20 找到了相关地址
图 21 汇编代码 -
我们通过对汇编代码的追踪,发现了用户名要4位,而serial为一串字符串。步骤同上,结果图如下。
图 22 serial比较 -
通过观察分析得知,用户名只要是4位即可,serial需要为“CW-9758-CRACKED”。我们可以选择直接使用规范通过验证。
图 23 验证成功 -
也可以将所有的条件跳转,变换成无条件跳转从而实现无论输入什么数值都可以通过验证,破解软件。
图 24 修改用户名判断
图 25 修改serial值判断
图 26 修改成功效果 -
至此,Acid burn程序全部破解完毕。
crackme160 Acid_burn.exe
于 2022-10-25 12:13:27 首次发布