史萊姆論壇

返回   史萊姆論壇 > 教學文件資料庫 > 多媒體影音轉檔燒錄技術文件
忘記密碼?
論壇說明

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

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

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

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2006-02-13, 12:19 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 金幣
預設 Armadillo V4.0輸入表亂序的簡便修復方法——PIMOne

軟體名稱: PIMOne V2.3
下載頁面: http://www.onlinedown.net/soft/30544.htm
軟體大小: 4875KB
軟體語言: 英文
軟體類別: 國外軟體/共享版/記事管理
執行環境: Win9x/Me/NT/2000/XP
加入時間: 2004-11-9 8:09:03
軟體評級: ****
軟體介紹: PIM(個人資訊管理)軟體,為用戶提供了聯係位址手冊、計劃工作定時提醒等功能。

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

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

—————————————————————————————————
【脫殼程序】:
Armadillo的輸入表亂序有點麻煩,不少朋友採用變換的方法來修復,其實用ImportREC就可以修復了。
PIMOne V2.3使用了雙工作、IAT亂序、遠端跳轉,但是沒有CC。
—————————————————————————————————
一、把雙工作切換成單工作


設定Ollydbg忽略所有的異常選項。老規矩:用IsDebug V1.4插件去掉Ollydbg的偵錯器標誌。

006013F3 55 push ebp
//進入Ollydbg後暫停在這
006013F4 8BEC mov ebp,esp
006013F6 6A FF push -1
006013F8 68 20BB6200 push PIMOne.0062BB20
006013FD 68 30116000 push PIMOne.00601130
00601402 64:A1 00000000 mov eax,dword ptr fs:[0]
00601408 50 push eax
00601409 64:8925 00000000 mov dword ptr fs:[0],esp
00601410 83EC 58 sub esp,58
00601413 53 push ebx
00601414 56 push esi
00601415 57 push edi
00601416 8965 E8 mov dword ptr ss:[ebp-18],esp
00601419 FF15 88616200 call dword ptr ds:[<&KERNEL32.GetVersion>]

下斷:BP OpenMutexA
Shift+F9,中斷後看堆疊:
0012D7AC 005ECFD1 /CALL 到 OpenMutexA 來自 PIMOne.005ECFCB
0012D7B0 001F0001 |Access = 1F0001
0012D7B4 00000000 |Inheritable = FALSE
0012D7B8 0012DDEC \MutexName = "22C:A2D80EF7F" ★ 注意0012DDEC

Ctrl+G:401000 按鍵輸入以下程式碼
00401000 60 pushad
00401001 9C pushfd
00401002 68 ECDD1200 push 12DDEC ★ 堆疊裡看到的值
00401007 33C0 xor eax,eax
00401009 50 push eax
0040100A 50 push eax
0040100B E8 2FDB407C call kernel32.CreateMutexA
00401010 9D popfd
00401011 61 popad
00401012 E9 04DC407C jmp kernel32.OpenMutexA

60 9C 68 EC DD 12 00 33 C0 50 50 E8 2F DB 40 7C 9D 61 E9 04 DC 40 7C

在401000處新增起源,F9執行,再次中斷在OpenMutexA處。
返回401000處,「復原選項」,清除掉寫入的程式碼。BC OpenMutexA,取消這個斷點。


—————————————————————————————————
二、Armadillo V4.0新增的反跟蹤手段


OllyDbg在處理調式包含格式串的消息時存在問題,被跟蹤的應用程式可以使OllyDbg崩潰,或可能以工作權限執行任意指令。OutputDebugString函數可傳送字元串到偵錯器上,然後OllyDbg會在底端顯示相關狀態消息,但是如果包含格式串消息,就可能使OllyDbg崩潰。
Armadillo以前的版本沒有此種Anti,自V4.0始才有。

HE OutputDebugStringA
Shift+F9執行,中斷下來。看堆疊:

0012CCE4 00DF1F59 /CALL 到 OutputDebugStringA 來自 00DF1F53
0012CCE8 0012D60C \String = "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%>

