0
如果在給定地址的代碼執行時沒有使其在代碼中可見,我想引發異常。當直接執行地址而未直接修改地址時引發異常
我知道使用硬件斷點是可能的,但如果有人要附加一個使用它們的調試器,那麼這些可能會被刪除,而我將無法檢測它們是否丟失並將其替換。還有什麼其他選擇?
速度是一個問題,即:我不能做PAGE_GUARD單步;用戶會滯後於死亡。
我在Windows上並使用VC 2012 w/C++。
如果在給定地址的代碼執行時沒有使其在代碼中可見,我想引發異常。當直接執行地址而未直接修改地址時引發異常
我知道使用硬件斷點是可能的,但如果有人要附加一個使用它們的調試器,那麼這些可能會被刪除,而我將無法檢測它們是否丟失並將其替換。還有什麼其他選擇?
速度是一個問題,即:我不能做PAGE_GUARD單步;用戶會滯後於死亡。
我在Windows上並使用VC 2012 w/C++。
如果異常處理成本過高,唯一的其他解決方案是模擬CPU的代碼。
有幾個注意事項,但:
另一個,也許更實用,辦法是在關注該地址修補的可執行文件,執行轉移到您的代碼(與jmp
指令),做任何你需要有再回去。您必須注意所有上下文的保存/恢復,並且模仿由其上寫下的jmp
指令所損壞的指令。這裏也有一些注意事項。那些被覆蓋的指令可能會跳轉到代碼中的其他地方。你必須選擇地址,以免跳到你的jmp
的中間,否則你將不得不以某種方式處理它們(還不確定)。
異常處理不一定太昂貴;只有在方法觸發異常的次數過多而收益不大的情況下;即:如果我用PAGE_GUARD保護整個頁面,會發生什麼情況。 – kvanberendonck
仿真現在太大了,我寧可不要。 Codecaving可以工作,但直接的代碼更改由採用代碼段散列的保護引擎檢測到。 – kvanberendonck
你應該詳細說明你的問題。你沒有談及保護方面或者它的工作方式。最後,爲什麼你要在受保護的二進制文件上執行此操作? –