|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2006-05-28, 05:06 PM | #1 |
榮譽會員
|
軟體 - BLocalize脫殼未破解
【文章標題】: *BLocalize脫殼未破解
【文章作者】: Winter[CZG][D.4s][BCG] 【軟件名稱】: *BLocalize 【下載地址】: 大陸大陸國產軟件,不便公佈 【加殼方式】: Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks 【使用工具】: OD,ArmInline,ArmadilloFindProtected,Peid,ImpRec,lordpe,peditor 【操作平台】: Win2003 【軟件介紹】: 是個漢化工具 【作者聲明】: 只是學習脫Armadillo以及ArmInline使用,沒有其他目的。失誤之處敬請諸位大俠賜教! -------------------------------------------------------------------------------- 【詳細過程】 脫殼參考了fly大俠的"ArmInline——Armadillo客戶版Code Splicing+Import Table Elimination的簡便修復方法"以及cyto大俠的"[Armadillo][Import Table Elimination+Code Splicing]WebCrypt Pro 2000 v5 "在這裡向他們致敬。 引用: !- Protected Armadillo <Protection Options> Debug-Blocker Enable Import Table Elimination Enable Strategic Code Splicing Enable Nanomites Processing <Backup Key Options> Fixed Backup Keys <Compression Options> Better/Slower Compression 【尋找OEP】 OD載入,停在這裡: 00A6AC43 >/$ 55 PUSH EBP 00A6AC44 |. 8BEC MOV EBP,ESP 00A6AC46 |. 6A FF PUSH -1 00A6AC48 |. 68 903FA900 PUSH VBLocali.00A93F90 00A6AC4D |. 68 80A9A600 PUSH VBLocali.00A6A980 ; SE 處理程式安裝 下斷:bp OpenMutexA,F9一次,關注一下堆疊: 0012F7A4 0012FDD8 ASCII "CE4:AC4137318" 然後ctrl+G來到401000,寫入如下代碼: 00401000 60 PUSHAD //這裡新增EIP 00401001 9C PUSHFD 00401002 68 D8FD1200 PUSH 12FDD8 ; //這裡是堆疊看到的 ASCII "CE4:AC4137318" 00401007 33C0 XOR EAX,EAX 00401009 50 PUSH EAX 0040100A 50 PUSH EAX 0040100B E8 105A417C CALL kernel32.CreateMutexA 00401010 9D POPFD 00401011 61 POPAD 00401012 - E9 1062417C JMP kernel32.OpenMutexA 00401017 90 NOP 二進制代碼:60 9C 68 D8 FD 12 00 33 C0 50 50 E8 10 5A 41 7C 9D 61 E9 10 62 41 7C 90 F9一次斷下後取消中斷點,下斷bp GetModuleHandleA+5,然後觀察堆疊: 0012EF2C /0012EF64 0012EF30 |773D7FF9 返回到 773D7FF9 來自 kernel32.GetModuleHandleA 0012EF34 |77372E84 ASCII "kernel32.dll" 0012EF70 /0012EF90 0012EF74 |773D5246 返回到 773D5246 來自 kernel32.GetModuleHandleA 0012EF78 |77372E84 ASCII "kernel32.dll" 0012EF7C |7C8284FF kernel32.GetProcessHeap 0012F738 /0012F7A0 0012F73C |00A558F3 返回到 VBLocali.00A558F3 來自 kernel32.GetModuleHandleA 0012F740 |00000000 0012F744 |7C82B3C8 返回到 kernel32.7C82B3C8 來自 ntdll.ZwOpenMutant 00129524 /0012EC6C 00129528 |01317105 返回到 01317105 來自 kernel32.GetModuleHandleA 0012952C |0132BC1C ASCII "kernel32.dll" 00129530 |0132CEC4 ASCII "VirtualAlloc" 00129524 /0012EC6C 00129528 |01317122 返回到 01317122 來自 kernel32.GetModuleHandleA 0012952C |0132BC1C ASCII "kernel32.dll" 00129530 |0132CEB8 ASCII "VirtualFree" //到這裡注意,shift+F9經過一次異常 00129288 /00129528 0012928C |01305FC9 返回到 01305FC9 來自 kernel32.GetModuleHandleA 00129290 |001293DC ASCII "kernel32.dll" //取消中斷點,alt+F9返回 01305FE3 FF15 BC623201 CALL DWORD PTR DS:[13262BC] ; kernel32.LoadLibraryA 01305FE9 8B0D AC403301 MOV ECX,DWORD PTR DS:[13340AC] 01305FEF 89040E MOV DWORD PTR DS:[ESI+ECX],EAX 01305FF2 A1 AC403301 MOV EAX,DWORD PTR DS:[13340AC] 01305FF7 391C06 CMP DWORD PTR DS:[ESI+EAX],EBX 01305FFA 0F84 2F010000 JE 0130612F //Magic Jump ,改成JMP,然後往下找 01306144 /EB 03 JMP SHORT 01306149 //在這裡下個中斷點,執行斷下後撤消剛剛的修改 01306146 |D6 SALC 01306147 |D6 SALC 繼續下斷:bp GetCurrentThreadId 00128DE4 76084546 /CALL 到 GetCurrentThreadId 來自 MSASN1.76084540 00128DF4 779F8D5A /CALL 到 GetCurrentThreadId 來自 WININET.779F8D54 00128E20 71B110B6 /CALL 到 GetCurrentThreadId 來自 WSOCK32.71B110B0 00128DD4 755BACDC /CALL 到 GetCurrentThreadId 來自 MFC42.755BACD6 0012F720 013063D4 /CALL 到 GetCurrentThreadId 來自 013063CE //這樣可以取消中斷點返回了 013063D4 50 PUSH EAX //回到這裡 013063D5 FF75 FC PUSH DWORD PTR SS:[EBP-4] 013063D8 E8 05000000 CALL 013063E2 013063DD 83C4 0C ADD ESP,0C 013063E0 C9 LEAVE 013063E1 C3 RETN //單步開始跟 0131F9D9 8B50 60 MOV EDX,DWORD PTR DS:[EAX+60] 0131F9DC 3350 44 XOR EDX,DWORD PTR DS:[EAX+44] 0131F9DF 3350 1C XOR EDX,DWORD PTR DS:[EAX+1C] 0131F9E2 2BCA SUB ECX,EDX 0131F9E4 FFD1 CALL ECX //跟到這裡,F7進去,到了OEP 0131F9E6 8945 E4 MOV DWORD PTR SS:[EBP-1C],EAX 00468B8A 55 PUSH EBP //就是這裡了 00468B8B 8BEC MOV EBP,ESP 00468B8D 6A FF PUSH -1 00468B8F 68 40A75100 PUSH VBLocali.0051A740 【修復Strategic Code Splicing】 如果你使用老版本的Arminline,接下來的東西要自己找,新版的會自動找:) 首先打開OD表表菜單,附加工作行程,找到這個:未命名的視窗, 條目 32 工作行程=00000A94 名稱=*BLocalize 記下ID,alt+M打開記憶體視窗,找到401000那行,記下大小10E000,打開ArmInline,選擇工作行程並填入剛剛得到的訊息。 回到OD,ctrl+B,填入E9,勾選尋找,找到這裡: 0040100F - E9 ECEFBD03 JMP 03FE0000 //注意,這個數位每次都在變 仍舊alt+M打開記憶體視窗,找到這個段以及它的大小,填入視窗: AMEMORY, 條目 69 地址=03FE0000 大小=00020000 (131072.) 屬主= 03FE0000 (自身) 區段= 類型=Priv 00021020 訪問=R E 初始訪問=RWE 點擊"Remove Splice",修復完成以後進入下一步,如果出錯,請多試幾次,也有可能要從頭來。 【修復Import Table Elimination】 隨便找個函數調用,可以看到輸入表,在命令行輸入dd 389118,注意找上下界,很容易可以發現rva:3883f0 大小:16C8 要為ArmInlie找個空白地方寫輸入表,Alt+M,選擇這個: AMEMORY, 條目 24 地址=0050F000 大小=0002E000 (188416.) 屬主=VBLocali 00400000 區段=.rdata 類型=Imag 01001002 訪問=R 初始訪問=RWE 雙擊打開,查找kernel32.dll,不要選整個塊,發現00539DDC是個好地方: 00539DCC 4B 45 52 4E 45 4C 33 32 2E 64 6C 6C 00 00 00 00 KERNEL32.dll.... 00539DDC 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00539DEC 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00539DFC 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 在ArmInline填入相關訊息後點擊"Rebase IAT"按鈕,一會就修好了。 【脫殼,修復】 Nanomites保護似乎沒有出現,到這裡可以用lordpe脫殼了,然後打開ImpRec,選擇工作行程,OEP填入:00068B8A,自動搜索,獲得輸入表完全有效,修復。 修復完可以執行,刪除reloc,reloc1,vmp0,text1區段後重建程式,可以執行,到此結束。 脫殼後文件沒有次數限制了,但似乎仍有功能限制,是arm帶key的程式,無key脫了功能也不完整,鑒於大陸國產軟件,不討論為妙。 |
送花文章: 3,
|
向 psac 送花的會員:
|
cwvdavid (2007-08-20)
感謝您發表一篇好文章 |