轉存跟隨12D60C,選%s%之類的字元,點右鍵->二進制->使用00填充
下面的同樣處理:
0012CCE4 00DF251F /CALL 到 OutputDebugStringA 來自 00DF2519
0012CCE8 0012D60C \String = "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%>

保留這個OutputDebugStringA斷點,後面還有用。


—————————————————————————————————
三、Magic Jump,避開IAT加密


下斷:HE GetModuleHandleA
Shift+F9,彈出Reminder界面,點OK
中斷下來,看堆疊:
001265F4 00DDABDD /CALL 到 GetModuleHandleA 來自 00DDABD7
001265F8 00126738 \pModule = "kernel32.dll"

HD GetModuleHandleA 取消這個斷點,Alt+F9返回

00DDABD7 FF15 D820E000 call dword ptr ds:[E020D8] ; kernel32.GetModuleHandleA
00DDABDD 8B0D E4C9E000 mov ecx,dword ptr ds:[E0C9E4]
//返回這裡
00DDABE3 89040E mov dword ptr ds:[esi+ecx],eax
00DDABE6 A1 E4C9E000 mov eax,dword ptr ds:[E0C9E4]
00DDABEB 391C06 cmp dword ptr ds:[esi+eax],ebx
00DDABEE 75 16 jnz short 00DDAC06
00DDABF0 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]
00DDABF6 50 push eax
00DDABF7 FF15 E020E000 call dword ptr ds:[E020E0] ; kernel32.LoadLibraryA
00DDABFD 8B0D E4C9E000 mov ecx,dword ptr ds:[E0C9E4]
00DDAC03 89040E mov dword ptr ds:[esi+ecx],eax
00DDAC06 A1 E4C9E000 mov eax,dword ptr ds:[E0C9E4]
00DDAC0B 391C06 cmp dword ptr ds:[esi+eax],ebx
00DDAC0E 0F84 32010000 je 00DDAD46
//Magic Jump! 修改為:jmp 00DDAD46 ★
00DDAC14 33C9 xor ecx,ecx
00DDAC16 8B07 mov eax,dword ptr ds:[edi]
00DDAC18 3918 cmp dword ptr ds:[eax],ebx
00DDAC1A 74 06 je short 00DDAC22
00DDAC1C 41 inc ecx
00DDAC1D 83C0 0C add eax,0C
00DDAC20 EB F6 jmp short 00DDAC18


—————————————————————————————————
四、飛向光明之巔


Shift+F9 執行,再次中斷在OutputDebugStringA處
00126888 00DF6B53 /CALL 到 OutputDebugStringA 來自 00DF6B4D
0012688C 0012920C \String = "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%>
和第二步的處理相同

下斷:BP GetCurrentThreadId
Shift+F9 執行,中斷在GetCurrentThreadId處,堆疊:
0012D59C 00DFC3DD CALL 到 GetCurrentThreadId 來自 00DFC3D7

取消這個斷點。Alt+F9 返回,Ctrl+S 在當前位置下搜尋指令序列:
sub edi, ecx
call edi
找到在00DFC48C處,下斷。Shift+F9 執行,中斷下來

00DFC47D 50 push eax
00DFC47E A1 F81EE100 mov eax,dword ptr ds:[E11EF8]
00DFC483 8B48 5C mov ecx,dword ptr ds:[eax+5C]
00DFC486 3348 40 xor ecx,dword ptr ds:[eax+40]
00DFC489 3348 08 xor ecx,dword ptr ds:[eax+8]
00DFC48C 2BF9 sub edi,ecx
//EDI=5EA37C21-5E4965CD=005A1654
00DFC48E FFD7 call edi ; PIMOne.005A1654
//飛向光明之點巔!


005A1654 55 push ebp
//OEP ★ 用LordPE完全Dump這個工作
005A1655 8BEC mov ebp,esp
005A1657 83C4 F0 add esp,-10
005A165A B8 AC0D5A00 mov eax,PIMOne.005A0DAC
005A165F E8 B85EE6FF call PIMOne.0040751C
005A1664 E8 BB97FFFF call PIMOne.0059AE24
005A1669 E8 6634E6FF call PIMOne.00404AD4

