160个Crackme之004 ajj.1

作者:ajj
难度:★★
保护方式:Name/Serial(Delphi)

运行程序
在这里插入图片描述
程序没有确定按钮,所以直接丢到OD中分析。

虽然没有确定按钮,但是有输入框,所以应该调用了GetItemTextA,所以只要在OD中给这个API下断点就可以分析了,可是这个程序是Delphi程序,它的API并不是GetItemTextA,所以暂时放弃这个想法。

在OD中通过中文搜索引擎的智能搜索查找字符串,发现有用的字符串"恭喜恭喜!注册成功"
在这里插入图片描述

可问题是这个程序没有确定按钮,如何触发到代码?
OD对Delphi实在有点有心无力,我们还是用Delphi专门的反编译工具DarK吧,打开DarK并将程序打开,点击开始处理,处理完成后会进行一些拓展处理,一路点“是”。
在这里插入图片描述

分析好以后点击窗体,这个窗体包含了程序所有的窗口
在这里插入图片描述
可以看到有一个TForm1窗口,它就是程序的主窗口,双击它会弹出两个窗口,一个是模拟出来的主窗口,还有一个是控件绑定信息窗口,这个窗口包含了所有的控件信息,通过鼠标在模拟的主窗口上面移动,控件绑定信息窗口会选中当前控件。
在这里插入图片描述

在这里插入图片描述

Label1-Label6和Image1都是不可交互控件,所以重点看Edit1、Edit2和Panel1。
选中Edit1控件,可以看到右边的子窗口有一个成员OnKeyUp,当键盘按键弹起时会调用KeyUp函数。
选中Edit2控件,跟Edit1类似,不过它调用的是chkcode函数
选中Panel1控件,可以看到成员OnClick绑定的函数是Panel1Click,OnDblClick绑定的函数是Panel1DblClick,也就是说单击图片会调用Panel1Click,双击图片会调用Panel1DblClick。

回到DarK的主窗口点击“过程”,可以看到所有关联函数的RVA

在这里插入图片描述
通过这几个函数的RVA,在OD中找到代码,打断点。

运行程序后首先调试KeyUp函数,当Edit1处于激活状态时,键盘按键弹起时会触发这个函数。

输入tutucoo,当输入完第1个t时,程序断下,位于0x457e4c,这个函数没有核心算法,接着分析Edit2
在这里插入图片描述

Edit2绑定函数位于0x457c40,当Edit2中有任意输入时断下。

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

在这里插入图片描述

分析到0x457d2f处时,可以看到字符串"黑头Sun Bird12dseloffc-012-OK",猜测这个字符串就是注册码。
这个函数先分析到这,接着分析Panel1Click,它位于0x457fb8,当鼠标点击Panel时会触发。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这个函数的末尾可以看到注册成功的字样,因此可以认为这个函数是最终的比对函数。
根据目前分析到的信息,可以作这样的猜测:
1.注册码是否为“黑头Sun Bird12dseloffc-012-OK”(用户名为7位的情况)
2.内存某处是否是0x85
此时我们已经知道了注册码,那0x85是在哪里设置的呢?先不急,分析完最后一个函数,也许这个问题就解决了。

最后一个函数Panel1DblClick,在Panel上双击触发此函数,程序断在0x457e7c处。
在这里插入图片描述

这个函数会将esi+0x30c覆盖为0x85,不过前提是esi+0x30c保存的是0x3e。

在[ESI+0x30C]上右键点击查找参考->地址常量,打开常量窗口,找到赋值3E的位置下断点。
在这里插入图片描述

我们跳转过去发现赋值3E的位置位于Edit2函数中,之前分析单步时没有走到这一步直接跳过去了,所以没注意。可以猜测,在Edit2中输入注册码时这个函数会一直调用,直到注册码为正确。

调试,输入用户名:tutucoo,正确的注册码:黑头Sun Bird12dseloffc-012-OKtutucoo,程序断下,成功赋值3E。

在这里插入图片描述

总结下这个程序的算法:
1.任意输入一个用户名
2.根据用户名输入正确的注册码,程序会在这一步循环检测注册码是否正确,如果是正确的,将3E存储到esi+0x30c
3.用户双击Panel,程序会检测此时esi+0x30c处的值是否是3E,如果是3E,将esi+0x30c赋值为0x85
4.用户单击Panel,程序会检测用户名、注册码以及esi+0x30c处是否为0x85

以上几步全部顺利通过程序就被破解了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值