通过一个crackme学习逆向基础知识以及Delphi框架
字数 1968 2025-08-26 22:11:45
通过CrackMe学习逆向基础与Delphi框架分析
前言
本教程基于160个CrackMe系列的第5个实例,这是一个使用Delphi框架编写并带有UPX壳的逆向分析练习。通过这个案例,我们将系统学习逆向工程的基础知识,包括脱壳技术、Delphi程序分析方法和多层防护机制的绕过策略。
一、查壳与脱壳
1. 查壳工具使用
使用Exeinfo PE工具检测程序,发现程序带有UPX壳:
- UPX是一种常见的压缩壳
- 特征:程序开头有
pushad指令
2. 壳的类型与原理
压缩壳
- 作用:减小程序体积而不影响内存装载
- 解压机制:
- 记录原PE文件的节数量和大小
- 解压时在壳代码后占用等大空间存放解压后的代码
- 避免解压过程中覆盖相邻代码
加密壳
- 种类繁多,功能各异
- 主要功能:保护程序、防止反编译、提供注册验证等
3. 手动脱壳步骤
-
寻找OEP(原始入口点)
- 使用ESP定律:在
pushad后对ESP下硬件断点 - 单步跟踪直到发现跳转到主函数的
jmp指令 - OEP特征:
push ebp和mov ebp, esp开栈操作
- 使用ESP定律:在
-
脱壳方法
- 使用OD的脱壳插件进行内存转储
- 注意:壳会抹去原程序的IAT(导入地址表)
-
修复IAT
- 使用ImportREC工具修复转储后的程序
- 获取导入表后修复转储文件
4. 脱壳机使用
对于UPX壳,可以使用专用脱壳机快速完成脱壳,保证代码对齐准确。
二、Delphi程序分析
1. 框架分析工具
使用DarkDe4分析Delphi程序:
- 查看窗体信息:发现隐藏的TEdit2控件
- 事件分析:
- 表单创建
- 计时器事件
- 双击事件
- 编辑框事件
- 鼠标移动事件
- 按钮点击事件
2. IDA与OD协同分析
-
IDA导出MAP文件
- 在IDA中选择"Produce file" → "Create MAP file"
- 包含所有符号签名信息
-
OD导入MAP文件
- 使用LoadMapEx插件导入
- 效果:增加调试注释,部分函数名称更改为IDA分析结果
三、字符串分析
查找关键字符串:
- 注册成功提示信息
- 错误提示信息
- 文件路径信息
通过字符串定位关键判断点,发现程序有4个主要防护检测。
四、多层防护分析
第一层防护:文件验证
-
检测机制
- 检查指定路径下的ok.txt文件
- 读取文件内容与预设字符串比较
-
绕过方法
- 修改文件路径为有效路径(如C盘)
- 创建ok.txt文件并写入特定内容
第二层防护:点击计数
-
检测机制
- 变量
ds:[eax+0x308]初始化为0x28E - 右键点击按钮1会使值加3
- 需要使最终值为0x29D
- 变量
-
绕过方法
- 右键点击注册按钮5次:(0x29D-0x28E)/3=5
第三层防护:鼠标位置与图片验证
-
图片序列
- Image1: "人之初"
- Image2: "性本善"
- Image3: "性相近"
- Image4: "习相远"
-
鼠标位置要求
- 图片为"性相近"时:
- 横坐标≤0xEX
- 纵坐标≤0x12C
- 图片为"性本善"时:
- 横坐标≥0x17
- 纵坐标≤0x12C
- 图片为"性相近"时:
-
嵌套检测
- 变量
ds:[ebx+0x310]需等于0x10 - 变量
ds:[ebx+0x30C]需不等于0x9
- 变量
第四层防护:编辑框2验证
-
激活编辑框2
- 右键点击注册按钮5次
- 双击Panel1控件两次
-
内容验证
- 长度必须为8
- 第2个字符必须是'_'(0x5F)
- 第6个字符必须是','(0x2C)
-
编辑框1验证
- 内容长度必须是3的倍数
- 内容必须为"ajj"
第五层防护:图片点击计数
-
变量关系
- 需要使
ds:[ebx+0x318]等于ds:[ebx+0x314] ds:[ebx+0x314]的值由磁盘空间计算得出
- 需要使
-
点击规则
- 根据显示数字不同执行不同点击组合:
- 0: "习相远"左键2次,"人之初"右键3次
- 1: "习相远"左键1次,"习相远"右键2次
- 2: "性本善"左键2次,"性相近"右键2次
- 3: "习相远"左键1次,"习相远"右键8次
- 4: "习相远"左键2次,"人之初"右键3次
- 根据显示数字不同执行不同点击组合:
五、完整绕过流程
-
文件准备
- 在C:\ajj.126.c0m\j\o\j\o路径创建ok.txt
- 写入特定内容
-
点击操作
- 右键点击注册按钮5次
- 左键双击Panel空白处2次
-
输入内容
- 编辑框1输入"ajj"
- 编辑框2输入符合格式的8字符(如"1_345,78")
-
鼠标操作
- 图片为"性相近"时从右下角移入
- 图片为"性本善"时从左下角移入
-
图片点击
- 根据显示数字执行对应的点击组合
六、总结
这个CrackMe涵盖了逆向工程的多个关键知识点:
- 壳的识别与脱壳技术
- Delphi程序的结构分析
- 多层防护机制的逆向分析
- 动态调试与静态分析结合的方法
- 复杂验证逻辑的梳理与绕过
通过这个案例,可以系统掌握逆向工程的基本流程和方法,为分析更复杂的程序打下坚实基础。