史萊姆論壇

返回   史萊姆論壇 > 教學文件資料庫 > Hacker/Cracker 及加解密技術文件
忘記密碼?
論壇說明 標記討論區已讀

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2006-02-13, 12:59 PM   #1
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 EncryptPE V2.2005.3.14試煉Service保護方式脫殼

EncryptPE V2.2005.3.14試煉Service保護方式脫殼

.

下載頁面: http://www.encryptpe.com/
軟體大小: 2.11M
軟體語言: 簡體中文
軟體類別: 大陸軟體 / 共享版 / 加密工具
套用平台: Win9X/ME/NT/2000/XP/2003
軟體簡介: EncryptPE是老王的強殼。EncryptPE 能加密保護一般PE文件(EXE、DLL、OCX等一般程序或NT服務程序),防靜態分析修改,反動態跟蹤偵錯,有效地保護軟體,防止盜版。除一般的對抗偵錯器(SoftIce、TRW、OllyDbg等)、監視器、DUMP工具方法外,EncryptPE採用的加密保護的手段還有:隨機加密算法、CRC校驗、變形、程式碼取代、工作注入、APIHOOK、多執行緒、偵錯執行、全程監控等。

【作者聲明】:只是感興趣,沒有其他目的。失誤之處敬請諸位大俠賜教

【偵錯環境】:WinXP、flyODBG、PEiD、LordPE、ImportREC

—————————————————————————————————
【脫殼程序】:


EncryptPE是老王的強殼,想必大家都看到過,外掛、木馬之類用EncryptPE加殼的較多。
簡單整理了一下以前的脫殼記錄,希望EncryptPE越來越猛,說點拜年話,免得老王來扁我,哈哈,不過大多數外掛都是採用「非Service」加殼方式,所以老王也不必擔心。
—————————————————————————————————
一、EncryptPE的版本和加殼方式


其實EncryptPE V2.2004.8.10和EncryptPE V2.2005.3.14就脫殼而言是一樣的。

CODE:

[EncryptPE V2.2004.8.10-V2.2005.3.14 -> WFS]
signature =60 9C 64 FF 35 00 00 00 00 E8 7A
ep_only = true

[Copy to clipboard]


最簡單、準確地察看EncryptPE版本號是用WinHex等16進制工具開啟被加殼程序,在PE頭下面就可以看到。

CODE:

00000220 45 50 45 3A 20 45 6E 63 72 79 70 74 50 45 20 56 EPE: EncryptPE V
00000230 32 2E 32 30 30 35 2E 33 2E 31 34 2C 20 43 6F 70 2.2005.3.14, Cop
00000240 79 72 69 67 68 74 20 28 43 29 20 57 46 53 00 00 yright (C) WFS..

[Copy to clipboard]


EncryptPE有2種加殼方式:Service和非Service。看說明 裡的說明:「選項您要加密的PE文件(EXE、DLL、OCX等),如果是NT服務程序,請選Service項(一般程序也可以在選Service項後加密,其保護強度比不選Service時稍低)。」

最簡單的判斷加殼方式的方法是:執行加殼程序後在LordPE裡可以看見真實工作名的是「Service」加殼方式,只看見[system]字樣的是「非Service」加殼方式,如EncryptPE主程序。

「Service」加殼方式強度低了不少,柿子揀軟的捏,哈哈,當然從這個先下手了。
其實兩種加殼方式的輸入表處理、程式碼變形的處理方法都是一樣的,只不過「非Service」加殼方式要注入exeplorer.exe解碼、開啟新的工作。SDK的保護目前還不算強,跟蹤進去再出來就會得到解碼出來的數個字元了。


—————————————————————————————————
二、獲得加殼前文件的PE頭、OEP等訊息


http://bbs.pediy.com/upload/2005/8/image/epe.gif
執行EncryptPE以「Service」方式加殼Win98記事本,下面開始演示脫殼。
設定OllyDbg所有異常選項。用IsDebug插件去掉OllyDbg的偵錯器標誌。


CODE:

0040D000 60 pushad
//進入OllyDbg後暫停在這
0040D001 9C pushfd
0040D002 64:FF35 0000000>push dword ptr fs:[0]
0040D009 E8 7A010000 call 0040D188

[Copy to clipboard]


BP IsDebuggerPresent 中斷後看堆疊:

CODE:

0104FF40 711AF6B2 /CALL 到 IsDebuggerPresent 來自 V2200531.711AF6B0
0104FF44 0104FF78 游標到下一個 SEH 記錄

[Copy to clipboard]


