問題描述:
采用全域鉤子的方式將dll注入了目標行程,并成功hook了目標行程里的函式Fun。使其呼叫時會先進入我的函式Fun_My。這些都沒有問題。但是在我要卸載鉤子的時候,如果剛好代碼執行在我的函式Fun_My的代碼里。就會崩潰。因為我已經卸載了dll,也就是dll已經不在目標行程里了。這時候Fun_My也是無效的內容了,并不是以前的正確的代碼段。所以目標行程就崩潰了。
這種情況下,在我的dll執行detach即將卸載的時候,如何確保代碼并不在Fun_My里面執行呢。
當然我肯定是提前執行了對函式的unhook的,只是最后的一次hook到的函式,可能還在Fun_My里面執行,還沒有執行完回傳。這就出了問題。
大家有遇到過么,或是思考過這個問題,有啥好的處理方法啊,關于技術的意見建議討論都歡迎。感謝。
uj5u.com熱心網友回復:
建議到相應的開發板塊咨詢uj5u.com熱心網友回復:
這種情況是沒有辦法的 而且你根本無法知道當時你的代碼是否正在被執行 你的思路就不對給你指個方向 jum到一塊NEW出來的可執行記憶體片(為了方便描述以后這個地方就跳板吧) 然后在JMP到你的DLL中
當你的DLL被卸載前 你只要改一下跳板代碼讓程式在JMP回去直接執行 不要進你的DLL即可 之后在UNHOOK掉你的DLL 就OK了
關于JUMP跳板最好一開始就匯撰寫好向兩個地方跳的代碼 利用一個JNZ控制跳轉方面(是去你的HOOK 還是回源函式繼續執行) 這樣你只要改一個BYTE就可以控制流向 大大降低UNHOOK時出錯的情況
uj5u.com熱心網友回復:
我覺得沒這么復雜吧,你在detach里邊同步一下你的Fun_My函式不就行了,等待Fun_My函式執行完后再detach.轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/123138.html
標籤:安全技術/病毒
上一篇:AES加密解密
