想拦截任务管理器里结束进程的操作,网上的代码是:
//遍历这部分IAT表
while(pThunk->u1.Function)
{
lpAddr = (DWORD*)&(pThunk->u1.Function);
//比较函数地址是否相同
if(*lpAddr == (DWORD)OldFunAddr)
{
DWORD dwOldProtect;
//修改内存包含属性
VirtualProtect(lpAddr, sizeof(DWORD), PAGE_READWRITE, &dwOldProtect);
//API函数的入口点地址改成我们构造的函数的地址
WriteProcessMemory(GetCurrentProcess(),lpAddr, &NewFunAddr, sizeof(DWORD), NULL);
}
pThunk++;
}
我不明白if(*lpAddr == (DWORD)OldFunAddr)这句话:
原理是要把系统的OpenProcess替换成我自己的函数。
那么如果我的exe文件没有用到OpenProcess这个API,那么这里就不能在exe的导入表里自然就找不到这个API。我想是不是要向taskman.exe里注入呢,用dependency看了下也没有用到。
请教各位能给个思路。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)