第十一课 去除自校验

                               第十一课 去除自校验

 

                            

 

    这课我们要讲的是自校验的问题,程序自校验是在修复中比较复杂麻烦的,我们先从简单的入手

 

    今天我们就掌握一下怎么去除自校验,软件是一个网吧注册工具,看了下只要修改一处自校验就可以让程序正常运行,所以拿出来做实例,有些厉害的自校验强度又大而且有多重不同自校验,以前有个一个crackme,居然有10处自校验,够变态的。

 

一: 实例问题解决之去除自校验(文件大小自校验)(实现未实现的跳)

看操作吧。

当然进行下面的而操作前提是你的先脱壳并修复,运行后没反应。

1.       对比法。

      ①:源程序和脱后的进行跟踪比较,找到不同的条件跳。原程序调试到OEP,和脱壳后的程序载入OD,然后慢慢向下跟踪调试,检查条件跳转是否跳转(如:cmp eax,1117004 语句)。其中eax中存放的是程序自身的大小,eax小于1117004则跳。那么我们可以查看脱后文件的大小(以字节为单位),将1117004该为脱后大小+N(以满足条件跳,小于则跳),注意修改前后要保持位数一致,多的去掉后面的。汇编后保存即可。

②:可以手动实现为实现的跳,及该条件跳转为无条件跳CMP

如:

该CMP 下的jle为JMP  保存即可

2.       找ExitProcess函数

F9运行程序,让程序跑飞。在堆栈窗口到到ExitProcess得下面第一个返回,右键在反汇编窗口中跟随,这样就直接来到了要修改大小的下面附近,然后用方法一改大小即可。用这种方法的好处就在于不用对比得到校验大小的地方,但此法仅限于文件大小自校验。

原理分析:

1: 005E5D4D   .  E8 663DF5FF   call Unpack_.00539AB8

2: 005E5D52   .  3D 00171100   cmp eax,111700

3: 005E5D57   .  7E 05         jle short Unpack_.005E5D5E

4: 005E5D59   .  E8 52F3E1FF   call Unpack_.004050B0

5: 005E5D5E   >  8D55 E4       lea edx,dword ptr ss:[ebp-1C]

6: 005E5D61   .  A1 00F75E00   mov eax,dword ptr ds:[5EF700]

 

F9运行后跑飞后会运行到程序设计的如果校验失败则调用的函数中(call Unpack_.004050B0),一般在该函数中会调用ExitProces函数退出程序。

    

转载于:https://www.cnblogs.com/eldn/archive/2012/08/28/2660907.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值