首页
论坛
课程
招聘
[原创]分享一个自己写的手动映射PE文件源码
2021-7-12 17:43 6203

[原创]分享一个自己写的手动映射PE文件源码

2021-7-12 17:43
6203

看雪第一次发帖,开源分享一下自己的学习成果~
最近在研究R0无痕注入R3,用CPP写了个手动映射DLL的功能,X32和X64正常编译出来的DLL文件都能兼容,兼容VM代码的DLL,但不兼容加了压缩壳之类的DLL

特点: 隐蔽性高,全程无API调用,可以设置不执行CRT初始化代码

例子和源码放在附件里,调整一下编译器设置就可以提取出shellcode,大家可以随便玩
emmm,功能大概就这几个
图片描述

分析一下实现过程

GetMemModuleHandleW函数

先获取PEB结构,X32和X64获取方式不同:
图片描述
然后遍历PEB->LDR的双向循环链表,取出每个模块的模块名分别判断,最后返回模块基址
图片描述

GetMemProcAddress函数

前面是解析PE结构中的ExportDirectory,代码就不贴上来了,要注意的是系统中有些函数是绑定导入,需要单独做解析,如Win10系统Kernel32.dll中的EnterCriticalSection函数,实际上模块加载之后是引用的ntdll.dll里的RtlEnterCriticalSection函数地址
图片描述
我的解决方法是判断PE结构中描述的函数地址开头数据是否全是字符,符合条件就提取出dll模块名和函数名,再进行递归解析
图片描述
图片描述

LoadMemLibrary函数

先把Dll文件各个区段的数据映射到内存中
图片描述
接下来修复IAT和修复重定位,这个懂得都懂,就不贴代码上来了
调用DllMain这里我做了一些修改,因为一般的DLL编译出来,入口点不是直接指向的DllMain,而是先运行一系列CRT初始化代码,再运行DllMain,在某些极端的AC保护下,这些CRT初始化代码很有可能导致被检测,所以可以Call一个自己设定的导出函数,不运行CRT初始化代码
图片描述


[注意]中秋好礼,诚意满满——你提意见,我送月饼!!

最后于 2021-7-12 21:35 被cslime编辑 ,原因:
上传的附件:
收藏
点赞3
打赏
分享
最新回复 (3)
雪    币: 5133
活跃值: 活跃值 (752)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
TopC 活跃值 2021-7-13 10:36
2
0
感谢分享
雪    币: 15
活跃值: 活跃值 (68)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zhhigh 活跃值 2021-7-18 18:58
3
0
感谢分享
雪    币: 1769
活跃值: 活跃值 (636)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
iamasbcx 活跃值 2021-8-11 06:16
4
0
感谢分享
游客
登录 | 注册 方可回帖
返回