hookfactory.cpp
来自「The main idea of this work is to create 」· C++ 代码 · 共 58 行
CPP
58 行
#include "HookFactory.h"
PHook CreateHook(IN const PVOID pNewFuncPtr,IN const ULONG funcID)
{
ULONG TotalCount=pNtoskrnl->ServiceLimit;
PNTPROC ServiceTable=pNtoskrnl->ServiceTable;
if(funcID == TotalCount)
return NULL;
PHook mNewHook = new Hook;
// Save ID of function
mNewHook->mFuncSST_ID = funcID;
// Save true function ptr
mNewHook->mpTrueFuncPtr = ServiceTable[funcID];
// Save new function ptr
mNewHook->mpNewFuncPtr = pNewFuncPtr;
return mNewHook;
}
PHook CreateHook(IN const PVOID pNewFuncPtr,IN const PVOID pTrueFuncPtr)
{
ULONG TotalCount=pNtoskrnl->ServiceLimit;
PNTPROC ServiceTable=pNtoskrnl->ServiceTable;
// Searching function ID in SST
ULONG index=0;
for(;index<TotalCount;++index)
{
if(ServiceTable[index] == pTrueFuncPtr)
break;
}
if(index == TotalCount) // Not found
return NULL;
return CreateHook(pNewFuncPtr,index);
}
PHook CreateHook(IN const PVOID pNewFuncPtr,IN PUNICODE_STRING function_name)
{
/* All Zw* functions exported by NTOSKRNL.exe start with :
mov eax, ULONG // where ULONG is the index # of the syscall in th SSDT*/
PNTPROC ServiceTable=pNtoskrnl->ServiceTable;
PVOID pTrueFuncPtr_ZW=MmGetSystemRoutineAddress(function_name);
// VAR 1
if(pTrueFuncPtr_ZW == NULL)
return NULL;
ULONG mFuncID = *(PULONG)((PUCHAR) pTrueFuncPtr_ZW + 1);
if( mFuncID == NULL)
return NULL;
return CreateHook(pNewFuncPtr,mFuncID);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?