最近想学DLL反射注入,但是发现要手动生成内存的DLL文件,所以就先尝试学PE加载器的实现
跟着佬的博客学的,感觉讲的很详细
手工模拟PE加载器 - 我可是会飞的啊
模拟加载PE文件将DLL或者EXE文件手动加载到内存中,而不是用CreateProcess或者LoadLibrary函数来操作,防止了部分检测手段,同时将文件数据加入到资源节中可以实现不将其落地就可以执行的效果,减少了生成文件的检测手段
原理
将对应PE文件按节区顺序从文件结构映射到映像内存结构放入内存
根据重定位表修改硬编码数据指令
从导入表获取所需函数,修正导入表函数地址(如果是相同进程,可以用本进程的导入表直接修改)
执行/如果是DLL则是主动执行DLLMain
重要信息映射PE头1OptionalHeader.SizeOfHeaders//获取PE头大小
映射Section1234IMAGE_FIRST_SECTION(pedata.ntHeader)//获取节区头sectionHeader[i].PointerToRawData//文件偏移sectionHeader[i].VirtualAddre ...