|
|
|
|
|
|
|
|
提高篇 (10 )
讀者要求:
您可以閱讀和傳播本文章,但不能對文章的內容作任何的修改,請尊重作者的勞動。
首先我們要先準備我們的工具:
1.Procdump1.50
2.Ultraedit6.10 (這個您也可以用別的編輯器)
3.Winsoftice4.0
4.Trw0.75
5.MakePE1.27
6.Wdasm8.93
好了 ! 工具都準備齊全了,我們就去下載一個實驗品您 ! 今次我們選的是UPX
,在Procdump1.50的脫殼文件清單中,您可以清楚地看到有
UPX 的選項,所以我們今次就選它了,目前它的最新版本是
0.82 ,好了下載完畢了,我們先用它來為軟體加一個脫您 !
操作:
1. 在 windows 上開啟一個 Dos 視窗 , 進入 UPX0.82 所在的目錄;
2. 輸入 upx [ 要加殼的文件路徑和文件名 ]
3.OK! 加殼成功了 !
好了 ! 現在可以試一試脫殼了 !
操作:
1. 執行 Procdump1.50 ;
2. 按 Unpack 按鈕,這時就出現了 Choose Unpacker 視窗;
3. 在視窗中選擇 UPX ,這時就會跳出一個選擇您要脫殼文件的選擇視窗;
4. 按下開啟,哦天啊 ! 好痛苦啊 ! 程式沒有脫殼竟然執行了, Procdump1.50 提示一個錯
誤發生在script
的第一行。
以上的所有操作,是對自動脫殼來說的,基本上的自動脫殼的操作都是這樣的。好了,難道就這樣沒有戲唱了嗎 ? 作者寫文章那會就寫這幾十行廢話呢 ? 請接著看下面的您 ! 好了,看一看它沒有沒防住
winsoftice
呢 ? 重新啟動機器,換一個有安裝
winsoftice
的 windows
平台您 ! 再次執行被加脫了的程式,還好 ! 沒有當掉
winsoftice
,這樣心中暗喜,您有難了啊 ! 看來外國人寫的東西還是比較有善,不象
Ding Boy
的幻影系列,比小燕幾還凶 (
^o^ ,又說
Ding Boy
的坏話了,其實有時我覺得他比較象
Crack
界的小燕幾,令人又愛又恨) 。好了關閉程式,用
winsoftice載入去,唉剛剛還說好呢 ! 原來它還是對
winsoftice
作了一點小動作,
winsoftice
不能中斷於程式的入口的第一句處。沒有關系,現在有三種方法,第一種方法是通過對程式的
exe 文件作一點修改,使其符合標准的
PE 文件格式,因為
winsoftice
畢竟不是專為
Crack
設計的,所以它的中斷程式入口是針圖示准的
PE 文件格式來寫的,對於那些不符合的,它就沒有能力了,具體的
PE 文件格式,大家可以看一看
VC 中的
MSDN 中的幫助和
WINNT.H
中的解釋;第二種方法就是不用
winsoftice
,而用TRW
,因為劉濤濤先生的
TRW 是專為
Crack
設計的,所以幾乎所有可以在
Windows
上執行的程式,它都可以中斷得了;第三種方法,就是在原
exe 文件中加插
int 3
語句,令 winsoftice
強行中斷。 好了,方法說了一大羅,我們就用最簡單的方法您 ! 沒人會有簡單的不用,去用最繁的,如果有您 ! 大家就。。。。。。。。
執行 TRW0.75 ,選擇選單中的 TRNEWTCB 命令,然後執行加脫的程式,程式馬上中斷於第一句了。
具體如下:
0137:0043D100 PUSHAD 程式會中斷於這裡
0137:0043D101 MOV ESI,0042B0D9
0137:0043D106 LEA EDI,[ESI+FFFD5F27]
0137:0043D10C PUSH EDI
0137:0043D10D OR EBP,-01
0137:0043D110 JMP 0043D122 跳到解壓程式
0137:0043D112 NOP
0137:0043D113 NOP
解壓程式的入口:
0137:0043D122 8B1E MOV EBX,[ESI]
0137:0043D124 83EEFC SUB ESI,-04
0137:0043D127 11DB ADC EBX,EBX
0137:0043D129 72ED JB 0043D118
0137:0043D12B B801000000 MOV EAX,00000001
0137:0043D130 01DB ADD EBX,EBX
0137:0043D132 7507 JNZ 0043D13B
0137:0043D134
8B1E
MOV EBX,[ESI]
好了在解壓程式裡面,程式會做無數次的循環,我沒有必要了解它是如何進行加壓的,所以就把游標一直向下走,一直走到這裡:
0137:0043D250 EBD6 JMP 0043D228
0137:0043D252 61 POPAD
0137:0043D253 C3 RET
0137:0043D254 61 POPAD
0137:0043D255 E9D6A1FDFF JMP 00417430 這就是程式的真正入口了
0137:0043D25A 0000 ADD [EAX],AL
0137:0043D25C 0000 ADD [EAX],AL
0137:0043D25E
0000
ADD [EAX],AL
好開心啊 ! 終於找到了入口地址,如果您只是針對某一個特定的程式而脫殼的,那麼現在就可以用
TRW 的
pedump
命令直接脫殼了,但這不是我們所要的,我們現在是要研究UPX0.82
的殼,要寫一個通用的脫殼
ini 加入到
Procdump1.50
裡面,那麼,這樣您以後就可以很方便脫掉
UPX0.82
所的脫了,同時也很方便線上傳播了,讓別人也能分享您的成果,這才是真正的
Cracker
精神。
操作:
1. 用 Ultraedit6.10 開啟 Procdump1.50 目錄下的 Script.ini 文件;
它的格式如下:
[INDEX]
P1=Hasiuk/NeoLite
P2=PESHiELD
P3=Standard
P4=Shrinker 3.3
P5=Wwpack32 I
P6=Manolo
P7=Petite<1.3
P8=Wwpack32 II
P9=Vbox Dialog
PA=Vbox Std
PB=Petite 1.x
PC=Shrinker 3.2
PD=PEPack
PE=UPX 修改為 PE=UPX<0.7X
PF=Aspack<108
P10=SoftSentry
P11=CodeSafe 3.X
P12=Aspack108
P13=Neolite2
P14=Aspack108.2
P15=Petite 2.0
P16=Sentinel
P17=PKLiTE
P18=Petite 2.1
P19=PCShrink
P1A=PCGUARD v2.10
P1B=Aspack108.3
P1C=Shrinker 3.4
P1D=UPX0.7X-0.8X 加入這句
然後找到:
[UPX] 修改為 [UPX<0.7X]
然後在文件最下面加入:
[UPX0.7X-0.8X]
好了,準備功夫我們都做好了,現在可以寫
UPX0.82
的脫殼擴展了,首先我們可以見到程序有兩個跳動的地方,第一個是:
0137:0043D110 JMP 0043D122 跳到解壓程式
所以我們馬上把機器代碼抄下來:
EB,10
第二個是:
0137:0043D255 E9D6A1FDFF JMP 00417430 這就是程式的真正入口了
機器代碼就是:
E9,D6,A1,FD,FF
好了,所有的要找到東西我們都已經找到了,我們就開始編寫 UPX0.82 的脫殼擴展了。
我編寫的具體如下:
[UPX0.7X-0.8X]
L1=OBJR ; 在掃描開始處設定初始的記憶體地址
L2=LOOK EB,10 ; 尋找第一個 EB,10 程式代碼
L3=BP 在當前記憶體位置設定斷點
L4=WALK ; 交還控制權到 Procdump 並且執行下一個指令
L5=OBJR ; 在掃描開始處設定初始的記憶體地址
L6=LOOK 61,E9 ; 尋找第一個 EB,10 程式代碼
L7=BP 在當前記憶體位置設定斷點
L8=STEP
; 一步一步地跟蹤分析程式
好了,以上的解釋都很清楚了,沒有什麼不明白了,我們把文件保存後,再次執行Procdump1.50
,在
Choose Unpacker 中可以見到多了一個
UPX0.7X-0.8X 項了,選擇它,進行脫我們加了脫的程式,哈哈,叫我們保存了,您可以不要高興得太早了,您試一試執行
dump 程式,哦不能執行,非法操作。不要心急,我們好象還有點東西要加上呢 ! 那就是
dump 的可選參數了,
Procdump1.50 一共給我們提供了五組可選參數,如果您沒有特別指出,就用預設值。好我們加上去試一試您 !
OPTL1=00000000
OPTL2=01010001
OPTL3=01010001
OPTL4=00030000
OPTL5=00000000
以上這五參數是最常用的,您加參數時可要先試試,或者加了之後就可以用了,好我們加上,試一試。
以下文章所述,可能在有的機器上有不同的結果,請自行修正:
作者的機器是:
賽揚 300A (超 450 )
PC100-64M
記憶體
當我再次執行
Procdump1.50 來脫殼程式時,竟然程式一下幾就執行了,根本不象上次那樣提示要我保存脫殼後的文件,所以我想,可能這些參數有些不合適我的機器,於是我認真分析了每一個參數的真正含義之後,就把參數作了如下的修改:
OPTL1=00000001 這是延遲時間,我設為 1ms
OPTL2=01010101 採用了快速 dump 的工作方式
OPTL3=01010001
OPTL4=00030000
OPTL5=00000000
今次再執行
Procdump1.50 進行脫殼,哈哈 ! ! ! 可以脫了,然後再雙擊脫殼後的文件,咦,可以執行了,再用
Wdasm8.93 反編譯分析一下文件,發現基本和原文件相同,只是文件大小有點不同,大了一點,再用了一下軟體的各種功能,一切正常,所以應該說脫殼是成功的,到此,文章也該在此結束了,不過好象還漏了點事,就是用
MakePe1.27 幫助脫殼後的文件作進一步的最佳化,這就不一一描述了,自己看幫助進行您 ! 好了,最後總結一下您 !
完整地加入:
[UPX0.7X-0.8X]
L1=OBJR
L2=LOOK EB,10
L3=BP
L4=WALK
L5=OBJR
L6=LOOK 61,E9
L7=BP
L8=STEP
OPTL1=00000001
OPTL2=01010101
OPTL3=01010001
OPTL4=00030000
OPTL5=00000000
By The Way !
我發現對於使用 UPX0.7x 到 UPX0.8x 加殼的軟體,用我的方法都可以成功脫殼。
作者: Ru Feng
信箱: ocq@163.net (未得作者允許,嚴禁 Email 任何軟體到此信箱)
首頁 (一) : http://ocq.163.net (楓林居)
首頁 (二) : http://ocq.yeah.net (最 Cool 的 VB 控件天堂)
首頁 (三) :
http://ocqpat.163.net (我的作品,主要介紹“電子資料庫”軟體)
|
|
|