api劫持是什么?
api劫持就是如果A程序調用了B.cll里面的C函數。
我們可以做到當A調用C函數執行的時候,直接執行我們自己事先準備好的函數,之后我們在執行真正的C。
當然我們可以不執行C或者更改C的參數等等,實現的核心思路就是:mov eax, pNewAddr[/size][size=3] jmp eax。
具體原理:
我們首先獲取要劫持函數的地址,然后我們在自己組裝一個數據結構,數據結構的內容是執行匯編:
把新函數地址拷到寄存器里,然后再jmp到新函數地址位置執行新函數,然后我們把自己組裝這個數據結構拷貝到之前獲取的需要劫持的函數地址指向的內存的位置。
這樣當我們再次調用該函數的時候,程序走到函數地址處發現是執行我們剛剛寫好的匯編命令,直接jmp到了我們自己定義的函數地址的位置,也就相當于直接運行了我們自己寫好的函數地址了。
當然自己寫的函數必須要和原函數參數和返回值一樣,自己寫的函數里面也可以調用原函數(達到過濾的目的)。
但是前提是調用之前要先關閉劫持,也就是把我們替換的內容給人家替換回去,執行完之后再次替換我們的地址。
如果不替換回去我們就會進入無限遞歸了這個不解釋,當然我們也可以修改參數什么的,給調用者進行一個“加工”。
上一篇為什么說書中自有黃金屋
下一篇為什么做游戲創作者這么難