CrackMe_abexcm5分析
abexcm5
爆破难度:⭐
算法分析难度:⭐
第一步:运行程序初步了解程序作用

可以看到这是一个检测程序,当输入正确的字符串时通过检测否则不通过
第二步:利用exeinfo pe查壳
用exeinfo pe打开该程序即可

可以发现该程序没有壳
破解
暴力破解
直接通过修改跳转语句等方法,破坏了程序的完整性

查找相关字符串,通过字符串定位查找判断逻辑(跳转代码)的代码点

可以看到检测通过的字符串,双击进入对应的代码区

找到了关键跳转代码,该代码上一句就是比较代码
如果相等就跳转到调用显示正确的代码段,否则直接往下执行
那么对这个跳转语句进行修改就可以达到破解的目的
je short 00401117
可以改为
jne short 00401117
或
jmp short 00401117
也可以在运行时将eax里的值修改为0
这样都能直接完成跳转,从而达到程序的破解


可以将修改过的程序保存,即得到破解后的程序
算法分析
通过分析程序的算法得到正确的输入,不破坏程序的完整性
通过观察找到程序代码的主要逻辑处,按F2下断点,进行逐步分析

设置好断点后按F9,程序将执行到断点处,此时程序调出了对话框

输入aaaabbbbcccc然后点击check按钮,接下来就逐步调试分析
GetDlgItemTextA函数的作用是获取输入框里的内容,即上面输入的aaaabbbbcccc
GetVolumeInformationA函数的作用是获取磁盘卷信息,通过观察输入的参数可知

这里获取的是程序所在磁盘卷信息(这里获取的是磁盘名称)

lstrcatA函数的作用是拼接字符串,将第一个字符串拼接到后一个字符串的后面
这里就是将StringToAdd里保存的字符串拼接到ConcatString里保存的字符串(空)后面
这里单击数据区,然后按下Ctrl+G输入想要查看的内存地址,即可跳转到对应的内存地址

最后拼接后的结果是4562-ABEX

接下来这里是一个循环,循环次数为2,每次循环对[40225c]、[40225d]、[40225e]、[40225f]里的数据进行加一,即对字符串前4个字符数据进行加2

循环结束后可以看到内存里的前四个数据均加了2

又是一个字符串拼接,拼接结果是L2C-5781

又一个字符串拼接,拼接结果是L2C-57816784-ABEX
最后与我们输入的字符串进行比较,如果相同就成功
总结
这个算法其实很简单
程序中有有两个常量分别存储着两个字符串4562-ABEX和L2C-5781
程序在获取输入框的输入后
再获取了当前程序所在磁盘的磁盘名
然后4562-ABEX拼接到磁盘名后,再对拼接后的字符串的前4个字符数据进行加2处理
最后将这个字符串拼接到L2C-5781后面,即得到最终程序需要比较的字符串
这里由于磁盘没有重命名所以磁盘名为空,下面将程序所在的磁盘名改为abcd,进行测试


可以看到已经获得了磁盘名称

拼接后数据结果

可以看到循环后前四个字节的数据加了2

看到最终结果为L2C-5781cdef4562-ABEX
所以当程序所在磁盘名为abcd时,输入L2C-5781cdef4562-ABEX就能通过检测了


浙公网安备 33010602011771号