常见入口点特征

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

VS版本 链接器版本
VS2019 14.21
VS2017 14.12
VS2015 14.0, 14.1
VS2013 12.0
VS2012 11.0
VS2010 10.0
VS2008 9.0
VS2005 8.0
VC2003 7.0 7.1
VC5/BC++ 5.0
DelPhi 2.5
VB5 4.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     ; \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

你可能感兴趣的:(常见入口点特征)