關於雙程式Armadillo標準殼的脫法

看雪資料發表於2015-11-15

標 題:關於雙程式Armadillo標準殼的脫法

發信人:jwh51

時 間:2004年3月12日 07:35 

詳細資訊:


昨天看了csjwoman的那個雙程式標準殼的NOTEPAD.EXE,說真的一開始還真不知如何下手,既不能用脫COPYMEMII(它沒有用記憶體寫入函式)的方法,也不能簡單套用以前脫標準殼的方法(因為它還是有子程式的),後來仔細參考了下mysqladm的文章《試玩armadillo3.50a一點心得 》有了點啟發(最近從他的這篇脫文中學到的東西可不少)。下面談談如何脫這種雙程式的標準殼。
最近很懶,不願寫東西,所以也就不講什麼原理了(可以參考mysqladm的脫文),這裡就簡單說下方法。其實很簡單就是不要讓父程式生成子程式。所以我們可以這樣做。
載入後隱藏OD,忽略所有異常,然後BP OpenMutexA,F9執行,斷下後在一塊空地輸入如下程式碼,這裡在401000輸入,程式碼如下(抄來的)
00401000    60              PUSHAD 
00401001    9C              PUSHFD 
00401002    68 B4FB1200    PUSH 12FBB4 (這裡的12fbb4也就是MutexName,可以透過堆疊看到,也可以在某個暫存器器看到,我原來以為一直在EDX中,現更正一下。)
00401007    33C0            XOR EAX,EAX 
00401009    50              PUSH EAX 
0040100A    50              PUSH EAX 
0040100B    E8 E694A677    CALL KERNEL32.CreateMutexA 
00401010    9D              POPFD 
00401011    61              POPAD 
00401012  - E9 8F9FA777    JMP KERNEL32.OpenMutexA 
在401000處新建起源。F9,程式又斷回到OpenMutexA處,清除斷點和剛才的工作程式碼。這時我們就完全可以象除錯普通標準殼那樣除錯它了,因為它已經不會生成子程式而是把自己當作子程式執行起來。
這時我們下斷bp VirtualProtect,F9執行,中斷9-10次後清除斷點,再bp GetCurrentThreadId,斷下後幾下ALT+F9返回,再F8幾下就到那個CALL EDI了,如下
00DB455C    C705 DCDBDB00 E>MOV     DWORD PTR [DBDBDC], 0DBE6EC      ; ASCII "RB"
00DB4566    FF15 1481DB00   CALL    [DB8114]                         ; kernel32.GetCurrentThreadId
00DB456C    A3 AC56DC00     MOV     [DC56AC], EAX      返回到這裡,
00DB4571    E8 1537FEFF     CALL    00D97C8B
00DB4576    6A 00           PUSH    0
00DB4578    E8 648FFEFF     CALL    00D9D4E1
00DB457D    6A 00           PUSH    0
00DB457F    C705 DCDBDB00 E>MOV     DWORD PTR [DBDBDC], 0DBE6E8      ; ASCII "RC"
00DB4589    E8 7231FEFF     CALL    00D97700
00DB458E    59              POP     ECX                              ; 0012FF2C
00DB458F    59              POP     ECX                              ; 0012FF2C
00DB4590    E8 4A11FFFF     CALL    00DA56DF
00DB4595    8BF8            MOV     EDIEAX
00DB4597    A1 9455DC00     MOV     EAX, [DC5594]
00DB459C    8B48 70         MOV     ECX, [EAX+70]
00DB459F    3348 40         XOR     ECX, [EAX+40]
00DB45A2    3348 08         XOR     ECX, [EAX+8]
00DB45A5    03F9            ADD     EDIECX
00DB45A7    8B0E            MOV     ECX, [ESI]
00DB45A9    85C9            TEST    ECXECX
00DB45AB    75 2F           JNZ     SHORT 00DB45DC
00DB45AD    8B78 70         MOV     EDI, [EAX+70]
00DB45B0    E8 2A11FFFF     CALL    00DA56DF
00DB45B5    8B0D 9455DC00   MOV     ECX, [DC5594]                    ; NOTEPAD.0044D260
00DB45BB    FF76 14         PUSH    DWORD PTR [ESI+14]
00DB45BE    8B51 40         MOV     EDX, [ECX+40]
00DB45C1    FF76 10         PUSH    DWORD PTR [ESI+10]
00DB45C4    3351 08         XOR     EDX, [ECX+8]
00DB45C7    FF76 0C         PUSH    DWORD PTR [ESI+C]
00DB45CA    33D7            XOR     EDXEDI
00DB45CC    03C2            ADD     EAXEDX
00DB45CE    8B51 68         MOV     EDX, [ECX+68]
00DB45D1    3351 04         XOR     EDX, [ECX+4]
00DB45D4    33D7            XOR     EDXEDI
00DB45D6    2BC2            SUB     EAXEDX
00DB45D8    FFD0            CALL    EAX
00DB45DA    EB 25           JMP     SHORT 00DB4601
00DB45DC    83F9 01         CMP     ECX, 1
00DB45DF    75 22           JNZ     SHORT 00DB4603
00DB45E1    FF76 04         PUSH    DWORD PTR [ESI+4]
00DB45E4    FF76 08         PUSH    DWORD PTR [ESI+8]
00DB45E7    6A 00           PUSH    0
00DB45E9    E8 F110FFFF     CALL    00DA56DF
00DB45EE    50              PUSH    EAX
00DB45EF    A1 9455DC00     MOV     EAX, [DC5594]
00DB45F4    8B48 70         MOV     ECX, [EAX+70]
00DB45F7    3348 68         XOR     ECX, [EAX+68]
00DB45FA    3348 04         XOR     ECX, [EAX+4]
00DB45FD    2BF9            SUB     EDIECX
00DB45FF    FFD7            CALL    EDI             ,這裡F7,飛向光明之顛。
00DB4601    8BD8            MOV     EBXEAX
00DB4603    5F              POP     EDI                              ; 0012FF2C
00DB4604    8BC3            MOV     EAXEBX
00DB4606    5E              POP     ESI                              ; 0012FF2C
00DB4607    5B              POP     EBX                              ; 0012FF2C
00DB4608    C3              RETN
在那個CALL EDI處F7我們就到入口了,這時可以DUMP了。
至於IAT的修復,我不想多說了。

相關文章