好友
阅读权限40
听众
最后登录1970-1-1
|
本帖最后由 Cizel 于 2016-8-3 22:30 编辑
为了保密性,有时候我们不想将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,否则程序可能会异常退出
运行易语言编译的一个测试DLL的截图如下:
源代码中附带了大量的注释,方便阅读。
由于附件过大,所以我将百度云的下载地址上传了,如果大家发现程序有什么BUG请回帖告诉我,我将不胜感激。
源代码下载地址.txt
(48 Bytes, 下载次数: 201)
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|