Themida 1.8.X 脫殼之泡泡堂不死外掛3.16

來源:互聯網
上載者:User
Themida 1.8.X 脫殼之泡泡堂不死外掛3.16

Themida 1.8.X 脫殼之泡泡堂不死外掛3.16

首先用PEID查下殼:什麼也沒發現,看區段名有Themida 字樣,初步估計應該是1.8.X的。

載入後隱藏我們的OD,在程式碼片段下記憶體寫入斷點

0041D014 >  B8 00000000     MOV EAX,0                                    ;載入點。注意看這些代碼
0041D019    60              PUSHAD                                                
0041D01A    0BC0            OR EAX,EAX                                        ;明眼的就看出是Themida 殼了
0041D01C    74 68           JE SHORT 無敵外掛.0041D086
0041D01E    E8 00000000     CALL 無敵外掛.0041D023
0041D023    58              POP EAX
0041D024    05 53000000     ADD EAX,53
0041D029    8038 E9         CMP BYTE PTR DS:[EAX],0E9
0041D02C    75 13           JNZ SHORT 無敵外掛.0041D041
0041D02E    61              POPAD
0041D02F    EB 45           JMP SHORT 無敵外掛.0041D076

===============================================================================

SHIFT+F9運行,第一次中斷在下面:

004F14A2    F3:A4           REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>       ;F7一次後F8一次
004F14A4    C685 CD2A1B07 5>MOV BYTE PTR SS:[EBP+71B2ACD],56
004F14AB    68 396D1FD4     PUSH D41F6D39
004F14B0    FFB5 FD051B07   PUSH DWORD PTR SS:[EBP+71B05FD]
004F14B6    8D85 E87C1E07   LEA EAX,DWORD PTR SS:[EBP+71E7CE8]
004F14BC    FFD0            CALL EAX
004F14BE    68 00800000     PUSH 8000
004F14C3    6A 00           PUSH 0
004F14C5    52              PUSH EDX
004F14C6    FFD0            CALL EAX

===============================================================================

SHIFT+F9繼續運行,斷在下面:

004F52E1    8908            MOV DWORD PTR DS:[EAX],ECX              ;中斷在這裡,往上面找代碼

===============================================================================

004F4A80   /0F84 17000000   JE 無敵外掛.004F4A9D
004F4A86   |83BD 310E1B07 0>CMP DWORD PTR SS:[EBP+71B0E31],0
004F4A8D   |0F85 0A000000   JNZ 無敵外掛.004F4A9D     《====改成JMP  004F4A9D ==========
004F4A93   |C785 410C1B07 0>MOV DWORD PTR SS:[EBP+71B0C41],1
004F4A9D   \61              POPAD
004F4A9E    B9 46A60308     MOV ECX,803A646
004F4AA3    BA 9AD13616     MOV EDX,1636D19A

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

004F4BC4    5E              POP ESI
004F4BC5    83BD 31011B07 0>CMP DWORD PTR SS:[EBP+71B0131],1
004F4BCC    0F84 39000000   JE 無敵外掛.004F4C0B    《====改成JMP  004F4BF6 ===========
004F4BD2    3B8D 29081B07   CMP ECX,DWORD PTR SS:[EBP+71B0829]
004F4BD8    0F84 2D000000   JE 無敵外掛.004F4C0B
004F4BDE    3B8D 1D171B07   CMP ECX,DWORD PTR SS:[EBP+71B171D]
004F4BE4    0F84 21000000   JE 無敵外掛.004F4C0B
004F4BEA    3B8D 552A1B07   CMP ECX,DWORD PTR SS:[EBP+71B2A55]
004F4BF0    0F84 15000000   JE 無敵外掛.004F4C0B
004F4BF6    8D9D E2FD2107   LEA EBX,DWORD PTR SS:[EBP+721FDE2]
004F4BFC    FFD3            CALL EBX
004F4BFE    8BF8            MOV EDI,EAX
004F4C00    8985 1D2F1B07   MOV DWORD PTR SS:[EBP+71B2F1D],EAX
004F4C06    E9 B4060000     JMP 無敵外掛.004F52BF
004F4C0B    8D9D E2FD2107   LEA EBX,DWORD PTR SS:[EBP+721FDE2]
004F4C11    FFD3            CALL EBX
004F4C13    83BD 31011B07 0>CMP DWORD PTR SS:[EBP+71B0131],0

===============================================================================

改好上面2處跳轉(目的是避開加密)後返回中斷處,用HideOD申請一段記憶體位址(我的是2A30000)

