1. 程式人生 > >[逆向破解]使用ESP定律手動脫"中國菜刀"殼

[逆向破解]使用ESP定律手動脫"中國菜刀"殼

eip 成了 失敗 -c 會同 方便 ebp 個人理解 cloc

0x00前言: ESC定律脫殼一般的加殼軟件在執行時,首先要初始化,保存環境(保存各個寄存器的值),一般利用PUSHAD(相當於把eax,ecx,edx,ebx,esp,ebp,esi,edi都壓棧),當加殼程序的外殼執行完畢以後,再來恢復各個寄存器的內容,通常會用POPAD(相當與把eax,ecx,edx,ebx,esp,ebp,esi,edi都出棧),通過跨區段的轉移來跳到程序的OEP來執行原程序!簡單點來說就是會將加殼過程執行一遍之後會跳到OEP來執行源程序。當我們找到了OEP的時候就是找到了源程序,就可以脫殼了(以上簡單點來說純屬是我個人理解)。 0x01工具:
  • PEID v0.95
  • Ollydbg
0x02正文: 一般拿到程序的第一件事就是查殼,查是否存在殼,存在什麽殼。打開PEID。
技術分享 這裏PEID有效的告訴了我們,該程序加的是UPX壓縮加密殼。 直接導入進OD裏面。 技術分享

如果目標程序加了殼的話,導入進od都會有該提示。直接點否。
技術分享

點否之後OD會自動到pusdad 既是外殼的入口點。

註意右邊的寄存器。現在一共是有EAX、ECX、EDX、ESP、EBP、ESI、EDI寄存器。

技術分享

然後我們按下F8或者點菜單欄的單步步過。

按下之後右邊的ESP以及EIP會同時變紅。變成了紅色代表有新的數據壓入。註意:多個寄存器中除了EIP外只有ESP紅色才行。其他變紅則不能使用ESP定律脫殼。 技術分享
選中 ESP 0012FFA4 然後右鍵 選擇數據窗口中跟隨。然後註意左下角。

技術分享

左下角任意選擇一段數據。右鍵-》斷點-》硬件訪問-》Word。然後運行程序(F9)。程序運行到指定地方會自動斷點停掉。

技術分享

004AE9BB 6A 00 push 0x0
004AE9BD 39C4 cmp esp,eax 004AE9BF 75 FA jnz short 中國菜刀.004AE9BB 註意看這裏。有一個判斷。看紅色箭頭(這個箭頭不是我標的)。如果不為0 那麽就跳向 004AE9BB 這裏我們需要選擇"004AE9BF 75 FA jnz short 中國菜刀.004AE9BB"的下面一行。然後按F4。直接跳過這個判斷之後。繼續按F8。 然後會發現直接跳進了真正程序的入口。

技術分享

004659A8 55 push ebp 004659A9 8BEC mov ebp,esp 004659AB 6A FF push -0x1 004659AD 68 18714700 push 中國菜刀.00477118 004659B2 68 805B4600 push 中國菜刀.00465B80 004659B7 64:A1 00000000 mov eax,dword ptr fs:[0] 004659BD 50 push eax 004659BE 64:8925 0000000>mov dword ptr fs:[0],esp 004659C5 83EC 68 sub esp,0x68 004659C8 53 push ebx 004659C9 56 push esi 004659CA 57 push edi 004659CB 8965 E8 mov dword ptr ss:[ebp-0x18],esp 004659CE 33DB xor ebx,ebx 004659D0 895D FC mov dword ptr ss:[ebp-0x4],ebx 004659D3 6A 02 push 0x2 004659D5 5F pop edi ; 0012FFF0 這裏就是我們要的OEP了。通過OEP我們可以猜出該程序是什麽編程語言開發的。 (OEP入口特征百度都是有的。為了方便閱讀。我已經從網上收集了出來。在本文的最下方就可以看到了)

技術分享

找到了OEP接下來就是脫殼了。記住脫殼之前請先講斷點刪除掉否則程序將會出錯或者脫殼失敗的。 技術分享 我們右鍵-》用OllyDump脫殼調試進程

技術分享

技術分享

選擇脫殼。然後保存。 這個時候我們在打開PEID來查一下"中國菜刀_1.exe" 技術分享 成功把殼脫下來了。當然像UPX這種殼的話。網上都有很多脫殼機和脫殼腳本來。直接用就可以啦。

