常见入口点特征

转载自https://blog.csdn.net/kkfd1002/article/details/79832269
转载自https://blog.csdn.net/x356982611/article/details/48370297
脱壳前如果知道壳的版本和编译程序的语言和编译器将事半功倍
特征1:VC链接器版本

VS版本链接器版本
VS201914.21
VS201714.12
VS201514.0, 14.1
VS201312.0
VS201211.0
VS201010.0
VS20089.0
VS20058.0
VC20037.0 7.1
VC5/BC++5.0
DelPhi2.5
VB54.20

特征2:OEP

a0) VB5:

【VB5】的OEP平衡堆栈是 sub esp,0x54

【VB5】的OEP第一个API调用是GetStartupInfoA

【VB5】程序的IAT引用,都是FF15型的

a1) VB6

【VB6】的OEP平衡堆栈是 sub esp,0x4C

【VB6】的OEP第一个API调用是GetStartupInfoA

【VB6】程序的IAT引用,都是FF15型的

// Microsoft Visual Basic 5.0 / 6.0
   FF25 6C104000   JMP DWORD PTR DS:[<&MSVBVM60.#100>]   //MSVBVM60.ThunRTMain
   68 147C4000     PUSH PACKME.00407C14
   E8 F0FFFFFF     CALL <JMP.&MSVBVM60.#100>
   0000            ADD BYTE PTR DS:[EAX],AL
   0000            ADD BYTE PTR DS:[EAX],AL
   0000            ADD BYTE PTR DS:[EAX],AL
   3000            XOR BYTE PTR DS:[EAX],AL
   //或省略第一行的JMP
   68 D0D44000        push dumped_.0040D4D0
   E8 EEFFFFFF        call <jmp.&msvbvm60.ThunRTMain>
   0000               add byte ptr ds:[eax],al
   0000               add byte ptr ds:[eax],al
   0000               add byte ptr ds:[eax],al
   3000               xor byte ptr ds:[eax],al
   0000               add byte ptr ds:[eax],al

b0) Delphi

【Delphi】OEP上面是一个地址
【Delphi】OEP处 有5个CALL
【Delphi】OEP 5个CALL之后,全是0
【Delphi】OEP处第一个CALL有GetModuleHandleA调用
【Delphi】的IAT调用是 FF25形式的

 	 55            PUSH EBP
     8BEC          MOV EBP,ESP
     83C4 EC       ADD ESP,-14
     53            PUSH EBX
     56            PUSH ESI
     57            PUSH EDI
     33C0          XOR EAX,EAX
     8945 EC       MOV DWORD PTR SS:[EBP-14],EAX
     B8 20975000   MOV EAX,unpack.00509720
     E8 84CCEFFF   CALL unpack.0040694C

b1) BC++

【BC++】 二进制特征:EB1066623A432B2B484F4F4B90
【BC++】 OEP的第一个API调用是 GetModuleHandleA
【BC++】 IAT调用是 FF25形式的

EB 10         JMP SHORT BCLOCK.0040164E
66            DB 66                                    ;  CHAR 'f'
62            DB 62                                    ;  CHAR 'b'
3A            DB 3A                                    ;  CHAR ':'
43            DB 43                                    ;  CHAR 'C'
2B            DB 2B                                    ;  CHAR '+'
2B            DB 2B                                    ;  CHAR '+'
48            DB 48                                    ;  CHAR 'H'
4F            DB 4F                                    ;  CHAR 'O'
4F            DB 4F                                    ;  CHAR 'O'
4B            DB 4B                                    ;  CHAR 'K'
90            NOP
E9            DB E9
			  DD OFFSET BCLOCK.___CPPdebugHook
A1 8BE04E00   MOV EAX,DWORD PTR DS:[4EE08B]
C1E0 02       SHL EAX,2
A3 8FE04E00   MOV DWORD PTR DS:[4EE08F],EAX
52            PUSH EDX
6A 00         PUSH 0                                   ; /pModule = NULL
E8 DFBC0E00   CALL <JMP.&KERNEL32.GetModuleHandleA>    ; \GetModuleHandleA
8BD0          MOV EDX,EAX

c) VC6/E语言(通过分析,发现二者特征一致,可以判定E语言和VC6如出一辙)

【VC6】的OEP平衡堆栈是 sub esp,0x58 或 sub esp,0x68或add esp, -0x5C
【VC6】的OEP第一个API调用是GetVersion
【VC6】程序的IAT引用,都是FF15型的

//入口点特征代码
55            PUSH EBP                 ;  (初始 cpu 选择)
8BEC          MOV EBP,ESP
6A FF         PUSH -1
68 ????????   PUSH Screensh.00563740
68 ????????   PUSH Screensh.0049C78C   ;  SE 处理程序安装
64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
50            PUSH EAX
64:8925 00000>MOV DWORD PTR FS:[0],ESP
83EC 58       SUB ESP,58

d) VS2013

【VS2013】开始处,call xxx; jmp xxx;
【VS2013】的OEP平衡堆栈是sub esp, 0x44
【VS2013】的OEP第一个API调用是GetStartupInfoW
【VS2013】Release第一个API调用GetSystemTimeAsFileTime
【VS2013】程序的IAT引用,都是FF15型的

e)Dasm

6A 00         PUSH 0                                   ; /pModule = NULL
E8 C50A0000   CALL <JMP.&KERNEL32.GetModuleHandleA>    ; \GetModuleHandleA
A3 0C354000   MOV DWORD PTR DS:[40350C],EAX
E8 B50A0000   CALL <JMP.&KERNEL32.GetCommandLineA>     ; [GetCommandLineA
A3 10354000   MOV DWORD PTR DS:[403510],EAX
6A 0A         PUSH 0A                                  ; /Arg4 = 0000000A
FF35 10354000 PUSH DWORD PTR DS:[403510]               ; |Arg3 = 00000000
6A 00         PUSH 0                                   ; |Arg2 = 00000000
FF35 0C354000 PUSH DWORD PTR DS:[40350C]               ; |Arg1 = 00000000

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值