PESPIN v0.7 stolen code 的找回

看雪資料發表於2004-07-05

【目    標】: 自己隨便寫的一個(用Pespinv0.7加的殼)
【工    具】:Olydbg1.1
【任    務】:說說它的殼的Stolen code的找回
【操作平臺】:WINXP pro sp1 
【作    者】:loveboom[DFCG][FCG]
【相關連結】: 去dfcg裡下吧,因一不小心加了兩張圖進去,這裡又不上讓這麼大的傢伙,經過二哥的意見,點後面的下載http://www.chinadfcg.com/attachment.php?aid=4008 
【簡要說明】:今天和二哥聊了這麼久,二哥都寫了這麼多東西,我不也不好意思,所以就湊著寫一篇吧
【詳細過程】:
    本來想寫個完整的脫文,沒想到自己水平太菜,所以只搞出這麼外東東出來.這個殼的stolen code其實很好找的,新版比舊版在抽程式碼和iat已經改進了很多,iai也像aspr差不多,把部分iat轉到
殼中,因水平有限,對那些進殼的IAT我也不知道怎麼弄,還請高手指點一二,謝謝!
開始了,我們先準備一下,我是用flyfancy那個去花指令外掛,如果你的是hoto寫的外掛的話,可能要改一下,不過這個應該
沒什麼問題的吧.
在指令碼配置檔案里加上如下程式碼:
在junktype里加上,pespin
像這樣子
JunkType=Common,TELock,UltraProtect,Custom,PEsPin
再新增這樣的東東:)
PatList_PEsPin=_Pes1,_jmp01,_call0111,_PESPIN1,_Pespin_jne01,_pESPIN_JMP01
我把原有的jmp01改成了這樣:
[CODE_jmp01]

S = EB01??
R = EB0190
在檔案後面加上:
[CODE_Pes1]
;      jmp label1
;      
S =EB04??EB04??EBFB??
R =909090909090909090
[CODE_call0111]
;      call label1
;      db  _junkcode

S =E801000000??
R =E80100000090

[CODE_PESPIN1]

S =E803000000EB04??EBFB??
R =E803000000909090909090

[CODE_Pespin_jne01]

S =7501??
R =909090

