zoukankan      html  css  js  c++  java
  • 自己写的简单的ApiHook~ 留作记录。

     1 #include "stdafx.h"
    2 #include "apihook.h"
    3 #include <Windows.h>
    4 using namespace std;
    5
    6 typedef int (WINAPI *PFNCREATEFILE)(LPCTSTR , DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD , DWORD, HANDLE);
    7 FARPROC g_OriginalProc = (FARPROC)CreateFileA;
    8 FARPROC g_NewProc = (FARPROC)NewProc;
    9
    10 int SomeFunc()
    11 {
    12 HMODULE hModule;
    13
    14 hModule = GetModuleHandle(NULL);
    15 ApiHook(hModule);
    16
    17 return FALSE;
    18 }
    19
    20 int ApiHook(HMODULE hModule)
    21 {
    22 IMAGE_DOS_HEADER* pDosHdr = NULL;
    23 IMAGE_NT_HEADERS32* pNTHdr = NULL;
    24 IMAGE_IMPORT_DESCRIPTOR* pImportHdr = NULL;
    25
    26 pDosHdr = (IMAGE_DOS_HEADER *)hModule;
    27 pNTHdr = (IMAGE_NT_HEADERS32 *) ((BYTE *)hModule + pDosHdr->e_lfanew);
    28 pImportHdr = (IMAGE_IMPORT_DESCRIPTOR *) ((BYTE *)hModule
    29 + pNTHdr->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);
    30
    31 while(pImportHdr->FirstThunk)
    32 {
    33 IMAGE_THUNK_DATA* pThunk = (IMAGE_THUNK_DATA*)((BYTE *)hModule + pImportHdr->FirstThunk);
    34
    35 while(pThunk->u1.Function)
    36 {
    37 DWORD* lpAddr = (DWORD *) &(pThunk->u1.Function);
    38 if(*lpAddr == (DWORD)g_OriginalProc)
    39 {
    40 DWORD dwOldPortect;
    41 MEMORY_BASIC_INFORMATION mb;
    42 VirtualQuery(lpAddr, &mb, sizeof(mb));
    43 VirtualProtect(lpAddr, sizeof(DWORD), PAGE_READWRITE, &dwOldPortect);
    44 WriteProcessMemory(GetCurrentProcess(), lpAddr, &g_NewProc, sizeof(DWORD), NULL);
    45 VirtualProtect(lpAddr, sizeof(DWORD), dwOldPortect, NULL);
    46 return TRUE;
    47 }
    48 pThunk++;
    49 }
    50 pImportHdr++;
    51 }
    52
    53 return FALSE;
    54 }
    55
    56 int WINAPI NewProc(LPCTSTR lpFileName,
    57 DWORD dwDesiredAccess,
    58 DWORD dwShareMode,
    59 LPSECURITY_ATTRIBUTES lpSecurityAttributes,
    60 DWORD dwCreationDisposition,
    61 DWORD dwFlagsAndAttributes,
    62 HANDLE hTemplateFile)
    63 {
    64 MessageBoxA(NULL, "What's The Fuck", "Kevin", MB_OK);
    65 CreateFileA(lpFileName, dwDesiredAccess, dwShareMode,
    66 lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);
    67 return 0;
    68 }
  • 相关阅读:
    OGNL和Struts2标签
    Struts2中使用Servlet API步骤
    Struts2配置详解
    Strust的基础情况
    分页套用
    删除(注意,删除后,后面顶上去,所以id会一直变,所以我们用class来定义,因为id是唯一的)
    搭建SpringMVC+Mybatis框架并实现数据库的操作
    使用映射接口实现数据库的操作
    django 路由系统
    http协议
  • 原文地址:https://www.cnblogs.com/whoiskevin/p/2416772.html
Copyright © 2011-2022 走看看