首页
社区
课程
招聘
[原创]恶意代码分析之反射型DLL注入
发表于: 2020-6-22 19:08 9085

[原创]恶意代码分析之反射型DLL注入

2020-6-22 19:08
9085

这是一种允许攻击者从内存而非磁盘向指定进程注入DLL的技术,该技术比常规的DLL注入更为隐蔽,因为除了不需要磁盘上的实际DLL文件之外,它也不需要任何Windows加载程序的辅助即可注入。这消除了将DLL注册为进程已加载模块的需求,从而可逃脱工具的监视。


首先准备好测试dll,使用VS2015先编译生成一个测试dll文件,作用是dll被进程附加的时候会执行MessageBox弹框,切记不要选择空项目。如下,在DLL_PROCESS_ATTACH添加一个消息框函数,直接编译生成dll。




下面会根据源码逐步分析整体执行流程,示例代码是模拟内存自加载dll的过程,为了演示所以采用了比较简单的方式,dll文件生成后放在在本地,而真实案例中恶意代码会存在母体文件的内存中,因为需要不落地内存加载。


先声明相应的结构体变量,采用指定位数的方式指定结构体变量实际占用的位数(根据重定位表的特性),声明一个函数指针便于后续进行调用执行dll入口。


第一步先通过GetModuleHandleA获取基址,避免ASLR随机基址影响,读取dll文件内容加载至内存中,通过PE结构获取实际加载至内存中dll的PE头部数据。


分配dll加载时所需的内存空间,获取加载基址与预期基址的差值,接着复制dll头部数据至新的内存空间。


开始模拟Windows加载器功能加载PE文件至内存,如下。


基址重定位表位于PE头的IMAGE_NT_HEADERS/IMAGE_OPTION_HEADER/IMAGE_DATA_DIRECTORY[5],换句话说重定位表位于可选头的数据目录表下的第六项,基址重定位表中记录硬编码地址的位置(偏移),使用这张表就能获得准确的硬编码地址偏移并后续对其修正。重定位表是按照一个物理页(4kb或1000H)进行存储的,也就是一个重定位块负责一个4kb内存页,一个重定位表只管自己当前的物理页重定位。一个重定位表的记录偏移的大小是2个字节(1000H最多需要12bit即可0~FFFH),也就是16位,而记录偏移的大小是由SizeofBlock决定的。


将指令中的操作数按照指针字节数读取出来,然后将其减去默认加载基址(扩展头中的字段ImageBase),再加上新的加载基址,最后把新地址存入原来的地址中。


重定位工作完成之后,进行导入表的解析。


以上工作准备完毕之后,就已经模拟内存加载完成,之后获取dll文件入口点进行执行,利用了之前声明的函数指针。


示例源码


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

收藏
免费 6
支持
分享
最新回复 (8)
雪    币: 405
活跃值: (2285)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
在内存SHELLCODE 满天飞得时代,谁还在乎用DLL,徒增烦恼。现在安全软件全做内存监控,只要你在内存中被执行,就能监控处理。
2020-6-23 12:39
0
雪    币: 259
活跃值: (283)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
666
2020-6-23 15:15
0
雪    币: 1062
活跃值: (619)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
wowocock 在内存SHELLCODE 满天飞得时代,谁还在乎用DLL,徒增烦恼。现在安全软件全做内存监控,只要你在内存中被执行,就能监控处理。
请教一下,这个一般是检查内存属性,还是监控API,还是有什么别的方式。
2020-6-23 16:32
0
雪    币: 2157
活跃值: (12639)
能力值: ( LV12,RANK:312 )
在线值:
发帖
回帖
粉丝
5
漆寒 请教一下,这个一般是检查内存属性,还是监控API,还是有什么别的方式。
VAD
2020-6-23 16:41
0
雪    币: 8764
活跃值: (5240)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
不错,学习。
2020-6-24 13:32
0
雪    币: 220
活跃值: (721)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
wowocock 在内存SHELLCODE 满天飞得时代,谁还在乎用DLL,徒增烦恼。现在安全软件全做内存监控,只要你在内存中被执行,就能监控处理。
有什么通用性好的支持PE转SHELLCODE的好工具?
2020-6-26 14:20
0
雪    币: 1062
活跃值: (619)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
dayang 有什么通用性好的支持PE转SHELLCODE的好工具?
https://github.com/monoxgas/sRDI
2020-6-26 15:51
0
雪    币: 220
活跃值: (721)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
漆寒 https://github.com/monoxgas/sRDI
不支持EXE吧?
2020-6-27 22:18
0
游客
登录 | 注册 方可回帖
返回
//