004F52E1    8908            MOV DWORD PTR DS:[EAX],ECX              ;中斷處,改成 JMP 2A30000
004F52E3    AD              LODS DWORD PTR DS:[ESI]
004F52E4    C746 FC 0000000>MOV DWORD PTR DS:[ESI-4],0   
004F52EB    89B5 6D301B07   MOV DWORD PTR SS:[EBP+71B306D],ESI           ;地址A,記下來
004F52F1    83F8 FF         CMP EAX,-1
004F52F4    0F85 20000000   JNZ 無敵外掛.004F531A
004F52FA    813E DDDDDDDD   CMP DWORD PTR DS:[ESI],DDDDDDDD
004F5300    0F85 14000000   JNZ 無敵外掛.004F531A
004F5306    C706 00000000   MOV DWORD PTR DS:[ESI],0
004F530C    83C6 04         ADD ESI,4
004F530F    89B5 6D301B07   MOV DWORD PTR SS:[EBP+71B306D],ESI
004F5315  ^ E9 E6F6FFFF     JMP 無敵外掛.004F4A00
004F531A    C1C0 03         ROL EAX,3
004F531D    0385 11171B07   ADD EAX,DWORD PTR SS:[EBP+71B1711]
004F5323    83BD 99221B07 0>CMP DWORD PTR SS:[EBP+71B2299],1
004F532A    0F84 9D000000   JE 無敵外掛.004F53CD
004F5330    813E AAAAAAAA   CMP DWORD PTR DS:[ESI],AAAAAAAA
004F5336    0F85 12000000   JNZ 無敵外掛.004F534E
004F533C    83C6 04         ADD ESI,4
004F533F    C746 FC 0000000>MOV DWORD PTR DS:[ESI-4],0
004F5346    97              XCHG EAX,EDI
004F5347    B0 E9           MOV AL,0E9
004F5349    E9 03000000     JMP 無敵外掛.004F5351
004F534E    97              XCHG EAX,EDI
004F534F    B0 E8           MOV AL,0E8
004F5351    50              PUSH EAX
004F5352    83BD 31011B07 0>CMP DWORD PTR SS:[EBP+71B0131],1
004F5359    0F84 3E000000   JE 無敵外掛.004F539D
004F535F    B8 00010000     MOV EAX,100
004F5364    83BD C7E82107 0>CMP DWORD PTR SS:[EBP+721E8C7],0
004F536B    0F84 08000000   JE 無敵外掛.004F5379
004F5371    8D9D 61712107   LEA EBX,DWORD PTR SS:[EBP+7217161]
004F5377    FFD3            CALL EBX
004F5379    803F 90         CMP BYTE PTR DS:[EDI],90
004F537C    0F84 08000000   JE 無敵外掛.004F538A
004F5382    83C7 05         ADD EDI,5
004F5385    E9 43000000     JMP 無敵外掛.004F53CD
004F538A    83F8 50         CMP EAX,50
004F538D    0F82 0A000000   JB 無敵外掛.004F539D
004F5393    B0 90           MOV AL,90
004F5395    AA              STOS BYTE PTR ES:[EDI]
004F5396    58              POP EAX
004F5397    AA              STOS BYTE PTR ES:[EDI]
004F5398    E9 24000000     JMP 無敵外掛.004F53C1                              ;改成 JMP 2A30014
004F539D    58              POP EAX
004F539E    AA              STOS BYTE PTR ES:[EDI]
004F539F    807F FF E9      CMP BYTE PTR DS:[EDI-1],0E9
004F53A3    0F85 18000000   JNZ 無敵外掛.004F53C1                            ;改成 JMP 2A30036
004F53A9    83BD C7E82107 0>CMP DWORD PTR SS:[EBP+721E8C7],0     ;地址C,記下來
004F53B0    0F84 08000000   JE 無敵外掛.004F53BE
004F53B6    8D9D 31712107   LEA EBX,DWORD PTR SS:[EBP+7217131]
004F53BC    FFD3            CALL EBX
004F53BE    8847 04         MOV BYTE PTR DS:[EDI+4],AL                                ;這裡NOP掉
004F53C1    8B85 1D2F1B07   MOV EAX,DWORD PTR SS:[EBP+71B2F1D]    ;地址B,記下來
004F53C7    2BC7            SUB EAX,EDI
004F53C9    83E8 04         SUB EAX,4
004F53CC    AB              STOS DWORD PTR ES:[EDI]                                      ;這裡NOP掉
004F53CD    AD              LODS DWORD PTR DS:[ESI]
004F53CE    C746 FC 0000000>MOV DWORD PTR DS:[ESI-4],0
004F53D5  ^ E9 11FFFFFF     JMP 無敵外掛.004F52EB                            ;改成 JMP 02A3005F
004F53DA    89B5 6D301B07   MOV DWORD PTR SS:[EBP+71B306D],ESI
004F53E0    52              PUSH EDX
004F53E1    68 00800000     PUSH 8000
004F53E6    6A 00           PUSH 0
004F53E8    FFB5 F5211B07   PUSH DWORD PTR SS:[EBP+71B21F5]
004F53EE    FF95 49131B07   CALL DWORD PTR SS:[EBP+71B1349]
004F53F4    5A              POP EDX
004F53F5    8B8D 9D121B07   MOV ECX,DWORD PTR SS:[EBP+71B129D]
004F53FB    C701 00000000   MOV DWORD PTR DS:[ECX],0
004F5401    83C1 04         ADD ECX,4
004F5404    898D 9D121B07   MOV DWORD PTR SS:[EBP+71B129D],ECX
004F540A  ^ E9 10F5FFFF     JMP 無敵外掛.004F491F
004F540F    E9 A4060000     JMP 無敵外掛.004F5AB8                                  ;這裡F2下個斷點
004F5414    60              PUSHAD
004F5415    8B8D 9D121B07   MOV ECX,DWORD PTR SS:[EBP+71B129D]
004F541B    8B09            MOV ECX,DWORD PTR DS:[ECX]
004F541D    898D C3E82107   MOV DWORD PTR SS:[EBP+721E8C3],ECX
004F5423    8138 4E54444C   CMP DWORD PTR DS:[EAX],4C44544E

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

