首页
社区
课程
招聘
[原创]从内存中加载动态链接库的C++实现
发表于: 2020-5-1 19:45 11663

[原创]从内存中加载动态链接库的C++实现

2020-5-1 19:45
11663

现存的大多数内存加载dll程序都无法使用异常处理、线程局部存储,并且不兼容win32API。
我通过查阅资料,配合逆向ntdll代码,在现存开源代码的启发下使用(威吸佳佳语言)实现了一个加载库,实现了:
1、调用LoadLibraryMemory()函数返回的句柄兼容几乎所有的win32 (资源)API,以及GetProcAddress()函数。
2、支持cpp异常处理和结构化异常处理。ps:逆向了一些数据结构,通过特征可以快速定位相关的变量地址。
3、支持线程局部存储。ps:由于需要调用ntdll的LdrpHandleTlsData(),而这是个函数,并且不同系统版本的起始地址不同,特征也不同,因此无法保证在所有系统版本中能定位到这个函数。

由于本人水平有限,编码风格差,代码显得臃肿,让前辈们见笑了

源码请移步:https://github.com/bb107/MemoryModulePP


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 2
支持
分享
最新回复 (19)
雪    币: 31
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
mark
2020-5-1 20:39
0
雪    币: 515
活跃值: (3272)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wem
3
mark
2020-5-1 21:07
0
雪    币: 181
活跃值: (621)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
LoadLibraryMemory?
2020-5-1 21:21
0
雪    币: 1519
活跃值: (2127)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
5
mark
2020-5-1 21:52
0
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
mark
2020-5-2 08:43
0
雪    币: 4154
活跃值: (1535)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
柒雪天尚 LoadLibraryMemory?
这是一个包装函数。
定义在LoadDllMemoryApi.cpp中
LoadLibraryLibrary() -> NtLoadDllMemory() -> NtLoadDllMemoryExW()
2020-5-2 11:52
0
雪    币: 259
活跃值: (283)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
感谢
2020-5-2 14:49
0
雪    币: 1558
活跃值: (3459)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
谢谢大佬,有毅力,写过一个简单的内存加载,还bug满地都是,至于tls,seh想想都头大
2020-5-2 19:13
0
雪    币: 106
活跃值: (574)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
这样的贴子,应该加精华。
2020-8-15 14:37
0
雪    币: 2089
活跃值: (3933)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
对没饭吃的兼容还是有点问题,以前造过一个轮子,支持无模块引入(动态文件读入dll加载和重定向)以及没饭吃之类的东西 ,以及反挂载和内存清理
2020-8-18 14:55
0
雪    币: 2089
活跃值: (3933)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
此外建议做成C++类,例如我的 shared_ptr<SKMEMDLL> dll;,加载是dll->load(myStringStream);或者dll->load(lpAddr, fileSize);,加一个全局模块表,方便查找任何已加载的模块。
2020-8-18 15:01
0
雪    币: 220
活跃值: (721)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
有人测试出不兼容的系统版本了没?
2020-9-2 21:21
0
雪    币: 768
活跃值: (530)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
17
2条nb,以前卡在这上面了。。
2020-9-3 08:06
0
雪    币: 1067
活跃值: (627)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
mark
2020-9-3 18:50
0
雪    币: 1285
活跃值: (1764)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
马克
2020-11-26 23:47
0
雪    币: 188
活跃值: (39)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
mark
2020-12-1 19:06
0
游客
登录 | 注册 方可回帖
返回
//