淺談SVKP 1.3X SDK stolen code 的找回

看雪資料發表於2015-11-15

淺談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 

相關文章