abfsdgrl/Teker
GitHub: abfsdgrl/Teker
一款轻量高效的 Windows PE 静态分析工具包,同时提供 GUI 和 CLI,专为恶意软件分析和逆向工程场景设计。
Stars: 3 | Forks: 0
Teker
Windows 静态 PE 分析工具包 — GUI 和 CLI
Teker 是一款开源的 PE (Portable Executable) 分析工具包,专为恶意软件分析师、逆向工程师和安全研究人员打造。它同时提供了一个包含 15 个标签页的 Qt6 GUI 和一个拥有 25+ 命令的 CLI。整个应用程序通过内存映射 I/O 和自定义渲染视图运行,内存占用仅约 50MB —— 无需将文件复制到内存中。
### Teker vs. PeStudio — 相同文件,相同机器
| | Teker | PeStudio 9.61 |
|---|---|---|
| **RAM** | 59.4 MB | 2,067.8 MB |
| **CPU** | 0% idle | 9.1% idle |
| **File** | `notepad.exe` (360KB) | `notepad.exe` (360KB) |


## 演示

## GUI — 15 个分析标签页
GUI 将所有繁重的分析任务(反汇编、哈希计算、熵值计算、风险评分、XRef、函数发现)放在后台线程中运行。UI 永远不会卡顿。您可以在第一个文件仍在分析时打开第二个文件 —— 前一个工作线程会被安全取消。
### 概览标签页
PE 头字段、文件元数据、架构、入口点、镜像基址、校验和以及时间戳 —— 全部从实际的 DOS/NT/Optional 头解析而来。

### 区段标签页
区段表包含名称、虚拟地址、虚拟大小、原始偏移、原始大小、特征标志以及每个区段的 Shannon 熵。高熵(>7.0)区段会被标记为可能已加壳或加密。
### 十六进制标签页
自定义渲染的十六进制查看器/编辑器。不是 QTextEdit —— 字节通过 `QPainter` 直接绘制以获得速度。特性包括:
- 可配置显示的地址/十六进制/ASCII 列
- 支持鼠标拖动的字节级选择
- 编辑模式(工具栏切换或右键单击)支持就地十六进制编辑
- 按十六进制模式或文本字符串搜索
- 复制为十六进制、文本、C 数组或原始地址
- 侧边栏的区段感知导航
- 将补丁保存到原始文件或另存为新副本
### 反汇编标签页
由 Capstone Engine 驱动的 x86/x64 反汇编。自定义渲染 —— 每条指令单独绘制并带有语法着色(调用=黄色,跳转=紫色,返回=红色,空操作=灰色)。特性包括:
- 地址、字节、助记符、操作数列
- 带有后退堆栈(类似浏览器)的分支目标导航
- 每个地址的用户注释和标签
- 被引用地址上的 XRef 计数徽章
- 按助记符、地址或操作数文本搜索
- 可配置的指令限制(默认:10K)

