用dillodumper2.5脫armdillo加殼的XX軟體在xp下的IAT修復 (7千字)
1.用新出的dillodumper2.5工具可以在2k/xp下脫去Arma 2.65, 2.85, 3.0, 3.0a, 3.01, 3.01a.的馬甲。
2.在win2000下脫出來的程式可以執行在win2000下,但在xp下不能執行。
3.在winxp下脫出來的程式在xp下也不能執行。
看來這個程式還不太完善。下面分析看看。
4.用ollydbg v1.09b載入脫後的程式,跟蹤發現程式在call 005629B8時發生錯誤,跟進看看,來到這裡
005629B8 -FF25 10615B00 JMP DWORD PTR DS:[5B6110]
看看前後內容,這是在呼叫某個dll,對於這個程式是呼叫OLE32.DLL[別細問哈:)]
00562940
-FF25 C0605B00 JMP DWORD PTR DS:[5B60C0]
00562946 -FF25
C4605B00 JMP DWORD PTR DS:[5B60C4]
0056294C -FF25 C8605B00
JMP DWORD PTR DS:[5B60C8]
00562952 -FF25 CC605B00
JMP DWORD PTR DS:[5B60CC]
00562958 -FF25 D0605B00 JMP
DWORD PTR DS:[5B60D0]
0056295E -FF25 D4605B00 JMP DWORD
PTR DS:[5B60D4]
00562964 -FF25 D8605B00 JMP DWORD PTR
DS:[5B60D8]
0056296A -FF25 DC605B00 JMP DWORD PTR DS:[5B60DC]
00562970 -FF25 E0605B00 JMP DWORD PTR DS:[5B60E0]
00562976 -FF25 E4605B00 JMP DWORD PTR DS:[5B60E4]
0056297C
-FF25 E8605B00 JMP DWORD PTR DS:[5B60E8]
00562982 -FF25
EC605B00 JMP DWORD PTR DS:[5B60EC]
00562988 -FF25 F0605B00
JMP DWORD PTR DS:[5B60F0]
0056298E -FF25 F4605B00
JMP DWORD PTR DS:[5B60F4]
00562994 -FF25 F8605B00 JMP
DWORD PTR DS:[5B60F8]
0056299A -FF25 FC605B00 JMP DWORD
PTR DS:[5B60FC]
005629A0 -FF25 00615B00 JMP DWORD PTR
DS:[5B6100]
005629A6 -FF25 04615B00 JMP DWORD PTR DS:[5B6104]
005629AC -FF25 08615B00 JMP DWORD PTR DS:[5B6108]
005629B2 -FF25 0C615B00 JMP DWORD PTR DS:[5B610C]
005629B8
-FF25 10615B00 JMP DWORD PTR DS:[5B6110]
005629BE -FF25
14615B00 JMP DWORD PTR DS:[5B6114]
005629C4 -FF25 18615B00
JMP DWORD PTR DS:[5B6118]
005629CA -FF25 1C615B00
JMP DWORD PTR DS:[5B611C]
005629D0 -FF25 20615B00 JMP
DWORD PTR DS:[5B6120]
005629D6 -FF25 24615B00 JMP DWORD
PTR DS:[5B6124]
005629DC -FF25 28615B00 JMP DWORD PTR
DS:[5B6128]
005629E2 -FF25 2C615B00 JMP DWORD PTR DS:[5B612C]
005629E8 -FF25 30615B00 JMP DWORD PTR DS:[5B6130]
005629EE -FF25 34615B00 JMP DWORD PTR DS:[5B6134]
005629F4
-FF25 38615B00 JMP DWORD PTR DS:[5B6138]
在命令列鍵入D 005B60C0看到下面內容
005B60C0 77 21 EE 00 A9 48 EE 00 0E BB EF 00 C6 82 EE 00
005B60D0
B6 B8 EF 00 53 07 EE 00 41 07 EE 00 17 0E EE 00
005B60E0 99 8B EE 00
6F A9 F2 00 EA 77 F0 00 1B CD FA 00
005B60F0 3C EA F3 00 7C C3 F2 00
74 73 F4 00 9E 22 F3 00
005B6100 D2 DC F3 00 5A A2 F1 00 F8 BA F3 00
4B E4 FA 00
005B6110 C3 EA EF 00 44 30 F4 00 14 C5 F2 00 F5 D9 F3 00
005B6120 58 ED EF 00 E0 86 EE 00 60 85 EE 00 F6 49 EE 00
005B6130
19 86 EE 00 F3 A4 F2 00 8D 49 EE 00
注意看看005B6110開始的4個位元組內容 C3 EA EF 00,即呼叫程式入口地址為00efeac3。
我們在ollydbg中再選擇OLE32.DLL模組,看到的地址,對比一下發現果然有問題。
5.正好我有這個軟體的前一版本,載入發現OLE32.DLL的IAT情況:
0058E59C -FF25 10015E00 JMP DWORD PTR DS:[<&OLE32.CoCreateInstance>]
; OLE32.CoCreateInstance
0058E5A2 -FF25
14015E00 JMP DWORD PTR DS:[<&OLE32.CoGetClassObject>]
; OLE32.CoGetClassObject
0058E5A8 -FF25
18015E00 JMP DWORD PTR DS:[<&OLE32.CoGetInterfaceAndReleaseStre>;
OLE32.CoGetInterfaceAndReleaseStream
0058E5AE -FF25 1C015E00
JMP DWORD PTR DS:[<&OLE32.CoInitialize>]
; OLE32.CoInitialize
0058E5B4 -FF25 20015E00
JMP DWORD PTR DS:[<&OLE32.CoMarshalInterThreadInterfac>; OLE32.CoMarshalInterThreadInterfaceInStream
0058E5BA -FF25 24015E00 JMP DWORD PTR DS:[<&OLE32.CoTaskMemAlloc>]
; OLE32.CoTaskMemAlloc
0058E5C0
-FF25 28015E00 JMP DWORD PTR DS:[<&OLE32.CoTaskMemFree>]
; OLE32.CoTaskMemFree
0058E5C6
-FF25 2C015E00 JMP DWORD PTR DS:[<&OLE32.CoUninitialize>]
; OLE32.CoUninitialize
0058E5CC
-FF25 30015E00 JMP DWORD PTR DS:[<&OLE32.CreateBindCtx>]
; OLE32.CreateBindCtx
0058E5D2
-FF25 34015E00 JMP DWORD PTR DS:[<&OLE32.CreateILockBytesOnHGlobal>]
; OLE32.CreateILockBytesOnHGlobal
0058E5D8 -FF25 38015E00
JMP DWORD PTR DS:[<&OLE32.CreateStreamOnHGlobal>] ;
OLE32.CreateStreamOnHGlobal
0058E5DE -FF25 3C015E00 JMP
DWORD PTR DS:[<&OLE32.DoDragDrop>]
; OLE32.DoDragDrop
0058E5E4 -FF25 40015E00
JMP DWORD PTR DS:[<&OLE32.IsAccelerator>]
; OLE32.IsAccelerator
0058E5EA -FF25 44015E00
JMP DWORD PTR DS:[<&OLE32.IsEqualGUID>]
; OLE32.IsEqualGUID
0058E5F0 -FF25 48015E00
JMP DWORD PTR DS:[<&OLE32.OleCreateFromData>]
; OLE32.OleCreateFromData
0058E5F6 -FF25 4C015E00
JMP DWORD PTR DS:[<&OLE32.OleCreateLinkFromData>]
; OLE32.OleCreateLinkFromData
0058E5FC -FF25 50015E00
JMP DWORD PTR DS:[<&OLE32.OleDraw>]
; OLE32.OleDraw
0058E602 -FF25 54015E00
JMP DWORD PTR DS:[<&OLE32.OleFlushClipboard>]
; OLE32.OleFlushClipboard
0058E608 -FF25 58015E00
JMP DWORD PTR DS:[<&OLE32.OleGetClipboard>]
; OLE32.OleGetClipboard
0058E60E -FF25 5C015E00
JMP DWORD PTR DS:[<&OLE32.OleGetIconOfClass>]
; OLE32.OleGetIconOfClass
0058E614 -FF25 60015E00
JMP DWORD PTR DS:[<&OLE32.OleInitialize>]
; OLE32.OleInitialize
0058E61A -FF25 64015E00
JMP DWORD PTR DS:[<&OLE32.OleIsCurrentClipboard>]
; OLE32.OleIsCurrentClipboard
0058E620 -FF25 68015E00
JMP DWORD PTR DS:[<&OLE32.OleSetClipboard>]
; OLE32.OleSetClipboard
0058E626 -FF25 6C015E00
JMP DWORD PTR DS:[<&OLE32.OleSetMenuDescriptor>]
; OLE32.OleSetMenuDescriptor
0058E62C -FF25 70015E00 JMP
DWORD PTR DS:[<&OLE32.OleUninitialize>]
; OLE32.OleUninitialize
0058E632 -FF25 74015E00
JMP DWORD PTR DS:[<&OLE32.ProgIDFromCLSID>]
; OLE32.ProgIDFromCLSID
0058E638 -FF25 78015E00
JMP DWORD PTR DS:[<&OLE32.RegisterDragDrop>]
; OLE32.RegisterDragDrop
0058E63E -FF25 7C015E00
JMP DWORD PTR DS:[<&OLE32.ReleaseStgMedium>]
; OLE32.ReleaseStgMedium
0058E644 -FF25 80015E00
JMP DWORD PTR DS:[<&OLE32.RevokeDragDrop>]
; OLE32.RevokeDragDrop
0058E64A -FF25 84015E00
JMP DWORD PTR DS:[<&OLE32.StgCreateDocfileOnILockBytes>; OLE32.StgCreateDocfileOnILockBytes
0058E650 -FF25 88015E00 JMP DWORD PTR DS:[<&OLE32.StringFromCLSID>]
; OLE32.StringFromCLSID
005E0110 >77 21
6C 00 A9 48 6C 00 0E BB 6D 00 C6 82 6C 00
005E0120 >B6 B8 6D 00 53 07 6C
00 41 07 6C 00 17 0E 6C 00
005E0130 >99 8B 6C 00 6F A9 70 00 EA 77 6E 00
1B CD 78 00
005E0140 >3C EA 71 00 7C C3 70 00 74 73 72 00 9E 22 71 00
005E0150 >D2 DC 71 00 5A A2 6F 00 F8 BA 71 00 4B E4 78 00
005E0160 >C3 EA
6D 00 44 30 72 00 14 C5 70 00 F5 D9 71 00
005E0170 >58 ED 6D 00 E0 86 6C
00 60 85 6C 00 F6 49 6C 00
005E0180 >19 86 6C 00 F3 A4 70 00 8D 49 6C 00
6.對照分析,我們知道dll的載入應該考慮相對地址,但值得關注的一點就是入口地址的低8位是一樣的,看看OLE32.OleInitialize
005e0160這裡C3 EA 6D 00以及OLE32.DLL在記憶體中的位置,這樣就不難得到在新版本檔案中OLE32.OleInitialize的正確位置應該是00dfeac3
問題出在dll載入時的地址發生錯誤,產生偏移=00efeac3-00dfeac3=00100000
7.至此我們修改新版本中005B60C0--005B613B的相對內容為
005B60C0 77 21 DE 00 A9 48 DE 00 0E BB DF 00 C6 82 DE 00
005B60D0
B6 B8 DF 00 53 07 DE 00 41 07 DE 00 17 0E DE 00
005B60E0 99 8B DE 00
6F A9 E2 00 EA 77 E0 00 1B CD EA 00
005B60F0 3C EA E3 00 7C C3 E2 00
74 73 E4 00 9E 22 E3 00
005B6100 D2 DC E3 00 5A A2 E1 00 F8 BA E3 00
4B E4 EA 00
005B6110 C3 EA DF 00 44 30 E4 00 14 C5 E2 00 F5 D9 E3 00
005B6120 58 ED DF 00 E0 86 DE 00 60 85 DE 00 F6 49 DE 00
005B6130
19 86 DE 00 F3 A4 E2 00 8D 49 DE 00
8.至此,修復完對OLE32.DLL的正確呼叫地址。修改方法用ultraedit搜尋定位即可完成修改。
修改後程式在xp下執行正常。
總結,透過此例發現dillodumper2.5脫殼存在的問題主要是在IAT修復時,對dll呼叫的地址採用的是絕對地址,計算有誤,導致程式出錯並且不能跨平臺使用。
LAJIAOLZ 2003/05/20
相關文章
- 用OD對Aspr加殼程式的手動脫殼及修復 (7千字)2015-11-15
- 用Armadillo標準加殼的程式的脫殼和引入表修復方案---OLLYDBG (8千字)2015-11-15
- 用Arm3.75加殼的cc
版+iat亂序主程式的脫殼 (1)2004-10-02
- 關於用ASProtect v1.3加殼軟體的脫殼方法體會 (5千字)2001-11-21
- 對PECompact加殼的DLL脫殼的一點分析 (7千字)2000-08-17
- 脫殼----對用pecompact加殼的程式進行手動脫殼
(1千字)2000-07-30
- Krypton
0.5加殼程式脫殼及輸入表修復記2004-10-06
- 談談如何使用加殼保護自己的軟體不被常用方法脫殼(2千字)2000-10-10
- 脫殼----對用Petite2.2加殼的程式進行手動脫殼的一點分析
(5千字)2000-07-27
- 睡不著,帖一個:aspr程式的脫殼修復體會
(8千字)2015-11-15
- 修復IAT2024-08-14
- ASPROtect 1.22加殼的ahaview2.0脫殼 (5千字)2002-03-24View
- 用ollydbg跟蹤te!lock加殼的軟體
(2千字)2015-11-15
- 加殼技術探討-加殼時處理IAT2015-11-15
- 用ollydbg跟蹤asproctect1.2加殼的軟體
(1千字)2015-11-15
- ArtCursors 3.03 ASPR殼軟體脫殼後修整記 (10千字)2015-11-15
- HTMLZip脫殼後的Import Table的修復 (750字)2001-02-10HTMLImport
- 手動脫殼的教程(由petite v2.2加殼) (4千字)2001-11-26
- 請教各位用Aspack V2.000加殼的軟體怎麼脫!!! (88字)2000-07-26
- Asprotect 1.2x 加殼的 Advanced Direct
Remailer 2.17 脫殼 (3千字)2002-06-20REMAI
- Armadillo 2.52加殼原理分析和改進的脫殼方法
(12千字)2015-11-15
- 一點脫殼經驗。(7千字)2001-04-20
- 股市風暴4.0的外殼分析與脫殼方法(一) (7千字)2001-06-10
- 淺談DBPE2.33脫殼修復2015-11-15
- 用Ollydbg手脫Petite
V2.2加殼的DLL2004-12-27
- Acprotect之完美解除安裝XP V9.15脫殼修復 (狗尾續貂)2015-11-15
- Armadillo V2.xx標準加殼方式的脫殼(第二篇)--Virtual
Personality 4.02015-11-15
- 淺談被加殼ELF檔案的DUMP修復2020-08-19
- FTPrint的脫殼(asprotect) (2千字)2001-02-05FTP
- ASPRTECT1.2X加殼的Delphi
Application Peeper Pro 2.3.1.9 脫殼(簡單) (3千字)2002-04-06APP
- 模擬跟蹤+修復方法之ACProtect脫殼――完美解除安裝XP V9.122015-11-15
- 怎樣脫pklite32, Shrinker 3.4 和 NeoLite加的殼(3千字)2000-07-31
- HyperSnap-DX
5.60脫殼(Arm3.70a with IAT Elimination)2004-10-25
- 脫Crunch/PE -> BitArts的殼。 (3千字)2002-05-03
- jdpack的脫殼及破解 (5千字)2002-06-25
- HTMLZip 1.0 beta 的脫殼 (3千字)2001-02-03HTML
- PicturesToExe3.51的脫殼 (2千字)2001-04-22REST
- Thebat!139脫殼詳情及對Asprotect加殼保護的一點小結
(4千字)2000-03-27BAT