[CODE_Pespin_JMP01]
S =EB04??EB04??EBFB??
R =909090909090909090
各位老大應該看得懂上面的吧,可能有點亂,但懶得整理了:D
寫好這些後就用OD來開工了,設定一下OD:alt+o除Invalid or privileged instruction這項外的其它都打鉤.
載入後隱一下身,要不殼會發現你的OD的。操作好後看看這裡吧.
載入後就有一個異常,還沒看到程式碼呢,按shift+f9一次,這樣就到了入口處
005F6087 > /EB 01           JMP SHORT Project1.005F608A        ;入口
005F6089   |68 60E80000     PUSH 0E860
按f9一次,這樣會出現異常:
005F7E9C    FB              STI                            ;F9一次後,這裡異常了
005F7E9D    FFFF            ???                                      ; Unknown command
......
異常後按兩次shift+f9看到很多???哦
00400201    FFFF            ???                                      ; Unknown command
00400203    FFFF            ???                                      ; Unknown command
00400205    FFFF            ???                                      ; Unknown command
00400207    FFFF            ???                                      ; Unknown command
看到這些資訊後,下斷bp LoadLibraryA,然後按shift+f9,到系統了吧:
77E5D961 >  837C24 04 00    CMP DWORD PTR SS:[ESP+4],0        ;斷了後,取消斷點
77E5D966    53              PUSH EBX
取消這個斷點,然後alt+f9執行到返回到程式的地盤:
005F6E0E    85C0            TEST EAX,EAX                             ; kernel32.77E40000
005F6E10    0F84 2F070000   JE Project1.005F7545
返回按CTRL+F查詢命令'OR [EDX],0,很近的,其實一下就看到的
005F6E89    830A 00         OR DWORD PTR DS:[EDX],0                ;這裡就是我們要找的
005F6E8C    0F84 EF000000   JE Project1.005F6F81
005F6E92    8B02            MOV EAX,DWORD PTR DS:[EDX]
找到後,按F4直接到5F6E89處,如果是VB或DELPHI的檔案的話,那個edx一般就是iat的開始處的VA,
然後ctrl+f9執行到ret處:
005F6EB1    012C24          ADD DWORD PTR SS:[ESP],EBP
005F6EB4    810424 B4466F06 ADD DWORD PTR SS:[ESP],66F46B4
005F6EBB    68 286F630F     PUSH 0F636F28
005F6EC0    812C24 9643230F SUB DWORD PTR SS:[ESP],0F234396
005F6EC7    012C24          ADD DWORD PTR SS:[ESP],EBP
005F6ECA    C3              RETN        ;執行到這裡
到了後按f8一次進了這裡,這裡有我們要的東西哦,
005F6887    60              PUSHAD
005F6888    EB 04           JMP SHORT Project1.005F688E
好了,現在用上我的去花指令幫它清爽一下ALT+shift+S選擇pespin範圍為01FFF然後就好看很多了,我清了114個哦
清除後:
005F6887    60              PUSHAD
005F6888    90              NOP
005F6889    90              NOP
005F688A    90              NOP
005F688B    90              NOP
005F688C    90              NOP
005F688D    90              NOP
005F688E    90              NOP
005F688F    90              NOP
005F6890    90              NOP
005F6891    0BFF            OR EDI,EDI
005F6893    75 16           JNZ SHORT Project1.005F68AB
005F6895    8B9D 8D2B4000   MOV EBX,DWORD PTR SS:[EBP+402B8D]
005F689B    2D 01000000     SUB EAX,1
......
005F68CC    90              NOP
005F68CD    90              NOP
005F68CE    90              NOP
005F68CF    8B3B            MOV EDI,DWORD PTR DS:[EBX]
005F68D1    03BD 852B4000   ADD EDI,DWORD PTR SS:[EBP+402B85]
005F68D7    803F 4C         CMP BYTE PTR DS:[EDI],4C
005F68DA    75 2C           JNZ SHORT Project1.005F6908
005F68DC    E8 260F0000     CALL Project1.005F7807                ;直接F4到這裡
005F68E1    3D 531EF917     CMP EAX,17F91E53
005F68E6    75 20           JNZ SHORT Project1.005F6908
005F68E8    8B85 812B4000   MOV EAX,DWORD PTR SS:[EBP+402B81]
005F68EE    D1E1            SHL ECX,1
在005F68DC 處直接按F4執行到那裡。然後向下繼續找:
005F6918    8BBD 792B4000   MOV EDI,DWORD PTR SS:[EBP+402B79]
005F691E    3BC7            CMP EAX,EDI
005F6920    76 35           JBE SHORT Project1.005F6957            
;這裡要改成Jmp 005F6957  
005F6922    03BD 7D2B4000   ADD EDI,DWORD PTR SS:[EBP+402B7D]
改上面的,注意如果是VB的程式就不要跳這裡,一跳程式就over了
改完後再看這裡吧:
005F6951    FF95 C4394000   CALL DWORD PTR SS:[EBP+4039C4]
005F6957    EB 01           JMP SHORT Project1.005F695A
005F6959    90              NOP
005F695A    894424 1C       MOV DWORD PTR SS:[ESP+1C],EAX
;這裡改成mov ss:[edx],EAX
005F695E    61              POPAD
005F695F    FF0424          INC DWORD PTR SS:[ESP]
005F6962    0BC0            OR EAX,EAX
005F6964    C3              RETN
005F6965    EB 01           JMP SHORT Project1.005F6968
005F6967    90              NOP
到這裡完了嗎?沒有,後面還有呢.
005F6968    57              PUSH EDI
005F6969    51              PUSH ECX
005F696A    90              NOP
005F696B    90              NOP
005F696C    90              NOP
005F696D    90              NOP
005F696E    90              NOP
005F696F    90              NOP
005F6970    90              NOP
005F6971    90              NOP
005F6972    90              NOP
005F6973    BF 4F825F00     MOV EDI,Project1.005F824F
005F6978    EB 01           JMP SHORT Project1.005F697B
005F697A    90              NOP
005F697B    B9 65060000     MOV ECX,665
005F6980    EB 01           JMP SHORT Project1.005F6983
005F6982    90              NOP
005F6983    3917            CMP DWORD PTR DS:[EDI],EDX
005F6985    74 0A           JE SHORT Project1.005F6991
005F6987    47              INC EDI
005F6988  ^ E2 F9           LOOPD SHORT Project1.005F6983
005F698A    EB 01           JMP SHORT Project1.005F698D
005F698C    90              NOP
005F698D    8902            MOV DWORD PTR DS:[EDX],EAX
;這裡nop掉
005F698F    EB 25           JMP SHORT Project1.005F69B6
改好這幾個地方後(這樣就可以得到全部API函式,可惜有函式還是不行的,這個後面再說),按F4執行到005F6964處
005F6962    0BC0            OR EAX,EAX
005F6964    C3              RETN            ;在這裡按F4
現在我們看到esp的值了吧0012FFA0,這個和以前的版本一樣下斷hr esp+4也就是下斷hr 12FFA4,下斷後執行就直接
到stolen code處了.下面的就要看清楚了哦,不過用我的去花指令指令碼清理後好看很多.這個版本把stolen code裡的
call全部變形了不過太過簡單.不過抽程式碼之多確實變態.

