CrackMe_abexcm5分析

abexcm5

爆破难度:⭐
算法分析难度:⭐

第一步:运行程序初步了解程序作用

image
可以看到这是一个检测程序,当输入正确的字符串时通过检测否则不通过

第二步:利用exeinfo pe查壳

用exeinfo pe打开该程序即可
image
可以发现该程序没有壳

破解

暴力破解

直接通过修改跳转语句等方法,破坏了程序的完整性

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

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

image
找到了关键跳转代码,该代码上一句就是比较代码
如果相等就跳转到调用显示正确的代码段,否则直接往下执行

那么对这个跳转语句进行修改就可以达到破解的目的

je      short 00401117

可以改为

jne      short 00401117
或
jmp      short 00401117

也可以在运行时将eax里的值修改为0
这样都能直接完成跳转,从而达到程序的破解

image
image
可以将修改过的程序保存,即得到破解后的程序

算法分析

通过分析程序的算法得到正确的输入,不破坏程序的完整性
通过观察找到程序代码的主要逻辑处,按F2下断点,进行逐步分析
image
设置好断点后按F9,程序将执行到断点处,此时程序调出了对话框
image
输入aaaabbbbcccc然后点击check按钮,接下来就逐步调试分析
GetDlgItemTextA函数的作用是获取输入框里的内容,即上面输入的aaaabbbbcccc
GetVolumeInformationA函数的作用是获取磁盘卷信息,通过观察输入的参数可知
image
这里获取的是程序所在磁盘卷信息(这里获取的是磁盘名称)
image
lstrcatA函数的作用是拼接字符串,将第一个字符串拼接到后一个字符串的后面
这里就是将StringToAdd里保存的字符串拼接到ConcatString里保存的字符串(空)后面

这里单击数据区,然后按下Ctrl+G输入想要查看的内存地址,即可跳转到对应的内存地址
image
最后拼接后的结果是4562-ABEX

image
接下来这里是一个循环,循环次数为2,每次循环对[40225c]、[40225d]、[40225e]、[40225f]里的数据进行加一,即对字符串前4个字符数据进行加2
image
循环结束后可以看到内存里的前四个数据均加了2

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

image
又一个字符串拼接,拼接结果是L2C-57816784-ABEX
最后与我们输入的字符串进行比较,如果相同就成功

总结

这个算法其实很简单
程序中有有两个常量分别存储着两个字符串4562-ABEXL2C-5781
程序在获取输入框的输入后
再获取了当前程序所在磁盘的磁盘名
然后4562-ABEX拼接到磁盘名后,再对拼接后的字符串的前4个字符数据进行加2处理
最后将这个字符串拼接到L2C-5781后面,即得到最终程序需要比较的字符串

这里由于磁盘没有重命名所以磁盘名为空,下面将程序所在的磁盘名改为abcd,进行测试
image
image
可以看到已经获得了磁盘名称
image
拼接后数据结果
image
可以看到循环后前四个字节的数据加了2
image
看到最终结果为L2C-5781cdef4562-ABEX
所以当程序所在磁盘名为abcd时,输入L2C-5781cdef4562-ABEX就能通过检测了

posted @ 2022-08-10 15:58  略略略zjr  阅读(28)  评论(0)    收藏  举报