逆向破解——程序去除自校验

逆向破解——程序去自校验方法

自校验

意思是这些程序会检查自己有没有被修改,如果发现被修改的话,便会离开或进行其它动作。基本的校检方法包括 checksum, 检查大小, 检查跳转代码,等等。

什么情况下考虑自校验

当一个程序脱壳前可以正常运行,脱壳以后不能运行,修复以后也不行,程序不能运行或者闪退、弹窗提示错误等,我们就要考虑是不是因为程序有自校验了。

自校验破解思路

将脱壳前和脱壳后的程序分别单步运行,对比找出关键跳转,使得自校验保护程序的跳转不能实现。

实验步骤

  • 尝试运行练习程序
    886825-20170622114744913-2071234542.png

  • 查壳
    886825-20170622114749616-548529818.png

  • ESP定律法脱壳,单步,数据窗口跟随当前ESP值,设置硬件访问断点,运行到断点处,单步运行到程序OPE
    886825-20170622114756570-2034912955.png

  • 脱壳后提示程序被非法修改,不能运行。
    886825-20170622114806351-1846366057.png
    886825-20170622114816820-978257738.png

  • 尝试修复,自动修复-->失败
    886825-20170622114824273-112341656.png

  • 手动修复
    886825-20170622114830523-955180838.png

  • IAT起始地址
    886825-20170622114836835-1122800095.png

  • IAT结束地址
    886825-20170622114843570-1216502603.png

  • size=25c-190=cc
  • 手动修复IAT后
    886825-20170622114851663-2059107355.png

  • 修复后仍不能运行,考虑自校验,把脱壳后的程序发送到OD,原始程序脱壳完停留在OPE的界面不要关,我们来对比原始程序和脱壳完成的程序。
  • 在命令输入 bp CreateFileA,定位到kernel32的CreateFileA函数
  • CreateFileA是一个多功能的函数,可打开或创建以下对象,并返回可访问的句柄:控制台,通信资源,目录(只读打开),磁盘驱动器,文件,邮槽,管道。
  • 两边都对这个函数下断点,然后运行到断点处,再执行到用户代码。
  • 先下API断点,执行到断点处,我们就来到函数内部;然后执行到用户代码,回到主程序中调用这个API的位置。
  • 至于为什么是CreateFileA,我觉得自校验之前可能要打开文件,读取一些校验信息。
  • 接下来单步运行,对比脱壳前后两个程序的跳转。
  • 这个跳转在脱壳后的程序20145315_.exe里实现了;
    886825-20170622114901429-1708348813.png

  • 但是在还未脱壳的程序 练习.exe 里没有实现。
    886825-20170622114907913-298579041.png

  • 这是一个条件跳转
cmp eax ,dword ptr ss:[ebp-0x8]
Jnz shoet  00401215

如果当前eax的值与ss:[ebp-0x8]相等,跳转实现;
JE/JZ 等于转移;
JNE/JNZ 不等于时转移.

  • 修改方法有很多种
  • 比如,用Nop替换
    886825-20170622114949226-1295190481.png

  • 保存到可执行文件
  • 修改后正常运行
    886825-20170622114955570-1651090972.png

  • 还可以做其他修改
  • 比如直接修改汇编语言
    cmp eax ,dword ptr ss:[ebp-0x8]
    Jnz shoet 00401215
    如果当前eax的值与ss:[ebp-0x8]相等,跳转实现
    JE/JZ 等于转移
    JNE/JNZ 不等于时转移
    把汇编语句修改为jz short 00401215
    886825-20170622115005726-1363795041.png
    886825-20170622115010976-1721501758.png

  • 保存,显示正常运行
    886825-20170622115017554-1177446836.png

转载于:https://www.cnblogs.com/5315hejialei/p/7064190.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
程序载入OD   下断bp CreateFileA,F9运行   OD中断,ALT+F9执行到用户代码      下面就是F8单步跟踪了      程序在0048EE23处出现对话框,很明显,在0048EDF9处的跳转就是关键跳了   直接将0048EDF9  /7E 38        jle short dumped_.0048EE33   改成0048EDF9  /7E 38         jmp dumped_.0048EE33   保存下,运行成功   把脱好的程序载入ResScope,发现有非标准资源结构,那就用Fix Resource修正下资源,再次再入ResScope,这次可以修改资源了,但是问题又来了。。。   打开修正好的程序程序只是一闪而过就自动关闭了,看来还有校验,继续操起OD,再次载入程序   下断bp CreateFileA,F9运行   OD中断,ALT+F9执行到用户代码,继续F8单步走      0048EE5F出OD就会跑飞了,显然0048EE5D处的跳转又是关键跳啦,   把0048EE5D  /74 05        je short 1.0048EE64   改成0048EE5D  /74 05        jmp 1.0048EE64   就OK了,保存,运行一切正常   现在程序太大,我们再用CxLrb大侠汉化的Resource Binder V2.6处理一下!   挖塞,程序一下从154M缩小到1.13 MB,这样的结果还是让人满意的   但是一运行,程序又是一闪而过,还有校验,OK,继续   OD载入程序,这次可能会比较卡   下断bp CreateFileA,F9运行   OD中断,ALT+F9执行到用户代码,继续F8单步走      0048EE3F处OD跑飞,也很明显了0048EE3D处就是关键跳啦,   把0048EE3D  . /74 05       je short 2.0048EE44   改成0048EE3D  . /74 05       jmp 2.0048EE44   保存,运行成功,感觉048EE4A处的跳转应该也是个校验吧,只是没用到,程序处理到这里就差不多了,有是不妥之处还望大侠们指点!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值