逆向破解——程序去除自校验
2017-06-22 11:50
204 查看
逆向破解——程序去自校验方法
自校验
意思是这些程序会检查自己有没有被修改,如果发现被修改的话,便会离开或进行其它动作。基本的校检方法包括 checksum, 检查大小, 检查跳转代码,等等。什么情况下考虑自校验
当一个程序脱壳前可以正常运行,脱壳以后不能运行,修复以后也不行,程序不能运行或者闪退、弹窗提示错误等,我们就要考虑是不是因为程序有自校验了。自校验破解思路
将脱壳前和脱壳后的程序分别单步运行,对比找出关键跳转,使得自校验保护程序的跳转不能实现。实验步骤
尝试运行练习程序查壳
ESP定律法脱壳,单步,数据窗口跟随当前ESP值,设置硬件访问断点,运行到断点处,单步运行到程序OPE
脱壳后提示程序被非法修改,不能运行。
尝试修复,自动修复-->失败
手动修复
IAT起始地址
IAT结束地址
size=25c-190=cc
手动修复IAT后
修复后仍不能运行,考虑自校验,把脱壳后的程序发送到OD,原始程序脱壳完停留在OPE的界面不要关,我们来对比原始程序和脱壳完成的程序。
在命令输入 bp CreateFileA,定位到kernel32的CreateFileA函数
CreateFileA是一个多功能的函数,可打开或创建以下对象,并返回可访问的句柄:控制台,通信资源,目录(只读打开),磁盘驱动器,文件,邮槽,管道。
两边都对这个函数下断点,然后运行到断点处,再执行到用户代码。
先下API断点,执行到断点处,我们就来到函数内部;然后执行到用户代码,回到主程序中调用这个API的位置。
至于为什么是CreateFileA,我觉得自校验之前可能要打开文件,读取一些校验信息。
接下来单步运行,对比脱壳前后两个程序的跳转。
这个跳转在脱壳后的程序20145315_.exe里实现了;
但是在还未脱壳的程序 练习.exe 里没有实现。
这是一个条件跳转
cmp eax ,dword ptr ss:[ebp-0x8] Jnz shoet 00401215
如果当前eax的值与ss:[ebp-0x8]相等,跳转实现;
JE/JZ 等于转移;
JNE/JNZ 不等于时转移.
修改方法有很多种
比如,用Nop替换
保存到可执行文件
修改后正常运行
还可以做其他修改
比如直接修改汇编语言
cmp eax ,dword ptr ss:[ebp-0x8]
Jnz shoet 00401215
如果当前eax的值与ss:[ebp-0x8]相等,跳转实现
JE/JZ 等于转移
JNE/JNZ 不等于时转移
把汇编语句修改为jz short 00401215
保存,显示正常运行
相关文章推荐
- .Net 下的保护和逆向工程,时代决定我们必须破解NET程序
- 安卓逆向学习笔记(7)- 破解Java层的签名校验
- 使用天乐软件加密狗(JDProtect)保护您的软件,防止程序被跟踪/逆向/反编译/破解
- [.NET逆向] 新手破解.NET程序
- [.NET逆向] 破解 .net实战教程 (反混淆 IL语言 去除强命名)
- 安卓逆向学习笔记(8)- 破解NDK层的签名校验
- 【Android SDK程序逆向分析与破解系列】之五:Android APK的静态分析
- 使用天乐软件加密狗(JDProtect)保护您的软件,防止程序被跟踪/逆向/反编译/破解
- 逆向破解程序脱壳篇-压缩壳
- Android逆向之115网盘5.3.0apk签名校验so破解并干掉长广告
- 【Android SDK程序逆向分析与破解系列】之三:Android可执行程序DEX分析(二)
- Android逆向实例笔记—破解第一个Android程序_crackme02
- 逆向破解程序脱壳篇-压缩壳
- 自用Android程序破解,逆向分析工具集
- 【Android SDK程序逆向分析与破解系列】之二:Android可执行程序DEX分析(一)
- 【Android SDK程序逆向分析与破解系列】之四:Android可执行程序ODEX分析
- 【Android SDK程序逆向分析与破解系列】之一:Android安装程序APK分析
- Android逆向实例笔记—续力破解三个Android程序
- Android逆向笔记(2)--- 破解第一个程序
- 去除代码行号的一个小程序(控制台版本)