005F7088    55              PUSH EBP                :*****
005F7089    EB 01           JMP SHORT Project1.005F708C
005F708B    90              NOP
005F708C    8BEC            MOV EBP,ESP                :*****
005F708E    EB 01           JMP SHORT Project1.005F7091
005F7090    90              NOP
005F7091    83C4 F0         ADD ESP,-10                :*****
005F7094    EB 01           JMP SHORT Project1.005F7097
005F7096    90              NOP
005F7097    B8 983A4600     MOV EAX,Project1.00463A98                :*****
005F709C    EB 01           JMP SHORT Project1.005F709F
005F709E    90              NOP
005F709F    68 A9705F00     PUSH Project1.005F70A9
005F70A4  - E9 8BEBE0FF     JMP Project1.00405C34                :*****
005F70A9    A1 F8584600     MOV EAX,DWORD PTR DS:[4658F8]                :*****
005F70AE    EB 01           JMP SHORT Project1.005F70B1
005F70B0    90              NOP
005F70B1    8B00            MOV EAX,DWORD PTR DS:[EAX]                :*****
005F70B3    EB 01           JMP SHORT Project1.005F70B6
005F70B5    90              NOP
005F70B6    68 C0705F00     PUSH Project1.005F70C0
005F70BB  - E9 F07DE5FF     JMP Project1.0044EEB0                :*****
005F70C0    8B0D DC594600   MOV ECX,DWORD PTR DS:[4659DC]                 :*****  ; Project1.00466BD8
005F70C6    EB 01           JMP SHORT Project1.005F70C9
005F70C8    90              NOP
005F70C9    A1 F8584600     MOV EAX,DWORD PTR DS:[4658F8]                :*****
005F70CE    EB 01           JMP SHORT Project1.005F70D1
005F70D0    90              NOP
005F70D1    8B00            MOV EAX,DWORD PTR DS:[EAX]                :*****
005F70D3    EB 01           JMP SHORT Project1.005F70D6
005F70D5    90              NOP
005F70D6    8B15 8C384600   MOV EDX,DWORD PTR DS:[46388C]                   :*****    ; Project1.004638D8
005F70DC    EB 01           JMP SHORT Project1.005F70DF
005F70DE    90              NOP
005F70DF    68 E9705F00     PUSH Project1.005F70E9
005F70E4  - E9 DF7DE5FF     JMP Project1.0044EEC8                :*****
005F70E9    A1 F8584600     MOV EAX,DWORD PTR DS:[4658F8]                :*****
005F70EE    EB 01           JMP SHORT Project1.005F70F1
005F70F0    90              NOP
005F70F1    8B00            MOV EAX,DWORD PTR DS:[EAX]                :*****
005F70F3    EB 01           JMP SHORT Project1.005F70F6
005F70F5    90              NOP
005F70F6    68 00715F00     PUSH Project1.005F7100                   ; ASCII "h
q_"

