淺談SVKP 1.3X SDK stolen code 的找回
淺談SVKP 1.3X SDK stolen code 的找回
【目 標】:Download Accelerator Plus v7.1
【工 具】:Olydbg1.1(diy版)
【任 務】:找回殼所抽的程式碼
【操作平臺】:WINDOWS 2000 ADV SP2
【作 者】:loveboom[DFCG][FCG]
【相關連結】: www.skycn.com(自己去那裡搜搜吧)
【簡要說明】:本來不是很想寫,只因這個軟體是我看到svkp1.3x抽程式碼最多的(足足抽了6A位元組),所以"厚著臉皮",灌上一貼,只寫了一下殼所抽程式碼的找回,不足或失誤之處,還請各位大蝦指點一二。建議如果你是新手,就先不要去試這樣的殼,因為有點難度,當然這並不是說我很厲害,其實我也很菜的。
【詳細過程】:
設定:忽略全部異常。隱藏你OD。
OD載入目標停在這裡:
00598000 > 60 PUSHAD ;停在這裡
00598001 E8 00000000 CALL DAP.00598006
00598006 5D POP EBP
00598007 81ED 06000000 SUB EBP,6
按f9一次,發生異常,異常位置:
0012E3B6 6285 20220000 BOUND EAX,QWORD PTR SS:[EBP+2220] ;這裡異常
0012E3BC EB 02 JMP SHORT 0012E3C0
0012E3BE 0FE88B D1EB02CD PSUBSB MM1,QWORD PTR DS:[EBX+CD02EBD1]
0012E3C5 208B C2EB02CD AND BYTE PTR DS:[EBX+CD02EBC2],CL
異常後在code段下f2斷點.
Memory map, item 13
Address=00401000
Size=000F0000 (983040.)
Owner=DAP 00400000
Section=
Contains=code
Type=Imag 01001002
Access=R
Initial access=RWE
下斷後,SHIFT+F9這樣來到了這裡.
0394F14F 8A06 MOV AL,BYTE PTR DS:[ESI]
0394F151 46 INC ESI
0394F152 47 INC EDI
0394F153 8843 0F MOV BYTE PTR DS:[EBX+F],AL
0394F156 8A46 FF MOV AL,BYTE PTR DS:[ESI-1]
0394F159 55 PUSH EBP
0394F15A E8 00000000 CALL 0394F15F
0394F15F 5D POP EBP
0394F160 81ED 0D470000 SUB EBP,470D
0394F166 8A8D 50030000 MOV CL,BYTE PTR SS:[EBP+350]
0394F16C 5D POP EBP
0394F16D 32C1 XOR AL,CL
0394F16F 8847 FF MOV BYTE PTR DS:[EDI-1],AL
0394F172 8BC5 MOV EAX,EBP
0394F174 4D DEC EBP
0394F175 85C0 TEST EAX,EAX
0394F177 ^ 75 A4 JNZ SHORT 0394F11D ;這裡跳回去迴圈解壓程式碼
0394F179 33C0 XOR EAX,EAX
0394F17B 5D POP EBP
0394F17C 5F POP EDI
0394F17D 5E POP ESI
0394F17E 5B POP EBX
0394F17F C2 1400 RETN 14 ;直接在這裡下F4
在0394f17f處下F4,因解壓要一定的時間,所以如果你的機子配置較低的話可能等的時間比較長。f4停下後,我們再次在code段下f2斷點,這裡來到了這裡:
039499AE 66:813E 4A43 CMP WORD PTR DS:[ESI],434A
039499B3 0F85 23010000 JNZ 03949ADC
039499B9 83C6 0A ADD ESI,0A
現在在12FFB0處下硬體訪問斷點(也就是hr 12ffb0),為什麼在這裡下呢,這個看官你自己想想吧,如果要在這裡下斷的原因也不知道的話,建議你先看一下基礎知識。
第一次斷這裡:
0012FC40 60 PUSHAD
0012FC41 E8 03000000 CALL 0012FC49
……
0012FC54 E8 01000000 CALL 0012FC5A ;第二次
0012FC59 E8 E8020000 CALL 0012FF46
0012FC5E 00CD ADD CH,CL
0012FC60 2083 04240B83 AND BYTE PTR DS:[EBX+830B2404],AL
……
0012FCFB E8 00000000 CALL 0012FD00 ;第三次
0012FD00 5D POP EBP
0012FD01 E8 02000000 CALL 0012FD08
第三次中斷後hd 12ffb0取消斷點。再下tc ebp==12ffc0(start esp value-4,謝謝tDasm),這樣在這裡斷下:
03AD0647 0AAF BB010424 OR CH,BYTE PTR DS:[EDI+240401BB]
03AD064D 5D POP EBP
03AD064E E9 A10A0000 JMP 03AD10F4 ;斷在這裡
現在先清掉run trace window裡的內容,並選擇log file,記錄到檔案。做完準備工作後,下tc eip<03000000,這樣到了fake oep處.
004D6214 90 NOP
004D6215 90 NOP
004D6216 E8 6183F5FF CALL DAP.0042E57C ;停在這裡
004D621B 391D 380E5400 CMP DWORD PTR DS:[540E38],EBX
004D6221 75 0C JNZ SHORT DAP.004D622F
004D6223 68 5E634D00 PUSH DAP.004D635E
向上看一下,暈倒,殼抽了這麼多的程式碼。要命呀,有點苦了。現在我們要開始分析程式碼了,
看看程式的"模樣",就知道它應該是用C寫的程式。所以現在要"聯想"一下C的oep的大概樣子,當然,其實是要分析程式碼得出殼所抽的程式碼。先靜態分析出輪廓。也因為這篇文章就是講怎麼找程式碼,所以個人認為應該詳細一點(所以把大部分的程式碼都copy過來),
03AD10F4 Main POP EAX ◆這裡典型的SVKP的程式碼,所以這裡應該是push ebp
03AD10F5 Main NOP◆因為一般C的開始處都不變,也就是說,第二句應該是mov ebp,esp
03AD10F6 Main PUSH ADEDF13D
03AD10FB Main PUSH EAX
03AD10FC Main MOV EAX,52120FAB ; EAX=52120FAB
03AD1101 Main ADD DWORD PTR SS:[ESP+4],EAX
03AD1105 Main POP EAX ; EAX=03AD05B3
03AD1106 Main ADD EAX,52120FAB ; EAX=55BF155E
03AD110B Main ADD EAX,52120FAB ; EAX=A7D12509
03AD1110 Main JMP 03AD195B
03AD195B Main PUSH EAX
03AD195C Main JMP 03AD0B7A
03AD0B7A Main MOV EAX,52120FAB ; EAX=52120FAB
03AD0B7F Main SUB DWORD PTR SS:[ESP],EAX
03AD0B82 Main JMP 03AD124F
03AD124F Main MOV EAX,DWORD PTR SS:[ESP] ; EAX=55BF155E
03AD1252 Main JMP 03AD1FAE
03AD1FAE Main MOV EAX,52120FAB ; EAX=52120FAB
03AD1FB3 Main SUB DWORD PTR SS:[ESP],EAX
03AD1FB6 Main JMP 03AD10A6
03AD10A6 Main MOV EAX,DWORD PTR SS:[ESP] ; EAX=03AD05B3
03AD10A9 Main PUSH ADEDF06C
03AD10AE Main PUSH EAX
03AD10AF Main MOV EAX,52120FAB ; EAX=52120FAB
03AD10B4 Main ADD DWORD PTR SS:[ESP+4],EAX
03AD10B8 Main JMP 03AD1CA5
03AD1CA5 Main POP EAX ; EAX=03AD05B3
03AD1CA6 Main JMP 03AD2175
03AD2175 Main POP EAX ; EAX=00000017
03AD2176 Main ADD DWORD PTR SS:[ESP+4],EAX
03AD217A Main POP
相關文章
- PESPIN
v0.7 stolen code 的找回2004-07-05
- 淺談SVKP 1.3X殼的輸入表修復――登錄檔醫生 V2.96 脫殼+破解2015-11-15
- 天翼之鏈2.46-stolen
code程式碼的找回2004-12-03
- 也談ASProtect 1.3之stolen code的修復2015-11-15
- 發兩個新版外掛的指令碼(SVKP 1.3X AND MOlebox
2.x),Enjoy!2015-11-15指令碼
- ACProtect1.23的stolen code處理2015-11-15
- ASProtect 1.3B Stolen code Finder2015-11-15
- Android SDK 開發經驗淺談2020-03-15Android
- Stolen Code Found script-->PESpin
v0.32015-11-15
- 淺談美顏演算法:美顏SDK的“背後”2022-02-18演算法
- Asprotect
v2.0 Stolen code的一次修復旅程2004-11-19
- 乾貨|淺談iOS端短影片SDK技術實現2019-12-20iOS
- [原創]尋找Asp1.2X的Stolen
code的另一種方法2004-07-11
- 淺淺談Redux2019-04-17Redux
- 在Xcode6中找回失去的模板2014-07-24XCode
- 淺談JavaScript中的this2018-03-07JavaScript
- 淺談DataSet 的用法2005-04-21
- 淺淺淺談JavaScript作用域2019-03-24JavaScript
- 淺談 WebRTC 的 Audio 在進入 Encoder 之前的處理流程2020-12-25Web
- Celery淺談2020-06-25
- 淺談flutter2019-11-01Flutter
- 淺談JMM2019-07-29
- 淺談反射2019-02-28反射
- 淺談mock2019-03-02Mock
- 淺談SYNPROXY2019-03-21
- 淺談Disruptor2019-03-04
- 淺談IHttpHandler2019-07-03HTTP
- 淺談 Promise2019-02-16Promise
- 淺談PWA2018-11-16
- 淺談vuex2018-08-01Vue
- 淺談JavaScript2020-11-20JavaScript
- 淺談RMQ2021-01-04MQ
- 淺談Zilliqa2018-02-15
- 淺談RxJava2018-02-01RxJava
- 淺談Nginx2018-05-26Nginx
- 淺談 JavaScriptCore2016-10-14JavaScript
- 淺談MVP2017-03-03MVP
- 淺談BitMap2017-03-12