genrex-bot/malyze

GitHub: genrex-bot/malyze

一款纯静态的本地恶意软件分诊 CLI 工具,支持多种文件格式的自动化风险分析与报告生成,全程不执行文件、不联网上传。

Stars: 0 | Forks: 0

# Malyze — 静态恶意软件分诊工具 ![Python](https://img.shields.io/badge/python-3.8%2B-blue) ![许可证](https://img.shields.io/badge/license-MIT-green) ![平台](https://img.shields.io/badge/platform-Windows%20%7C%20Linux%20%7C%20macOS-lightgrey) ![静态分析](https://img.shields.io/badge/analysis-static%20only-success) 一款 Python CLI 工具,能够分析任何上传的文件,识别其类型, 并生成一份本地报告,解释**它是哪种文件**以及 **它可能造成什么危害**——这一切完全基于静态分析 (绝不执行——你的机器始终安全)。 ## 它能做什么 1. **识别文件类型**,通过 magic bytes(PE, ELF, APK, PDF, Office 文档, 脚本, 压缩包等) 2. **计算哈希值** (MD5/SHA1/SHA256) —— 可用于与 VirusTotal 或其他威胁情报源进行交叉核对,而无需上传文件。 3. **计算熵值** —— 高熵值通常意味着内容被加壳/加密/混淆, 这是一种经典的恶意软件规避技术。 4. **提取字符串** 并扫描可疑指标:URL、IP、 危险的 API 名称、shell/PowerShell 混淆模式等。 5. **运行特定类型的深度分析**: - **PE (EXE/DLL):** 节区及各节区熵值(加壳检测)、 导入表、可疑的 Windows API 使用、数字签名检查 - **ELF (Linux 二进制文件):** 符号、可疑的系统调用 (ptrace, setuid, LD_PRELOAD 等)、stripped/静态链接检查 - **APK (Android):** 危险权限(短信、通讯录、相机、滥用 无障碍服务等)、可疑的 classes.dex API 使用 (DexClassLoader、 反射、root 检查、native 库) - **PDF:** 内嵌 JavaScript、自动动作 (OpenAction/Launch)、嵌入 文件、可疑的 URI —— 甚至包括压缩对象流内部的内容 - **Office (docx/xlsx/pptx):** VBA 宏检测、远程模板注入、 内嵌 OLE 对象 - **脚本 (.js/.ps1/.vbs/.bat/.sh/.py):** 混淆模式、超长的 base64 blob、异常的行长度 6. **评估风险** 通过一个透明、可解释的启发式引擎, 并给出一个结论:`MINIMAL` / `LOW` / `MEDIUM` / `HIGH` / `CRITICAL`, 同时提供得出该评分的确切原因。 7. **生成本地报告** 以 `.txt`、`.json` 和/或 `.html` 格式 —— 任何数据都不会 离开你的机器。 ## 设置 ### 1. 克隆仓库 ``` git clone https://github.com/genrex-bot/malyze.git cd malyze ``` ### 2. 环境设置(虚拟环境) 强烈建议在虚拟环境中运行此工具,以便 依赖项与你的系统 Python 保持隔离。 **Linux / macOS:** ``` python3 -m venv venv source venv/bin/activate ``` **Windows (命令提示符):** ``` python -m venv venv venv\Scripts\activate.bat ``` **Windows (PowerShell):** ``` python -m venv venv venv\Scripts\Activate.ps1 ``` 如果设置成功,你的命令行提示符开头将会显示 `(venv)`。 如果之后想退出虚拟环境,只需运行: ``` deactivate ``` ### 3. 安装依赖 在激活的虚拟环境中: ``` pip install -r requirements.txt ``` 你还需要在操作系统层面安装 `libmagic`,以实现最准确的 文件类型检测: - **Linux/macOS:** 通常已经预装;在 Debian/Ubuntu 上使用:`sudo apt-get install libmagic1` - **Windows:** 请安装适配 Windows 的构建版本:`pip install python-magic-bin` (仅当普通的 `python-magic` 出现导入错误时才需要) 如果完全缺失 `libmagic`,该工具依然可以工作 —— 它只会 退回到其内置的签名表进行文件类型检测。 ## 用法 ``` python3 malyze [--out OUTPUT_DIR] [--format txt|json|html|all] ``` 在 Windows 上,如果你的系统配置如此,请使用 `python` 而不是 `python3`: ``` python malyze ``` (在 Linux/macOS 上,你还可以直接运行 `./malyze <文件>`,因为 它是可执行文件并包含 shebang 行。) 示例: ``` # 分析一个 APK,在 ./malyze_reports/ 中获取全部 3 种报告格式 python3 malyze suspicious_app.apk # 分析一个可疑的 EXE,仅在一个自定义文件夹中获取 HTML 报告 python3 malyze malware_sample.exe --out ~/Desktop/scans --format html ``` ## 使用内置的样本进行测试 `samples/` 文件夹中包含了一些合成的(无害但在结构上 看起来“很可疑”)测试文件,以便你能立即看到工具的实际运行效果: ``` python3 malyze samples/fake_app.apk # flags dangerous permissions + suspicious APIs python3 malyze samples/suspicious.pdf # flags embedded JavaScript + auto-action python3 malyze samples/dropper.ps1 # flags obfuscation + base64 payload patterns python3 malyze samples/benign.txt # comes back clean (MINIMAL risk) ``` ## 输出示例 针对内置的 `fake_app.apk` 样本运行该工具,输出如下所示: ``` $ python3 malyze samples/fake_app.apk --format txt [*] Analyzing: samples/fake_app.apk [*] SHA256: 6109b5f1bb813e84584dd58dab4da62dab36b136d88a5a1a6c25bfda90bcc43b [*] Detected type: ZIP-based archive (application/vnd.android.package-archive) -> category: apk [*] Entropy: 4.9956 (normal) [*] Running specialized analyzer: apk [*] Risk verdict: MEDIUM (score 18) [+] Report(s) written: malyze_reports/fake_app_report.txt ``` 而生成的报告(`fake_app_report.txt`)会通过完整的推理过程拆解结论: ``` ====================================================================== MALYZE - STATIC MALWARE TRIAGE REPORT ====================================================================== File: fake_app.apk Size: 1462 bytes Detected type: ZIP-based archive (application/vnd.android.package-archive) SHA256: 6109b5f1bb813e84584dd58dab4da62dab36b136d88a5a1a6c25bfda90bcc43b Entropy: 4.9956 (normal) ---------------------------------------------------------------------- RISK VERDICT: MEDIUM (score: 18) ---------------------------------------------------------------------- Reasons: - Suspicious keywords/commands found: /system/bin/su, DexClassLoader, Runtime.exec, TelephonyManager, sendTextMessage - Dangerous permissions requested: CAMERA, READ_CONTACTS, SEND_SMS ---------------------------------------------------------------------- TYPE-SPECIFIC ANALYSIS ---------------------------------------------------------------------- { "permissions": ["android.permission.CAMERA", "android.permission.READ_CONTACTS", "android.permission.SEND_SMS"], "suspicious_dex_api_hits": ["/system/bin/su", "DexClassLoader", "Runtime.exec", "TelephonyManager", "sendTextMessage"] } ====================================================================== ``` `.html` 格式会将相同的数据渲染为一份带有颜色标记且可共享的报告。 ## 风险评分的运作方式 每个分析器都会提供“发现项”(例如 `dangerous_permissions`、 `pdf_javascript`、`packed_pe`)。每个发现项都有一个权重(见 `core/risk.py`)。加权总和会映射到一个结论区间。报告会展示 每一个原因——没有任何东西是黑盒。 | 评分 | 结论 | |-------|---------| | 0 | MINIMAL / 无指标 | | 1–13 | LOW | | 14–27 | MEDIUM | | 28–44 | HIGH | | 45+ | CRITICAL | ## 重要局限性(请务必阅读) - **这是基于启发式的静态分析,并非确定性的结论。** 一份干净的 结果不能保证文件是安全的,而被标记的结果也 不能保证文件就是恶意的(合法的安装程序/游戏通常会被加壳, 并使用一些同样会被标记的 API)。 - **没有动态/沙箱执行** —— 这是出于对你的安全考虑而特意设计的。它 无法捕获只有在运行时才会暴露的恶意软件(例如逻辑炸弹、 延时触发的载荷、无文件攻击)。 - 它是一个学习/分诊工具,不能替代真正的 AV/EDR 产品或 合适的沙箱(例如 Cuckoo, ANY.RUN,通过哈希值进行 VirusTotal 查询),当你 需要一个高置信度的结论时,应使用那些专业工具。 - 无论此工具报告的结果如何,对于任何真正未知/不受信任的文件都应 谨慎对待——即使结论显示为干净, 也不要在主力机器上打开或运行它。 ## 项目结构 ``` malyze/ ├── malyze # CLI entry point / orchestrator (run as: python3 malyze ) ├── core/ │ ├── hashing.py # MD5/SHA1/SHA256 │ ├── entropy.py # Shannon entropy + verdict │ ├── strings_scan.py # string extraction + indicator regexes │ ├── filetype.py # magic-byte detection + category classifier │ ├── risk.py # weighted scoring engine │ └── report.py # txt/json/html report writers ├── analyzers/ │ ├── pe_analyzer.py # Windows EXE/DLL │ ├── elf_analyzer.py # Linux binaries │ ├── apk_analyzer.py # Android APK │ ├── pdf_analyzer.py # PDF │ ├── office_analyzer.py # docx/xlsx/pptx │ └── script_analyzer.py # JS/PS1/VBS/BAT/SH/PY ├── samples/ # synthetic test files (safe, not real malware) └── requirements.txt ``` ## 扩展功能 添加新文件类型只需:编写一个新的 `analyzers/x_analyzer.py`,让它 返回 `(result_dict, findings_dict)`,在 `malyze` 脚本的 `ANALYZER_MAP` 中注册它,并将任何新的加权规则添加到 `core/risk.py` 中即可。
标签:DAST, Python, 云安全监控, 威胁情报, 开发者工具, 恶意软件分析, 无后门, 逆向工具, 静态分析