-
-
IAT Hook相关问题
-
发表于:
2013-3-13 17:32
4101
-
(课程作业需要对堆溢出进行检测,所以需要hook内存申请函数。采用DLL注入,然后用修改IAT来hook函数。)
DLL里面的主要函数如下:
变量:
typedef void* (*pfnmalloc)(size_t);
void *mymalloc(size_t size);
int *addr = (int *)malloc;
int *myaddr = (int *)mymalloc;
其中dll里面的IAT修改函数如下(摘自网上):
void ThreadProc(void *param)
{
//------------hook api----------------
hMod = GetModuleHandle(NULL);
pDosHeader = (PIMAGE_DOS_HEADER)hMod;
pNTHeaders = (PIMAGE_NT_HEADERS)((BYTE *)hMod + pDosHeader->e_lfanew);
pOptHeader = (PIMAGE_OPTIONAL_HEADER)&(pNTHeaders->OptionalHeader);
pImportDescriptor = (PIMAGE_IMPORT_DESCRIPTOR)((BYTE *)hMod + pOptHeader->DataDirectory[1].VirtualAddress);
while(pImportDescriptor->FirstThunk)
{
char * dllname = (char *)((BYTE *)hMod + pImportDescriptor->Name);
pThunkData = (PIMAGE_THUNK_DATA)((BYTE *)hMod + pImportDescriptor->OriginalFirstThunk);
int no = 1;
while(pThunkData->u1.Function)
{
char * funname = (char *)((BYTE *)hMod + (DWORD)pThunkData->u1.AddressOfData + 2);
PDWORD lpAddr = (DWORD *)((BYTE *)hMod + (DWORD)pImportDescriptor->FirstThunk) +(no-1);
//修改内存的部分
if((*lpAddr) == (int)addr)
{
//修改内存页的属性
DWORD dwOLD;
MEMORY_BASIC_INFORMATION mbi;
VirtualQuery(lpAddr,&mbi,sizeof(mbi));
VirtualProtect(lpAddr,sizeof(DWORD),PAGE_READWRITE,&dwOLD);
WriteProcessMemory(GetCurrentProcess(),
lpAddr, &myaddr, sizeof(DWORD), NULL);
//恢复内存页的属性
VirtualProtect(lpAddr,sizeof(DWORD),dwOLD,0);
}
//---------
no++;
pThunkData++;
}
pImportDescriptor++;
}
//-------------------HOOK END-----------------
}
直接hook malloc还有free函数都没有问题,而new函数,内部调用了malloc吧?所以觉得直接hook malloc应该就可以了,但是没有反应。
求前辈们指教,为什么dll里面拦截了malloc(加了个messagebox),目标进程调用了new却没反应(没有messagebox弹窗)?
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)