Seongmin1223/Malscan
GitHub: Seongmin1223/Malscan
Malscan 是一款静态恶意软件分析自动化工具,通过整合哈希计算、VirusTotal 查询、PE 分析、字符串提取和 YARA 匹配来快速判定可疑文件风险等级并生成报告。
Stars: 0 | Forks: 0
# MalScan
静态恶意软件分析自动化工具
输入一个可疑文件,它会自动执行哈希计算、VirusTotal 查询、PE 结构分析、字符串提取和 YARA 规则匹配,并生成 HTML 报告。
## 截图
## 主要功能
| 功能 | 说明 |
|------|------|
| 哈希计算 | 自动计算 MD5 / SHA1 / SHA256 |
| VirusTotal 查询 | 通过 API 查询 75 个以上防病毒引擎的检测结果 |
| PE 结构分析 | 分析头部、节区、Import Table 和熵值 |
| 字符串提取 | 提取 URL、IP、电子邮件、注册表路径和可疑命令 |
| YARA 规则匹配 | 基于公开规则集检测恶意软件模式 |
| 风险度自动判定 | 综合分析结果,判定为 CLEAN ~ CRITICAL 5 个等级 |
| 生成 HTML 报告 | 自动生成包含可视化分析结果的报告 |
## 项目结构
```
malscan/
├── main.py # CLI 진입점 및 분석 오케스트레이터
├── requirements.txt # 의존성 목록
├── analyzer/
│ ├── hash_checker.py # MD5 / SHA1 / SHA256 해시 계산
│ ├── vt_lookup.py # VirusTotal API v3 연동
│ ├── pe_parser.py # PE 파일 구조 분석
│ ├── string_extractor.py # 문자열 추출 및 패턴 매칭
│ ├── yara_scanner.py # YARA 룰 기반 악성코드 탐지
│ └── risk_scorer.py # 위험도 점수 계산 및 등급 판정
├── report/
│ └── report_generator.py # HTML 보고서 생성 (Jinja2)
├── yara_rules/
│ ├── nanocore_rat.yar # NanoCore / AsyncRAT / RemcosRAT 탐지
│ └── suspicious.yar # 인코딩 PowerShell / 코드인젝션 / 지속성 탐지
├── samples/ # 분석 대상 파일 (VM 환경에서만 사용)
└── output/ # 생성된 보고서 저장
```
## 分析流程
```
의심 파일 입력
↓
[1/5] 해시 계산 (MD5, SHA1, SHA256)
↓
[2/5] VirusTotal API 조회
↓
[3/5] PE 구조 분석 (섹션, Import Table, 엔트로피)
↓
[4/5] 문자열 추출 (URL, IP, 의심 명령어)
↓
[5/5] YARA 룰 매칭
↓
위험도 점수 계산 (0~100점)
↓
HTML 보고서 생성
```
## 风险度评分体系
为各个分析项目分配权重以计算综合得分。
| 项目 | 分值 | 说明 |
|------|------|------|
| VirusTotal 检出率 | 最高 40 分 | 75 个防病毒引擎的检测结果 |
| 可疑 API 导入 | 最高 25 分 | 代码注入、反调试等危险 API |
| 可疑字符串 | 最高 20 分 | C2 地址、可疑命令等 |
| YARA 规则匹配 | 最高 20 分 | 匹配已知的恶意软件模式 |
| 节区熵值 | 最高 15 分 | 加壳/加密可疑指标 |
| 得分 | 等级 | 含义 |
|------|------|------|
| 0 ~ 15 | CLEAN | 似乎是正常的 |
| 16 ~ 35 | LOW | 低风险,建议进一步检查 |
| 36 ~ 59 | MEDIUM | 中等风险,需要注意 |
| 60 ~ 79 | HIGH | 高风险,建议隔离 |
| 80 ~ 100 | CRITICAL | 极度危险,需立即处理 |
## 安装
```
git clone https://github.com/Seongmin1223/Malscan.git
cd Malscan
pip install -r requirements.txt
```
**系统要求**
- Python 3.8 或更高版本
- pip 包:`pefile`、`requests`、`jinja2`、`yara-python`
## 使用方法
**基本分析**
```
python main.py 파일경로.exe
```
**包含 VirusTotal 查询**
```
python main.py 파일경로.exe --vt-api-key YOUR_API_KEY
API_KEY는 https://www.virustotal.com/gui/home/upload에서 sign up -> API_KEY 발급하여 사용 요망
```
**以 JSON 格式输出**
```
python main.py 파일경로.exe --json
```
**指定输出路径**
```
python main.py 파일경로.exe --output reports/result.html
```
**运行示例**
```
[*] 분석 시작: dontopen.exe
--------------------------------------------------
[1/5] 해시 계산 중...
MD5 : de52c0a0c0b60dee20c4cb43f5b42a80
SHA256: 6f15b90269632ec13a103642699d06159...
[2/5] VirusTotal 조회 중...
탐지율: 60/75
[3/5] PE 구조 분석 중...
PE 파일 확인됨 | 섹션 수: 3
[4/5] 의심 문자열 추출 중...
URL: 0개 | IP: 3개 | 의심 명령어: 1개
[5/5] YARA 룰 스캔 중...
★ 2개 룰 매칭! (로드된 룰: 2개)
└─ Nanocore_RAT
└─ Suspicious_Code_Injection
┌─────────────────────────────────────┐
│ 위험도: HIGH 점수: 72/100 │
│ 높은 위험 — 격리 권장 │
└─────────────────────────────────────┘
[+] HTML 보고서 저장됨: output/dontopen_report.html
```
## HTML 报告包含的内容
- 风险度徽章及各项目得分条
- 文件基本信息(架构、编译时间、入口点)
- 文件哈希(MD5 / SHA1 / SHA256)
- YARA 匹配结果(规则名称、作者、匹配模式)
- VirusTotal 各引擎检测结果表
- PE 节区信息及熵值
- 可疑 API 导入列表
- 完整的 Import Table
- URL / IP / 电子邮件 / 注册表路径
- Base64 候选字符串
- 可疑命令字符串
## 添加 YARA 规则的方法
在 `yara_rules/` 文件夹中添加 `.yar` 或 `.yara` 文件,它们将被自动加载。
```
rule My_Custom_Rule
{
meta:
author = "작성자"
description = "탐지 설명"
strings:
$s1 = "탐지할 문자열" ascii wide
condition:
$s1
}
```
公开规则集参考:
- [Florian Roth - signature-base](https://github.com/Neo23x0/signature-base)
- [JPCERT - yara_rules](https://github.com/JPCERTCC/jpcert-yara)
- [Elastic Security - protections-artifacts](https://github.com/elastic/protections-artifacts)
## 测试样本
- [MalwareBazaar](https://bazaar.abuse.ch/) — 免费的恶意软件样本数据库
- 下载压缩包解压密码:`infected`
## 分析案例
**NanoCore RAT 分析结果**
| 项目 | 结果 |
|------|------|
| VirusTotal | 60/75 检出 |
| YARA | 匹配 Nanocore_RAT 规则 |
| 节区数量 | 3 个(疑似加壳) |
| 熵值 | 7.4(疑似加密) |
| 风险度 | MEDIUM ~ HIGH |
虽然是加壳的恶意软件导致 Import Table 被隐藏,但可以通过 YARA 规则和熵值分析进行检测。
## 局限性
- **加壳的恶意软件**:Import Table 被加密,限制了可疑 API 的检测
- **静态分析局限**:在没有实际执行的情况下,无法确认动态行为(C2 通信、文件创建等)
- **YARA 规则范围**:除了默认提供的规则集外,还需要自行编写额外的规则
## 未来开发计划
- [ ] 集成 ssdeep 模糊哈希(分析变种恶意软件的相似度)
- [ ] 文件夹批量分析及 CSV 摘要输出
- [ ] 支持分析 PDF / Office 文档
- [ ] 集成 ANY.RUN API(动态分析)
- [ ] 使用 .env 文件管理 API 密钥
## 开发环境
- Python 3.12
- Windows 11 / Ubuntu 24 (VMware)
- 分析环境:VMware Workstation(仅主机模式网络)
## 参考资料
- [pefile 库](https://github.com/erocarrera/pefile)
- [VirusTotal API v3 文档](https://developers.virustotal.com/reference)
- [YARA 官方文档](https://yara.readthedocs.io/)
- [MalwareBazaar](https://bazaar.abuse.ch/)
- [Florian Roth YARA 规则集](https://github.com/Neo23x0/signature-base)
- [malapi.io](https://malapi.io/) — 可疑 Win32 API 参考
## 主要功能
| 功能 | 说明 |
|------|------|
| 哈希计算 | 自动计算 MD5 / SHA1 / SHA256 |
| VirusTotal 查询 | 通过 API 查询 75 个以上防病毒引擎的检测结果 |
| PE 结构分析 | 分析头部、节区、Import Table 和熵值 |
| 字符串提取 | 提取 URL、IP、电子邮件、注册表路径和可疑命令 |
| YARA 规则匹配 | 基于公开规则集检测恶意软件模式 |
| 风险度自动判定 | 综合分析结果,判定为 CLEAN ~ CRITICAL 5 个等级 |
| 生成 HTML 报告 | 自动生成包含可视化分析结果的报告 |
## 项目结构
```
malscan/
├── main.py # CLI 진입점 및 분석 오케스트레이터
├── requirements.txt # 의존성 목록
├── analyzer/
│ ├── hash_checker.py # MD5 / SHA1 / SHA256 해시 계산
│ ├── vt_lookup.py # VirusTotal API v3 연동
│ ├── pe_parser.py # PE 파일 구조 분석
│ ├── string_extractor.py # 문자열 추출 및 패턴 매칭
│ ├── yara_scanner.py # YARA 룰 기반 악성코드 탐지
│ └── risk_scorer.py # 위험도 점수 계산 및 등급 판정
├── report/
│ └── report_generator.py # HTML 보고서 생성 (Jinja2)
├── yara_rules/
│ ├── nanocore_rat.yar # NanoCore / AsyncRAT / RemcosRAT 탐지
│ └── suspicious.yar # 인코딩 PowerShell / 코드인젝션 / 지속성 탐지
├── samples/ # 분석 대상 파일 (VM 환경에서만 사용)
└── output/ # 생성된 보고서 저장
```
## 分析流程
```
의심 파일 입력
↓
[1/5] 해시 계산 (MD5, SHA1, SHA256)
↓
[2/5] VirusTotal API 조회
↓
[3/5] PE 구조 분석 (섹션, Import Table, 엔트로피)
↓
[4/5] 문자열 추출 (URL, IP, 의심 명령어)
↓
[5/5] YARA 룰 매칭
↓
위험도 점수 계산 (0~100점)
↓
HTML 보고서 생성
```
## 风险度评分体系
为各个分析项目分配权重以计算综合得分。
| 项目 | 分值 | 说明 |
|------|------|------|
| VirusTotal 检出率 | 最高 40 分 | 75 个防病毒引擎的检测结果 |
| 可疑 API 导入 | 最高 25 分 | 代码注入、反调试等危险 API |
| 可疑字符串 | 最高 20 分 | C2 地址、可疑命令等 |
| YARA 规则匹配 | 最高 20 分 | 匹配已知的恶意软件模式 |
| 节区熵值 | 最高 15 分 | 加壳/加密可疑指标 |
| 得分 | 等级 | 含义 |
|------|------|------|
| 0 ~ 15 | CLEAN | 似乎是正常的 |
| 16 ~ 35 | LOW | 低风险,建议进一步检查 |
| 36 ~ 59 | MEDIUM | 中等风险,需要注意 |
| 60 ~ 79 | HIGH | 高风险,建议隔离 |
| 80 ~ 100 | CRITICAL | 极度危险,需立即处理 |
## 安装
```
git clone https://github.com/Seongmin1223/Malscan.git
cd Malscan
pip install -r requirements.txt
```
**系统要求**
- Python 3.8 或更高版本
- pip 包:`pefile`、`requests`、`jinja2`、`yara-python`
## 使用方法
**基本分析**
```
python main.py 파일경로.exe
```
**包含 VirusTotal 查询**
```
python main.py 파일경로.exe --vt-api-key YOUR_API_KEY
API_KEY는 https://www.virustotal.com/gui/home/upload에서 sign up -> API_KEY 발급하여 사용 요망
```
**以 JSON 格式输出**
```
python main.py 파일경로.exe --json
```
**指定输出路径**
```
python main.py 파일경로.exe --output reports/result.html
```
**运行示例**
```
[*] 분석 시작: dontopen.exe
--------------------------------------------------
[1/5] 해시 계산 중...
MD5 : de52c0a0c0b60dee20c4cb43f5b42a80
SHA256: 6f15b90269632ec13a103642699d06159...
[2/5] VirusTotal 조회 중...
탐지율: 60/75
[3/5] PE 구조 분석 중...
PE 파일 확인됨 | 섹션 수: 3
[4/5] 의심 문자열 추출 중...
URL: 0개 | IP: 3개 | 의심 명령어: 1개
[5/5] YARA 룰 스캔 중...
★ 2개 룰 매칭! (로드된 룰: 2개)
└─ Nanocore_RAT
└─ Suspicious_Code_Injection
┌─────────────────────────────────────┐
│ 위험도: HIGH 점수: 72/100 │
│ 높은 위험 — 격리 권장 │
└─────────────────────────────────────┘
[+] HTML 보고서 저장됨: output/dontopen_report.html
```
## HTML 报告包含的内容
- 风险度徽章及各项目得分条
- 文件基本信息(架构、编译时间、入口点)
- 文件哈希(MD5 / SHA1 / SHA256)
- YARA 匹配结果(规则名称、作者、匹配模式)
- VirusTotal 各引擎检测结果表
- PE 节区信息及熵值
- 可疑 API 导入列表
- 完整的 Import Table
- URL / IP / 电子邮件 / 注册表路径
- Base64 候选字符串
- 可疑命令字符串
## 添加 YARA 规则的方法
在 `yara_rules/` 文件夹中添加 `.yar` 或 `.yara` 文件,它们将被自动加载。
```
rule My_Custom_Rule
{
meta:
author = "작성자"
description = "탐지 설명"
strings:
$s1 = "탐지할 문자열" ascii wide
condition:
$s1
}
```
公开规则集参考:
- [Florian Roth - signature-base](https://github.com/Neo23x0/signature-base)
- [JPCERT - yara_rules](https://github.com/JPCERTCC/jpcert-yara)
- [Elastic Security - protections-artifacts](https://github.com/elastic/protections-artifacts)
## 测试样本
- [MalwareBazaar](https://bazaar.abuse.ch/) — 免费的恶意软件样本数据库
- 下载压缩包解压密码:`infected`
## 分析案例
**NanoCore RAT 分析结果**
| 项目 | 结果 |
|------|------|
| VirusTotal | 60/75 检出 |
| YARA | 匹配 Nanocore_RAT 规则 |
| 节区数量 | 3 个(疑似加壳) |
| 熵值 | 7.4(疑似加密) |
| 风险度 | MEDIUM ~ HIGH |
虽然是加壳的恶意软件导致 Import Table 被隐藏,但可以通过 YARA 规则和熵值分析进行检测。
## 局限性
- **加壳的恶意软件**:Import Table 被加密,限制了可疑 API 的检测
- **静态分析局限**:在没有实际执行的情况下,无法确认动态行为(C2 通信、文件创建等)
- **YARA 规则范围**:除了默认提供的规则集外,还需要自行编写额外的规则
## 未来开发计划
- [ ] 集成 ssdeep 模糊哈希(分析变种恶意软件的相似度)
- [ ] 文件夹批量分析及 CSV 摘要输出
- [ ] 支持分析 PDF / Office 文档
- [ ] 集成 ANY.RUN API(动态分析)
- [ ] 使用 .env 文件管理 API 密钥
## 开发环境
- Python 3.12
- Windows 11 / Ubuntu 24 (VMware)
- 分析环境:VMware Workstation(仅主机模式网络)
## 参考资料
- [pefile 库](https://github.com/erocarrera/pefile)
- [VirusTotal API v3 文档](https://developers.virustotal.com/reference)
- [YARA 官方文档](https://yara.readthedocs.io/)
- [MalwareBazaar](https://bazaar.abuse.ch/)
- [Florian Roth YARA 规则集](https://github.com/Neo23x0/signature-base)
- [malapi.io](https://malapi.io/) — 可疑 Win32 API 参考标签:DAST, Python, YARA, 云安全监控, 云资产可视化, 威胁情报, 安全, 开发者工具, 恶意软件分析, 无后门, 网络调试, 自动化, 超时处理, 逆向工具, 静态分析