inline hook学习
生活随笔
收集整理的這篇文章主要介紹了
inline hook学习
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
vs2013編譯
//inline hook 實際上就是指 通過改變目標函數頭部的代碼來使改變后的代碼跳轉至我們自己設置的一個函數里,產生hook.#include <windows.h> #include <stdio.h>//定義一個與MessageBoxA類型一致的函數指針。 typedef int (WINAPI * MessageBox_type)(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType); MessageBox_type RealMessageBox = MessageBoxA;//自定義的MessageBox,每調用MessageBox都要跳到myMessageBox來處理 _declspec(naked) void MyMessageBox(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType) {__asm{push ebpmov ebp,esppush esi}printf("Hwnd %08x,%s,%s,%d", hWnd, lpText, lpCaption, uType);__asm{pop esimov ebx,RealMessageBoxadd ebx,5jmp ebx} }#pragma pack(1) typedef struct _JMPCODE {BYTE jmp;DWORD addr; }JMPCODE,*PJMPCODE;void HookMessageBoxA() {JMPCODE jcode;jcode.jmp = 0xe9;jcode.addr = (DWORD)MyMessageBox - (DWORD)RealMessageBox - 5;::WriteProcessMemory(GetCurrentProcess(), RealMessageBox, &jcode, sizeof(jcode), NULL); } int main(int argc, char * argv[]) {HookMessageBoxA(); //hook操作::MessageBoxA(NULL, "InlineHOOK", "Title", MB_OK); //直接加雙冒號::表示使用全局函數,當全局函數沒有該函數時即指API函數。getchar();return 0; }成功劫持到了傳入的參數。
總結
以上是生活随笔為你收集整理的inline hook学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PsSetCreateProcessNo
- 下一篇: 植物大战僵尸食人花无cd逆向分析