程序內部還有遠端跳轉,如:
00407598 E9 E6BC9902 jmp 02DA3283
用LordPE部分脫殼出:Region02DA0000-02DC0000.dmp
注意:這個位址並不是固定的
組裝一下,用LordPE從磁牒載入部分脫殼的文件
修正其Virtual Address=02DA0000-00400000=029A0000
只保留LordPE的「Validate PE」選項,重建PE。


—————————————————————————————————
五、輸入表亂序的簡便修復方法


從程序找一個API使用,如:
00407458 FF25 78D7EF00 jmp dword ptr ds:[EFD778]; kernel32.GetModuleHandleA
在轉存中跟隨0EFD778,上下看到許多函數位址,可以找到IAT開始和結束的位址:

00EFD4D8 00 00 00 00 00 00 00 00 5C 01 07 00 F1 07 1C 01 ........\.?
00EFD4E8 EF 01 D3 77 BD BC D1 77 49 EF D1 77 BF 5E D5 77 ?觲郊褀I楣w媶誻
…… ……
00EFDFA8 37 97 80 7C AB AB AB AB AB AB AB AB EE FE EE FE 7檳|旳旳旳怀虫
00EFDFB8 00 00 00 00 00 00 00 00 06 00 5C 01 95 07 1C 01 .........\?

開始位址=00EFD4E8
結束位址=00EFDFAC

執行ImportREC。注意:去掉「使用來自磁牒的PE部首」的選項,選項「新增新的IAT」選項!
選Ollydbg偵錯的PIMOne.exe工作,填入RVA=00AFD4E8、大小=00000AC4,點「Get Import」。
可以看到函數亂序了,ImportREC顯示是無效函數。如:
1 00AFD634 user32.dll 0001 ActivateKeyboardLayout
1 00AFD638 kernel32.dll 0032 CloseHandle //亂序
0 00AFD63C ? 0000 00DDBFAE //LJ游標
1 00AFD640 gdi32.dll 00DE ExtTextOutA //亂序
先不管亂序,現在需要把填充在裡面的LJ游標全部CUT掉,有不少,細心點。

為了能夠跨平台執行,需要修改某些函數,如:
1 00AFD554 ntdll.dll 02B6 RtlLeaveCriticalSection
//修改為:kernel32.dll LeaveCriticalSection

修改OEP=001A1654,FixDump!
ImportREC自動新增了一個輸入表。

可以移除text和其下的adata、data1、.reloc1、pdata共5個區段,然後再用LordPE或者FileScanner最佳化一下脫殼後的文件。


—————————————————————————————————
六、破解


脫殼之後時間限制就沒有了。那些字元提示就隨意修改吧。
脫殼後的文件放在[FCG]、贏政論壇,想參考的朋友可以去下載。

005773C8 BA BC745700 mov edx,dumped_.005774BC ; ASCII "Unregistered version"
005773CD 8B83 F8020000 mov eax,dword ptr ds:[ebx+2F8]
005773D3 E8 A0E7EDFF call dumped_.00455B78
005773D8 E8 3F9BFCFF call dumped_.00540F1C
005773DD 50 push eax
005773DE B8 14000000 mov eax,14
005773E3 5A pop edx
005773E4 2BC2 sub eax,edx
005773E6 8D55 EC lea edx,dword ptr ss:[ebp-14]
005773E9 E8 4A29E9FF call dumped_.00409D38
005773EE 8D45 EC lea eax,dword ptr ss:[ebp-14]
005773F1 BA DC745700 mov edx,dumped_.005774DC ; ASCII " day(s) left."
005773F6 E8 1DDBE8FF call dumped_.00404F18
__________________
http://bbsimg.qianlong.com/upload/01/08/29/68/1082968_1136014649812.gif
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
 



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

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


所有時間均為台北時間。現在的時間是 11:43 AM


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


SEO by vBSEO 3.6.1