技術分享

程序也能運行。 好啦,文章結束了,本文基本上沒什麽可以說的點。只是本著做筆記以後感嘆人生以及交流分享所發滴。。 PS:本著交流分享。如果有好的方法或者思路以及上文講述不正確的地方歡迎指出。謝謝!(大牛勿噴!!)   
OEP入口的特征大全:
Microsoft Visual C
++ 6.0 push ebp mov ebp, esp push -1 push 004C0618 push 004736F8 mov eax, dword ptr fs:[0] push eax mov dword ptr fs:[0], esp sub esp, 58 push ebx push esi push edi mov [local.6], esp Microsoft Visual Basic 5.0 / 6.0 JMP DWORD PTR DS[<&MSVBVM60.#100>] PUSH Dumped.00407C14 CALL <JMP.&MSVBVM60.#100> ADD BYTE PTR DS:[EAX],AL ADD BYTE PTR DS:[EAX],AL ADD BYTE PTR DS:[EAX],AL XOR BYTE PTR DS:[EAX],AL VB還有一種 push Dumped.0040D4D0 call <jmp.&msvbvm60.ThunRTMain> add byte ptr ds:[eax],al add byte ptr ds:[eax],al add byte ptr ds:[eax],al xor byte ptr ds:[eax],al add byte ptr ds:[eax],al Borland C++ JMP SHORT BCLOCK.0040164E DB 66 ; CHAR ‘f‘ DB 62 ; CHAR ‘b‘ DB 3A ; CHAR ‘:‘ DB 43 ; CHAR ‘C‘ DB 2B ; CHAR ‘+‘ DB 2B ; CHAR ‘+‘ DB 48 ; CHAR ‘H‘ DB 4F ; CHAR ‘O‘ DB 4F ; CHAR ‘O‘ DB 4B ; CHAR ‘K‘ NOP DB E9 DD OFFSET BCLOCK.___CPPdebugHook MOV EAX,DWORD PTR DS:[4EE08B] SHL EAX,2 MOV DWORD PTR DS:[4EE08F],EAX PUSH EDX PUSH 0 ; /pModule = NULL CALL <JMP.&KERNEL32.GetModuleHandleA> ; /GetModuleHandleA MOV EDX,EAX Borland Delphi 6.0 - 7.0 PUSH EBP MOV EBP,ESP ADD ESP,-14 PUSH EBX PUSH ESI PUSH EDI XOR EAX,EAX MOV DWORD PTR SS:[EBP-14],EAX MOV EAX,Dumped.00509720 CALL Dumped.0040694C 易語言入口 call Dumped.0040100B push eax call <jmp.&KERNEL32.ExitProcess> push ebp mov ebp,esp add esp,-110 jmp Dumped.0040109C imul esi,dword ptr ds:[edx+6E],6C outs dx,byte ptr es:[edi] 也是有令一種形式 Microsoft Visual C++ 6.0 [Overlay]的E語言 PUSH EBP MOV EBP,ESP PUSH -1 PUSH Dumped.004062F0 PUSH Dumped.00404CA4 ; SE 處理程序安裝 MOV EAX,DWORD PTR FS:[0] PUSH EAX MOV DWORD PTR FS:[0],ESP MASM32 / TASM32 push 0 ; /pModule = NULL call <jmp.&kernel32.GetModuleHandleA> ; /GetModuleHandleA mov dword ptr ds:[403000],eax push 0 ; /lParam = NULL push Dumped.004010DF ; |DlgProc = dump.004010DF push 0 ; |hOwner = NULL push 65 ; |pTemplate = 65 push dword ptr ds:[403000] ; |hInst = NULL call <jmp.&user32.DialogBoxParamA> ; /DialogBoxParamA VC8 call Dumped.004ACF97 jmp Dumped.004A28FC int 3 int 3 int 3 int 3 int 3 int 3 int 3 int 3 int 3 int 3 mov ecx,dword ptr ss:[esp+4] test ecx,3 je short Dumped.004A2B20 mov al,byte ptr ds:[ecx] add ecx,1

[逆向破解]使用ESP定律手動脫"中國菜刀"殼