|
ORiEN這種殼之前沒(méi)有接觸,到底是壓縮殼還是加密殼也不知道,只能試一試嘍。需要脫殼的程序是吾愛(ài)破解脫殼練習(xí)第7期的題目。 首先對(duì)加殼程序進(jìn)行查殼,這一步也是程序脫殼的必要的一步。 使用DIE工具對(duì)加殼程序進(jìn)行查殼,發(fā)現(xiàn)被加殼程序原來(lái)是用Delphi語(yǔ)言編寫(xiě)的,這個(gè)信息對(duì)于找原程序的OEP是很有幫助的。
下面OD載入程序進(jìn)行分析,被加殼程序入口點(diǎn)匯編代碼: 對(duì)被加殼的程序進(jìn)行脫殼的時(shí)候,先不慌著脫殼,最好先看下程序的匯編代碼,F7/F8單步走幾步看看,沒(méi)準(zhǔn)你會(huì)有新發(fā)現(xiàn)。 F8單步跟蹤幾步,發(fā)現(xiàn)了PUSHAD指令,繼續(xù)F8單步到PUSHAD的下一條指令。那就使用ESP定律進(jìn)行程序的脫殼,在ESP寄存器上下硬件寫(xiě)入斷點(diǎn)HW Break。 F9運(yùn)行程序,程序會(huì)在剛才下的HW硬件斷點(diǎn)地址處斷下來(lái)。注意觀察EAX寄存器的值0045159C,通過(guò)對(duì)地址0045159C的反匯編發(fā)現(xiàn)了比較熟悉的Delphi反匯編入口點(diǎn)代碼,很顯然地址0045159C就是被加殼原程序的真實(shí)OEP的VA。其實(shí),F7單步幾步走到地址004A1AF4處,跟進(jìn)JMP到地址004A1AF1處就會(huì)發(fā)現(xiàn)原程序的真實(shí)OEP。 跟進(jìn)JMP到地址004A1AF1處,JMP EAX指令中的EAX = 0045159C保存的就是被加殼程序的真實(shí)的OEP的VA地址。 F7單步跟進(jìn)到地址0045159C處,果然找到了Delphi的反匯編的入口點(diǎn)。 OK,被加殼程序的真實(shí)的OEP找到了,就可以對(duì)加殼程序進(jìn)行內(nèi)存的Dump和IAT表的修復(fù)。不過(guò)對(duì)于加殼程序找到OEP以后,建議使用Load PE和RECImport 工具或者Scylla來(lái)進(jìn)行程序的內(nèi)存Dump和IAT表的修復(fù),比OD的OllyDump插件更靈活。先用Load PE對(duì)該程序進(jìn)行 完全脫殼 的內(nèi)存Dump,在RECImport 中填入被加殼程序的真實(shí)OEP的RVA地址0005159C,自動(dòng)獲取IAT表并剪切掉無(wú)效函數(shù)指針,修復(fù)抓取的內(nèi)存Dump文件即可實(shí)現(xiàn)脫殼。 OK,運(yùn)行一下脫殼完成的程序,證明自己脫殼成功。 |
|
|
來(lái)自: ZackEdge > 《脫殼練習(xí)》