• 64位系统InlineHook


    APIHook64Class.h

     1 #ifndef APIHOOK64CLASS_H_
     2 #define APIHOOK64CLASS_H_
     3 #include <Windows.h>
     4 
     5 class APIHook64
     6 {
     7 private:
     8     unsigned char code[12];
     9     unsigned char oldcode[12];
    10     FARPROC addr;
    11 
    12 public:
    13     APIHook64();
    14     BOOL Hook(char *dllName,char *apiName,long long callfunc,BOOL bHook=TRUE);
    15 };
    16 
    17 #endif

    APIHook64Class.cpp

     1 #include "APIHook64Class.h"
     2 
     3 APIHook64::APIHook64()
     4 {
     5     /*
     6         mov eax,0x12345678
     7         push eax
     8         ret
     9     */
    10     unsigned char c[12] = { 0x48, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xC3 };
    11     RtlMoveMemory(APIHook64::code, c, 12);
    12     memset(APIHook64::oldcode, 0, 12);
    13     addr = NULL;
    14 }
    15 
    16 BOOL APIHook64::Hook(char *dllName, char *apiName, long long callfunc, BOOL bHook)
    17 {
    18     BOOL bOk = FALSE;
    19     DWORD dwOldProtect = 0;
    20     long long api = callfunc;
    21     HANDLE hPro = GetCurrentProcess();
    22 
    23     if (!APIHook64::oldcode[0])
    24     {
    25         addr = GetProcAddress(LoadLibrary(dllName), apiName);
    26         RtlMoveMemory(APIHook64::code+2, &api, 8);
    27         if (VirtualProtectEx(hPro, addr, 12, PAGE_EXECUTE_READWRITE, &dwOldProtect))
    28         {
    29             RtlMoveMemory(APIHook64::oldcode, addr, 12);
    30         }
    31     }
    32     if (bHook)
    33     {
    34         bOk = WriteProcessMemory(hPro, addr, APIHook64::code, 12, NULL);
    35     }
    36     else {
    37         bOk = WriteProcessMemory(hPro, addr, APIHook64::oldcode, 12, NULL);
    38     }
    39     VirtualProtectEx(hPro, addr, 12, dwOldProtect, &dwOldProtect);
    40     CloseHandle(hPro);
    41     return bOk;
    42 }
  • 相关阅读:
    Python代码优化概要
    OllyDbg 使用笔记 (一)
    Java报表FineReport在医院院长查询分析系统中有什么用
    MongoDB下载安装測试及使用
    你不可能讲清楚的4个开源协议!!!
    MR之SequenceFile具体解释
    深入浅出AOP(四)--AOP的实现步骤
    SRM 587 Div II L3:ThreeColorabilityEasyy
    转义及编码(u, x)
    转义及编码(u, x)
  • 原文地址:https://www.cnblogs.com/biaoge140/p/8734257.html
Copyright © 2020-2023  润新知