[逆向工程]软件有提示类型逆向分析(三十二)
一、环境与工具准备
- 目标程序:cmy.EXE(带登录验证功能)
- 查壳工具:Exeinfo PE(检测程序保护机制)
- 脱壳工具:UPX Tool+(处理压缩壳)
- 调试工具:OllyDbg(OD,动态调试与二进制修改)
- 补丁工具:InLine Patch(内存补丁生成)
二、逆向分析全流程
步骤1:检测程序保护机制
使用Exeinfo PE加载程序,结果显示:
UPX 0.89.6 - 4.23
32位可执行文件
(图:查壳界面显示UPX壳标识,32位程序)

技术原理:UPX是一种常见的可执行文件压缩壳,会加密原始代码,需脱壳后才能进行逆向分析。
步骤2:脱壳处理
- 打开UPX Tool+
- 选择cmy.EXE → 执行"解压缩"
- 生成:
cmy.EX~:带壳备份文件cmy.EXE:脱壳后程序
(图:UPX Tool+成功脱壳提示)

验证脱壳结果:
Exeinfo PE检测显示:Not packed
(图:无壳状态验证)

步骤3:静态分析登录验证逻辑
运行原始程序观察行为:
- 输入正确账号密码 → 登录成功
- 输入错误信息 → 弹出"登录失败"提示
(图:程序正常验证流程)

步骤4:动态调试与关键跳转定位
-
OD加载脱壳程序:
-
定位关键字符串:
- 在智能搜索结果中搜索"登录失败"
- 双击跳转到引用位置
关键发现:
je cmy 004014B4指令决定程序分支走向:
- 条件成立 → 跳转到失败流程
- 条件不成立 → 执行成功流程
步骤5:修改程序逻辑
-
修改跳转指令:
- 双击
jnz指令行 - 修改为
jmp 004014B4(无条件跳转)
(图:OD中修改指令界面)


- 双击
-
保存修改:
- 右键 → Copy to executable → All modifications
- 在新窗口右键 → Save file → 另存为cmy1.EXE
步骤6:验证逆向结果
运行修改后的cmy1.EXE:
- 输入任意账号密码
- 均显示"登录成功"
(图:绕过验证后的成功界面)


三、带壳程序特殊处理技巧
当程序未脱壳时,OD无法直接保存修改,需使用内存补丁:
- 定位关键地址:
- OD加载带壳程序
- F9运行 → Ctrl+G 跳转到00401000
- 搜索"登录失败"字符串
- 按脱壳程序逆向修改代码
-
使用InLine Patch生成补丁:
(图:InLine Patch补丁配置界面)





3.应用补丁:
- 运行生成的补丁程序
- 自动修改内存中的指令字节
- 实现免脱壳破解
四、技术原理深度解析
1. 登录验证流程分析
if (strcmp(username, "admin") == 0
&& strcmp(password, "123456") == 0)
{
ShowMessage("登录成功");
}
else
{
ShowMessage("登录失败"); // 逆向目标位置
}
2. 跳转指令修改原理
| 指令 | 机器码 | 功能 |
|---|---|---|
jnz | 75 | 结果非零时跳转(ZF=0) |
jmp | EB | 无条件跳转 |
通过将条件跳转改为无条件跳转,使程序永远跳过失败分支。
3. 内存补丁工作流程
五、防御建议(开发者参考)
-
代码混淆:
// 原始代码 if (valid) showSuccess(); // 混淆后 void (*funcArr[])(void) = {showFail, showSuccess}; funcArr[valid](); -
完整性校验:
# Python伪代码示例 checksum = calc_checksum(.text section) if checksum != stored_value: self_destruct() -
多阶段验证:
六、总结
本文演示的逆向技术要点:
- 使用查壳工具识别保护机制
- 通过脱壳获取可分析代码
- 定位并修改关键跳转指令
- 处理带壳程序的内存补丁技术
如果你觉得本教程对你有帮助,请点赞❤️、收藏⭐、关注支持!欢迎在评论区留言交流技术细节!
2009




被折叠的 条评论
为什么被折叠?



