共计 2337 个字符,预计需要花费 6 分钟才能阅读完成。
作者:逆向驿站微信公众号:逆向驿站知乎:逆向驿站
CrackMe005, 上篇说了具体方法,下篇来发逆向分析过程,看看老夫是如何得到上篇的具体方法的!
准备
【环境和工具】
win7/xp 虚拟机环境
CrackMe005(ajj2.zip)
ollydbg
Dededark
peid
UPXEasyGUI.exe(upx 专用脱壳器)
【学习层次】
爆破,但是这个 CM 作者声明了,爆破他是不认可的
解密流程,写注册机
积累 Delphi 程序逆向特点经验
详解视频
搞清 Delphi 控件 ID 在反汇编代码中的特点,其实逻辑就清晰多了
https://v.qq.com/x/page/x0830…
实战图文
一.DedeDark 梳理事件、控件信息
二. 动态分析
1. 根据字符串定位总判断位置
字符串“注册了”,“厉害厉害真佩服”入手,定位发现是 timer2 事件函数,五个判断不停的判断,如图
可以看到判断跟 6 个值有关,分别是 [ebx+304]、[ebx+308]、[ebx+310]、[ebx+318]、[ebx+314]、[ebx+31C], 我们下文所有就对其简称做 304、308、310、318、314、31C
2. 逐个判断层层分析
我们从简单往复杂,并结合他们之间内在的逻辑先后顺序,去逐个分析,顺序分别是 31C、304、308、310、314 和 318,其中最难的是 310,方法是常量跟踪法,即在 OD 中点击 查找→所有常量,看看都那些地方对这些值有操作
31C
总判断目标:31C 值,不能等于 0x3E7
相关事件函数:Button1Click
最终逆向分析结论:Buton1Click 事件不能被触发,否则 31C 就会被赋值 0x3E7, 即不能点击注册按钮,这里需要注意 click 事件和 mousedown 事件,click 必须是一个按下和抬起的全过程,而且鼠标位置都在按钮控件范围内,而 mousedwon 事件按下就是
具体逆向分析过程如下
所有常量查找结果,如下反汇编代码如下呵呵就一行,确实简单吧
304
总判断目标:304 值,不能等于 0xC34
相关事件函数:FormCreat
最终逆向分析结论:FormCreat 生成表单的事件函数中,会对一个固定路径检查是否有合规内容的合规文件,有则,显示出隐藏的 Edit2 控件
具体逆向分析过程如下
所有常量查找结果,如下反汇编代码如下注意:我这里已经把,CrackMe 开发者要求的 X 盘符改为了 C 盘符,为的是方便
308
总判断目标:308 值,不能等于 0x230D
相关事件函数:Button1MouseDown、Panel1DblClick
最终逆向分析结论:308 初始值是由 FormCreat 函数初始化为 0x28E, 在 Button1MouseDown 事件中,右键一次则 308 值增加 0x3, 最终目标是 0x29D, 因为等于 0x29D 后,Panel1DblClick 事件就可以解禁 Edit2 控件,则 0x29D 减去 0x28E 再除以 0x3 最后结果等于 5,即右键点击注册按钮 5 次,再去双击 panel1 控件没有图的地方,就可以解禁 Edit2 控件
具体逆向分析过程如下
所有常量查找结果,如下反汇编代码如下
310 中嵌套 30C,最复杂的地方
总判断目标:310 值,必须等于 0xF94
相关事件函数:FormMouseMove、Edit2DblClick
最终逆向分析结论:310 的值要想最终被赋值 0xF94, 必须完成三重判断,第一个是当控件 ID 是 0xE20 时,即是 image3″ 性相近 ” 的时候,FormMouseMove 捕捉的 XY 坐标都足够大,即右下脚,满足则 310 被赋值 0x10, 第二个是当控件 ID 是 0x2DC 时,即 image2″ 性本善 ” 的时候,FormMouseMove 捕捉的 X 坐标足够小、Y 坐标足够大,第三个是,30C 不能等于初始值 0x9, 30C 被赋值的条件是 Edit2 中的字符串长度是 8 位,且第二位是 ”_”,第 6 位是 ”,”,我们写 1_345,78 是符合要求的,同时要求用户名长度是 3 的整数倍,然后左键双击 Edit2 控件,即可给 30C 赋值,具体赋值结果又跟你的磁盘剩余空间有关。当上面这一系列嵌套判断都合规后,则完成 310 赋值 0xF94, 同时若是用户名是 ”ajj”,则显示隐藏控件 ID 是 0x2FC 的 Label3, 显示值是 30C
具体逆向分析过程如下
310 所有常量查找结果,如下 310 反汇编代码如下发现嵌套 30C,那么继续常量查找 30C,如下 30C 反汇编代码如下这里其实是这个 crackme 最难的地方了,其实逻辑并不复杂,需要耐性和记录给理清晰即可
314 和 318
总判断目标:314 的值等于 318 的值
相关事件函数:image1~4MouseDown
最终逆向分析结论:其实 314 的值在上一个流程中已经赋值完毕,314 的值取决于 30C 的值,30C 分别是 0、1、2、3 的时候,314 分别是 0x41、0x3D、0x34、0xDF,而 318 的值,则是点击 1~4 幅图片,区分左右键,分别自增不同的数值,具体如下方图片,最终要求 318 的值等于 314 的值
具体逆向分析过程如下
所有常量 314 查找结果,如下 314 反汇编代码如下 318 所有常量查找结果,如图
至此,如下图 timer2 所有的总判断全部过关,所以 timer2 每次触发,都将走注册成功的流程,是不是感觉很刺激,跃跃欲试的,去网盘中下载,去折磨自己的吧
文章中涉及软件、课件、源码等均在网盘,为避免网盘链接失效,公众号中回复:网盘
欢迎关注微信公众号:逆向驿站
相关文章
● CrackMe-005 精解(上)
● CrackMe-004 精解
● CrackMe-003 精解
● CrackMe-002 精解
● CrackMe-001 精解
本期标签:dededark|delphi 反汇编 |crackme|crackme5|crackme05