Acprotect之完美解除安裝XP V9.15脫殼修復 (狗尾續貂)
感謝 DFCG 和 看雪 的大俠.
我在春節前還是一個脫殼菜鳥,
連 UPX 的手動脫殼也不會.
春節的時候我看了DFCG的 13 章手動脫殼入門
11章手動脫殼提高, 總算有點進步了.
謝謝David大俠的貂:
http://bbs2.pediy.com/viewtopic.php?t=4448
// 用 OD 跟蹤脫殼後OEP=432D4的程式, 執行到 443399 時出錯
00443389 FF15 88874400 CALL DWORD PTR DS:[<&msvcrt.__getmainargs>] ; MSVCRT.__getmainargs
0044338F 68 80404500 PUSH net.00454080 ; // End Address
00443394 68 00404500 PUSH net.00454000 ; // Start Address
00443399 E8 DC000000 CALL <JMP.&msvcrt._initterm> ; // 解密程式碼
// F7 跟進去看看, 注意 454000,454080 這兩個引數
// d 454000
// 原來都是函式入口
00454000 00 00 00 00 51 41 44 00 10 11 40 00 60 11 40 00 ....QAD.@.`@.
00454010 E0 12 40 00 10 14 40 00 70 93 40 00 C0 93 40 00 ?@.@.p@.@.
00454020 10 94 40 00 60 94 40 00 00 D0 40 00 30 19 41 00 @.`@..@.0A.
00454030 70 19 41 00 F0 1F 41 00 30 20 41 00 70 20 41 00 pA.?A.0 A.p A.
00454040 B0 20 41 00 F0 20 41 00 30 21 41 00 70 21 41 00 ?A.?A.0!A.p!A.
00454050 20 22 41 00 50 B8 41 00 D0 C7 41 00 F0 C7 41 00 "A.PA.星A.鵯A.
00454060 10 C8 41 00 30 C8 41 00 50 C8 41 00 70 C8 41 00 A.0A.PA.pA.
00454070 90 C8 41 00 F0 2F 42 00 36 30 42 00 6B 72 42 00 A.?B.60B.krB.
00454080 00 00 00 00
//msvcrt._initterm
7800119B > 56 PUSH ESI
7800119C 8B7424 08 MOV ESI,DWORD PTR SS:[ESP+8] ; // 取出 454000
780011A0 EB 03 JMP SHORT MSVCRT.780011A5
780011A2 83C6 04 ADD ESI,4 ; // 下一個
780011A5 3B7424 0C CMP ESI,DWORD PTR SS:[ESP+C] ; // >454080 嗎?
780011A9 73 0A JNB SHORT MSVCRT.780011B5 ; // 是則結束
780011AB 8B06 MOV EAX,DWORD PTR DS:[ESI] ; // 取出一個函式入口
780011AD 85C0 TEST EAX,EAX
780011AF ^ 74 F1 JE SHORT MSVCRT.780011A2
780011B1 FFD0 CALL EAX ; // 執行使用者的函式
780011B3 ^ EB ED JMP SHORT MSVCRT.780011A2
780011B5 5E POP ESI
780011B6 C3 RETN
// bp 780011B1, F9 執行
// 當 EAX = 00423036 時出錯
// 從新來過
// bp 00423036, F9 斷下,
// 接下來一大段花指令, SMC, 注意迴圈,
// 使用者指令 F7 過, 系統函式 F8 過, 迴圈 F4 過
00423036 E8 05000000 CALL net.00423040
0042303B E9 18000000 JMP net.00423058
00423040 55 PUSH EBP
00423041 8BEC MOV EBP,ESP
00423043 51 PUSH ECX
00423044 8D45 FF LEA EAX,DWORD PTR SS:[EBP-1]
00423047 B9 00834500 MOV ECX,net.00458300
.
.
.
.
00423A9A E8 47F10100 CALL <JMP.&mfc42.#823_??2@YAPAXI@Z>
00423A9F 8970 04 MOV DWORD PTR DS:[EAX+4],ESI
00423AA2 8958 14 MOV DWORD PTR DS:[EAX+14],EBX
00423AA5 8947 04 MOV DWORD PTR DS:[EDI+4],EAX
00423AA8 E8 30B60800 CALL net.004AF0DD ; // Call 004AF0DD, F7跟進
00423AAD 8B47 04 MOV EAX,DWORD PTR DS:[EDI+4] ; // 返回到 00423AAD, 下面有用
.
.
.
.
004AF0DD
.
.
004AF25E /E9 0B000000 JMP net.004AF26E
004AF263 |79 03 JNS SHORT net.004AF268
004AF265 |66:D3EA SHR DX,CL
004AF268 |81F5 5D54168F XOR EBP,8F16545D
004AF26E 4B DEC EBX
004AF26F ^ 0F85 7FFFFFFF JNZ net.004AF1F4 ; // 一個望回跳的迴圈
004AF275 50 PUSH EAX ; // F4 到這裡
004AF27D 58 POP EAX ; net.004AF348
004AF27E E9 05000000 JMP net.004AF288
004AF283 4A DEC EDX
004AF284 76 02 JBE SHORT net.004AF288
004AF286 13D7 ADC EDX,EDI
004AF288 E8 7EBE0000 CALL net.004BB10B ; // F8 過
004AF28D 8B4424 20 MOV EAX,DWORD PTR SS:[ESP+20] ; // EAX = 00423AAD, 返回地址
004AF291 33C9 XOR ECX,ECX
004AF293 8B9C8D 8D234000 MOV EBX,DWORD PTR SS:[EBP+ECX*4+40238D] ; // 4AF38D 開始放返回地址的RVA
004AF29A 039D 55CF4000 ADD EBX,DWORD PTR SS:[EBP+40CF55] ; // RVA + 400000
004AF2A0 3BC3 CMP EAX,EBX
004AF2A2 74 07 JE SHORT net.004AF2AB
004AF2A4 90 NOP
004AF2A5 90 NOP
004AF2A6 90 NOP
004AF2A7 90 NOP
004AF2A8 41 INC ECX ; // 不匹配, 下一個
004AF2A9 ^ EB E8 JMP SHORT net.004AF293
004AF2AB C7848D 8D234000>MOV DWORD PTR SS:[EBP+ECX*4+40238D],0 ; // 找到了, ECX=49
004AF2B6 8DB5 6D524000 LEA ESI,DWORD PTR SS:[EBP+40526D] ; // 4B226D 放加密後的程式碼
004AF2BC B8 0A000000 MOV EAX,0A ; // 加密程式碼 10 位元組一段
004AF2C1 F7E1 MUL ECX
004AF2C3 03F0 ADD ESI,EAX ; // 對應該返回地址的加密程式碼
004AF2C5 51 PUSH ECX
004AF2C6 56 PUSH ESI ; // ESI=4B226D+A*49=4B2547
004AF2C7 8A85 CD204000 MOV AL,BYTE PTR SS:[EBP+4020CD]
004AF2CD 0AC0 OR AL,AL
004AF2CF 75 28 JNZ SHORT net.004AF2F9
004AF2D1 90 NOP
004AF2D2 90 NOP
004AF2D3 90 NOP
004AF2D4 90 NOP
004AF2D5 8B85 55CF4000 MOV EAX,DWORD PTR SS:[EBP+40CF55] ; // 400000
004AF2DB 8B70 3C MOV ESI,DWORD PTR DS:[EAX+3C] ; // 40003C, PE頭
004AF2DE 03B5 55CF4000 ADD ESI,DWORD PTR SS:[EBP+40CF55] ; // 400100
004AF2E4 83C6 28 ADD ESI,28 ; // 400128, OEP
004AF2E7 AD LODS DWORD PTR DS:[ESI] ; // OEP值
004AF2E8 8AD8 MOV BL,AL
004AF2EA 02DC ADD BL,AH
004AF2EC C1E8 10 SHR EAX,10
004AF2EF 02D8 ADD BL,AL
004AF2F1 02DC ADD BL,AH ; // OEP 四位元組相加
004AF2F3 889D CD204000 MOV BYTE PTR SS:[EBP+4020CD],BL ; // 放到 4AF0CD
004AF2F9 8A9D CD204000 MOV BL,BYTE PTR SS:[EBP+4020CD] ; // 也到 BL
004AF2FF B9 0A000000 MOV ECX,0A
004AF304 5E POP ESI
004AF305 8BFE MOV EDI,ESI
004AF307 AC LODS BYTE PTR DS:[ESI]
004AF308 32C3 XOR AL,BL ; // 加密程式碼 XOR BL
004AF30A AA STOS BYTE PTR ES:[EDI] ; // 得到明碼
004AF30B ^ E2 FA LOOPD SHORT net.004AF307
004AF30D 83EE 0A SUB ESI,0A
004AF310 59 POP ECX
004AF311 56 PUSH ESI
004AF312 8B7424 24 MOV ESI,DWORD PTR SS:[ESP+24]
004AF316 83EE 04 SUB ESI,4
004AF319 AD LODS DWORD PTR DS:[ESI] ; // 423AA8處函式入口 4AF0DD
004AF31A 50 PUSH EAX
004AF31B BB 6D524000 MOV EBX,net.0040526D
004AF320 81EB DD204000 SUB EBX,net.004020DD
004AF326 B8 0A000000 MOV EAX,0A
004AF32B F7E1 MUL ECX
004AF32D 03D8 ADD EBX,EAX
004AF32F 58 POP EAX
004AF330 03C3 ADD EAX,EBX
004AF332 8946 FC MOV DWORD PTR DS:[ESI-4],EAX ; // 修改423AA8 處函式入口為 4B2547
004AF335 5E POP ESI ; net.004B2547
004AF356 83EE 06 SUB ESI,6
.
.
// 調整Stack
// SMC
.
.
004AF38A 61 POPAD
004AF38B 61 POPAD
004AF38C C3 RETN ; // 返回到4B2547執行
// 從上面的過程可以看到, 如果OEP變了, 那麼加密程式碼解密出來就不對
相關文章
- Acprotect之完美解除安裝XP V9.15脫殼修復+偽破解篇祝賀FLY大俠2015-11-15
- 模擬跟蹤+修復方法之ACProtect脫殼――完美解除安裝XP V9.122015-11-15
- ACProtect 1.21專業版主程式的脫殼2015-11-15
- 淺談DBPE2.33脫殼修復2015-11-15
- Asprotect1.23 Rc4 之SynchroMagic脫殼修復+破解2015-11-15
- Krypton
0.5加殼程式脫殼及輸入表修復記2004-10-06
- HTMLZip脫殼後的Import Table的修復 (750字)2001-02-10HTMLImport
- 完美解除安裝 V7.02002-12-11
- ASProtect 1.23RC4之System Cleaner
4.91d脫殼修復and破解2015-11-15
- 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
- 幻影 V2.33 脫殼+修復――dbpe.exe主程式2015-11-15
- 偽 SVK Protector 1.32 脫殼+修復――SVK Protector
DEMO 1.32 主程式2015-11-15
- windows xp解除安裝oracle 10g2014-01-05WindowsOracle 10g
- 用OD對Aspr加殼程式的手動脫殼及修復 (7千字)2015-11-15
- 老妖的 C32Asm V0.4.12 脫殼+修復+破解2015-11-15ASM
- Blaze Media Pro5.05脫殼+基本修復CC(int3)+破解2015-11-15
- ORACLE 9i完全完美解除安裝2012-09-10Oracle
- 夢幻Ollydbg ―― 淺談 ACProtect V1.09 Pro
的反跟蹤And脫殼2015-11-15
- iOS逆向學習之五(加殼?脫殼?)2019-10-10iOS
- 某殼分析+修復(二)2018-05-14
- 十、iOS逆向之《越獄砸殼/ipa脫殼》2021-03-18iOS
- PSU之解除安裝與安裝2016-01-06
- 完美解除安裝7.00版破解 (7千字)2002-03-18
- 打造可隨意安裝的完美Windows XP映象(轉)2007-08-11Windows
- 用Armadillo標準加殼的程式的脫殼和引入表修復方案---OLLYDBG (8千字)2015-11-15
- 淺談SVKP 1.3X殼的輸入表修復――登錄檔醫生 V2.96 脫殼+破解2015-11-15
- VideoSplitter V2.31 脫殼去暗樁+完美爆破2015-11-15IDE
- Windows XP 自行修復故障(轉)2007-08-11Windows
- 殼的工作原理脫殼2013-04-10
- 再次進階Acprotect1.09的殼2015-11-15
- 睡不著,帖一個:aspr程式的脫殼修復體會
(8千字)2015-11-15
- XP下完全解除安裝windwos messenger 4.7的方法(轉)2007-08-11Messenger
- 壹次脫殼法――Armadillo 雙程式標準殼 快速脫殼2015-11-15
- VBExplorer.exe脫殼教程
附脫殼指令碼2015-11-15指令碼