Make your own free website on Tripod.com

如何用Procdump1.50來進行手動脫殼
作者: Ru Feng
信箱: ocq@163.net
首頁: http://ocq.163.net (楓林居)

    今天,在吳朝相的網頁上看到一篇由台灣的Peter's寫的關於脫殼的文章,裡面提及到的了Procdump1.50的使用,但由於所寫的內容比較地膚淺,並沒有交待到Procdump1.50的強大之處,同時由於最近線線上上的軟體,加殼之風日盛,如果作為一個Cracker,不跟著時代走,可能在不久的將來,您就沒有什麼軟體可以修改了,所以一定要在加脫方法下點苦功才行,為此,小弟想把一月來學習到的脫殼技術Post出來,讓大家瞭解一下在Windows上是如何進行軟體脫殼的,同時也想向大家介紹強大的Procdump1.50是如何使用的,如何用它來進行手動脫殼的,如何擴展自已的Procdump1.50的脫殼種類。但由於小弟在脫殼方面還是新手,如果文章中有錯誤之處,請來信指教。

讀者要求:

您可以閱讀和傳播本文章,但不能對文章的內容作任何的修改,請尊重作者的勞動。

首先我們要先準備我們的工具:
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文件中加 ! nt 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 (我的作品,主要介紹「電子資料庫」軟體)



回教學