看到EncryptPE開始檢測IsDebuggerPresent,取消這個斷點。
Alt+M開啟記憶體察看視窗,找到EncryptPE所使用的支持庫V2200531.epe

CODE:

位址 大小 物主 區段 包含
71120000 00001000 V2200531 PE header
71121000 000AC000 V2200531 EPE0
711CD000 0006A000 V2200531 EPE1 code
71237000 00001000 V2200531 .rsrc data,imports,expor

[Copy to clipboard]


V2200531.epe就是EncryptPE殼的核心了。
Ctrl+G:711CD000 這是V2200531.epe第3區段的開始位址。


CODE:

711CD000 894D F8 mov dword ptr ss:[ebp-8],ecx
//V2200531.epe第3區段的開始位址
711CD003 8955 FC mov dword ptr ss:[ebp-4],edx
711CD006 8BF0 mov esi,eax

[Copy to clipboard]


Ctrl+S在當前位置下搜尋指令序列:

CODE:

lea ecx,dword ptr ss:[ebp-28]
mov eax,dword ptr ss:[ebp-18]
mov edx,dword ptr ds:[eax]
mov eax,dword ptr ss:[ebp-28]

[Copy to clipboard]

找到在711E4514處,我們在其下cmp dword ptr ss:[ebp-28],0的711E4524處設定硬體執行斷點,Shift+F9中斷下來


CODE:

711E4514 8D4D D8 lea ecx,dword ptr ss:[ebp-28]
//找到這裡
711E4517 8B45 E8 mov eax,dword ptr ss:[ebp-18]
711E451A 8B10 mov edx,dword ptr ds:[eax]
711E451C 8B45 D8 mov eax,dword ptr ss:[ebp-28]
711E451F E8 0CA3FCFF call 711AE830
711E4524 837D D8 00 cmp dword ptr ss:[ebp-28],0
//硬體執行斷點 [ebp-28]=[0013FF5C]=00E4D6DC ★
711E4528 0F84 AE0C0000 je 711E51DC
711E452E 837D D4 00 cmp dword ptr ss:[ebp-2C],0
711E4532 0F8E A40C0000 jle 711E51DC

[Copy to clipboard]


在711E4524處中斷後在資料視窗察看[0013FF5C]=00E4D6DC處資料:

CODE:

00E4D6DC 4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00 MZ?........
00E4D6EC B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 ......@.......
00E4D6FC 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00E4D70C 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 ...............
00E4D71C 0E 1F BA 0E 00 B4 09 CD 21 B8 01 4C CD 21 54 68 ..L??L Th
00E4D72C 69 73 20 70 72 6F 67 72 61 6D 20 63 61 6E 6E 6F is program canno
00E4D73C 74 20 62 65 20 72 75 6E 20 69 6E 20 44 4F 53 20 t be run in DOS
00E4D74C 6D 6F 64 65 2E 0D 0D 0A 24 00 00 00 00 00 00 00 mode....$.......
00E4D75C 50 45 00 00 4C 01 05 00 65 91 46 35 00 00 00 00 PE..L.e慒5....

[Copy to clipboard]


很明顯,這是PE頭資料,是哪個PE文件的?哈哈,加殼前的文件!並且PE頭、資源段、重定位表段等都是原來的,當然,程式碼段某些資料是殼所加密的。現在用LordPE部分脫殼出這部分資料,Address=00E4D6DC、Size=0000D000,存為dumped0.eXe

Size可以根據最後一個區段訊息計算得出。

CODE:

00E4D8EC 00 00 00 00 40 00 00 40 2E 72 65 6C 6F 63 00 00 ....@..@.reloc..
00E4D8FC 9C 0A 00 00 00 C0 00 00 00 10 00 00 00 C0 00 00 ............
Size=0000C000(ROffset)+00001000(RSize)=0000D000

[Copy to clipboard]



—————————————————————————————————
三、Magic Jmp 搞定輸入表


下面來避開輸入表加密。Ctrl+F在整個段塊搜尋指令:mov eax,0F
找到在711E3748處,這裡就是處理輸入表加密的地方了。
在711E3756處設定硬體執行斷點,Shift+F9中斷後修改Magic Jmp


CODE:

