㈠ 為什麼OD 無法載入程序
第一:OD載入後會停留在程序入口,剛開始就是暫停的.第二:如果你按f9後OD會開始執行你的程序,這時候除非碰到斷點是不會停止的,如果你是按了f9後停留在ntdll說明程序此時遇到中段或者進入了更高級別的段,OD是調試r3級別程序的利器但是無法對r0級別的代碼進行調試.第三:許多程序都會用一個小小的手段來迷惑調試者,那就是seh結構化異常處理來進行程序的跳轉或者判斷程序是否給調試.此情況比較多,但是OD會有提示.第四:而不是程序的領空這句話說的我很蛋疼,你並沒有告訴我你的程序執行情況,是否斷點,是否異常,或者OD是否提示IO指令等等.所以請你把od的提示弄清楚後在發問,詳細的代碼段,執行環境,斷點數量.和出現問題.
㈡ od打開exe文件,就都是CPU主線程,模塊ntdll,進不去程序模塊
OD載入exe後其並不是直接執行到程序入口,
這跟直接執行exe原理是一樣的,系統載入器載入exe後,還需要執行一些初始化操作,最後才執行到主程序入口。在你這種情況下,一般直接按一下F9就會停於主程序入口處。
另外,如果還不停於入口處
看圖應該是你自己寫的exe,默認的編譯方式,如果OD設置不在入口處停(基本不會做此設置),
可以在載入後直接在401000入口下斷點(默認編譯exe的入口,若不是,直接查看下exe的PE頭就知道入口在哪裡了,下斷)再按F9,就會主程序入口起點。
㈢ OD找到了程序入口點,怎麼脫殼啊
常見脫殼知識:1.PUSHAD (壓棧) 代表程序的入口點
2.POPAD (出棧) 代表程序的出口點,與PUSHAD想對應,一般找到這個OEP就在附近拉!
3.OEP:程序的入口點,軟體加殼就是隱藏了OEP(或者用了假的OEP),
只要我們找到程序真正的OEP,就可以立刻脫殼。
開始正式介紹方法啦!!
方法一:
1.用OD載入,不分析代碼!
2.單步向下跟蹤F8,是向下跳的讓它實現
3.遇到程序往回跳的(包括循環),我們在下一句代碼處按F4(或者右健單擊代碼,選擇斷點——運行到所選)
4.綠色線條表示跳轉沒實現,不用理會,紅色線條表示跳轉已經實現!
5.如果剛載入程序,在附近就有一個CALL的,我們就F7跟進去,這樣很快就能到程序的OEP
6.在跟蹤的時候,如果運行到某個CALL程序就運行的,就在這個CALL中F7進入
7.一般有很大的跳轉,比如 jmp XXXXXX 或者 JE XXXXXX 或者有RETE的一般很快就會到程序的OEP。
方法二:
ESP定理脫殼(ESP在OD的寄存器中,我們只要在命令行下ESP的硬體訪問斷點,就會一下來到程序的OEP了!)
1.開始就點F8,注意觀察OD右上角的寄存器中ESP有沒出現。
2.在命令行下:dd 0012FFA4(指在當前代碼中的ESP地址),按回車!
3.選種下斷的地址,下硬體訪問WORD斷點。
4.按一下F9運行程序,直接來到了跳轉處,按下F8,到達程序OEP,脫殼
方法三:
內存跟蹤:
1:用OD打開軟體!
2:點擊選項——調試選項——異常,把裡面的忽略全部√上!CTRL+F2重載下程序!
3:按ALT+M,DA 打開內存鏡象,找到第一個.rsrc.按F2下斷點,
然後按SHIFT+F9運行到斷點,接著再按ALT+M,DA 打開內存鏡象,找到.RSRC上面的CODE,按
F2下斷點!然後按SHIFT+F9,直接到達程序OEP,脫殼!
方法四:
一步到達OEP(前輩們總結的經驗)
1.開始按Ctrl+F,輸入:popad(只適合少數殼,包括ASPACK殼),然後按下F2,F9運行到此處
2.來到大跳轉處,點下F8,脫殼之!
方法五:
1:用OD打開軟體!
2:點擊選項——調試選項——異常,把裡面的√全部去掉!CTRL+F2重載下程序!
3:一開是程序就是一個跳轉,在這里我們按SHIFT+F9,直到程序運行,記下從開始按F9到程序
運行的次數!
4:CTRL+F2重載程序,按SHIFT+F9(次數為程序運行的次數-1次
5:在OD的右下角我們看見有一個SE 句柄,這時我們按CTRL+G,輸入SE 句柄前的地址!
6:按F2下斷點!然後按SHIFT+F9來到斷點處!
7:去掉斷點,按F8慢慢向下走!
8:到達程序的OEP,脫殼