Crackme004-CKme(OD版本)

Crackme004-CKme(OD版本)

程序执行过程

在这里插入图片描述

输入正确的用户名以及注册码就会在下方的灰色区域显示出一张照片

第一步:进行查壳,判断是否存在壳

在这里插入图片描述

第二步:将程序加载到OllyDbg中

在这里插入图片描述

点击F9进行运行程序

在这里插入图片描述

第三步:查找中文引擎中的提示信息

在汇编窗口右键选择“中文搜索引擎—>智能搜索”

在这里插入图片描述

在这里插入图片描述

在弹出的窗口中,我们看到了很多的信息,其中一条就是“恭喜恭喜!注册成功”

第四步:选中执行的字符串右键鼠标,点击“在解释器中跟随”,或者直接进行双击,即可去往执行的汇编窗口

在这里插入图片描述

第五步:分析疑似的判断语句

在我们第四步跟踪之后,我们观察到有两个疑似的判断条件

在这里插入图片描述
在这里插入图片描述

根据观察指令之前的箭头跳转可以得知,jnz short CKme.004580B3转移的指令是直接跳过了“恭喜恭喜!注册成功”这个指令的,那么我们需要将这个判断的结果与之前的判断结果相反,这样的话就不会直接跳过注册成功这个函数的执行,所以我们需要修改这个判断指令

第五步:用NOP指令进行填充

右键选择“二进制—>用NOP填充”

在这里插入图片描述

或者右键点击汇编输入 NOP

在这里插入图片描述

在这里插入图片描述

修改之后我们运行,直接点击灰色区域,即可显示出图片

在这里插入图片描述

这样就实现了直接绕过

我们也可以通过分析去寻找这个注册码的算法,根据每次输入的用户名即可直接计算出注册码

寻找注册码的算法

在寻找注册码的过程中需要利用DelphiDecompiler软件

在这里插入图片描述

我们可以观察到chkcode中对应的地址,即为算法实现的地址

我们回到OD中在汇编指令中寻找这个地址对应的汇编指令

在这里插入图片描述

找到这个地址之后,我们添加断点,点击运行

在这里插入图片描述

此时程序断到了断点处

在这里插入图片描述

点击F8进行单步步过,重点关注ASCII码值的变化,乘法指令,除法指令,加法指令等运算指令

观察信息窗口以及寄存器窗口中的寄存器数据变化

一步一步执行,忽然我们观察到一个特殊的ASCII码,我们猜测这个就是我们的注册码

黑头Sun Bird11dseloffc-012-OK123456

在这里插入图片描述

根据这一步一步的操作我们可以总结出注册码的形式为

黑头Sun brid+(name长度+5)+dseloffc-012-OK+name

我们根据这个算法进行测试

在这里插入图片描述

我们可以发现,此时我们利用算法计算出了注册码,并且成功显示了照片

猜你喜欢

转载自blog.csdn.net/weixin_60363168/article/details/127676847
004