711E3728 55 push ebp
711E3729 8BEC mov ebp,esp
711E372B 83C4 F8 add esp,-8
711E372E 53 push ebx
711E372F 56 push esi
711E3730 57 push edi
711E3731 8BF9 mov edi,ecx
711E3733 8955 FC mov dword ptr ss:[ebp-4],edx
711E3736 8BF0 mov esi,eax
711E3738 8B45 FC mov eax,dword ptr ss:[ebp-4]
711E373B 8945 F8 mov dword ptr ss:[ebp-8],eax
711E373E 807D 08 00 cmp byte ptr ss:[ebp+8],0
711E3742 0F84 85000000 je 711E37CD
711E3748 B8 0F000000 mov eax,0F
//找到這裡
711E374D E8 1AF0F3FF call 7112276C
711E3752 8BD8 mov ebx,eax
711E3754 85DB test ebx,ebx
711E3756 74 75 je short 711E37CD
//修改為:JMP 711E37CD ★ Magic Jmp
711E3758 8B86 68030000 mov eax,dword ptr ds:[esi+368]
711E375E E8 3D24F4FF call 71125BA0
711E3763 40 inc eax
711E3764 50 push eax
711E3765 8D86 68030000 lea eax,dword ptr ds:[esi+368]
711E376B B9 01000000 mov ecx,1
711E3770 8B15 ACF61D71 mov edx,dword ptr ds:[711DF6AC]
711E3776 E8 E125F4FF call 71125D5C
711E377B 83C4 04 add esp,4
711E377E 8B86 68030000 mov eax,dword ptr ds:[esi+368]
711E3784 E8 1724F4FF call 71125BA0
711E3789 8B96 68030000 mov edx,dword ptr ds:[esi+368]
711E378F 895C82 FC mov dword ptr ds:[edx+eax*4-4],ebx
711E3793 C603 E8 mov byte ptr ds:[ebx],0E8
711E3796 8BD3 mov edx,ebx
711E3798 8BC2 mov eax,edx
711E379A 40 inc eax
711E379B B9 68C91A71 mov ecx,711AC968
711E37A0 2BC8 sub ecx,eax
711E37A2 83E9 04 sub ecx,4
711E37A5 8908 mov dword ptr ds:[eax],ecx
711E37A7 C643 05 FF mov byte ptr ds:[ebx+5],0FF
711E37AB C643 06 25 mov byte ptr ds:[ebx+6],25
711E37AF 8BC2 mov eax,edx
711E37B1 83C0 07 add eax,7
711E37B4 8BCA mov ecx,edx
711E37B6 83C1 0B add ecx,0B
711E37B9 8908 mov dword ptr ds:[eax],ecx
711E37BB 8BC3 mov eax,ebx
711E37BD 83C0 0B add eax,0B
711E37C0 8BCA mov ecx,edx
711E37C2 83C1 05 add ecx,5
711E37C5 334D FC xor ecx,dword ptr ss:[ebp-4]
711E37C8 8908 mov dword ptr ds:[eax],ecx
711E37CA 8955 F8 mov dword ptr ss:[ebp-8],edx
711E37CD 85FF test edi,edi
711E37CF 74 29 je short 711E37FA
711E37D1 33D2 xor edx,edx
711E37D3 55 push ebp
711E37D4 68 F0371E71 push 711E37F0
711E37D9 64:FF32 push dword ptr fs:[edx]
711E37DC 64:8922 mov dword ptr fs:[edx],esp
711E37DF 8BC7 mov eax,edi
711E37E1 8B55 F8 mov edx,dword ptr ss:[ebp-8]
711E37E4 8910 mov dword ptr ds:[eax],edx ; SHELL32.ShellExecuteA
//正確的函數寫入,這裡可以看見IAT位址
711E37E6 33C0 xor eax,eax
711E37E8 5A pop edx
711E37E9 59 pop ecx
711E37EA 59 pop ecx
711E37EB 64:8910 mov dword ptr fs:[eax],edx
711E37EE EB 0A jmp short 711E37FA
711E37F0 E9 7706F4FF jmp 71123E6C
711E37F5 E8 DA09F4FF call 711241D4
711E37FA 8B45 F8 mov eax,dword ptr ss:[ebp-8]
711E37FD 5F pop edi
711E37FE 5E pop esi
711E37FF 5B pop ebx
711E3800 59 pop ecx
711E3801 59 pop ecx
711E3802 5D pop ebp
711E3803 C2 0400 retn 4
//返回711E4E06處

[Copy to clipboard]


修改完Magic Jmp後取消711E3756處硬體斷點,繼續看


CODE:

