| 动画介绍:今天我给大家讲的是关于VB编写的程序突破自校验
首先我们查壳,用ESP定律脱壳,脱壳后文件查壳Microsoft Visual Basic 5.0 / 6.0编写
我们单击脱壳后的文件,看看可以运行不,程序没有反映,基本可以判定他有自效验了。重新加载脱壳后 的“脱壳.exe”,查找所有参考文本串(注意:程序是VB编写),在每个命令中设置断点。运行! 我们发现第一个断点没有断下,第二和第三个断点断到了程序,我们F8单步查看,看看最后一次中断处, 它的UNICODE是".exe",肯定这里有问题,继续F8单步,当步进到004034E7的CALL时就程序向下进行就结束了.
004034DC . 83C4 28 ADD ESP,28 004034DF . 81FE 003C0000 CMP ESI,3C00 004034E5 . 74 06 JE SHORT 11.004034ED 004034E7 . FF15 14104000 CALL DWORD PTR DS:[<&msvbvm60.__vbaEnd>] ; msvbvm60.__vbaEnd 004034ED > 8D4D B4 LEA ECX,DWORD PTR SS:[EBP-4C]
重新来过,在第三次中断时按F8一步一步追踪,看到004034E7上面的跳转,将 004034E5处je改成jmp, 在OD中保存改写的文件,运行!能够运行 OK!自校验去除!
第二种方法: 由于刚才脱壳后我们知道此文件为VB所编写。 我们采用大小比较法:
原没脱壳的文件大小为: 15360字节我们把他转16进制为3C00
现脱壳后命名为“脱壳.exe”的文件大小为: 38400字节转16进制即9600
关键是如何找到对自身大小进行对比的语句,我们知道一般的形式都是CMP EAX,3C00但是到底是哪个寄存器呢?EAX,EBX、ECX....,寄存器种类比较多! 所以下断点为: BP rtcFileLen ,回车, 然后F9运行,断下后,ALT+F9返回 返回在此处:
004034AA . 8BF0 MOV ESI,EAX
在上面这处的下面找到:
004034DC . 83C4 28 ADD ESP,28 004034DF . 81FE 003C0000 CMP ESI,3C00 004034E5 . 74 06 JE SHORT 脱壳.004034ED
这里我们可以把3C00换成脱壳后文件的大小9600 也可以把“ JE SHORT 脱壳.004034ED”这个跳转NOP掉。 我采用的是替换文件大小,保存 ,自效验也就解开了。
这两种方法就是给大家提供一个突破自校验的参考,大家可以根据实际情况来选择用那种方法。 |