|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2006-02-13, 12:19 PM | #1 |
榮譽會員
|
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 |
__________________ |
|
送花文章: 3,
|