711E4E01 E8 22E9FFFF call 711E3728
//處理輸入表加密
711E4E06 EB 36 jmp short 711E4E3E
711E4E08 8BD0 mov edx,eax
711E4E0A 81E2 FFFF0000 and edx,0FFFF
711E4E10 8B45 FC mov eax,dword ptr ss:[ebp-4]
711E4E13 E8 3874FCFF call 711AC250
711E4E18 8945 BC mov dword ptr ss:[ebp-44],eax
711E4E1B 8A45 EF mov al,byte ptr ss:[ebp-11]
711E4E1E 50 push eax
711E4E1F A1 94DD1F71 mov eax,dword ptr ds:[711FDD94]
711E4E24 8B00 mov eax,dword ptr ds:[eax]
711E4E26 8B55 E4 mov edx,dword ptr ss:[ebp-1C]
711E4E29 8B0490 mov eax,dword ptr ds:[eax+edx*4]
711E4E2C 8BCF mov ecx,edi
711E4E2E 8B55 BC mov edx,dword ptr ss:[ebp-44]
711E4E31 E8 F2E8FFFF call 711E3728
711E4E36 3BFB cmp edi,ebx
711E4E38 74 04 je short 711E4E3E
711E4E3A 33C0 xor eax,eax
711E4E3C 8903 mov dword ptr ds:[ebx],eax
711E4E3E 83C3 04 add ebx,4
711E4E41 83C7 04 add edi,4
711E4E44 8B03 mov eax,dword ptr ds:[ebx]
711E4E46 85C0 test eax,eax
711E4E48 0F87 93FEFFFF ja 711E4CE1
711E4E4E A1 9CDB1F71 mov eax,dword ptr ds:[711FDB9C]
//[711FDB9C]=71200685
711E4E53 8038 00 cmp byte ptr ds:[eax],0
//[71200685]處儲存的是檢驗標誌位
711E4E56 75 13 jnz short 711E4E6B
//NOP掉 ★
711E4E58 83C6 14 add esi,14
711E4E5B 837E 0C 00 cmp dword ptr ds:[esi+C],0
711E4E5F 76 0A jbe short 711E4E6B
711E4E61 837E 10 00 cmp dword ptr ds:[esi+10],0
711E4E65 0F87 6AFBFFFF ja 711E49D5
//循環處理輸入表
711E4E6B 33C0 xor eax,eax
//這裡設定硬體執行斷點 ★

[Copy to clipboard]


Shift+F9,當我們中斷在711E4E6B處時輸入表就處理完畢了。執行ImportRec,填入RVA=000062E0、Size=240,獲取輸入表,函數都是有效的。修改OEP RVA=000010CC,可以儲存樹文件了。


—————————————————————————————————
四、部分檢驗


現在還原上面所作的修改吧,殼還有自我檢驗驗的


CODE:

711E4E6B 33C0 xor eax,eax
711E4E6D E8 9A050000 call 711E540C
//檢驗 1 有興趣可以跟蹤進入看看EncryptPE是如何檢驗的
711E4E72 84C0 test al,al
711E4E74 75 0B jnz short 711E4E8
//如果檢驗有問題的話,則手動修改標誌位Z=1,使這裡不跳轉 ★
711E4E76 33C0 xor eax,eax
711E4E78 E8 2FBBFCFF call 711B09AC
//檢驗 2
711E4E7D 84C0 test al,al
711E4E7F 74 08 je short 711E4E89
//如果檢驗有問題的話,則手動修改標誌位Z=1,使這裡跳轉 ★
711E4E81 A1 9CDB1F71 mov eax,dword ptr ds:[711FDB9C]
711E4E86 C600 01 mov byte ptr ds:[eax],1
//這裡如果置1的話,則解碼會不完全!因此要跳過去!★

[Copy to clipboard]



—————————————————————————————————
五、解碼修復


如果此時Ctrl+G:4010CC,或者Dump修復的話,則程式碼還沒有還原完全


CODE:

004010CC 55 push ebp
004010CD 8BEC mov ebp,esp
004010CF 83EC 44 sub esp,44
004010D2 56 push esi
004010D3 90 nop
004010D4 E8 D38CBFFF call FFFF9DAC
//程式碼還沒有還原

[Copy to clipboard]


下面開始變形程式碼的修復。通過修改EncryptPE的執行流程,使其自動還原變形程式碼。
Ctrl+F在當前位置下搜尋指令:sub ax,0CCE9,找到在711E4FD2處,F4過去


CODE:

711E4FCA 8BD8 mov ebx,eax
711E4FCC 83EB 02 sub ebx,2
711E4FCF 66:8B03 mov ax,word ptr ds:[ebx]
//下面是根據MOV和使用方式進行恢復程式碼 ★
711E4FD2 66:2D E9CC sub ax,0CCE9
//找到這裡
711E4FD6 74 0E je short 711E4FE6
711E4FD8 66:2D A71B sub ax,1BA7
711E4FDC 74 47 je short 711E5025
711E4FDE 66:2D 0001 sub ax,100
711E4FE2 74 41 je short 711E5025
711E4FE4 EB 7D jmp short 711E5063

