[問題] API hooking

看板C_and_CPP作者 (dump吃到飽)時間14年前 (2010/02/21 17:37), 編輯推噓2(201)
留言3則, 3人參與, 最新討論串1/1
DWORD HookFunction(LPCSTR lpModule, LPCSTR lpFuncName, LPVOID lpFunction, unsigned char *lpBackup) { DWORD dwAddr = (DWORD)GetProcAddress(GetModuleHandle(lpModule), lpFuncName); BYTE ReplaceCode[6] = { 0xe9, 0x00, 0x00, 0x00, 0x00, 0xc3 }; ReadProcessMemory(GetCurrentProcess(), (LPVOID)dwAddr, lpBackup, 6, 0); DWORD dwCalc = ((DWORD)lpFunction - dwAddr - 5); memcpy(&ReplaceCode[1], &dwCalc, 4); WriteProcessMemory(GetCurrentProcess(), (LPVOID)dwAddr, ReplaceCode, 6, 0); return dwAddr; } 以上是網路找來的一段程式 就自己理解的部分, replace code中的0xe9是jmp的opcode, 0xc3是ret dwCalc看起來是要計算 目標函式 跟 要跳過去的函式 之間的距離以帶進jmp 但是不太確定後面為什麼要-5 請問jmp跳的距離是從下一個intruction開始算嗎? 想不到其他原因... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.59.0.65

02/21 18:37, , 1F
你去看一下jmp真正的意思就知道了
02/21 18:37, 1F

02/21 18:52, , 2F
E9XXXX = 目標位址 - call的下一個指令的位址
02/21 18:52, 2F

02/21 23:23, , 3F
要先扣掉jmp指令的長度喔... 剛好在你這邊就是5
02/21 23:23, 3F
文章代碼(AID): #1BWFxetF (C_and_CPP)