文号
827217
阅读
6461
回复
1
收藏
3
我编写的DLL的内存文件加载代码
2016/10/28
IP:山东
为了保密性,有时候我们不想将DLL释放出后进行加载,而想直接在内存中进行加载,我根据PE格式规范用了3天写了这个程序,在VS2015+WIN7 64Bit旗舰版下调试通过。本程序使用Visual C++编写完成

原理如下:
读取DLLPE头获取有关信息
将DLL加载到内存
修复IAT
修复重定向地址
将DLL加入PDR的LDR中的三个双向循环链表中

并且附带了释放函数

以下两个函数是需要外部调用的函数
char* DLLMemLoad(char* DLLFileBuf, DWORD DLLFileSize, char* MemDLLBaseName, char* MemDLLFullName);//DLL内存加载函数,注意为了保证一些DLL模块的正常运行,请保证MemDLLBaseName参数和MemDLLFullName参数的结尾是“.dll”(不区分大小写)

void DLLMemFree(char* DLLMemBaseAddress);//DLL内存释放函数,请在程序结束之前调用它释放加载的DLL,否则程序可能会异常退出

源代码下载地址(VS2015):链接:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 密码:hyvv
10年1个月前修改于 10年1个月前IP:四川
827405
1楼
感谢分享。。。
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的