[Copy to clipboard]


————————————————————————
1、使用表和跳轉表解密


CODE:

711E4FE6 E8 297EFCFF call 711ACE14
//統一放call 711ACE14里面Patch!★
711E4FEB 66:C700 FF25 mov word ptr ds:[eax],25FF
//修改 1 :NOP ★
711E4FF0 8B55 FC mov edx,dword ptr ss:[ebp-4]
//修改 2 :NOP ★
711E4FF3 8950 02 mov dword ptr ds:[eax+2],edx
//修改 3 :NOP ★
711E4FF6 8BD0 mov edx,eax
711E4FF8 8B5D E8 mov ebx,dword ptr ss:[ebp-18]
711E4FFB 83C3 06 add ebx,6
711E4FFE 8B45 E0 mov eax,dword ptr ss:[ebp-20]
711E5001 03C0 add eax,eax
711E5003 03D8 add ebx,eax
711E5005 8B45 E8 mov eax,dword ptr ss:[ebp-18]
711E5008 8B00 mov eax,dword ptr ds:[eax]
711E500A 0FB70B movzx ecx,word ptr ds:[ebx]
711E500D 81E9 00300000 sub ecx,3000
711E5013 03C1 add eax,ecx
711E5015 0345 DC add eax,dword ptr ss:[ebp-24]
711E5018 48 dec eax
711E5019 2BD0 sub edx,eax
711E501B 83EA 04 sub edx,4
711E501E 8910 mov dword ptr ds:[eax],edx
//修改 4 :寫入加密位址 NOP掉! ★
711E5020 E9 68010000 jmp 711E518D
711E5025 E8 EA7DFCFF call 711ACE14
//統一放call 711ACE14里面Patch!★
711E502A 66:C700 FF25 mov word ptr ds:[eax],25FF
//修改 5 :NOP ★
711E502F 8B55 FC mov edx,dword ptr ss:[ebp-4]
//修改 6 :NOP ★
711E5032 8950 02 mov dword ptr ds:[eax+2],edx
//修改 7 :NOP ★
711E5035 8BD0 mov edx,eax
711E5037 8B5D E8 mov ebx,dword ptr ss:[ebp-18]
711E503A 83C3 06 add ebx,6
711E503D 8B45 E0 mov eax,dword ptr ss:[ebp-20]
711E5040 03C0 add eax,eax
711E5042 03D8 add ebx,eax
711E5044 8B45 E8 mov eax,dword ptr ss:[ebp-18]
711E5047 8B00 mov eax,dword ptr ds:[eax]
711E5049 0FB70B movzx ecx,word ptr ds:[ebx]
711E504C 81E9 00300000 sub ecx,3000
711E5052 03C1 add eax,ecx
711E5054 0345 DC add eax,dword ptr ss:[ebp-24]
711E5057 2BD0 sub edx,eax
711E5059 83EA 04 sub edx,4
711E505C 8910 mov dword ptr ds:[eax],edx
//修改 8 :寫入加密位址 NOP掉! ★
711E505E E9 2A010000 jmp 711E518D

[Copy to clipboard]


————————————————————————
2、MOV檔案類型解密


CODE:

