开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 39763|回复: 444
收起左侧

[易源码分享] 【全网首发】加载Dll时直接转向内存Dll,兼容性极佳

    [复制链接]
发表于 2022-9-1 21:35:35 | 显示全部楼层 |阅读模式   北京市北京市
分享源码
界面截图:
是否带模块: 纯源码
备注说明: -

前言:

  • 本程序不是什么Hook了LoadLibrary、GetProcAddress等简单粗暴地将Dll命令地址强行转向内存。
  • 本程序的Dll加载和重定向部分全部由系统完成,稳定性和兼容性极好(理论上和原生LoadLibrary完全相同)

解析:

  • 众所周知,系统Dll加载的一个核心函数是NtMapViewOfSection,这个函数负责将Dll文件映射到内存

  • 如果我们Hook了NtMapViewOfSection函数,在加载正常Dll时使用我们自己写的方案,将内存中的Dll数据二次映射到内存,替换掉原来的Dll,那么就可以实现Dll的直接内存加载。

  • 为此需要重写一个NtMapViewOfSection

  • 重写的MyMapDll原理大致如下:

    • 首先是解析Dll的IMAGE_SECTION_HEADER,计算Dll需要的内存。
    • 分配相应大小的内存。
    • 将Dll的SECTION写到内存中。
  • Map好Dll后,只需要将新映射好的内存地址和大小反馈会NtMapViewOfSection参数即可。

  • 效果如下:

  • 可以看到,显示加载了“测试Dll.dll”,实际上加载了内存中的Dll(如果你还记得我的第一个帖子的话,你会知道这里确实不是加载的“测试Dll.dll”)

PS:

  • 为什么要使用这么麻烦的方法实现内存Dll?
  • 首先现在论坛中所谓的内存Dll均存在或多或少的兼容性问题,而本方案则是相当于将内存Dll用最接近系统原生的方案进行加载(完全不考虑IAT,TLS等修复问题),理论上兼容性和原生LoadLibrary完全相同
  • 本方案无需继续Hook诸如LoadLibrary、GetProcAddress等函数用于重定向,加载好的Dll就是原生内存Dll,API直接声明便可直接使用。

附件下载:


main-test.zip (402.24 KB, 下载次数: 977)

点评

你小子也是搞脚本的吧,成天研究这玩意.顺便说下再高频进程中这种判断文件的此唱彼和的方式非常不安全,容易映射遗漏.详解411楼,不需要HOOK2个函数.   广西壮族自治区柳州市  发表于 2023-2-18 06:36
和原生载入还是有很大区别的,比如载入后创建com 就失败的。   广西壮族自治区玉林市  发表于 2022-9-28 12:28
如果傀儡DLL有办法隐藏就好了,这样就更完美了,不但内存调用兼容好还看不出来   重庆市重庆市  发表于 2022-9-8 00:06

评分

参与人数 26好评 +24 精币 +73 收起 理由
网络注册会员 + 1 + 1 开源精神必须支持~
Canada + 1 + 1 如果傀儡DLL有办法隐藏就好了,这样就更完美了,不但内存调用兼容好还看不出来.
dghjgg + 1 支持开源~!感谢分享
南风知意 + 1 + 2 YYDS~!
司徒西 + 1 + 2 开源精神必须支持~
llxx123 + 2 支持开源~!感谢分享
易语言资源网 + 1 + 3 开源精神必须支持~
inat + 1 + 2 感谢分享,很给力!~
fengyishen + 1 感谢分享,很给力!~
QQ1329127360 + 1 开源精神必须支持~
冰棍好烫啊 + 1 + 5 YYDS~!
kflizcst + 1 + 2 新技能已get√
fjgh + 1 + 2 支持开源~!感谢分享
mrzcpo + 1 + 2 支持开源~!感谢分享
orjg + 1 此处应该有鼓励~
福仔 + 1 + 20 YYDS~!
xxdahai + 1 + 2 例程跑起来了,但是单独研究mymapdll
商亨人和 + 1 + 2 YYDS~!
天雷 + 1 + 2 YYDS~!
Bszk + 1 + 3 新技能已get√
a524666979 + 1 + 2 YYDS~!
咸鱼666 + 1 + 3 能解决就好了 VMP会检测自身Dll的合法性导致其不能正常使用(这似乎是节映射保护属性.
凌哥 + 1 + 5 支持开源~!感谢分享
2017浮影 + 1 + 2 新技能已get√
远赴 + 1 + 2 YYDS~!
冰点 + 1 + 5 感谢分享,很给力!~

查看全部评分


本帖被以下淘专辑推荐:

发表于 2023-2-18 06:33:35 | 显示全部楼层   广西壮族自治区柳州市
本帖最后由 雨过天晴 于 2023-2-18 06:36 编辑

        if (  SectionHandle &&LoadDll.OldDllsize != 0)

                {
                 ZwQuerySection  func =   (  ZwQuerySection)GetProcAddress(baseinfo::ntdll, "ZwQuerySection");

                 if (func)
                 {
                         NTSTATUS status = 0;
                         SECTION_IMAGE_INFORMATION sii;
                         if (0 <= (status = func(SectionHandle, SectionImageInformation, &sii,
                                 sizeof(sii), 0)))
                         {
         
                                 if (sii.ImageFileSize== LoadDll.OldDllsize)
                                 {

                                         *(PVOID*)BaseAddress = LoadDll.LoadDllMemory;
                                         *(DWORD*)ViewSize = LoadDll.LoadDllsize;
         
                                         RestoreHookBG(GetNtInfoAddr(NT_NtMapViewOfSection));
                                          return 0;
                                 }
                                

                         }


                 }

点评

我忍你很久了,你说你一中国人,老是发一些英文字母,这里是中文编程论坛,炫技请出门左拐。   广东省揭阳市  发表于 2023-10-12 17:23

评分

参与人数 1好评 +1 精币 +2 收起 理由
ANormalUser + 1 + 2 新技能已get√

查看全部评分

回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 21 天

发表于 3 天前 | 显示全部楼层   四川省广安市
谢谢大佬分享
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)

签到天数: 8 天

发表于 2024-11-9 14:05:55 | 显示全部楼层   河北省邯郸市
支持开源~!感谢分享
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)

签到天数: 11 天

发表于 2024-10-22 23:09:30 | 显示全部楼层   辽宁省锦州市
66666666666666666666
回复 支持 反对

使用道具 举报

签到天数: 18 天

发表于 2024-9-24 22:37:53 | 显示全部楼层   湖南省岳阳市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

签到天数: 10 天

发表于 2024-9-22 00:46:29 | 显示全部楼层   湖南省怀化市
顶 我好学习一下
回复 支持 反对

使用道具 举报

签到天数: 2 天

发表于 2024-7-6 01:20:19 | 显示全部楼层   香港特别行政区*
感谢分享~~~
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)

签到天数: 1 天

发表于 2024-6-10 11:30:57 | 显示全部楼层   福建省莆田市
学习一下技术
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)

签到天数: 1 天

发表于 2024-6-10 11:19:57 | 显示全部楼层   福建省莆田市
求一个C++版的
回复 支持 反对

使用道具 举报

结帖率:93% (25/27)

签到天数: 1 天

发表于 2024-5-27 08:52:31 高大上手机用户 | 显示全部楼层   山东省青岛市
能不兼容加壳,能解决就好了
回复 支持 反对

使用道具 举报

发表于 2024-5-8 01:45:56 | 显示全部楼层   湖北省武汉市
66666666666666
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表