(8)去除自校验

来源:互联网 发布:淘宝买家内衣秀自拍 编辑:程序博客网 时间:2024/05/01 16:35

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

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

看操作吧。

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

1. 对比法。

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

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

如:

CMP 下的jleJMP  保存即可

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函数退出程序。

   


原创粉丝点击