Jazeredz/DLL-Hijacking-Vulnerability-Scanner
GitHub: Jazeredz/DLL-Hijacking-Vulnerability-Scanner
一款针对Windows可执行文件的DLL劫持漏洞扫描工具,通过分析PE导入表和动态加载模式,自动发现已签名程序中的潜在劫持点。
Stars: 2 | Forks: 0
# DLL 劫持漏洞扫描器
SearchAvailableExe 是一款综合性的安全研究工具,旨在识别和分析 Windows 可执行文件中的 DLL 劫持漏洞。该工具通过系统地扫描已签名可执行文件来寻找潜在的 DLL 劫持机会,对于安全研究人员、渗透测试人员和系统管理员具有重要价值。
## 功能特性
- **自动化扫描**:递归扫描目录或整个驱动器以查找已签名的可执行文件
- **DLL 依赖分析**:分析导入表以识别 DLL 加载模式
- **漏洞测试**:测试可执行文件是否存在实际的 DLL 劫持漏洞
- **综合过滤**:基于各种条件的高级过滤选项
- 针对合法可执行文件的数字签名验证
- 静态和动态 DLL 加载检测
- 针对劫持可行性的写入权限分析
- 系统 DLL 识别与过滤
- 针对动态加载模式的全节扫描
- GUI/Console 应用程序分类
## 安装说明
### 前置条件
- Windows 操作系统
- Visual Studio 2022
- 管理员权限(建议使用以便进行全面扫描)
### 从源代码构建
1. 克隆或下载该代码库
2. 在 Visual Studio 中打开 `SearchAvailableExe.sln`
3. 选择目标配置(Debug/Release,x86/x64)
4. 构建解决方案 (Ctrl+Shift+B)
## 使用方法
```
# Scan 当前目录
SearchAvailableExe.exe -i "C:\Program Files"
# Scan 并输出到文件
SearchAvailableExe.exe -i "C:\Windows\System32" -o results.txt
# Scan 所有驱动器(需要管理员权限)
SearchAvailableExe.exe
```
### 命令行选项
| 选项 | 长格式 | 描述 | 默认值 |
|--------|-----------|-------------|---------|
| `-h` | `--help` | 显示帮助信息并退出 | - |
| `-i` | `--input ` | 要扫描的输入目录 | 所有驱动器 |
| `-o` | `--output ` | 结果输出文件 | 控制台输出 |
| `-w` | `--write` | 仅包含可写入的目录 | 禁用 |
| `-c` | `--count ` | 考虑的最大 DLL 数量 | 1 |
| `-b` | `--bit ` | 目标架构 (32, 64, 或 96 表示两者) | 96 |
| `-s` | `--save` | 将可利用文件保存到磁盘 | 禁用 |
| `-l` | `--load ` | DLL 加载方式 (1=静态, 2=动态, 3=两者) | 3 |
| `-p` | `--pass` | 在结果中跳过系统 DLL | 禁用 |
| `-a` | `--search ` | 启用全节扫描 | 禁用 |
| `-g` | `--guiwindow` | 仅包含 GUI 应用程序 | 禁用 |
### 高级示例
```
# Scan 64-bit executables 及可写目录
SearchAvailableExe.exe -i "C:\Program Files" -b 64 -w -o x64_results.txt
# 查找仅有 static DLL loading 的 executables
SearchAvailableExe.exe -i "C:\Windows" -l 1 -c 2
# 使用所有选项进行 Comprehensive scan
SearchAvailableExe.exe -i "C:\" -w -g -p -a 1 -s -o comprehensive_scan.txt
```
## 输出格式
该工具生成包含以下内容的详细报告:
```
=== DLL Hijacking Vulnerability Scan Results ===
Found 15 exploitable executables:
Exploitable Executable: C:\Program Files\Example\app.exe
Architecture: 64-bit | Writable Directory: Yes | DLL Loading: Static | Subsystem: GUI
Exploitable DLL: example.dll
Additional DLLs required:
helper.dll
utility.dll
---------------------------------------------------
```
### 输出字段说明
- **Exploitable Executable (可利用的可执行文件)**:易受攻击的可执行文件的完整路径
- **Architecture (架构)**:32 位或 64 位可执行文件
- **Writable Directory (可写目录)**:目录是否具有写入权限
- **DLL Loading (DLL 加载方式)**:静态(导入表)或动态(LoadLibrary 调用)
- **Subsystem (子系统)**:GUI(窗口化)或控制台应用程序
- **Exploitable DLL (可利用的 DLL)**:可被劫持的 DLL
- **Additional DLLs (额外的 DLL)**:可能需要存在的其他 DLL
### 分析流程
1. **文件发现**:递归扫描目录以查找 `.exe` 文件
2. **签名验证**:使用 Windows Crypto API 验证数字签名
3. **PE 分析**:解析 Portable Executable 头部和导入表
4. **DLL 枚举**:识别导入的 DLL 和动态加载模式
5. **漏洞测试**:创建测试环境并尝试进行 DLL 劫持
6. **结果过滤**:应用用户指定的过滤器和条件
### DLL 加载检测
该工具识别两种类型的 DLL 加载:
#### 静态加载 (导入表)
- 分析 PE 导入表以查找 DLL 依赖项
- 检查可执行文件所在目录中的 DLL 文件
- 识别可能被劫持的缺失 DLL
#### 动态加载 (运行时)
- 扫描可执行文件节区以查找 LoadLibrary 调用
- 在 `.rdata` 和 `.rsrc` 节区中搜索 DLL 名称字符串
- 支持全节扫描以进行彻底分析
## 故障排除
### 常见问题
**访问被拒绝错误**
- 以管理员身份运行以扫描系统目录
- 确保防病毒软件未阻止该工具
**未找到结果**
- 验证目标目录是否包含已签名的可执行文件
- 检查过滤条件(架构、DLL 数量等)
- 尝试使用限制较少的过滤器进行扫描
### 调试信息
为了进行故障排除,该工具提供:
- 扫描期间的进度指示器
- 文件访问问题的错误消息
- 详细模式下的详细过滤信息
## 免责声明
本工具按“原样”提供,不提供任何形式的保证。作者不对因使用本软件而可能产生的任何损害或法律问题负责。请自担风险和责任使用。
## 版本历史
### 版本 2.0 (当前版本)
- 完全重写,代码结构得到改进
- 更好的错误处理和用户反馈
- 改进的命令行界面
- 全面的过滤选项
### 版本 1.0 (原始版本)
- 具有基本功能的初始版本
- 基本的 DLL 劫持检测
标签:C++, Conpot, DLL劫持, Windows安全, 二进制分析, 云安全监控, 云安全运维, 加密, 动态链接库, 可执行文件分析, 子域名枚举, 导入表分析, 数字签名验证, 数据擦除, 权限分析, 漏洞扫描器, 系统安全, 静态分析