CTRL+G 來到2A30000處,寫如下代碼:

02A30000    A3 0004A302     MOV DWORD PTR DS:[2A30400],EAX
02A30005    8908            MOV DWORD PTR DS:[EAX],ECX
02A30007    AD              LODS DWORD PTR DS:[ESI]
02A30008    C746 FC 0000000>MOV DWORD PTR DS:[ESI-4],0
02A3000F  - E9 D752ACFD     JMP 無敵外掛.004F52EB                             ;地址A
02A30014    50              PUSH EAX
02A30015    A1 0004A302     MOV EAX,DWORD PTR DS:[2A30400]
02A3001A    8907            MOV DWORD PTR DS:[EDI],EAX
02A3001C    807F FF E8      CMP BYTE PTR DS:[EDI-1],0E8
02A30020    75 08           JNZ SHORT 02A3002A
02A30022    66:C747 FE FF15 MOV WORD PTR DS:[EDI-2],15FF
02A30028    EB 06           JMP SHORT 02A30030
02A3002A    66:C747 FE FF25 MOV WORD PTR DS:[EDI-2],25FF
02A30030    58              POP EAX
02A30031  - E9 8B53ACFD     JMP 無敵外掛.004F53C1                             ;地址B
02A30036    50              PUSH EAX
02A30037    A1 0004A302     MOV EAX,DWORD PTR DS:[2A30400]
02A3003C    8947 01         MOV DWORD PTR DS:[EDI+1],EAX
02A3003F    807F FF E8      CMP BYTE PTR DS:[EDI-1],0E8
02A30043    75 08           JNZ SHORT 02A3004D
02A30045    66:C747 FF FF15 MOV WORD PTR DS:[EDI-1],15FF
02A3004B    EB 06           JMP SHORT 02A30053
02A3004D    66:C747 FF FF25 MOV WORD PTR DS:[EDI-1],25FF
02A30053    58              POP EAX
02A30054  - 0F85 6753ACFD   JNZ 無敵外掛.004F53C1                           ;地址B
02A3005A  - E9 4A53ACFD     JMP 無敵外掛.004F53A9                            ;地址C
02A3005F    83C7 04         ADD EDI,4
02A30062  - E9 8452ACFD     JMP 無敵外掛.004F52EB                            ;地址A
02A30067    90              NOP

(二進位代碼)

A3 00 04 A3 02 89 08 AD C7 46 FC 00 00 00 00 E9 D7 52 AC FD 50 A1 00 04 A3 02 89 07 80 7F FF E8
75 08 66 C7 47 FE FF 15 EB 06 66 C7 47 FE FF 25 58 E9 8B 53 AC FD 50 A1 00 04 A3 02 89 47 01 80
7F FF E8 75 08 66 C7 47 FF FF 15 EB 06 66 C7 47 FF FF 25 58 0F 85 67 53 AC FD E9 4A 53 AC FD 83
C7 04 E9 84 52 AC FD 90

================================================================================

寫好代碼後,刪除先前在程式碼片段下的記憶體寫入斷點,shift+F9,中斷在004F540F,到這裡已經獲得了IAT,現在

找OEP.,在這裡我採用世面上流傳的找THEMIDA OEP方法:

取消004F540F處斷點,ALT+M開啟記憶體察看視窗,直接在程式碼片段F2下斷點。Shift+F9就中斷在OEP處了