005F70FB  - E9 487EE5FF     JMP Project1.0044EF48                :*****
005F7100    68 0A715F00     PUSH Project1.005F710A
005F7105  - E9 52CCE0FF     JMP Project1.00403D5C                :*****
005F710A    8D40 00         LEA EAX,DWORD PTR DS:[EAX]                :*****
005F710D    EB 01           JMP SHORT Project1.005F7110
005F710F    90              NOP
005F7110  - E9 BBCBE6FF     JMP Project1.00463CD0                :*****
還好沒有再變形要不就難了,好了整理一下:
push ebp
mov ebp,esp
add esp,-10
mov eax,463a98
call 405c34
MOV EAX,DWORD PTR DS:[4658F8]
MOV EAX,DWORD PTR DS:[EAX]
Call 0044EEB0
MOV ECX,DWORD PTR DS:[4659DC]       
MOV EAX,DWORD PTR DS:[4658F8]
MOV EAX,DWORD PTR DS:[EAX]
MOV EDX,DWORD PTR DS:[46388C]  
CALL 0044EEC8
MOV EAX,DWORD PTR DS:[4658F8]
MOV EAX,DWORD PTR DS:[EAX]
CALL 0044EF48
CALL 00403D5C
LEA EAX,DWORD PTR DS:[EAX]
嘿嘿,下面的一段全給pespin給吃光了,可惡!
到這裡就把所抽的程式碼給找回來了,但是執行一下暈倒,異常.看看變態呢
004011FC  - FF25 F0825F00   JMP DWORD PTR DS:[5F82F0]
00401202    8BC0            MOV EAX,EAX
00401204  - FF25 EB825F00   JMP DWORD PTR DS:[5F82EB]
0040120A    8BC0            MOV EAX,EAX
0040120C  - FF25 E6825F00   JMP DWORD PTR DS:[5F82E6]
00401212    8BC0            MOV EAX,EAX
00401214  - FF25 E1825F00   JMP DWORD PTR DS:[5F82E1]
0040121A    8BC0            MOV EAX,EAX
0040121C  - FF25 0A835F00   JMP DWORD PTR DS:[5F830A]
00401222    8BC0            MOV EAX,EAX
00401224  - FF25 DC825F00   JMP DWORD PTR DS:[5F82DC]
0040122A    8BC0            MOV EAX,EAX
0040122C  - FF25 05835F00   JMP DWORD PTR DS:[5F8305]
00401232    8BC0            MOV EAX,EAX
00401234  - FF25 D7825F00   JMP DWORD PTR DS:[5F82D7]
這個怎麼修復我現在還沒有任何方法解決:(還請高手們指點指點,謝謝!
文章就此打住,已是凌晨2點多了,不再寫了,如果可能明天再看看有沒有辦法修復好.
附一個脫VB的自動指令碼:
/*
//////////////////////////////////////////////////
    PESpin 0.3x - 0.4x -> cyberbob Unpack Script v0.1(only for vb)
    Author:    loveboom
    Email : bmd2chen@tom.com
    OS    : WinXP sp1,Ollydbg 1.1,OllyScript v0.85
    Date  : 02:06 2004-07-05
    Config: Ignore other exceptions except 'Invalid or privileged instruction'
    Note  : If you have one or more question, email me please,thank you!
//////////////////////////////////////////////////
*/

code:
   msgyn "Setting:Ignore other exceptions except 'Invalid or privileged instruction',Continue?"
   cmp $RESULT,0
   je lblret

var addr
var espval            //esp value
var iatstart            //iat start address

var cbase
var csize
gmi eip,CODEBASE
mov cbase,$RESULT
gmi eip,CODESIZE
mov csize,$RESULT

start:
   dbh
   run
   esto
   esto

lbl1:
   gpa "LoadLibraryA","kernel32.dll"
   bp $RESULT
   esto

lbl2:
   bc $RESULT
   rtu
   cmp eip,70000000
   jb lbl3
   sto
   rtu

lbl3:
   findop eip,#830A00#
   cmp $RESULT,0
   je lblabort
   go $RESULT
   mov iatstart,edx
   rtr
   sto

lbl4:
   mov espval,esp    //esp value
   add espval,4        //esp+4
   bphws espval,"r"
   run

lbl5:
   bphwc espval
   bprm cbase,csize
   run

lbl6:
   bpmc

lblfixoep:
   mov addr,eip
   add addr,6
   log "OEP is:"
   log addr
   mov [addr],68
   add addr,1
   mov espval,esp
   add espval,4
   mov [addr],[espval]
   add addr,4
   mov [addr],#E8F0FFFFFF#
   add addr,5
   log "IAT start address is:"
   log iatstart
   cmt addr,"Please Open log window,you will see iat start address."

lblend:
   msg "Script by loveboom[DFCG][FCG],Thank you for using my script!"
   
lblret:
  ret

lblabort:
  msg "Error,Script aborted!,Maybetaget is not protect by PESpin 0.3x - 0.4x -> cyberbob"
  ret

Greetz:

Fly,Jingulong,yock,tDasm,David,ahao,vcasm,UFO(brother),alan(sister),all of my friends and you!
By loveboom[DFCG][FCG]
Email:bmd2chen@tom.com

本程式碼的著色效果由xTiNt自動完成
下載xTiNt http://211.90.75.84/web/kanaun/download/xTiNt.rar

相關文章