aDLL 是一款专注于自动发现 DLL 劫持漏洞的二进制分析工具。该工具分析加载到内存中的二进制映像,以搜索在加载时加载的 DLL,并利用 Microsoft Detours 库拦截对 LoadLibrary/LoadLibraryEx 函数的调用,从而分析运行时加载的 DLL。其目的是获取可执行文件在搜索目录中未能找到的 DLL 列表。
要开始使用 aDLL,Binaries 文件夹中提供了一个已编译的可执行文件。建议使用与待分析可执行文件架构(32 位或 64 位)相匹配的版本。
为使工具正常运行,必须将 "hook32"、"hook64"、"informer32" 和 "informer64" 这四个 DLL 文件放置在与 aDLL.exe 相同的目录中。
aDLL 已在 Windows 10 系统上开发和测试。 如果系统较旧且未安装 Visual Studio,工具可能会抛出类似 "VCRUNTIME140.dll not found" 的错误。此时需要安装 Visual C++ Redistributable 更新包。可在此处找到更新:https://www.microsoft.com/es-ES/download/details.aspx?id=49984。
如需修改/重新编译工具,建议使用 Visual Studio 2015 或更高版本。 Visual Studio 解决方案包含三个项目:aDLL、Hook 和 Informer。 _ - aDLL:必须编译为可执行文件。如果出现链接错误,需要使用 Visual Studio 链接器将 shlwapi.lib 库添加为附加依赖项。_ _ - Hook:必须编译为与待分析可执行文件相同架构的 DLL。生成的 Hook 文件需重命名为 hook32.dll 或 hook64.dll(视情况而定)。如需分析两种架构的可执行文件,则必须将两个 DLL 都放在 aDLL.exe 所在目录。_ _ - Informer:与 Hook 相同。需编译为 DLL 并重命名为 informer32.dll 或 informer64.dll。_
该工具有一个 -h 选项,用于在屏幕上打印可用选项的简要说明。
.\aDLL -h
常见用法示例:aDLL 至少需要接收待分析可执行文件的路径。
.\aDLL -e "C:\System32\notepad.exe"
选项说明:
-h 显示工具帮助,附带每个选项的简要说明。
-e 指定 aDLL 要分析的可执行文件路径。
-t 指定一个文本文件的路径,该文件包含可执行文件路径列表。
-o 指定一个目录路径,用于存储每个扫描可执行文件的报告。
-m 搜索可执行文件的清单并在屏幕上显示。aDLL 会搜索嵌入在二进制文件中的清单,如果清单是外部文件则无法找到。
-w 定义可执行进程在搜索运行时加载的 DLL 时保持打开状态的秒数。默认时间为 20 秒。
-a 如果找到候选 DLL,aDLL 将自动测试恶意 DLL 是否通过冒充合法 DLL 的搜索顺序而被执行。
-d 与 -a 选项配合使用,允许选择要用作恶意 DLL 的 DLL 路径。
-r 可执行文件导入的每个 DLL 可能又导入其他 DLL 作为依赖项。将对 aDLL 找到的所有未重定向(ApiSetSchema 或 WinSxS)且不属于系统已知 DLL 列表的 DLL 进行 "n" 次递归搜索。
Hook DLL 基于 ctxis 的 DLLHSC 理念:https://github.com/ctxis/DLLHSC
你可以在 licenses.txt 中找到更多关于许可证的信息。
本软件按“原样”提供,不承担任何明示或暗示的担保,包括但不限于适销性、特定用途适用性和非侵权性的担保。在任何情况下,作者或版权持有人均不对任何索赔、损害赔偿或其他责任负责,无论是在合同、侵权行为或其他方面引起的,均与本软件或本软件的使用或其他交易有关。 当你向包含许可证声明的仓库做出贡献时,你同意以相同条款许可你的贡献,并且你确认你有权以那些条款许可你的贡献。如果你有关于贡献许可的单独协议(例如贡献者许可协议),则该协议将优先适用。