### 导入表标签页
从导入目录解析的所有导入 DLL 及其函数。显示函数名称、序号、Thunk RVA。仅序号导入显示为 `Ordinal_N`。绑定导入和延迟导入单独解析。可疑的 API 模式(进程注入、键盘记录、加密)会被高亮显示。
### 导出表标签页
导出函数及其名称、序号、RVA。转发导出显示转发目标字符串。支持高达 65,536 个导出并进行边界检查。
### 字符串标签页
字符串提取并分为 9 种类型:
| Category | What it catches |
|---|---|
| URLs | `http://`, `https://`, `ftp://` |
| IP Addresses | IPv4 patterns with port detection |
| Email Addresses | `user@domain.tld` patterns |
| File Paths | Windows paths, `/etc/` paths |
| Registry Keys | `HKLM\`, `HKCU\`, `SOFTWARE\` |
| Domains | Multi-TLD domain names |
| Suspicious | `cmd.exe`, `powershell`, `mimikatz`, crypto keywords |
| Base64 | Strings matching Base64 charset with minimum entropy |
| Interesting | Debug strings, version strings, PDB paths |
从 ASCII 和 UTF-16 (宽) 字符串中提取。可配置最小长度、扫描限制和最大字符串数量。

### 风险分析标签页
0-100 风险评分系统,包含 52+ 个指标检查。每个指标都有一个 ID(IND-001 至 IND-052)、严重级别、类别和分值贡献。
评分考虑:
- 区段异常(可写+可执行、原始大小为零、高熵)
- 导入异常(进程注入 API、调试规避、加密使用)
- 头部异常(可疑时间戳、校验和损坏、非标准入口点)
- 资源异常(嵌入的可执行文件、超大资源)
- 数字签名验证 —— 来自受信任供应商的有效签名可将分数降低高达 85%

### 资源标签页
带有类型识别的资源目录树(RT_ICON, RT_MANIFEST, RT_VERSION, RT_BITMAP 等)。显示资源大小、代码页和语言。已知类型的数据预览。
### YARA 标签页
使用 YARA 规则扫描加载的 PE。加载单个 `.yar` 文件或整个目录。内置 4 个规则集:
- `anti_debug.yar` — 反调试技术签名
- `crypto_signatures.yar` — 加密常量检测
- `packer_signatures.yar` — 已知壳/保护器模式
- `suspicious_sections.yar` — 异常区段特征
还包括一个 YARA 规则生成器,可根据当前 PE 的特征创建规则。
### XRefs 标签页
基于反汇编输出的交叉引用分析。识别:
- 直接调用 (`CALL addr`)
- 间接调用 (`CALL [reg+offset]`)
- 直接跳转 (`JMP addr`, `Jcc addr`)
- RIP 相对引用 (x64)
- 对已知导入的数据引用
构建具有调用者→被调用者关系和符号解析的调用图。
### 函数标签页
从入口点开始并通过调用目标扩展的函数发现。显示:
- 函数地址、大小、基本块数量
- 带有分支分析的基本块边界

### 编辑器标签页
就地修改 PE 头和区段:
- 编辑 Optional Header 字段(入口点、镜像基址、区段对齐)
- 编辑区段属性(名称、特征、大小)
- 添加新区段
- 移除区段
- 将修改后的 PE 保存到新文件
所有更改在写入前都会被跟踪和验证。
### 对比标签页
并排加载两个 PE 文件并生成差异报告。比较头部、区段、导入、导出和元数据。差异通过颜色编码高亮显示。
### 插件标签页
管理和执行插件。三种插件类型:
- **YARA rules** — 位于 `plugins/yara/` 的 `.yar` 文件
- **JSON indicators** — 位于 `plugins/indicators/` 的自定义指标定义
- **Python scripts** — 位于 `plugins/scripts/` 的分析脚本,接收 JSON 格式的 PE 元数据
包括用于链接插件的管道引擎。两个内置管道:`full_scan` 和 `quick_triage`。
按严重程度和插件类型筛选结果。包含 12 个内置插件。
有关编写自己的插件,请参阅 [插件开发指南](docs/PLUGIN_DEVELOPMENT.md)。
## CLI — 25+ 命令
GUI 中可用的每个分析模块也有对应的 CLI 等效功能。所有命令都支持 `--json` 以进行机器可读的输出。
```
# 带评分的风险分析
.\teker.exe risk target.exe
# 文件信息与 Header
.\teker.exe info target.exe
.\teker.exe headers target.exe
# Hash (MD5, SHA1, SHA256, IMPHASH)
.\teker.exe hash target.exe
# 字符串提取
.\teker.exe strings target.exe
.\teker.exe strings target.exe --urls
# 指标 (52+ 项检查)
.\teker.exe indicators target.exe
# 反汇编
.\teker.exe disasm target.exe
.\teker.exe entry target.exe
# YARA
.\teker.exe yara --rules rules/ target.exe
.\teker.exe yara-gen target.exe
# 批量扫描整个目录
.\teker.exe batch C:\Samples
# 完整 JSON 报告
.\teker.exe all target.exe --json
# HTML/JSON 报告文件
.\teker.exe report target.exe --format html -o report.html
```
完整命令列表
```
ANALYSIS:
info File metadata, architecture, entry point
hash MD5, SHA1, SHA256, IMPHASH
entropy Per-section Shannon entropy
strings Categorized string extraction (9 types)
indicators 52+ anomaly pattern checks
risk 0-100 risk scoring with digital signature check
manifest UAC level, compatibility flags
resources Resource directory listing
tls TLS callback detection
version Version info strings
overlay Overlay data detection
packer Packer/protector signature matching
evasion Anti-debug, anti-VM, sandbox evasion detection
yara Scan with YARA rules
yara-gen Generate YARA rule from PE characteristics
disasm Disassemble .text section
entry Disassemble from entry point
all Run every analysis command
STRUCTURE:
sections Section table with entropy
imports Import directory (DLLs + functions)
exports Export directory
headers Full DOS/NT/Optional header dump
PLUGINS:
plugins List discovered plugins
plugin-run Execute all active plugins
pipeline-list Show available pipelines
pipeline-run Execute a named pipeline
TOOLS:
compare Diff two PE files
batch Scan directory for PE files
search Search for byte/string pattern
report Generate HTML or JSON report
```
## 工作原理 — 架构
### 内存映射 I/O
PE 文件永远不会加载到进程内存中。相反,Teker 调用 `CreateFileMapping` + `MapViewOfFile` 将文件映射到虚拟地址空间。操作系统内核仅分页实际访问的 4KB 页面。一个 500MB 的 PE 文件可能仅使用 2-3MB 的物理 RAM。
```
Traditional approach: File → read() → malloc buffer → process
Teker approach: File → CreateFileMapping → MapViewOfFile → direct pointer access
```
### 自定义控件渲染
十六进制查看器和反汇编视图不使用 `QTextEdit`、`QTableView` 或任何现成的 Qt 控件。它们重写 `paintEvent()` 并使用 `QPainter` 直接绘制每一行。这意味着:
- 10,000 条指令 = 一个 `std::vector` + 仅绘制可见的约 40 行
- 没有 QTreeWidgetItem 对象,没有模型/视图开销,没有 DOM
### 边界分析
每个分析模块都在 `constants.h` 中定义了硬性限制,以防止资源耗尽:
- 反汇编:256KB 窗口 (`DISASM_MAX_BYTES`),10K 指令上限 (`DISASM_MAX_INSNS`)
- 字符串:可配置扫描限制,每个字符串最大 4096 字节 (`MAX_STRING_LENGTH`)
- 导入:10K 迭代上限 (`MAX_IMPORT_ITERATIONS`)
- 区段:512 个区段硬性限制 (`MAX_PE_SECTIONS_HARD_LIMIT`)
- 文件大小:最大 2GB (`MAX_FILE_SIZE`)
- 资源:每个目录层级 100 个条目
### 后台线程
所有繁重的工作(反汇编、哈希计算、熵值计算、风险分析、YARA 扫描、XRef、函数发现)都在 `QThread` 工作线程中运行。UI 线程仅通过 Qt 信号接收结果。取消是协作式的 —— 每个分析阶段都会检查 `isCancelRequested()`。
## 安装
从 [Releases](../../releases) 下载最新版本,解压并运行。
| File | Description |
|------|-------------|
| `TekerGUI.exe` | GUI with 15 analysis tabs and 3 themes (Dark, Light, Monokai) |
| `teker.exe` | CLI with 25+ commands and JSON output |
**Requirements:** Windows 10/11 (x64), [Visual C++ Redistributable 2022](https://aka.ms/vs/17/release/vc_redist.x64.exe)
无需安装程序。解压并运行。
## 从源代码构建
**Requirements:** Visual Studio 2022 (C++ Desktop workload, C++20 support), Qt 6.2+, CMake 3.16+, vcpkg with `libyara:x64-windows`
Capstone Engine 和 Google Test 由 CMake 自动获取。
```
git clone https://github.com/abfsdgrl/teker.git
cd teker
cmake -S . -B build `
-G "Visual Studio 17 2022" -A x64 `
-DBUILD_TESTING=ON `
-DCMAKE_TOOLCHAIN_FILE="C:/vcpkg/scripts/buildsystems/vcpkg.cmake" `
-DCMAKE_PREFIX_PATH="C:/Qt/6.6.0/msvc2019_64"
cmake --build build --config Release
# 为 GUI 部署 Qt DLL
C:\Qt\6.6.0\msvc2019_64\bin\windeployqt.exe build\bin\Release\TekerGUI.exe
Copy-Item -Recurse data build\bin\Release\data
Copy-Item -Recurse plugins build\bin\Release\plugins
```
有关详细说明、常见 Qt 路径、仅 CLI 构建和故障排除,请参阅 [docs/BUILD.md](docs/BUILD.md)。
## 贡献
欢迎贡献、错误报告和功能请求。有关指南,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。
## 许可证
[GNU General Public License v3.0](LICENSE)
## 免责声明
Teker 提供可疑模式的指标 —— 而非确定的恶意软件分类。结果应始终通过其他工具和手动分析进行验证。
## 支持
如果您发现 Teker 在您的分析工作中很有用,请考虑请我喝杯咖啡!

## 致谢
- [Capstone Engine](https://www.capstone-engine.org/) — Disassembly framework
- [Qt](https://www.qt.io/) — GUI framework
- [YARA](https://virustotal.github.io/yara/) — Pattern matching engine
- [nlohmann/json](https://github.com/nlohmann/json) — JSON library
标签:AMSI绕过, Bash脚本, C++20, CLI, Conpot, DAST, Findomain, GUI, PE分析, Qt6, SNI设置, Wayback Machine, WiFi技术, Windows安全, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 内存映射, 反汇编, 可执行文件分析, 威胁检测, 开源安全工具, 恶意软件分析, 文件结构解析, 无服务器架构, 熵计算, 调试插件, 轻量级工具, 逆向工具, 逆向工程, 逆向工程平台, 静态分析, 风险评分