004013A8  - FF25 DC104000   JMP DWORD PTR DS:[4010DC]                ; MSVBVM60.ThunRTMain
004013AE    0000            ADD BYTE PTR DS:[EAX],AL
004013B0    DA00            FIADD DWORD PTR DS:[EAX]
004013B2    5C              POP ESP
004013B3    A7              CMPS DWORD PTR DS:[ESI],DWORD PTR ES:[ED>
004013B4    9E              SAHF
004013B5    D20F            ROR BYTE PTR DS:[EDI],CL
004013B7    EE              OUT DX,AL                                ; I/O 命令
004013B8    8BED            MOV EBP,EBP
004013BA    0000            ADD BYTE PTR DS:[EAX],AL
004013BC    0000            ADD BYTE PTR DS:[EAX],AL
004013BE    0000            ADD BYTE PTR DS:[EAX],AL
004013C0    3000            XOR BYTE PTR DS:[EAX],AL
004013C2    0000            ADD BYTE PTR DS:[EAX],AL
004013C4    3800            CMP BYTE PTR DS:[EAX],AL
004013C6    0000            ADD BYTE PTR DS:[EAX],AL
004013C8    0000            ADD BYTE PTR DS:[EAX],AL
004013CA    0000            ADD BYTE PTR DS:[EAX],AL
004013CC    D9F2            FPTAN

通過上面的代碼,我們很明顯發現程式是用VB編譯的,而且OEP已經被THEMIDA偷掉了,讓我們來

手動修複他的OEP吧。我們先找一個沒加殼的VB程式用OD載入進行對比一下就明白了。

004011D0   $- FF25 80104000 JMP DWORD PTR DS:[<&MSVBVM60.#100>]      ;  MSVBVM60.ThunRTMain
004011D6      00            DB 00
004011D7      00            DB 00
004011D8 > $  68 7C184000   PUSH Variant.0040187C                    ;注意這裡,(搜尋VB5!)
004011DD   .  E8 EEFFFFFF   CALL <JMP.&MSVBVM60.#100>        ;這個CALL是指向上面的JMP
004011E2   .  0000          ADD BYTE PTR DS:[EAX],AL
004011E4   .  0000          ADD BYTE PTR DS:[EAX],AL
004011E6   .  0000          ADD BYTE PTR DS:[EAX],AL
004011E8   .  3000          XOR BYTE PTR DS:[EAX],AL
004011EA   .  0000          ADD BYTE PTR DS:[EAX],AL
004011EC   .  40            INC EAX
004011ED   .  0000          ADD BYTE PTR DS:[EAX],AL
004011EF   .  0000          ADD BYTE PTR DS:[EAX],AL
004011F1   .  0000          ADD BYTE PTR DS:[EAX],AL
004011F3   .  0058 2C       ADD BYTE PTR DS:[EAX+2C],BL
004011F6   .  114A DB       ADC DWORD PTR DS:[EDX-25],ECX
004011F9   .  43            INC EBX
004011FA   .  8645 BA       XCHG BYTE PTR SS:[EBP-46],AL
004011FD   .  1822          SBB BYTE PTR DS:[EDX],AH
004011FF   .  6D            INS DWORD PTR ES:[EDI],DX                ;  I/O 命令
00401200   .  CE            INTO
00401201   .  C3            RETN

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

改成如下代碼就手動修複OEP了:

004013A8  - FF25 DC104000   JMP DWORD PTR DS:[4010DC]                ; MSVBVM60.ThunRTMain
004013AE    0000            ADD BYTE PTR DS:[EAX],AL
004013B0    68 D07E4000     PUSH 無敵外掛.00407ED0                       ; ASCII "VB5!6&vb6chs.dll"
004013B5    E8 EEFFFFFF     CALL 無敵外掛.004013A8                       ; JMP 到 MSVBVM60.ThunRTMain
004013BA    0000            ADD BYTE PTR DS:[EAX],AL
004013BC    0000            ADD BYTE PTR DS:[EAX],AL
004013BE    0000            ADD BYTE PTR DS:[EAX],AL
004013C0    3000            XOR BYTE PTR DS:[EAX],AL
004013C2    0000            ADD BYTE PTR DS:[EAX],AL
004013C4    3800            CMP BYTE PTR DS:[EAX],AL
004013C6    0000            ADD BYTE PTR DS:[EAX],AL
004013C8    0000            ADD BYTE PTR DS:[EAX],AL
004013CA    0000            ADD BYTE PTR DS:[EAX],AL
004013CC    D9F2            FPTAN

===============================================================================

到這裡修複後就可以用LOAD PE 脫殼,ImportREC修複輸入表

OEP:000013AE

RVA:00001000

大小:00000118

剪取掉一個無效指標後修複。試運行一下脫殼修複好的程式,正常。

PEID查殼 Microsoft Visual Basic 5.0 / 6

發現脫殼後的檔案巨大,用LOAD PE 清除 Themida 這個區段,儲存,在用LOAD PE 重建。

再次開啟重建後的程式,運行正常,檔案大小98.1KB 到這裡就脫殼+修複+最佳化完畢了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.