找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1538

积分

0

好友

193

主题
发表于 2025-12-30 23:11:22 | 查看: 20| 回复: 0

免责声明:
由于传播、利用本文所提及的技术信息而造成的任何直接或间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!

项目地址:
https://github.com/Print3M/DllShimmer

DllShimmer 是一个能够自动化生成代理DLL的工具,对于从事安全研究或渗透测试的红队成员来说,它能有效简化DLL劫持或DLL侧加载的准备工作。它的核心工作逻辑非常清晰:

  1. 解析原始 DLL:工具首先分析目标DLL的导出地址表(EAT),提取所有导出函数的名称、序号以及转发信息。
  2. 生成 C++ 模板代码:基于提取的信息,DllShimmer会生成一个 .cpp 源文件。该文件为每个导出函数自动创建了一个“包装器”函数。
  3. 生成模块定义文件(.def):同时生成一个 .def 文件,确保编译后的代理DLL拥有与原始DLL完全一致的导出函数名和序号,这对劫持成功至关重要。
  4. 透明转发:在代理DLL中,所有未被用户修改的函数都会通过 LoadLibraryGetProcAddress(动态链接)的方式,将调用请求透明地转发给真正的原始DLL,从而保持程序原有功能。

使用案例

假设我们需要对 C:\Windows\System32\version.dll 进行操作。首先,将其复制到一个工作目录中。

复制原始DLL文件
图1:将系统目录下的 version.dll 复制到工作环境

接下来,运行 DllShimmer 工具生成代理DLL的源代码项目。在工具所在目录下,先手动创建一个名为 project 的文件夹,然后执行以下命令:

DllShimmer.exe -i version.dll -o project/ -x "C:/Windows/System32/version.dll" -m

参数说明:

  • -i:指定原始 DLL 的路径。
  • -o:指定生成的源代码存放目录。
  • -x:指定代理 DLL 在目标系统上运行时,寻找原始 DLL 的绝对路径。
  • -m:启用互斥锁,确保我们插入的自定义代码只运行一次,避免重复执行。

DllShimmer生成项目文件
图2:DllShimmer 成功生成项目文件

命令执行成功后,会在 project 目录下生成必要的源代码文件。此时,你只需打开生成的 .cpp 文件(例如 version.dll.cpp),在类似 // Put your code here... 的注释位置插入你的自定义逻辑(如记录日志、拦截特定函数调用等)。

插入代码后,使用 MinGW-w64 或 Visual Studio 等工具链进行编译,即可得到我们需要的代理DLL。

代理DLL生成的C++代码模板
图3:生成的C++代码模板,其中包含转发逻辑和供用户插入代码的位置

通过这个流程,你可以快速构建一个功能完整的代理DLL,既能执行自定义操作,又能无缝转发其他所有函数调用到原始DLL,保证了程序的稳定性。想了解更多安全研究与逆向工程的实战技巧,欢迎在云栈社区交流讨论。




上一篇:Spring中@Autowired与@Resource的核心区别:查找逻辑、常见问题与选型建议
下一篇:DSP48E溢出检测实战:基于模式检测与掩码配置详解
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-10 09:07 , Processed in 0.302390 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

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