711E5063 8B15 94DD1F71 mov edx,dword ptr ds:[711FDD94]
711E5069 8B12 mov edx,dword ptr ds:[edx]
711E506B 8B4D E4 mov ecx,dword ptr ss:[ebp-1C]
711E506E 8B148A mov edx,dword ptr ds:[edx+ecx*4]
711E5071 80BA 5E030000 0>cmp byte ptr ds:[edx+35E],3
711E5078 0F86 0F010000 jbe 711E518D
711E507E 66:8B13 mov dx,word ptr ds:[ebx]
711E5081 66:81E2 FF00 and dx,0FF
711E5086 66:81FA 8900 cmp dx,89
711E508B 74 13 je short 711E50A0
711E508D 66:8B13 mov dx,word ptr ds:[ebx]
711E5090 66:81E2 FF00 and dx,0FF
711E5095 66:81FA 8B00 cmp dx,8B
711E509A 0F85 ED000000 jnz 711E518D
711E50A0 66:8B03 mov ax,word ptr ds:[ebx]
711E50A3 66:25 00FF and ax,0FF00
711E50A7 66:3D 0005 cmp ax,500
711E50AB 74 4C je short 711E50F9
711E50AD 66:3D 0015 cmp ax,1500
711E50B1 74 46 je short 711E50F9
711E50B3 66:3D 0025 cmp ax,2500
711E50B7 74 40 je short 711E50F9
711E50B9 66:3D 0035 cmp ax,3500
711E50BD 74 3A je short 711E50F9
711E50BF 66:3D 000D cmp ax,0D00
711E50C3 74 34 je short 711E50F9
711E50C5 66:3D 001D cmp ax,1D00
711E50C9 74 2E je short 711E50F9
711E50CB 66:3D 002D cmp ax,2D00
711E50CF 74 28 je short 711E50F9
711E50D1 66:3D 003D cmp ax,3D00
711E50D5 74 22 je short 711E50F9
711E50D7 66:8B03 mov ax,word ptr ds:[ebx]
711E50DA 66:25 00FF and ax,0FF00
711E50DE 66:3D 0080 cmp ax,8000
711E50E2 0F82 A5000000 jb 711E518D
711E50E8 66:8B03 mov ax,word ptr ds:[ebx]
711E50EB 66:25 00FF and ax,0FF00
711E50EF 66:3D 00C0 cmp ax,0C000
711E50F3 0F83 94000000 jnb 711E518D
711E50F9 66:8B03 mov ax,word ptr ds:[ebx]
711E50FC 66:25 FF00 and ax,0FF
711E5100 66:3D 8900 cmp ax,89
711E5104 74 0D je short 711E5113
711E5106 66:8B03 mov ax,word ptr ds:[ebx]
711E5109 66:25 FF00 and ax,0FF
711E510D 66:3D 8B00 cmp ax,8B
711E5111 75 7A jnz short 711E518D
711E5113 E8 FC7CFCFF call 711ACE14
//需要為下面的檔案類型判斷一下 ★ 統一放call 711ACE14里面Patch!★
711E5118 66:8B13 mov dx,word ptr ds:[ebx]
711E511B 66:81E2 FF00 and dx,0FF
711E5120 66:81FA 8900 cmp dx,89
711E5125 75 12 jnz short 711E5139
711E5127 66:8B13 mov dx,word ptr ds:[ebx]
711E512A 66:81E2 00FF and dx,0FF00
711E512F 66:81C2 8B00 add dx,8B
711E5134 66:8910 mov word ptr ds:[eax],dx
//修改 9:mov word ptr ds:[ebx],dx ★
//哈哈,取代89->8B
711E5137 EB 10 jmp short 711E5149
711E5139 66:8B13 mov dx,word ptr ds:[ebx]
711E513C 66:81E2 00FF and dx,0FF00
711E5141 66:81C2 8900 add dx,89
711E5146 66:8910 mov word ptr ds:[eax],dx
//修改 10:mov word ptr ds:[ebx],dx ★
//哈哈,取代8B->89
711E5149 8B55 FC mov edx,dword ptr ss:[ebp-4]
711E514C 8950 02 mov dword ptr ds:[eax+2],edx
711E514F 66:C740 06 90E9 mov word ptr ds:[eax+6],0E990
//修改 11:NOP ! ★
711E5155 8BD3 mov edx,ebx
711E5157 2BD0 sub edx,eax
711E5159 83EA 06 sub edx,6
711E515C 8950 08 mov dword ptr ds:[eax+8],edx
711E515F 8BD0 mov edx,eax
711E5161 66:C703 90E9 mov word ptr ds:[ebx],0E990
//修改 12:NOP ! ★
711E5166 8B5D E8 mov ebx,dword ptr ss:[ebp-18]
711E5169 83C3 06 add ebx,6
711E516C 8B45 E0 mov eax,dword ptr ss:[ebp-20]
711E516F 03C0 add eax,eax
711E5171 03D8 add ebx,eax
711E5173 8B45 E8 mov eax,dword ptr ss:[ebp-18]
711E5176 8B00 mov eax,dword ptr ds:[eax]
711E5178 0FB70B movzx ecx,word ptr ds:[ebx]
711E517B 81E9 00300000 sub ecx,3000
711E5181 03C1 add eax,ecx
711E5183 0345 DC add eax,dword ptr ss:[ebp-24]
711E5186 2BD0 sub edx,eax
711E5188 83EA 04 sub edx,4
711E518B 8910 mov dword ptr ds:[eax],edx
//修改 13:NOP ! ★
711E518D 8B5D E8 mov ebx,dword ptr ss:[ebp-18]
711E5190 83C3 06 add ebx,6
711E5193 8B45 E0 mov eax,dword ptr ss:[ebp-20]
711E5196 03C0 add eax,eax
711E5198 03D8 add ebx,eax
711E519A 66:C703 0000 mov word ptr ds:[ebx],0
711E519F FF4D E0 dec dword ptr ss:[ebp-20]
711E51A2 837D E0 00 cmp dword ptr ss:[ebp-20],0
711E51A6 0F8F B2FDFFFF jg 711E4F5E
//循環
711E51AC 8B45 E8 mov eax,dword ptr ss:[ebp-18]
711E51AF 33D2 xor edx,edx
711E51B1 8910 mov dword ptr ds:[eax],edx
711E51B3 A1 9CDB1F71 mov eax,dword ptr ds:[711FDB9C]
711E51B8 8038 00 cmp byte ptr ds:[eax],0
//比較檢驗標誌位!!
711E51BB 75 0A jnz short 711E51C7
//修改 14:NOP ! ★ 檢驗失敗則這裡跳轉,則解碼不完全!
711E51BD 837D F8 00 cmp dword ptr ss:[ebp-8],0
711E51C1 0F8F 20FDFFFF jg 711E4EE7
//循環

