Acprotect之完美解除安裝XP V9.15脫殼修復+偽破解篇祝賀FLY大俠
【脫文作者】 weiyi75[Dfcg]
【作者郵箱】 weiyi75@sohu.com
【作者主頁】 Dfcg官方大本營
【使用工具】 Peid0.91,Ollydbg1.10b(反Antidbg版),ImportREC1.42,,Freeres,ResScope,PEedit
【破解平臺】 Win2000/XP
【軟體名稱】 完美解除安裝XP V9.15
【下載地址】 天空軟體站
【軟體簡介】:軟體共有3個小程式,分別是:磁碟垃圾清理軟體、軟體安裝監視器、軟體解除安裝工具,是一套功能比較強大的安裝/解除安裝/清理工具,新版更加全面的系統監視,讓軟體安裝的一舉一動歷歷在目,二次清理技術,軟體解除安裝後將不留任何垃圾,磁碟垃圾清理的數量更多,軟體執行更加穩定。
【軟體大小】 4.64M
【加殼方式】 UltraProtect 1.x -> RISCO Software Inc.
【破解宣告】 我是一隻小菜鳥,偶得一點心得,願與大家分享。
【破解目的】 尋找Stolen Code具體內容,欺騙Acprotect完全解碼。
先用peid查殼,UltraProtect 1.x -> RISCO Software Inc.這個版本估計是用Acprotect1.10 Build123以上的版本加密的。此版本的Stolen Code隱藏更深,硬體斷點設定不當根本攔截不住Stolen Code,模擬跟蹤我的Win2000平臺5-15分鐘可以截獲Stolen Code,Xp平臺遇到無效指令或單步跟蹤陷阱。根據9.14版的除錯經驗
OD異常設定不忽略INT3異常,其餘全部忽略,載入程式,用外掛隱藏OD。
04AE000 > 60 pushad //加殼程式入口點,F9執行。
004AE001 FC cld
004AE002 48 dec eax
004AE003 66:81C2 2FAC add dx, 0AC2F
004AE008 50 push eax
004AE009 E8 01000000 call NetClean.004AE00F
004AE00E EA 5858668B F55>jmp far 50F5:8B665858
004AE015 E8 01000000 call NetClean.004AE01B
004AE01A EB 58 jmp short NetClean.004AE074
004AE01C 58 pop eax
004AE01D 87F2 xchg edx, esi
004AE01F E8 01000000 call NetClean.004AE025
004AE024 9A 83042406 C30>call far 0FC3:06240483
004AE02B 8801 mov byte ptr ds:[ecx], al
004AE02D 0000 add byte ptr ds:[eax], al
004AE02F 0048 E8 add byte ptr ds:[eax-18], cl
004AE032 0100 add dword ptr ds:[eax], eax
004AE034 0000 add byte ptr ds:[eax], al
004AE036 - 76 83 jbe short NetClean.004ADFBB
...........................................................
INT3中斷
004BCB23 90 nop //典型Acprotect小於1.20版最後一次異常。
004BCB24 64:67:8F06 0000 pop dword ptr fs:[0]
004BCB2A 83C4 04 add esp, 4
004BCB2D 60 pushad
004BCB2E E8 00000000 call NetClean.004BCB33
004BCB33 5E pop esi
004BCB34 83EE 06 sub esi, 6
004BCB37 B9 5B000000 mov ecx, 5B
004BCB3C 29CE sub esi, ecx
004BCB3E BA F631BE1F mov edx, 1FBE31F6
004BCB43 C1E9 02 shr ecx, 2
004BCB46 83E9 02 sub ecx, 2
004BCB49 83F9 00 cmp ecx, 0
004BCB4C 7C 1A jl short NetClean.004BCB68
004BCB4E 8B048E mov eax, dword ptr ds:[esi+ecx*4]
........................................................................
堆疊內容
0012FF58 0012FFE0 指標到下一個 SEH 記錄
0012FF5C 004BCAF0 SE 控制程式碼 //這裡同原來不同,為了跟蹤到Stolen Code,選擇合適的地點跟蹤很關鍵,在跟蹤N個Acprotect程式後,找到了關鍵點,這些沒什麼技術可言,只是不斷的實際,無數次的失敗總結。右鍵對004BCAF0轉存中跟隨,下記憶體訪問斷點。
0012FF60 00000035
........................................................................
004BCAF0 8B4424 04 mov eax, dword ptr ss:[esp+4] //下斷點Shift+F9中斷1
004BCAF4 8B4C24 0C mov ecx, dword ptr ss:[esp+C]
004BCAF8 FF81 B8000000 inc dword ptr ds:[ecx+B8]
004BCAFE 8B00 mov eax, dword ptr ds:[eax]
004BCB00 2D 03000080 sub eax, 80000003
004BCB05 75 12 jnz short NetClean.004BCB19
004BCB07 90 nop
004BCB08 90 nop
004BCB09 90 nop
004BCB0A 90 nop
004BCB0B 33C0 xor eax, eax
004BCB0D 8941 04 mov dword ptr ds:[ecx+4], eax
004BCB10 8941 08 mov dword ptr ds:[ecx+8], eax
004BCB13 8941 0C mov dword ptr ds:[ecx+C], eax
004BCB16 8941 10 mov dword ptr ds:[ecx+10], eax
004BCB19 C3 retn
........................................................................
004BCB4E 8B048E mov eax, dword ptr ds:[esi+ecx*4] //下斷點Shift+F9中斷2,清除記憶體斷點
004BCB51 8B5C8E 04 mov ebx, dword ptr ds:[esi+ecx*4+4]
004BCB55 03C3 add eax, ebx
004BCB57 C1C0 13 rol eax, 13
004BCB5A 2BC2 sub eax, edx
004BCB5C 81EA DA4777C0 sub edx, C07747DA
004BCB62 89048E mov dword ptr ds:[esi+ecx*4], eax
004BCB65 49 dec ecx
004BCB66 ^ EB E1 jmp short NetClean.004BCB49
004BCB68 61 popad
004BCB69 61 popad
004BCB6A C3 retn //F4直接下來,這時是模擬跟蹤的時候了。
.......................................................................
命令列下 tc ebp==12fff0
為什麼要設定這個命令,先前已說明這是Acprotect的死穴之一,對準它點吧。
004CBB31 55 push ebp
004CBB32 8BEC mov ebp, esp
004CBB34 6A FF push -1
004CBB36 90 nop
004CBB37 60 pushad
004CBB38 60 pushad
004CBB39 E8 00000000 call NetClean.004CBB3E
Ctrl+F11跟蹤進入每個Call,1分鐘左右。
004CBB31 55 push ebp //Stolen Code
004CBB32 8BEC mov ebp, esp //Stolen Code //一切盡在掌握
004CBB34 6A FF push -1 //Stolen Code
004CBB36 90 nop //注意它填充了一個nop,所以ImportREC修復時有點.....
004CBB37 60 pushad
004CBB38 60 pushad
004CBB39 E8 00000000 call NetClean.004CBB3E
Btw:只有用INT3中斷,才能順利截獲這個版本的Stolen Code,如果你用記憶體異常Tc ebp==12fff0,你會踏進它早已佈下的單步異常陷阱。當然硬體斷點12fff0也無法斷下,因為你試圖中斷時12fff0已經寫入資料,中斷失敗
我們來看看硬體斷點。
004BCB4E 8B048E mov eax, dword ptr ds:[esi+ecx*4]
004BCB51 8B5C8E 04 mov ebx, dword ptr ds:[esi+ecx*4+4]
004BCB55 03C3 add eax, ebx
004BCB57 C1C0 13 rol eax, 13
004BCB5A 2BC2 sub eax, edx
004BCB5C 81EA DA4777C0 sub edx, C07747DA
004BCB62 89048E mov dword ptr ds:[esi+ecx*4], eax
004BCB65 49 dec ecx
004BCB66 ^ EB E1 jmp short NetClean.004BCB49
004BCB68 61 popad
004BCB69 61 popad
004BCB6A C3 retn //同樣F4直接下來
命令列下斷點
d 12ffc0
0012FFC0 00 00 00 00 C7 14 E6 77 ....?w
0012FFC8 E6 17 F5 77 78 17 F5 77 ?wx w
0012FFD0 00 F0 FD 7F F0 7C 11 F7 .瘕|
0012FFF0 00 00 00 00 00 00 00 00 ........ 注意這時12ffc0還沒有寫入資料。
0012FFF8 00 E0 4A 00 00 00 00 00 .J.....
我們對準0012ffc0下一個硬體訪問dword斷點,F9執行,硬體中斷1
如果你對0012ffc0下一個硬體寫入dword斷點,F9執行,你就會硬體中斷2
004CBB31 55 push ebp //Stolen Code //硬體中斷1
004CBB32 8BEC mov ebp, esp //Stolen Code //一切盡在掌握 硬體中斷2
004CBB34 6A FF push -1 //Stolen Code
004CBB36 90 nop
004CBB37 60 pushad
004CBB38 60 pushad
004CBB39 E8 00000000 call NetClean.004CBB3E
........................................................................
這個程式抽了5個位元組。
ALT+M 開啟記憶體映象斷點,對準它的第二個死穴點。
記憶體映象,專案 26
地址=00401000 //Code段下記憶體訪問斷點
大小=00047000 (290816.)
Owner=NetClean 00400000
區段=.text
包含=code
型別=Imag 01001002
訪問=R
初始訪問=RWE
F9執行到達
004432D9 68 D8B24400 push NetClean.0044B2D8
004432DE 68 94344400 push NetClean.00443494 //臨時Oep,捲軸向上看,如何判斷抽掉多少位元組,用捲軸是程式碼會混亂,右鍵分析程式碼,如我現在調整的樣式,標籤1
004432E3 64:A1 00000000 mov eax, dword ptr fs:[0]
004432E9 50 push eax
004432EA 64:8925 0000000>mov dword ptr fs:[0], esp
004432F1 83EC 68 sub esp, 68
004432F4 53 push ebx
004432F5 56 push esi
004432F6 57 push edi
004432F7 8965 E8 mov dword ptr ss:[ebp-18], esp
004432FA 33DB xor ebx, ebx
004432FC 895D FC mov dword ptr ss:[ebp-4], ebx
004432FF 6A 02 push 2
00443301 FF15 70874400 call dword ptr ds:[448770] ; MSVCRT.__set_app_type
標籤1
004432D1 . C2 1000 retn 10
004432D4 60 db 60 //確定真Oep為004432d4 ; CHAR '`'
004432D5 CA db CA
004432D6 B5 db B5
004432D7 . D4 11 aam 11
004432D9 . 68 D8B24400 push NetClean.0044B2D8
004432DE . 68 94344400 push NetClean.00443494 ; jmp to MSVCRT._except_handler3; SE handler installation
004432E3 . 64:A1 0000000>mov eax, dword ptr fs:[0]
004432E9 . 50 push eax
004432EA . 64:8925 00000>mov dword ptr fs:[0], esp
004432F1 . 83EC 68 sub esp, 68
004432F4 . 53 push ebx
004432F5 . 56 push esi
004432F6 . 57 push edi
004432F7 . 8965 E8 mov dword ptr ss:[ebp-18], esp
004432FA . 33DB xor ebx, ebx
004432FC . 895D FC mov dword ptr ss:[ebp-4], ebx
004432FF . 6A 02 push 2
00443301 . FF15 70874400 call dword ptr ds:[448770] ; MSVCRT.__set_app_type
........................................................................
OD直接修復找到的5個位元組。
004432D4 >/$ 55 push ebp //用Od外掛修正入口為432D4直接脫殼吧,重建輸入表的勾去掉
004432D5 |. 8BEC mov ebp, esp
004432D7 |. 6A FF push -1
004432D9 |. 68 D8B24400 push Unpack_.0044B2D8
004432DE |. 68 94344400 push <jmp.&msvcrt._except_handler3> ; SE handler installation
004432E3 |. 64:A1 0000000>mov eax, dword ptr fs:[0]
004432E9 |. 50 push eax
004432EA |. 64:8925 00000>mov dword ptr fs:[0], esp
004432F1 |. 83EC 68 sub esp, 68
004432F4 |. 53 push ebx
004432F5 |. 56 push esi
004432F6 |. 57 push edi
004432F7 |. 8965 E8 mov dword ptr ss:[ebp-18], esp
004432FA |. 33DB xor ebx, ebx
004432FC |. 895D FC mov dword ptr ss:[ebp-4], ebx
004432FF |. 6A 02 push 2
00443301 |. FF15 70874400 call dword ptr ds:[<&msvcrt.__set_app_ty>; MSVCRT.__set_app_type
........................................................................
修復IAT必須關閉OD單獨開加殼程式修復,不然ImportREC停止響應,最後用ImportREC Oep填432D3,跟蹤等級三輕鬆修復,有10個指標提示無法修復,你可以驗證一下,經過驗證全部是垃圾指標,通常ImportREC可全部修復指標,如有沒有一般都是垃圾,拿剪刀全部Cut掉,Oep改回為432D4修復後無法執行,尋找出錯原因。
尋找出錯原因。
004431C4 |. 68 00404500 PUSH 2_.00454000
004431C9 |. E8 DC000000 CALL <JMP.&msvcrt._initterm> //這個Call可能是新版Acprotect的解碼技術,進這個Call裡面,迴圈解碼,沒解完程式就崩潰。
004431CE |. 83C4 24 ADD ESP,24 //這裡類似程式碼,我沒有再次跟蹤。
其實本版本Acprotect嵌有Oep處程式碼檢驗程式,發現Oep處程式碼被替換,立即拒絕解碼,你失去了關鍵的程式碼當然程式無法執行,還要承認N次錯誤確定按鈕。
004CBB31 55 push ebp //Stolen Code
004CBB32 8BEC mov ebp, esp //Stolen Code //一切盡在掌握
004CBB34 6A FF push -1 //Stolen Code
我們已經掌握。
004432D9 . 68 D8B24400 push NetClean.0044B2D8 //臨時Oep也知道。
現在做什麼,讓程式認為你沒有脫殼,將perplex段裡面有用的內容全部解碼。
方法
push ebp //Stolen Code
mov ebp, esp //Stolen Code //一切盡在掌握
push -1 //Stolen Code
jmp 004432D9
Od載入脫殼修復後的程式,Ctrl+G 004AE000
004AE000 60 pushad //4AE000是原來殼的入口點,狸貓換太子,將Oep入口程式碼複製到這裡。
004AE001 FC cld
004AE002 48 dec eax
004AE003 66:81C2 2FAC add dx, 0AC2F
004AE008 50 push eax
004AE009 E8 01000000 call Unpack_.004AE00F
004AE00E EA 5858668B F55>jmp far 50F5:8B665858
004AE015 E8 01000000 call Unpack_.004AE01B
004AE01A EB 58 jmp short Unpack_.004AE074
004AE01C 58 pop eax
004AE01D 87F2 xchg edx, esi
004AE01F E8 01000000 call Unpack_.004AE025
004AE024 9A 83042406 C30>call far 0FC3:06240483
004AE02B 8801 mov byte ptr ds:[ecx], al
004AE02D 0000 add byte ptr ds:[eax], al
004AE02F 0048 E8 add byte ptr ds:[eax-18], cl
004AE032 0100 add dword ptr ds:[eax], eax
004AE034 0000 add byte ptr ds:[eax], al
004AE036 - 76 83 jbe short Unpack_.004ADFBB
.............................................................
004AE000 55 push ebp
004AE001 8BEC mov ebp, esp
004AE003 6A FF push -1
004AE005 - E9 CF52F9FF jmp Unpack_.004432D9
004AE00A 90 nop
004AE00B 90 nop //注意保持程式碼完整,填入4個Nop
004AE00C 90 nop
004AE00D 90 nop
004AE00E EA 5858668B F55>jmp far 50F5:8B665858
004AE015 E8 01000000 call Unpack_.004AE01B
004AE01A EB 58 jmp short Unpack_.004AE074
004AE01C 58 pop eax
004AE01D 87F2 xchg edx, esi
004AE01F E8 01000000 call Unpack_.004AE025
004AE024 9A 83042406 C30>call far 0FC3:06240483
004AE02B 8801 mov byte ptr ds:[ecx], al
004AE02D 0000 add byte ptr ds:[eax], al
004AE02F 0048 E8 add byte ptr ds:[eax-18], cl
004AE032 0100 add dword ptr ds:[eax], eax
004AE034 0000 add byte ptr ds:[eax], al
.........................................................
將替換的程式碼複製到程式中,另存為一個檔案,用PEedit修正入口為AC000正常執行。
完美解除安裝XP很久已經就是DEMO版,破解基本沒希望,針對C語言資源容易修改的特點。用ResScope修改主介面102對話方塊資源,將本軟體授權給: NOP掉。合作伙伴: 修改為 本軟體授權給David,儲存時錯誤,看來資源沒完全釋放啊,再用Freeres釋放資源,可以反彙編,必盡這只是模擬脫殼。繼續完成修改過程,看勝利截圖,聊博一笑。
【破解總結】發現C語言的Acprotect的殼採用了Stolen Code,動態解碼,用Acprotect保護的它人沒加上RSAKEY就有強勁的保護,新版Acprotect異常設定應選INT3中斷,模擬跟蹤或硬體斷點截獲Stolen Code。
--------------------------------------------------------------------------------
【版權宣告】 本文純屬技術交流, 轉載請註明作者並保持文章的完整, 謝謝!
David:
Oep改回為432D4修復後無法執行,尋找出錯原因。
尋找出錯原因。
004431C4 |. 68 00404500 PUSH 2_.00454000
004431C9 |. E8 DC000000 CALL <JMP.&msvcrt._initterm> //這個Call可能是新版Acprotect的解碼技術,進這個Call裡面,迴圈解碼,沒解完程式就崩潰。
004431CE |. 83C4 24 ADD ESP,24 //這裡類似程式碼,我沒有再次跟蹤。
其實本版本Acprotect嵌有Oep處程式碼檢驗程式,發現Oep處程式碼被替換,立即拒絕解碼,你失去了關鍵的程式碼當然程式無法執行,還要承認N次錯誤確定按鈕。
我測試了一下跨平臺,一點問題都沒有,因為部分程式碼臨時解壓,估計跨平臺能力不錯,這個辦法可以反彙編程式,可以修改資源,也是個不錯的方法,Acprotect真正可怕的是用RSAKEY嵌入校驗解碼,無KEY就無法完全解碼,最多是走DEMO路線。
Dfcg的YOCK有更好的修復方法,你可以問問他。
相關文章
- Acprotect之完美解除安裝XP V9.15脫殼修復 (狗尾續貂)2015-11-15
- 模擬跟蹤+修復方法之ACProtect脫殼――完美解除安裝XP V9.122015-11-15
- Asprotect1.23 Rc4 之SynchroMagic脫殼修復+破解2015-11-15
- 偽 SVK Protector 1.32 脫殼+修復――SVK Protector
DEMO 1.32 主程式2015-11-15
- ASProtect 1.23RC4之System Cleaner
4.91d脫殼修復and破解2015-11-15
- ACProtect 1.21專業版主程式的脫殼2015-11-15
- 老妖的 C32Asm V0.4.12 脫殼+修復+破解2015-11-15ASM
- Blaze Media Pro5.05脫殼+基本修復CC(int3)+破解2015-11-15
- 完美解除安裝7.00版破解 (7千字)2002-03-18
- 淺談DBPE2.33脫殼修復2015-11-15
- Krypton
0.5加殼程式脫殼及輸入表修復記2004-10-06
- 淺談SVKP 1.3X殼的輸入表修復――登錄檔醫生 V2.96 脫殼+破解2015-11-15
- 以殼解殼--SourceRescuer脫殼手記破解分析2004-11-16
- HTMLZip脫殼後的Import Table的修復 (750字)2001-02-10HTMLImport
- 完美解除安裝 V7.02002-12-11
- MySQL Manager 2.8.0.1脫殼破解手記破解分析2004-11-03MySql
- Mac如何修復“無法解除安裝磁碟”錯誤2021-11-08Mac
- 用dillodumper2.5脫armdillo加殼的XX軟體在xp下的IAT修復
(7千字)2015-11-15
- 較完善的舊版Acprotect1.0x-1.2x脫殼指令碼2004-12-20指令碼
- ASProtect V1.2脫殼――Asterisk Password
Recovery XP2015-11-15AST
- ORACLE 11G完美解除安裝2012-09-10Oracle
- ASProtect
1.23RC4 以殼解殼+暗樁修復+解除自校驗+破解――ArtCursors V3.99B32004-06-16
- 幻影 V2.33 脫殼+修復――dbpe.exe主程式2015-11-15
- windows xp解除安裝oracle 10g2014-01-05WindowsOracle 10g
- 用OD對Aspr加殼程式的手動脫殼及修復 (7千字)2015-11-15
- 祝賀Guice拿了Jolt Award2008-03-26GUI
- “天音怒放”手動脫殼及破解2015-11-15
- 菜鳥脫 UltraFXP 0.9941 殼( SVKP )+ 破解2015-11-15
- 另類PEtite V2.2 脫殼+修復+破解――英漢漢英雙向學習詞典
V1.02015-11-15
- ORACLE 9i完全完美解除安裝2012-09-10Oracle
- 夢幻Ollydbg ―― 淺談 ACProtect V1.09 Pro
的反跟蹤And脫殼2015-11-15
- jdpack的脫殼及破解 (5千字)2002-06-25
- iOS逆向學習之五(加殼?脫殼?)2019-10-10iOS
- 某殼分析+修復(二)2018-05-14
- 十、iOS逆向之《越獄砸殼/ipa脫殼》2021-03-18iOS
- PSU之解除安裝與安裝2016-01-06
- 打造可隨意安裝的完美Windows XP映象(轉)2007-08-11Windows
- 用Armadillo標準加殼的程式的脫殼和引入表修復方案---OLLYDBG (8千字)2015-11-15