壳的世界(一)

1、所有的Delphi7界面程序,进入到OEP后的第一个函数内容都类似于如下形式:

00405BC8  /$  53            push    ebx
00405BC9  |.  8BD8          mov     ebx, eax
00405BCB  |.  33C0          xor     eax, eax
00405BCD  |.  A3 9CD04400   mov     dword ptr [44D09C], eax
00405BD2  |.  6A 00         push    0                                ; /pModule = NULL
00405BD4  |.  E8 2BFFFFFF   call    <jmp.&kernel32.GetModuleHandleA> ; \GetModuleHandleA
00405BD9  |.  A3 64F64400   mov     dword ptr [44F664], eax
00405BDE  |.  A1 64F64400   mov     eax, dword ptr [44F664]
00405BE3  |.  A3 A8D04400   mov     dword ptr [44D0A8], eax
00405BE8  |.  33C0          xor     eax, eax
00405BEA  |.  A3 ACD04400   mov     dword ptr [44D0AC], eax
00405BEF  |.  33C0          xor     eax, eax
00405BF1  |.  A3 B0D04400   mov     dword ptr [44D0B0], eax
00405BF6  |.  E8 C1FFFFFF   call    00405BBC
00405BFB  |.  BA A4D04400   mov     edx, 0044D0A4
00405C00  |.  8BC3          mov     eax, ebx
00405C02  |.  E8 51DFFFFF   call    00403B58
00405C07  |.  5B            pop     ebx
00405C08  \.  C3            retn


2、Delphi特征码定位

第一个CALL
A3??????00A1??????00A3??????0033C0A3??????0033C0A3??????00

第二个CALL
53A1??????00833800740A8B1D??????008B1BFFD35BC3

OEP
558BEC33C05568??????0064FF3064892033C05A595964891068??????00C3E9

Ctrl+B查找“558BEC33C05568??????0064FF3064892033C05A595964891068??????00C3E9”二进制串,找到如下:

0044C890   .  55            push    ebp	->再查找这里的地址
0044C891   .  8BEC          mov     ebp, esp
0044C893   .  33C0          xor     eax, eax
0044C895   .  55            push    ebp
0044C896   .  68 AFC84400   push    0044C8AF
0044C89B   .  64:FF30       push    dword ptr fs:[eax]
0044C89E   .  64:8920       mov     dword ptr fs:[eax], esp
0044C8A1   .  33C0          xor     eax, eax
0044C8A3   .  5A            pop     edx
0044C8A4   .  59            pop     ecx
0044C8A5   .  59            pop     ecx
0044C8A6   .  64:8910       mov     dword ptr fs:[eax], edx
0044C8A9   .  68 B6C84400   push    0044C8B6
0044C8AE   >  C3            retn                                     ;  RET 用作跳转到 0044C8B6

然后再Ctrl+B查找“90 C8 44 00”二进制串,即可到过OEP附近。

3、在Delphi、BC++程序中,对系统函数的调用都是FF25型,即JMP [xxxxxxxx] / 6字节,机器码为FF25 XXXXXXXX ,知道这一点有助于IAT的修复。

4、Delphi7编写的程序,在代码段的开始位置会有“Boolean”的字样,可在数据窗口中查看。

5、VC6编写的程序,入口点类似于如下样式:

 

00409E65 >/$  55            push    ebp
00409E66  |.  8BEC          mov     ebp, esp
00409E68  |.  6A FF         push    -1
00409E6A  |.  68 006A4200   push    00426A00    ;注意这里连续push了两个地址,这是第一个显著特征
00409E6F  |.  68 64D74000   push    0040D764                         ;  SE 处理程序安装
00409E74  |.  64:A1 0000000>mov     eax, dword ptr fs:[0]
00409E7A  |.  50            push    eax
00409E7B  |.  64:8925 00000>mov     dword ptr fs:[0], esp
00409E82  |.  83EC 58       sub     esp, 58
00409E85  |.  53            push    ebx
00409E86  |.  56            push    esi
00409E87  |.  57            push    edi
00409E88  |.  8965 E8       mov     dword ptr [ebp-18], esp
00409E8B  |.  FF15 0C424200 call    dword ptr [<&KERNEL32.GetVersion>;  这里调用kernel32.GetVersion,第二个显著特征
00409E91  |.  33D2          xor     edx, edx

5、在VC、ASM程序中,对系统函数的调用都是FF15型,即CALL [XXXXXXXX] / 6字节,机器码为FF15 XXXXXXXX 。

6、BC++的程序,在OEP后面不远处有如下代码:

004013C8  /$  60            pushad
004013C9  |.  BB 0050B0BC   mov     ebx, BCB05000
004013CE  |.  53            push    ebx
004013CF  |.  68 AD0B0000   push    0BAD
004013D4  \.  C3            retn

可查找该二进制串以方便地定位OEP。

7、VB程序的入口点是如下形式:

004014AA   $- FF25 F0104000 jmp     dword ptr [<&MSVBVM60.#100>]     ;  MSVBVM60.ThunRTMain
004014B0 > $  68 28264000   push    00402628
004014B5   .  E8 F0FFFFFF   call    <jmp.&MSVBVM60.#100>

其中,00402628处的内容如下:

00402628  56 42 35 21 F0 1F 76 62 36 63 68 73 2E 64 6C 6C  VB5!?vb6chs.dll

如果OEP处的代码被偷取,可以查找“VB5!?vb6chs.dll”字符串来还原OEP。后面的call <jmp.&MSVCBM60.#100>实际就是call 004014AA。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值