[Copy to clipboard]


————————————————————————
3、統一放call 711ACE14里面Patch!


CODE:

711ACE14 53 push ebx
711ACE15 B8 0C000000 mov eax,0C
711ACE1A E8 4D59F7FF call 7112276C
711ACE1F 8BD8 mov ebx,eax
711ACE21 85DB test ebx,ebx
711ACE23 74 38 je short 711ACE5D
711ACE25 A1 68062071 mov eax,dword ptr ds:[71200668]
711ACE2A E8 718DF7FF call 71125BA0
711ACE2F 40 inc eax
711ACE30 50 push eax
711ACE31 B8 68062071 mov eax,71200668
711ACE36 B9 01000000 mov ecx,1
711ACE3B 8B15 10B51A71 mov edx,dword ptr ds:[711AB510]
711ACE41 E8 168FF7FF call 71125D5C
711ACE46 83C4 04 add esp,4
711ACE49 A1 68062071 mov eax,dword ptr ds:[71200668]
711ACE4E E8 4D8DF7FF call 71125BA0
711ACE53 8B15 68062071 mov edx,dword ptr ds:[71200668]
711ACE59 895C82 FC mov dword ptr ds:[edx+eax*4-4],ebx
//Patch :jmp 71236E4D ★
711ACE5D 8BC3 mov eax,ebx
711ACE5F 5B pop ebx
711ACE60 C3 retn

[Copy to clipboard]


為了防止異常,先在OllyDbg裡面設定V220531.epe第2個區段為完整權限
在71236E4D處寫入以下Patch程式碼:


CODE:

71236E4D 895C82 FC mov dword ptr ds:[edx+eax*4-4],ebx
//繼續執行711ACE59處程式碼
71236E51 8BC3 mov eax,ebx
71236E53 5B pop ebx
//下面開始判斷、修改
71236E54 66:813B 90E8 cmp word ptr ds:[ebx],0E890
//比較程式碼檔案類型
71236E59 75 0D jnz short 71236E68
71236E5B 66:C703 FF15 mov word ptr ds:[ebx],15FF
//是0E890就放入15FF
71236E60 8B55 FC mov edx,dword ptr ss:[ebp-4]
71236E63 8953 02 mov dword ptr ds:[ebx+2],edx
71236E66 EB 15 jmp short 71236E7D
71236E68 803B 89 cmp byte ptr ds:[ebx],89
//89 ?
71236E6B 74 10 je short 71236E7D
//是則不處理
71236E6D 803B 8B cmp byte ptr ds:[ebx],8B
//8B ?
71236E70 74 0B je short 71236E7D
//是則不處理
71236E72 66:C703 FF25 mov word ptr ds:[ebx],25FF
//不是以上的就放入25FF
71236E77 8B55 FC mov edx,dword ptr ss:[ebp-4]
71236E7A 8953 02 mov dword ptr ds:[ebx+2],edx
//放入位址
71236E7D C3 retn
//OK,返回

[Copy to clipboard]


OllyDbg二進制程式碼如下:

CODE:

89 5C 82 FC 8B C3 5B 66 81 3B 90 E8 75 0D 66 C7 03 FF 15 8B 55 FC 89 53 02 EB 15 80 3B 89 74 10
80 3B 8B 74 0B 66 C7 03 FF 25 8B 55 FC 89 53 02 C3

[Copy to clipboard]



—————————————————————————————————
六、結局:完成脫殼


修改晚以上所有部分後,在循環外面的711E51C7處設定硬體執行斷點。


CODE:

