手动去自校验!!

来源:互联网 发布:灰度图像质心快速算法 编辑:程序博客网 时间:2024/06/02 19:10

 

快速去掉自校验的思路:

用od 将壳脱掉后,没有什么其他的问题,然而程序仍然不能运行,可能就是程序中

存在自校验了。。。

当然,你可以用双 OD 的方法,慢慢的比较他们的不同,现在,我们来用一种更快的方法去掉它。。

将程序载入后,查找--当前模块的标签--》找到 ExitProcess...

因为程序的退出都是由它来完成的。。

怎么样来退出程序呢?? 肯定是通过一个 CALL 的调用。。那么,我们就来找到这个 CALL ,在它那,下断点。。。

那么,我们就在 =kernel32.ExitProcess 处,在每个查考那下断点。。

重新载入程序。。 运行。。。。当然就会中断下来了。。。。

004044F0 /$ 53 push ebx

004044F1 |. 56 push esi

004044F2 |. 57 push edi

004044F3 |. 55 push ebp

004044F4 |. BB 38F64C00 mov ebx, 004CF638

004044F9 |. BE 00C04C00 mov esi, 004CC000

004044FE |. BF 48F04C00 mov edi, 004CF048

00404503 |. 807B 28 00 cmp byte ptr [ebx+28], 0

00404507 |. 75 16 jnz short 0040451F

来到这个段的段首。。。本地调用来自 004045CD, 004C4B36, 004C4BA2, 004CB104

 

看到这个。。。 查找参考-----选择命令------,,在每一个CALL 处,下段点。

重新载入,运行,断下后。。

004C4B36 |. E8 B5F9F3FF call 004044F0 //断点1

004C4B3B |> A1 5CE64C00 mov eax, dword ptr [4CE65C]

004C4B40 |. C600 00 mov byte ptr [eax], 0

004C4B43 |. 8D95 E0FDFFFF lea edx, dword ptr [ebp-220]

004C4B49 |. A1 8CE54C00 mov eax, dword ptr [4CE58C]

004C4B4E |. 8B00 mov eax, dword ptr [eax]

004C4B50 |. E8 6B84FBFF call 0047CFC0

004C4B55 |. 8B95 E0FDFFFF mov edx, dword ptr [ebp-220]

004C4B5B |. 8D85 ACFEFFFF lea eax, dword ptr [ebp-154]

004C4B61 |. E8 BAE2F3FF call 00402E20

004C4B66 |. BA 01000000 mov edx, 1

004C4B6B |. 8D85 ACFEFFFF lea eax, dword ptr [ebp-154]

004C4B71 |. E8 9AE6F3FF call 00403210

004C4B76 |. E8 89DDF3FF call 00402904

004C4B7B |. 8D85 ACFEFFFF lea eax, dword ptr [ebp-154]

004C4B81 |. E8 FAE4F3FF call 00403080

004C4B86 |. E8 79DDF3FF call 00402904

004C4B8B |. 3D 20A10700 cmp eax, 7A120 //这是跳转的关键

004C4B90 |. 7E 15 jle short 004C4BA7

004C4B92 |. 8D85 ACFEFFFF lea eax, dword ptr [ebp-154]

004C4B98 |. E8 3FE3F3FF call 00402EDC

004C4B9D |. E8 62DDF3FF call 00402904

004C4BA2 |. E8 49F9F3FF call 004044F0 //断点2

//这是跳转的关键: 当脱壳后的程序大小 只有 小于或等于 7A120 H 时,才不会

退出程序。。

当然可以改下面的 跳。。也可以改与 CMP 比较的值。。。都是可以的。。

 

 

原创粉丝点击