Armadillo V3.6雙程式標準殼 ------神速脫殼大法
標 題:Armadillo V3.6雙程式標準殼 ------神速脫殼大法
發信人:crackjack
時 間:2004年4月18日 04:54
詳細資訊:
下載頁面: http://www.superrsoft.com/cn/srcom.htm
軟體大小: 5794 KB
軟體語言: 中文
軟體類別: 國產軟體 / 共享版 / 網路輔助
應用平臺: Win9x/NT/2000/XP
【說明】:此破文結合了Fly、mysqladm、pyzpyz、jwh51、骨灰C( MM)大蝦們所寫的破文,在此謝謝他們了,這是我第一次學OLLYDBG和脫Armadillo的殼,請各位大俠多多指教!
【作者宣告】:只作為學習技術用,沒有其他任何商業目的,失誤之處敬請諸位大俠賜教!
【除錯環境】:Win2000、Ollydbg、PEiD、LordPE、ImportREC
―――――――――――――――――――――――――――――――――
【脫殼過程】:
設定Ollydbg忽略所有的異常選項。用IsDebug 1.4外掛去掉Ollydbg的偵錯程式標誌。
――――――――――――――――――――――――
一、使程式把自己當成子程式執行
00567000 > $ 60 PUSHAD //進入OD後停在這!
00567001 . E8 00000000 CALL iepro.00567006
00567006 $ 5D POP EBP
00567007 . 50 PUSH EAX
00567008 . 51 PUSH ECX
00567009 . EB 0F JMP SHORT iepro.0056701A
下斷:BP OpenMutexA
77E89CE9 > 55 PUSH EBP //斷在這,看看堆疊
77E89CEA 8BEC MOV EBP,ESP
77E89CEC 51 PUSH ECX
77E89CED 51 PUSH ECX
77E89CEE 837D 10 00 CMP DWORD PTR SS:[EBP+10],0
77E89CF2 56 PUSH ESI
77E89CF3 74 50 JE SHORT KERNEL32.77E89D45
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
BP OpenMutexA 時的堆疊:
0012F574 0053E141 /CALL 到 OpenMutexA
0012F578 001F0001 |Access = 1F0001
0012F57C 00000000 |Inheritable = FALSE
0012F580 0012FBB4 MutexName = "20C::DA3A38CB6B"
0012F584 0012FF04
0012F588 00000000
0012F58C 0055C5D9 iepro.0055C5D9
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
Ctrl+G:401000 鍵入以下程式碼
00401000 60 pushad
00401001 9C pushfd
00401002 68 B4FB1200 push 12FBB4 ★ 堆疊裡看到的值
00401007 33C0 xor eax,eax
00401009 50 push eax
0040100A 50 push eax
0040100B E8 B4B2A577 call kernel32.CreateMutexA
00401010 9D popfd
00401011 61 popad
00401012 E9 33F7A577 jmp kernel32.OpenMutexA
在401000處新建起源,F9執行,再次中斷在OpenMutexA處。
―――――――――――――――――――――――――――――――――
二、Magic Jump,避開IAT加密
取消以前斷點,下斷:BP GetModuleHandleA(為什麼不下BP GetModuleHandleA+5呢?因為我試了很多次,用這個斷點斷不下來,所以改用BP GetModuleHandleA)
77E80978 > 55 PUSH EBP //斷在這裡
77E80979 8BEC MOV EBP,ESP
77E8097B 837D 08 00 CMP DWORD PTR SS:[EBP+8],0
77E8097F 75 0E JNZ SHORT KERNEL32.77E8098F //重新設定斷點在這裡
77E80981 64:A1 18000000 MOV EAX,DWORD PTR FS:[18]
77E80987 8B40 30 MOV EAX,DWORD PTR DS:[EAX+30]
77E8098A 8B40 08 MOV EAX,DWORD PTR DS:[EAX+8]
77E8098D EB 14 JMP SHORT KERNEL32.77E809A3
77E8098F FF75 08 PUSH DWORD PTR SS:[EBP+8]
77E80992 E8 2E890000 CALL KERNEL32.77E892C5
77E80997 85C0 TEST EAX,EAX
77E80999 74 08 JE SHORT KERNEL32.77E809A3
77E8099B FF70 04 PUSH DWORD PTR DS:[EAX+4]
77E8099E E8 E2000000 CALL KERNEL32.GetModuleHandleW
77E809A3 5D POP EBP
77E809A4 C2 0400 RETN 4
取消斷點,在77E8097F處重新下斷點,在這裡中斷十幾次,中間會出現無法處理異常的對話方塊,用SHIFT+F9跳過就行了;Alt+F9返回程式。判斷返回程式的時機:
☆ ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
注意看BP GetModuleHandleA 時的堆疊變化:
0012BEF8 00BCE3B7 /CALL 到 GetModuleHandleA 來自 00BCE3B1
0012BEFC 00BDF700 pModule = "kernel32.dll"
0012BF00 00BE0710 ASCII "VirtualAlloc"
0012BEF8 00BCE3D4 /CALL 到 GetModuleHandleA 來自 00BCE3CE
0012BEFC 00BDF700 pModule = "kernel32.dll"
0012BF00 00BE0704 ASCII "VirtualFree"
//再F9下去就會出現無法處理異常的對話方塊
0012BC70 |00BB912E 返回到 00BB912E 來自 KERNEL32.GetModuleHandleA
0012BC74 |0012BDAC ASCII "kernel32.dll"
到這裡時就用CTRL+F9返回主程式:
00BB912E 8B0D 0838BE00 MOV ECX,DWORD PTR DS:[BE3808]
00BB9134 89040E MOV DWORD PTR DS:[ESI+ECX],EAX
00BB9137 A1 0838BE00 MOV EAX,DWORD PTR DS:[BE3808]
00BB913C 393C06 CMP DWORD PTR DS:[ESI+EAX],EDI
00BB913F 75 16 JNZ SHORT 00BB9157
00BB9141 8D85 B4FEFFFF LEA EAX,DWORD PTR SS:[EBP-14C]
00BB9147 50 PUSH EAX
00BB9148 FF15 CCA0BD00 CALL DWORD PTR DS:[BDA0CC] KERNEL32.LoadLibraryA
00BB914E 8B0D 0838BE00 MOV ECX,DWORD PTR DS:[BE3808]
00BB9154 89040E MOV DWORD PTR DS:[ESI+ECX],EAX
00BB9157 A1 0838BE00 MOV EAX,DWORD PTR DS:[BE3808]
00BB915C 393C06 CMP DWORD PTR DS:[ESI+EAX],EDI
00BB915F 0F84 AD000000 JE 00BB9212 //這裡就是我們常說的Magic Jump,把它改為JMP
00BB9165 33C9 XOR ECX,ECX
00BB9167 8B03 MOV EAX,DWORD PTR DS:[EBX]
00BB9169 3938 CMP DWORD PTR DS:[EAX],EDI
00BB916B 74 06 JE SHORT 00BB9173
這裡所作的修改,可以不需要在IAT處理結束後再還原始碼了。
―――――――――――――――――――――――――――――――――
三、查詢入口點
清除上面所有的斷點,然後下bp GetCurrentThreadId,繼續按F9,中斷後注意堆疊的變化:
0012B830 6A281E36 /CALL 到 GetCurrentThreadId 來自 6A281E30 //注意這一行
0012B834 00000001
0012B838 6A281C1A 返回到 6A281C1A 來自 6A281DE2
0012B83C 6A281B60 返回到 6A281B60 來自 6A281B8C
0012B810 6A28353F /CALL 到 GetCurrentThreadId 來自 6A283539
0012B814 00000000
0012B818 6A390470
0012B81C 6A3904D8
0012B820 /0012B838
0012F56C 00BD61D4 /CALL 到 GetCurrentThreadId 來自 00BD61CE //關鍵
0012F570 0012FF04
0012F574 00000000
0012F578 0055C5D9 iepro.0055C5D9
0012F57C 0053E8C4 iepro.0053E8C4
0012F580 0057D100 iepro.0057D100
當堆疊的地址出現的是主程式的地址時,這時要用CTRL+F9返回主程式:
00BD61D4 A3 D47CBE00 MOV DWORD PTR DS:[BE7CD4],EAX
00BD61D9 E8 4032FEFF CALL 00BB941E
00BD61DE 6A 00 PUSH 0
00BD61E0 E8 8F8AFEFF CALL 00BBEC74
00BD61E5 6A 00 PUSH 0
00BD61E7 C705 0CFCBD00 7C>MOV DWORD PTR DS:[BDFC0C],0BE077C ; ASCII "RC"
00BD61F1 E8 9D2CFEFF CALL 00BB8E93
00BD61F6 59 POP ECX
00BD61F7 59 POP ECX
00BD61F8 E8 8F10FFFF CALL 00BC728C
00BD61FD 8BF8 MOV EDI,EAX
00BD61FF A1 BC7BBE00 MOV EAX,DWORD PTR DS:[BE7BBC]
00BD6204 8B48 3C MOV ECX,DWORD PTR DS:[EAX+3C]
00BD6207 3348 14 XOR ECX,DWORD PTR DS:[EAX+14]
00BD620A 3348 10 XOR ECX,DWORD PTR DS:[EAX+10]
00BD620D 03F9 ADD EDI,ECX
00BD620F 8B0E MOV ECX,DWORD PTR DS:[ESI]
00BD6211 85C9 TEST ECX,ECX
00BD6213 75 2F JNZ SHORT 00BD6244
00BD6215 8B78 3C MOV EDI,DWORD PTR DS:[EAX+3C]
00BD6218 E8 6F10FFFF CALL 00BC728C
00BD621D 8B0D BC7BBE00 MOV ECX,DWORD PTR DS:[BE7BBC] ; iepro.00577260
00BD6223 FF76 14 PUSH DWORD PTR DS:[ESI+14]
00BD6226 8B51 14 MOV EDX,DWORD PTR DS:[ECX+14]
00BD6229 FF76 10 PUSH DWORD PTR DS:[ESI+10]
00BD622C 3351 10 XOR EDX,DWORD PTR DS:[ECX+10]
00BD622F FF76 0C PUSH DWORD PTR DS:[ESI+C]
00BD6232 33D7 XOR EDX,EDI
00BD6234 03C2 ADD EAX,EDX
00BD6236 8B51 24 MOV EDX,DWORD PTR DS:[ECX+24]
00BD6239 3351 1C XOR EDX,DWORD PTR DS:[ECX+1C]
00BD623C 33D7 XOR EDX,EDI
00BD623E 2BC2 SUB EAX,EDX
00BD6240 FFD0 CALL EAX
00BD6242 EB 25 JMP SHORT 00BD6269
00BD6244 83F9 01 CMP ECX,1
00BD6247 75 22 JNZ SHORT 00BD626B
00BD6249 FF76 04 PUSH DWORD PTR DS:[ESI+4]
00BD624C FF76 08 PUSH DWORD PTR DS:[ESI+8]
00BD624F 6A 00 PUSH 0
00BD6251 E8 3610FFFF CALL 00BC728C
00BD6256 50 PUSH EAX
00BD6257 A1 BC7BBE00 MOV EAX,DWORD PTR DS:[BE7BBC]
00BD625C 8B48 3C MOV ECX,DWORD PTR DS:[EAX+3C]
00BD625F 3348 24 XOR ECX,DWORD PTR DS:[EAX+24]
00BD6262 3348 1C XOR ECX,DWORD PTR DS:[EAX+1C]
00BD6265 2BF9 SUB EDI,ECX
00BD6267 FFD7 CALL EDI //這裡F7,飛向光明之顛。
00BD6269 8BD8 MOV EBX,EAX
00BD626B 5F POP EDI
00BD626C 8BC3 MOV EAX,EBX
00BD626E 5E POP ESI
00BD626F 5B POP EBX
00BD6270 C3 RETN
在那個CALL EDI處F7我們就到入口了,這時可以用LORDPE 把主程式DUMP出來了。
―――――――――――――――――――――――――――――――――
四、修復IAT
好了,執行Import1.6 , OEP填145C ,所有的的函式都完好無缺,FixDump它。好,執行一下,沒有問題,然後再拿Lordpe rebuild一下,減小體積。
【後語】自退出破界那麼久,再次回來時已經是今非昔比了,如今是長江後浪推前浪,技術不斷的發展,我們這些老CRACKER也該歇歇了。
相關文章
- iOS逆向學習之五(加殼?脫殼?)2019-10-10iOS
- upx手動脫殼2020-10-26
- 十、iOS逆向之《越獄砸殼/ipa脫殼》2021-03-18iOS
- Od跟進之脫殼(待完善)2018-10-20
- 教你如何寫UPX脫殼指令碼2019-05-11指令碼
- 一次簡單的脫殼2024-08-30
- iOS應用程式的脫殼實現原理淺析2019-03-04iOS
- Linux 外殼程式2018-08-05Linux
- Android.Hook框架Cydia篇(脫殼機制作)2020-08-19AndroidHook框架
- 脫殼基礎知識以及簡單應用2019-06-17
- 某IOT蠕蟲病毒分析之UPX脫殼實戰2018-04-11
- 逆向基礎——軟體手動脫殼技術入門2020-08-19
- 【開源】BlackDex,無需環境,Android新姿勢脫殼工具2021-05-27Android
- 從Android執行時出發,打造我們的脫殼神器2020-08-19Android
- 金蟬脫殼2百度雲免費線上觀看2018-06-23
- 營收、淨利雙收,貝殼找房穩了?2021-03-23營收
- 蝦殼也是寶!2023-11-22
- 騰訊安全ApkPecker上線DEX-VMP自動化脫殼服務2021-07-19APK
- 安卓整體加殼(一代殼)原理及實踐2024-09-15安卓
- Android之Apk加殼2018-12-11AndroidAPK
- 腦殼疼的tapable2019-04-18
- 貝殼_程式設計實踐_銀行系統2024-04-18程式設計
- 某殼分析+修復(二)2018-05-14
- 紙殼CMS列表Grid的配置2018-08-17
- 加殼上碰到的問題2018-04-10
- 領取wps稻殼會員2019-12-24
- 笑話站【蛋殼兒網】2019-05-11
- 關於Windows外殼(Windows Shell)2024-11-11Windows
- 鋁殼電阻是什麼?2024-09-26
- 局勢詭譎,貝殼守城2023-03-31
- 深入瞭解標準流以及脫標元素的特點2021-12-23
- 雙拼輸入法,助你神速輸出中文2018-10-19
- 從零開始dumpdecrypted砸殼解析2018-09-30
- 貝殼產品筆試相關2018-09-04筆試
- Flutter Notes | Android 借殼分享微信2020-06-27FlutterAndroid
- 蛋殼兒網2.0【笑話站】2019-05-11
- 貝殼專案,上傳到cos2024-07-16
- 羽夏殼世界—— PE 結構(上)2022-04-10
- 谷歌揭秘Pixel 4設計:確認雙後置攝像頭,全玻璃背殼2019-06-14谷歌