711E51C7 33C0 xor eax,eax
//這裡下硬體斷點,中斷後所有解碼完畢!!!★
711E51C9 8945 C8 mov dword ptr ss:[ebp-38],eax
711E51CC 33C0 xor eax,eax
711E51CE 8945 CC mov dword ptr ss:[ebp-34],eax
711E51D1 8B55 D4 mov edx,dword ptr ss:[ebp-2C]
711E51D4 8B45 D8 mov eax,dword ptr ss:[ebp-28]
711E51D7 E8 B0D5F3FF call 7112278C
711E51DC A1 9CDB1F71 mov eax,dword ptr ds:[711FDB9C]
711E51E1 8038 00 cmp byte ptr ds:[eax],0
711E51E4 74 05 je short 711E51EB
711E51E6 E8 3D75F4FF call 7112C728
711E51EB A1 CCDC1F71 mov eax,dword ptr ds:[711FDCCC]
711E51F0 8038 00 cmp byte ptr ds:[eax],0
711E51F3 74 17 je short 711E520C
711E51F5 E8 01000000 call 711E51FB
711E51FA E9 5883C012 jmp 83DED557
711E51FF 35 FFFFFFFF xor eax,FFFFFFFF
711E5204 60 pushad
711E5205 E8 7E73FCFF call 711AC588
711E520A FF15 E8010000 call dword ptr ds:[1E8]
711E5210 00E9 add cl,ch
711E5212 58 pop eax
711E5213 83C0 0C add eax,0C
711E5216 60 pushad
711E5217 E8 9072FCFF call 711AC4AC

[Copy to clipboard]


記事本沒有SDK,不需要處理SDK程式碼部分。OK,可以用LordPE完全Dump出這個工作了。用第三步獲得到的輸入表直接修復就行了,若想做的好點,可以用程式碼段取代進第二步得到的dumped0.eXe再修復,這樣就不必清除殼資料了。

一點題外話:當初看EncryptPE斷斷續續用了好幾天,脫殼需要毅力和耐心,萬事皆如此吧。


—————————————————————————————————
__________________
http://bbsimg.qianlong.com/upload/01/08/29/68/1082968_1136014649812.gif
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
舊 2006-02-13, 10:38 PM   #2 (permalink)
註冊會員
 
六翼黑帝斯 的頭像
榮譽勳章

勳章總數
UID - 216546
在線等級: 級別:4 | 在線時長:34小時 | 升級還需:11小時級別:4 | 在線時長:34小時 | 升級還需:11小時級別:4 | 在線時長:34小時 | 升級還需:11小時級別:4 | 在線時長:34小時 | 升級還需:11小時
註冊日期: 2005-12-02
VIP期限: 2007-03
住址: 真實的內心
文章: 746
精華: 0
現金: 799 金幣
資產: 799 金幣
預設

感謝分享~
多謝大大轉貼~
找一些東西都找好久
六翼黑帝斯 目前離線  
送花文章: 3, 收花文章: 5 篇, 收花: 8 次
舊 2006-02-14, 01:07 PM   #3 (permalink)
長老會員
榮譽勳章
UID - 16958
在線等級: 級別:25 | 在線時長:768小時 | 升級還需:12小時級別:25 | 在線時長:768小時 | 升級還需:12小時級別:25 | 在線時長:768小時 | 升級還需:12小時級別:25 | 在線時長:768小時 | 升級還需:12小時級別:25 | 在線時長:768小時 | 升級還需:12小時
註冊日期: 2002-12-24
住址: Canada
文章: 21
精華: 0
現金: 10414 金幣
資產: 83720 金幣
預設

Thanks for sharing...
mkuo 目前離線  
送花文章: 592, 收花文章: 3 篇, 收花: 5 次
舊 2006-02-15, 03:31 PM   #4 (permalink)
註冊會員
 
u757207 的頭像
榮譽勳章
UID - 224840
在線等級: 級別:20 | 在線時長:489小時 | 升級還需:36小時級別:20 | 在線時長:489小時 | 升級還需:36小時級別:20 | 在線時長:489小時 | 升級還需:36小時級別:20 | 在線時長:489小時 | 升級還需:36小時級別:20 | 在線時長:489小時 | 升級還需:36小時
註冊日期: 2006-02-10
VIP期限: 2009-04
文章: 160
精華: 0
現金: 598 金幣
資產: 598 金幣
預設

小弟的功力還很淺
還是謝謝大大的教學
u757207 目前離線  
送花文章: 73, 收花文章: 36 篇, 收花: 54 次
 


主題工具
顯示模式

發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 05:55 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1