loader找OEP的原理 (757字

看雪資料發表於2015-11-15

loader透過讀取被加殼程式startup時的Ebp, Esp, [Esp]值跟 
該程式執行到一定地址時Ebp, Esp, [Esp]的值比較,若相等則認為該地址就是OEP。目前只對Asprotect 1.2x有效。 

那麼我們應該在哪裡停下被加殼程式去讀值,而該地址又不是OEP的上一或下一地址呢。 
Windows 有一API VirtualProtectEx,用來設定記憶體空間的某些屬性,在NT下可以設上 
PAGE_GUARD屬性,若程式讀、寫、執行設了PAGE_GUARD屬性的記憶體,就會產生一 
STATUS_GUARD_PAGE_VIOLATION的異常,我們就可以利用該特性,給被加密了的程式程式碼 
空間(我只是簡單的把第一個Section認為是程式碼段)加上PAGE_GUARD屬性,要是被加殼 
程式執行該保護段的程式碼,而且Ebp, Esp, [Esp]跟startup時的值相等則認為該地址就是OEP。 

理論上該方法可以應用到其他大多數的加殼方法上,Armadillo當然是例外(: 
那麼為什麼該loader不能用在Aspack、upx、PECompact....上?現在什麼都懶了,懶啊!! 

--------------------------------------------------------------------------------
標 題:“普通程式執行前ebp指向哪裡”這個問題比較專業,我也不太清楚... (334字)
發信人:fs0
時 間:2002-4-7 21:23:50
閱讀次數:42
詳細資訊:

“普通程式執行前ebp指向哪裡”這個問題比較專業,我也不太清楚。 
在不能十分肯定破壞被加殼程式的ebp和esp對程式有什麼影響前,我想通用的加殼軟體並不會貿然行事, 
至少現時大多數加殼軟體到達OEP時會恢復ebp, esp的值,之後的事由加殼軟體的作者去想吧。 
我用的是除錯的方法,也初步想了一下如何反被檢測到的方法,得等見到有加殼程式反除錯後再加上去。

相關文章