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

    大家好 ! 早兩天放上了提高篇 (10) 後,大家的反應還不錯,不過對於一些朋友來說,要想用好Procdump1.50,可能還有點問題,因為它的Script的說明書是英文的,對於英文不是太好的朋友,這就成為一個很大的問題了。昨晚,在白菜的聊天室內,我和Ding Boy等高手一起聊天,Ding Boy就建議我把Procdump1.50的說明書翻譯成中文,方便廣大的朋友學習和使用Procdump1.50,本著我不入地獄,誰入地獄的決心,我就著手了翻譯工作,由於本人的英文也不是太好 ! 所以在Procdump1.50的Script說明書的翻譯過程中,難免會有一些錯誤的地方,同時我的語文水平也不見得好到那裡去,有時英文瞭解什麼意思,中文也不知如何表達,所以也難免有一些詞不達意,還有一些地方,我只能根據意譯的方法來完成了,因為如果一字一字的合併起來,句幾的意思可能不知它說什麼。花了三個小時的時間,終於完成了,但為了有點記念意義,就把譯文放進了提高篇 (11) 當中了,希望大家喜歡 !

讀者要求:

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

*********************************
ProcDump32的Script擴展:
*********************************
       
A) 功能定義:
*************************

1) Look功能:
    這個Look功能是在被載入的程式中尋找指定的HEX字串。它會把找到了的記憶體地址保存下來以便您可以方便在此記憶體地址設定斷點。

例:
Look OF,85將用於搜索一個JNE或一個長jump。您可以通過BP命令來設定斷點。

2) ADD功能:
    允許您在當前記憶體地址上加一個變址值 (例: 出現於look命令或POS命令之後) 。

3) DEC功能:

猜測;)

4) REPL功能
    這個功能用於在當前記憶體中修改內碼 (連續的HEX) (註: 它出現在look命令之後) 。

例:
REPL 90,90將會在您當前的記憶體位置開始連接放入兩個NOP指令。

5) BP功能
    在當前記憶體位置設定一個斷點。

6) BPX功能
    在指定的位置設定斷點。這個位置與程式開始位置有關。

例:
如果程式的開始位置在RVA 66000h,BPX 2672就會在RVA 68672設定斷點。

7) BPF功能 (用標誌位設斷)
    這個功能會檢查每一次斷點發生時的標誌位的值是否為您所設定的值。斷點的位置為當前記憶體地址。

Unset/Set的內容
*******************
C * C * 進位標誌。
P * P * 奇偶標誌。
A * A * 輔助進位標誌。
Z * Z * 零標誌。
S * S * 正負號標誌。
D * D * 方向標誌。
O * O * 溢出標誌。

您可以單獨測試ONE旗標。

8) BPC功能
    當經過當前位置的次數達到設定值時發生中斷。

例:        
BPC 15 (在第21(15h)次經過當前位置時中斷)

9) BPV功能
    當如果暫存器的值到達了您設定的值時中斷。

例:
BPV EAX=5 (當特定位置的EAX=5時中斷)。

10) MOVE功能
    設定當前EIP。加一個參數值給當前EIP。但請小心使用它。其實它對於程式沒有做到什麼,只是當您要跳過一些CRC檢查時,就要用到它了,它相當於代替一連串的NOP指令。

例:
MOVE 14 就會把當前EIP變為EIP+14h。

11) POS功能
    為所有的功能設定當前記憶體地址,這個位置與程式開始位置有關。

12) STEP功能
    這個功能是設定一步一步的進行分析。它通常是用於完成跟蹤dump過程的。

注意: 單步模式就意味著每一行代碼它都進行測試->慢 ! ! 所以設定單步模式一般都放在最後。

13) OBJR功能
    這個功能是設定以基始記憶體地址為開始進行掃瞄。對於LOOK命令有影響。

14) BPREG功能
    以通過暫存器的值來設定斷點。

15) WALK功能
    執行下一條指令後把控件權交還ProcDump32。

16) EIP功能
    設定下一個EIP為原來程式的最初進入點。

注意:
在斷點之後,下一個EIP就是斷點地址本身。

17) 建立外部說明文件
    通過特殊的參數建立外部文件。這個您指定的ini文件是由一些特殊的參數組成和建立的。
它包括:

. 進程的Pid。
. 所有暫存器的值包括EIP。
. 當前EIP的值

例子:

在script中:
    ...
L5=HELP PDHelp.Exe Helper.ini
...
您的helper的命令行會包含<Path to helper.ini>\"helper.ini"。

在helper.ini中:
   
    [REG]
Dr0=00000000
Dr1=00000000
Dr2=00000000
Dr3=00000000
Dr6=00000000
Dr7=00000000
SegGs=00000000
SegFs=00000FDF
SegEs=00000167
SegDs=00000167
Edi=00000000
Esi=8161D244
Ebx=00000000
Edx=8161D2A4
Ecx=8161D264
Eax=0043E9B4
Ebp=00456000
Eip=00456264
SegCs=0000015F
Flags=00000216
Esp=0068FE34
SegSs=00000167
Pid=FFC1E943
Local=00456264

我想這樣做可以比較靈活;) 。

注意:
    命令行每行不能使用超過512個字每來描述helper的EXE和INI文件的路徑,這個只是ProcDump的內部限制,而對於WINDOWS API來說來說就不能超過256個字母。
B) 在script中Options的格式:
*************************************
Options是通過OPTL開始的,並以DWORD形式保存的。
OPTL1=
DWORD : 設定AutoDump中的延遲時間,以ms為單位。
OPTL2=
BYTE :自動執行EIP
BYTE :忽略錯誤
BYTE :快速模式Dump
BYTE :外部Predump
OPTL3=
BYTE :最佳化PE
BYTE :自動計算程式
BYTE :跟蹤API
BYTE :自動分層
OPTL4=
BYTE :未知模式
BYTE :Import表類型重建
BYTE :修復Header
BYTE :修復Relocs
OPTL5=
BYTE :保留
BYTE :保留
BYTE :檢查Header
BYTE :合併代碼

為得到更詳細資料... 查看ProcDump Options的解釋您。

C) 如何編寫您的加殼軟體的定義:
*****************************************************
1) 添加索引段:
*************************
加一個Pxx的聲明....注意xx的值是跟接在最後一個的值。
例如:

增加之前

[INDEX]
P1=Shrinker 3.3
P2=Wwpack32 Beta 9
P3=Wwpack32 1.0

增加之後

[INDEX]
P1=Shrinker 3.3
P2=Wwpack32 Beta 9
P3=Wwpack32 1.0
P4=My Own definition

2) 增加您的定義:
************************
每行的定義都必須事先聲明,例如用Lxx。

例:

[My own definition]

L1=Look 0F,85,DB,FF,FF
L2=BP
L3=STEP

    您可以在定義中多加一點預設options,添加OPTLx的方法也是這樣做,如果您沒有指定默
認的options,ProcDump會使用常規的那些設定。

作者: Ru Feng (譯)
信箱: ocq@163.net (未得作者允許,嚴禁Email任何軟體到此信箱)
首頁 (一) : http://ocq.163.net (楓林居)
首頁 (二) : http://ocq.yeah.net (最Cool的VB控件天堂)
首頁 (三) : http://ocqpat.163.net (我的作品,主要介紹「電子資料庫」軟體)



回教學