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的值,之後的事由加殼軟體的作者去想吧。
我用的是除錯的方法,也初步想了一下如何反被檢測到的方法,得等見到有加殼程式反除錯後再加上去。