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

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

2020-5-1 19:45
10220

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

 

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

 

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


[培训]《安卓高级研修班(网课)》月薪三万计划

收藏
点赞2
打赏
分享
最新回复 (19)
雪    币: 31
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
flappy 2020-5-1 20:39
2
0
mark
雪    币: 504
活跃值: (2968)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wem 2020-5-1 21:07
3
0
mark
雪    币: 182
活跃值: (576)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
柒雪天尚 2020-5-1 21:21
4
0
LoadLibraryMemory?
雪    币: 1519
活跃值: (1982)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
Chords 2020-5-1 21:52
5
0
mark
雪    币: 248
活跃值: (3704)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
luskyc 2020-5-2 08:43
6
0
mark
雪    币: 4110
活跃值: (1495)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
Boring勇哥 2020-5-2 11:52
7
0
柒雪天尚 LoadLibraryMemory?
这是一个包装函数。
定义在LoadDllMemoryApi.cpp中
LoadLibraryLibrary() -> NtLoadDllMemory() -> NtLoadDllMemoryExW()
雪    币: 259
活跃值: (283)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ZwCopyAll 2020-5-2 14:49
8
0
感谢
雪    币: 1638
活跃值: (2650)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qj111111 2020-5-2 19:13
9
0
谢谢大佬,有毅力,写过一个简单的内存加载,还bug满地都是,至于tls,seh想想都头大
雪    币: 106
活跃值: (548)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xtayaitak 2020-8-15 14:37
10
0
这样的贴子,应该加精华。
雪    币: 2063
活跃值: (3822)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lhxdiao 2020-8-18 14:55
11
0
对没饭吃的兼容还是有点问题,以前造过一个轮子,支持无模块引入(动态文件读入dll加载和重定向)以及没饭吃之类的东西 ,以及反挂载和内存清理
雪    币: 2063
活跃值: (3822)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lhxdiao 2020-8-18 15:01
12
0
此外建议做成C++类,例如我的 shared_ptr<SKMEMDLL> dll;,加载是dll->load(myStringStream);或者dll->load(lpAddr, fileSize);,加一个全局模块表,方便查找任何已加载的模块。
雪    币: 220
活跃值: (626)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
dayang 2020-9-2 21:21
16
0
有人测试出不兼容的系统版本了没?
雪    币: 764
活跃值: (395)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
FishSeeWater 11 2020-9-3 08:06
17
0
2条nb,以前卡在这上面了。。
雪    币: 1029
活跃值: (522)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
闲人_ 2020-9-3 18:50
18
0
mark
雪    币: 1204
活跃值: (1459)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Cohen 2020-11-26 23:47
19
0
马克
雪    币: 188
活跃值: (39)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
吃汉堡 2020-12-1 19:06
20
0
mark
游客
登录 | 注册 方可回帖
返回