殼學習二:Aspack 2.12 加殼脫殼

來源:互聯網
上載者:User

殼學習二:Aspack 2.12 加殼脫殼

SkyJacker
Http://blog.csdn.net/skyjacker
Email:HeMiaoYu <At> gmail.com
QQ:67705517
2007-2-10

1、加殼過程

自動動手編寫一個簡單的表單程式.
使用Aspack2.12 加殼(按預設選項),產生已加殼程式NullFormAspack.exe.

原始檔案與加殼後檔案資訊描述:
原始檔案大小:379 KB (388,096 位元組)
原始檔案佔用空間:384 KB (393,216 位元組)
加殼檔案大小:157 KB (161,280 位元組)
加殼檔案佔用空間:160 KB (163,840 位元組)
Aspack2.12 壓縮率:41%

2、脫殼過程

使用PEID查殼: ASPack 2.12 -> Alexey Solodovnikov
OllyDbg載入,停在程式進入點:

OllyDbg載入,停在程式進入點:
00465001 >  60              pushad
00465002    E8 03000000     call    0046500A  // F7 進入
00465007  - E9 EB045D45     jmp     45A354F7
0046500C    55              push    ebp
0046500D    C3              retn
0046500E    E8 01000000     call    00465014
00465013    EB 5D           jmp     short 00465072
00465015    BB EDFFFFFF     mov     ebx, -13

call    0046500A
0046500A    5D              pop     ebp                              ; NullForm.00465007
0046500B    45              inc     ebp   // 00465008
0046500C    55              push    ebp   // 00465008 入棧。 函數功能:將返回地址加1,即修改了下一條要執行的指令地址
0046500D    C3              retn

進入46500A時棧資訊為:
0012FFA0   00465007  返回到 NullForm.00465007 來自 NullForm.0046500A
0012FFA4   7C930738  ntdll.7C930738
0012FFA8   FFFFFFFF
0012FFAC   0012FFF0

retn 之後:
EIP=465008

00465008   /EB 04           jmp     short 0046500E //已修改EIP := EIP +1 因為指令轉換為 jmp short
0046500A   |5D              pop     ebp  // 來自call    0046500A。隱藏法:) 
0046500B   |45              inc     ebp
0046500C   |55              push    ebp
0046500D   |C3              retn
0046500E   /E8 01000000     call    00465014 // F7進入。 又執行到了EIP := EIP +1 。單位元組進行。
00465013    EB 5D           jmp     short 00465072
00465015    BB EDFFFFFF     mov     ebx, -13
0046501A    03DD            add     ebx, ebp
0046501C    81EB 00500600   sub     ebx, 65000
00465022    83BD 22040000 0>cmp     dword ptr [ebp+422], 0

call    00465014
00465014    5D              pop     ebp    //返回時EIP修改為:7C930738     ; NullForm.00465013
00465015    BB EDFFFFFF     mov     ebx, -13 //原EBX := 7FFDE000 ,現:EBX:=FFFFFFED
0046501A    03DD            add     ebx, ebp //EBX := FFFFFFED + 00465013 = 00465000
0046501C    81EB 00500600   sub     ebx, 65000 //EBX := 400000 MZP
00465022    83BD 22040000 0>cmp     dword ptr [ebp+422], 0
00465029    899D 22040000   mov     dword ptr [ebp+422], ebx
0046502F    0F85 65030000   jnz     0046539A   //長跳轉,移到此地址,按F4
00465035    8D85 2E040000   lea     eax, dword ptr [ebp+42E]
0046503B    50              push    eax
0046503C    FF95 4D0F0000   call    dword ptr [ebp+F4D]

進入00465014時棧資訊為:
0012FFA0   00465013  返回到 NullForm.00465013 來自 NullForm.00465014
0012FFA4   7C930738  ntdll.7C930738
0012FFA8   FFFFFFFF
0012FFAC   0012FFF0

jnz     0046539A   //長跳轉,移到此地址,滑鼠點擊這一行,按F4
0046539A    B8 84320500     mov     eax, 53284 //立即數.  用於產生 OEP
0046539F    50              push    eax
004653A0    0385 22040000   add     eax, dword ptr [ebp+422] // EAX := NullForm.00453284
004653A6    59              pop     ecx
004653A7    0BC9            or      ecx, ecx
004653A9    8985 A8030000   mov     dword ptr [ebp+3A8], eax // 動態修改程式指令.
                                                             //被修改指令的地址:00465013 + 3A8 = 4653BB                                                           
004653AF    61              popad
004653B0    75 08           jnz     short 004653BA 
004653B2    B8 01000000     mov     eax, 1
004653B7    C2 0C00         retn    0C
004653BA    68 00000000     push    0  // 被修改的資料為 PUSH 的值      
004653BF    C3              retn

轉到0046539A時,cpu資訊為:
EAX 00000000
ECX 7C939AEB ntdll.7C939AEB
EDX 00400000 ASCII "MZP"
EBX 00000000
ESP 0012FFA4
EBP 00465013 NullForm.00465013
ESI 004570F0 NullForm.004570F0
EDI 004576EC NullForm.004576EC
EIP 0046539A NullForm.0046539A
C 0  ES 0023 32位 0(FFFFFFFF)
P 1  CS 001B 32位 0(FFFFFFFF)
A 0  SS 0023 32位 0(FFFFFFFF)
Z 1  DS 0023 32位 0(FFFFFFFF)
S 0  FS 003B 32位 7FFDF000(FFF)
T 0  GS 0000 NULL
D 0
O 0  LastErr ERROR_NO_IMPERSONATION_TOKEN (0000051D)

堆棧資訊為:
0012FFA4   7C930738  ntdll.7C930738
0012FFA8   FFFFFFFF
0012FFAC   0012FFF0
0012FFB0   0012FFC4

mov     dword ptr [ebp+3A8], eax 執行完這行後,下面的指令轉為:
004653A9    8985 A8030000   mov     dword ptr [ebp+3A8], eax
004653AF    61              popad
004653B0    75 08           jnz     short 004653BA
004653B2    B8 01000000     mov     eax, 1
004653B7    C2 0C00         retn    0C
004653BA    68 84324500     push    00453284 // OEP
004653BF    C3              retn

F8執行,到達目的地:Dump之,OK!
00453284      55            db      55                               ;  CHAR 'U'
00453285      8B            db      8B
00453286      EC            db      EC
00453287      83            db      83
00453288      C4            db      C4
00453289      F0            db      F0
0045328A      B8            db      B8
0045328B      14            db      14
0045328C      31            db      31                               ;  CHAR '1'
0045328D      45            db      45                               ;  CHAR 'E'
0045328E      00            db      00
0045328F      E8            db      E8
00453290      80            db      80
00453291      33            db      33                               ;  CHAR '3'
00453292      FB            db      FB
00453293      FF            db      FF
00453294      A1            db      A1
00453295      20            db      20                               ;  CHAR ' '
00453296      4F            db      4F                               ;  CHAR 'O'
00453297      45            db      45                               ;  CHAR 'E'

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.