Ollydbg手動脫殼得幾點小結,轉自www.pediy.com

 

標 題: Ollydbg手動脫殼得幾點小結 (4千字)
發信人: sxssl[BCG]
時 間: 2003-5-4 22:21:32
詳細信息:

Ollydbg手動脫殼得幾點小結:
 
    引子:2002.5.5是我有生以來最最黑暗的日子,那段時間我正當高三班主任而且5月份已臨近高考,學生很需要我,我正帶着高三4個班的課,沒人能頂替 我的工作,學校也很需要我,而就在那個時候我妻子剛好近四個月的身孕,家庭也很需要我,就在緊要關頭,我被查出甲肝住進了醫院。住院一個多月,這段最黑暗 的時間總算過去了,2002.12.12我爲之激動和期待了很久的小生命了來到了這個世界,從此開始了品嚐爲人父的辛勞與幸福。我是一位crack愛好 者,沒有別的,在這特殊的日子裏謹想以此文紀念那段黑暗的日子,並祝福可愛的小生命永遠健康幸福,也祝賀自己正式加入DFCG。

  一般認爲手動脫殼的關鍵是找到軟件的真正入口OEP,但是用ollydbg脫殼知道軟件的真正入口OEP並不能解決問題,因爲ollydbg的工作原理和 softice、trw2000等的有所不同,在OEP未解壓以前是不能在OEP設斷上的,因此用ollydbg脫殼的關鍵是讓程序中斷在OEP,一旦中 斷在OEP脫殼就告完成。當然能夠用衝擊波等軟件知道軟件的OEP在用ollydbg脫殼中還是有一定幫助的。那麼如何讓程序中斷在OEP呢?這裏小結幾 種方法。
    方法一、用ollydbg載入程序,,第1個消息框,點yes,第2個消息框,點no,程序停在入口處EP(注意不是OEP) ctrl+b  Hex中輸入殼的入口特徵代碼(如upx  61 E9),回車
              popad
    看到入口點jmp xxxxxx
F2在此行設斷(或者將光標移動到這一行上按f4),F9,F8走1-2下,來到入口點,用ollydbg的插件dump選中程序進程dump程序。但此法對於有些入口點附近代碼被壓縮的程序就無能爲力了。對於這種程序有方法二。
    方法二、用ollydbg載入程序,,第1個消息框,點yes,第2個消息框,點no,ctrl+b  Hex中輸入殼的入口特徵代碼(如upx  61 E9),回車,找不到
          popad
    jmp  xxxxxx
對於這種情況在用ollydbg載入程序,,第1個消息框,點yes,第2個消息框,點no時程序停在入口處EP(注意不是OEP),先用F9,F8走幾 下,使特徵代碼解壓縮再用上面的方法搜索殼的特徵代碼。一般都能解決問題。對於那些不知到殼特徵代碼的那怎麼辦呢?於是有了方法三。
    方法三、用ollydbg載入程序,,第1個消息框,點yes,第2個消息框,點no,程序停在入口處EP(注意不是OEP),一般代碼爲 pushad、  pushfd等。自己用眼睛向下搜索與pushad 、 pushfd對應的popad、popfd 。F2在此行設斷(或者將光標移動到這一行上按f4),F9,F8走1-2下,來到入口點,用ollydbg的插件dump選中程序進程dump程序。那 麼怎麼知道找到的popad、popfd是與程序EP對應的popad、popfd呢?一般情況,對於保護不是非常強悍的殼向下找十幾行或幾十行看到的第 一個popad、popfd即爲對應的popad、popfd。而且入口點附近popad往往在下面幾行還有指令ret。有些殼如PECompact它的 入口處EP有  xxxxxxx    pushad
                        xxxxxxx    pushfd

那麼當你看到            xxxxxxx    popfd
                        xxxxxxx    popad    就找到了。如果向下找十幾行或幾十行找不到的popad、popfd那該怎麼辦呢?於是有了方法四。
    對方法三的補充:有些殼如果在ollydbg中找popad是行不通的,因爲用ollydbg載入脫殼對象時第1個消息框,點yes,第2個消息框,點 no,ollydbg沒有中斷在pushad上,我曾碰到過用ollydbg載入脫殼對象時第1個消息框,點yes,第2個消息框,點 no,ollydbg沒有中斷在popad上,這樣OEP應該在pashad附近,所以應該與之對應pushad。一般這樣的殼保護比較弱。很容易脫的。
  方法四、用ollydbg載入程序,,第1個消息框,點yes,第2個消息框,點no,程序停在入口處EP(注意不是OEP),一般代碼爲pushad、  pushfd等。自己用眼睛向下搜索與pushad 、 pushfd對應的popad、popfd。向下找十幾行或幾十行找不到的popad、popfd那必須先用F9,F8走幾下,使特徵代碼popad、popfd解壓縮再搜索popad、popfd。
  方法五、對於大量使用SEH,保護非常強悍的殼,如aspr需採用以下方法。
        1、使程序運行到最後一次SHE,最後一次SHE如何確定?記下程序運行的shift+f9次數n,shift+f9            n-1就是。
        2、看堆踐處SHE  handle  f2設斷,shift+f9查找popad、popfd即可。
        3、如果能夠知道OEP,此時步驟2也可用ctrl+g OEP按f4而且有些aspr版本必須用此法,否則非常麻煩
附表:殼名稱、版本相應的特徵代碼
殼名稱及版本    特徵代碼
Asprotect  1.0以下    EB 02 EB E8 61 EB 01
Asprotect  1.2    61 FF E0
ASPack 2.0以下    61 75 08 b8
PECompact 1.33    61 9D 50 68
Petite 2.1/2.2    61 66 9D 83 C4
PE-pack  all    89 44 24 1c 61 FF E0
Armadillo 2.51    03 F9 E8 A9 EE FF
Armadillo 2.52    03 F9 E8 2D EE FF
VBox 4.6.5    CD 20 FF E3
ASPack 2.12    B8 01 00 00 00 C2
UPX 1.20w    61 E9
Telock0.71    61 FF 64 24 DC
Exe32Pack 1.3x    E9 5E FE FF FF
有待補充

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章