fareedfauzi/PseudoNote
GitHub: fareedfauzi/PseudoNote
一款将 AI 辅助能力直接集成到 IDA Pro 中的恶意软件逆向工程插件,通过自动化重命名、代码解释、行为分类和深度取证报告加速恶意软件分析流程。
Stars: 46 | Forks: 3
# PseudoNote
**一款由 AI 驱动的 IDA Pro 恶意软件逆向工程插件。**
## 目录
- [PseudoNote](#pseudonote)
- [目录](#table-of-contents)
- [什么是 PseudoNote?](#what-is-pseudonote)
- [功能概览](#feature-overview)
- [安装](#installation)
- [1. 复制插件文件](#1-copy-the-plugin-files)
- [2. 安装 Python 依赖](#2-install-python-dependencies)
- [3. 配置你的 AI 提供商](#3-configure-your-ai-provider)
- [配置 & AI 提供商](#configuration--ai-providers)
- [快速入门](#quick-start)
- [所有操作 & 快捷键](#all-actions--hotkeys)
- [功能详解](#features-in-depth)
- [PseudoNote 面板](#pseudonote-pane)
- [重命名函数](#rename-function)
- [重命名变量](#rename-variables)
- [添加注释(伪代码)](#add-comments-pseudocode)
- [添加节注释(IDA-View)](#add-section-comments-ida-view)
- [函数原型](#function-prototype)
- [结构体编辑器](#struct-editor)
- [智能问答(AI)](#ask-chat-ai)
- [批量函数重命名器](#bulk-function-renamer)
- [批量变量重命名器](#bulk-variable-renamer)
- [批量函数分析器](#bulk-function-analyzer)
- [深度分析器](#deep-analyzer)
- [函数调用链总结器](#function-chain-summarizer)
- [FLOSS 字符串发现](#floss-strings-discovery)
- [Shellcode 分析(静态)](#shellcode-analysis-static)
- [调用高亮器](#call-highlighter)
- [调用树](#call-tree)
- [搜索工具](#search-utilities)
- [IDA 视图高级复制](#ida-view-advance-copy)
- [十六进制查看器](#hex-viewer)
- [批量分析器 vs 深度分析器](#bulk-analyzer-vs-deep-analyzer)
- [深度分析器流水线](#deep-analyzer-pipeline)
- [阶段 1:发现 & 准备](#phase-1-discovery--preparation)
- [阶段 1 — 环境设置](#stage-1--environment-setup)
- [阶段 2 — 递归调用图发现](#stage-2--recursive-call-graph-discovery)
- [阶段 3 — 初始函数 & 变量重命名](#stage-3--initial-function--variable-renaming)
- [阶段 2:深度恶意代码分析](#phase-2-deep-malicious-code-analysis)
- [阶段 4 — 初始代码分析 + 可读 C 代码生成](#stage-4--initial-code-analysis--readable-c-generation)
- [阶段 5 — 上下文代码分析细化](#stage-5--contextual-code-analysis-refinement)
- [阶段 6 — 报告数据生成](#stage-6--report-data-generation)
- [阶段 7 — HTML 报告生成](#stage-7--html-report-generation)
- [批量分析器流水线](#bulk-analyzer-pipeline)
- [数据持久化](#data-persistence)
- [配置文件参考](#configuration-file-reference)
- [技巧 & 最佳实践](#tips--best-practices)
- [故障排除](#troubleshooting)
## 什么是 PseudoNote?
PseudoNote 是一款 IDA Pro 插件,将 AI 辅助直接引入你的逆向工程工作流中。它专为希望加速恶意软件分析的分析师而设计,能够自动重命名未知的 `sub_` 函数,解释代码功能,生成可读的 C 代码重写,识别恶意指标,生成完整的 HTML 取证报告等等!
PseudoNote 生成的所有内容——如笔记、重命名的符号、AI 分析、聊天记录——都会直接保存到 IDB 文件中,因此你的工作成果绝不会在会话间丢失。
## 功能概览
| 功能 | 描述 |
|---|---|
| **PseudoNote 面板** | |
| 可读 C 代码 | 为当前函数生成 AI 重写的、人类可读的 C 代码;保存到 IDB |
| 函数详情 | 查看当前函数的调用者、被调用者、API 引用和字符串引用 |
| 分析师笔记 | 集成 Markdown 编辑器,支持实时预览和格式化工具栏;保存到 IDB |
| 自定义 Prompt | 交互式定义带有汇编/伪代码上下文的单函数 AI 提示词 |
| 执行流 | AI 生成的纯英文执行流图,显示分支和意图 |
| **重命名** | |
| 重命名函数 | AI 驱动重命名当前函数(代码模式或恶意软件模式) |
| 重命名变量 | AI 建议有意义的局部变量名并应用它们 |
| 批量函数重命名器 | 使用排队的 Worker 通过 AI 批量重命名数百个函数 |
| 批量变量重命名器 | 跨多个函数批量重命名局部变量 |
| **注释** | |
| 添加注释 | 添加到伪代码的内联注释,同步到 IDA-View |
| 节注释 | 反汇编节上的块级注释 |
| **分析** | |
| 智能问答(AI) | 针对当前打开的函数的持久化可停靠聊天 |
| 批量函数分析器 | 按恶意软件行为类别对函数进行标记和分类 |
| 深度分析器 | 完整的递归自底向上分析流水线,附带 HTML 取证报告 |
| 函数调用链总结器 | 跨调用图的 Map-Reduce 风格 AI 执行流摘要 |
| FLOSS 字符串发现 | 发现堆栈字符串、紧凑字符串和解码字符串 |
| Shellcode 分析 | 对选定的 shellcode 字节/反汇编进行静态分析 |
| 函数原型 | AI 推断并应用 C 调用约定和原型 |
| 结构体编辑器 | AI 从变量字段访问模式推断结构体布局 |
| **实用工具** | |
| 调用高亮器 | 在伪代码和反汇编视图中高亮显示函数调用 |
| 调用树 | 交互式 dnSpy 风格的懒加载树状查看器,用于递归代码引用和 API 跟踪 |
| 搜索工具 | 在 VirusTotal、Google、GitHub、MSDN、CyberChef 中搜索字节/字符串 |
| 十六进制视图 | IDA Pro 的替代十六进制查看器,具有多项实用功能 |
| 高级复制 | 复制字节以辅助创建 YARA 规则 |
## 安装
### 1. 复制插件文件
将以下两项复制到你的 IDA `plugins/` 目录中:
- `PseudoNote.py` 文件
- `pseudonote/` 文件夹
```
/
└── plugins/
├── PseudoNote.py
└── pseudonote/
├── plugin.py
├── handlers.py
├── ai_client.py
├── config.py
├── view.py
├── renamer.py
├── var_renamer.py
├── analyzer.py
├── deep_analyzer.py
├── report_generator.py
├── floss_strings.py
├── chat.py
├── idb_storage.py
├── highlight.py
├── api_taxonomy.py
├── malware_api_tags.json
├── qt_compat.py
└── ...
```
### 2. 安装 Python 依赖
在使用 IDA 所用的同一 Python 环境的终端中运行以下命令:
```
pip install openai httpx PySide6
```
可选,如需使用 Anthropic (Claude) 或 Google Gemini 提供商:
```
pip install anthropic google-generativeai
```
以下是包含适用于 apt 方法和设置本地虚拟环境 的详细命令的完整章节,格式化在 Markdown 块中,因此你可以直接将其复制并粘贴到你的 README.md 中。
### 2. 安装 Python 依赖
在使用 IDA 所用的同一 Python 环境的终端中运行以下命令:
```
pip install openai httpx PySide6
```
### Linux 安装
由于 IDA 默认使用集中的系统级 Python 环境,包管理取决于你的操作系统配置。
**方法 A:通过 pip 安装(通用 & 推荐)**
对于专用虚拟机(如 REMnux)或标准发行版,这是最可靠的方法。
```
pip install openai httpx PySide6 --break-system-packages
```
**方法 B:通过 APT 安装**
如果你不想使用 `pip`,一些较新的 Debian/Ubuntu 版本会直接提供这些包:
```
sudo apt update
sudo apt install python3-httpx python3-openai python3-pyside6.qtcore python3-pyside6.qtgui python3-pyside6.qtwidgets
```
#### 可选:安装额外的提供商 (Anthropic / Google Gemini)
```
pip install anthropic google-generativeai
```
### 3. 配置你的 AI 提供商
打开设置对话框:
在伪代码或 IDA-View 中的任意位置**右键单击** > **PseudoNote** > **配置设置...**
或通过菜单:`Edit > Plugins > PseudoNote > Configure Settings...`
输入你的 API 密钥,选择你的提供商和模型,然后在保存前点击 **测试连接**。
## 配置 & AI 提供商
PseudoNote 支持六种 AI 提供商:
| 提供商 | 状态 | 备注 |
|---|---|---|
| OpenAI | 完全测试 | GPT-4、GPT-4o 等。推荐以获得最佳结果 |
| LM Studio | 完全测试 | 通过与 OpenAI 兼容的端点使用本地模型 |
| OpenAI 兼容 | 完全测试 | 任何使用 OpenAI API 规范通信的端点 |
| DeepSeek | 未完全测试 | 兼容 OpenAI 端点格式 |
| Anthropic (Claude) | 未完全测试 | 需要 `anthropic` Python 包 |
| Google Gemini | 未完全测试 | 需要 `google-generativeai` Python 包 |
| Ollama | 未完全测试 | 通过 `http://localhost:11434/v1` 使用本地模型 |
## 快速入门
1. 在 IDA Pro 中打开一个二进制文件,并等待 IDA 完成自动分析。
2. 在伪代码视图中导航到一个函数。
3. 右键单击 > **PseudoNote** > 选择一个操作。
4. 或使用下表中的快捷键。
伪代码右键菜单:
IDA 视图右键菜单:
## 所有操作 & 快捷键
| 操作 | 快捷键 | 可用性 |
|---|---|---|
| 显示 PseudoNote 面板 | `Ctrl+Alt+G` | 均可 |
| 查看保存的笔记 | `Ctrl+Alt+L` | 均可 |
| 配置设置 | 仅菜单 | 均可 |
| 重命名函数(代码模式) | `Ctrl+Alt+N` | 均可 |
| 重命名函数(恶意软件模式) | `Ctrl+Alt+M` | 均可 |
| 重命名变量 | `Ctrl+Alt+R` | 均可 |
| 函数原型 | `Ctrl+Alt+S` | 伪代码 |
| 添加注释(伪代码) | `Ctrl+Alt+C` | 伪代码 |
| 添加节注释 | 仅菜单 | 反汇编 |
| 删除注释(伪代码) | `Ctrl+Alt+D` | 伪代码 |
| 删除注释 | 仅菜单 | 反汇编 |
| 智能问答(AI) | `Ctrl+Alt+A` | 均可 |
| 批量函数重命名器 | `Ctrl+Shift+R` | 均可 |
| 批量变量重命名器 | `Ctrl+Shift+V` | 均可 |
| 批量函数分析器 | `Ctrl+Shift+A` | 均可 |
| 深度分析器 | `Ctrl+Shift+S` | 均可 |
| 函数调用链总结器 | 仅菜单 | 均可 |
| FLOSS 字符串发现 | `Ctrl+Shift+F` | 均可 |
| Shellcode 分析(静态) | 仅菜单 | 反汇编 |
| 切换调用高亮(伪代码) | `Ctrl+Alt+H` | 伪代码 |
| 切换调用高亮(图形/线性) | 仅菜单 | 反汇编 |
| 交互式调用层次结构 | `Ctrl+Alt+X` | 均可 |
| 结构体编辑器 | `Ctrl+Alt+E` | 伪代码 |
| 在 VirusTotal 中搜索字节 | 右键单击,选择字节 | 反汇编 |
| 将字节添加到 CyberChef | 右键单击,选择字节 | 反汇编 |
| 在 VirusTotal 中搜索字符串 | 右键单击,高亮文本 | 均可 |
| 在 Google 中搜索字符串 | 右键单击,高亮文本 | 均可 |
| 在 GitHub 中搜索字符串 | 右键单击,高亮文本 | 均可 |
| 在 MSDN 中搜索字符串 | 右键单击,高亮文本 | 均可 |
| 将字符串添加到 CyberChef | 右键单击,高亮文本 | 均可 |
## 功能详解
### PseudoNote 面板
主要的可停靠侧边面板。使用 `Ctrl+Alt+G` 打开。
该面板包含七个选项卡,每个选项卡在分析过程中都有其独特的作用。
#### 可读代码
显示为当前活动函数生成的、由 AI 编写的、人类可读的 C 代码。当你点击 **生成** 时,插件会使用 Hex-Rays 反编译该函数,将输出发送给 AI,并接收经过清理的、带有良好注释的代码版本。
关键行为:
- 你可以在生成之前选择目标语言,以请求用其他语言(Python、Rust、Go 等)进行重写。
- 生成的代码显示在带有语法高亮的编辑器中。
- 结果会自动保存到 IDB 中,以函数地址键,因此下次打开同一函数时会恢复结果。
- 你可以随时重新生成,以便在重命名或修改函数后获得更新的结果。

#### Markdown 笔记
直接集成在 IDA 中的全功能 Markdown 编辑器。使用它为每个函数编写和组织你的分析发现。
主要功能:
- **实时预览** — 随时在原始 Markdown 编辑器和渲染预览之间切换
- **格式化工具栏** — 一键实现粗体、斜体、标题、代码块、项目列表和水平分割线
- **自动保存到 IDB** — 笔记直接保存到 IDB 文件中,以函数地址为键;无需外部文件
- **单函数作用域** — 每个函数都有自己的笔记。导航到函数时会自动恢复笔记。
- **导出** — 笔记可以作为纯 Markdown 复制,用于外部报告
典型用例:记录函数的功能、记录发现的 IOC、记录待解决的问题、跟踪重命名的项目。

#### 自定义 Prompt
位于分析师笔记部分的 **自定义 Prompt** 子选项卡,允许你使用完全自定义的临时指令对选定函数查询 AI。
主要功能:
- 切换开关可自动将 **伪代码** 和/或原始 **汇编** 上下文与你的查询一起包含。
- 响应和提示词会按函数自动保存在 IDB 中,以便你可以回顾你的自定义分析。
#### 函数解释
解释当前函数的作用。
#### 树形图
显示由 AI 生成的当前函数的基于文本的高层次执行流图。
与原始调用图不同,这是执行如何在函数中移动的叙述性表示——以简单的英文展示决策分支、循环以及每个块背后的意图。
输出示例:
```
├─ Attempt to enable debug privileges
│ └─ If enabling debug privileges succeeds
│ ├─ Retrieve the explorer process ID
│ │ └─ If explorer process ID is valid
│ │ ├─ Open the explorer process with required access rights
│ │ │ └─ If process handle is valid
│ │ │ ├─ Obtain the primary token of the explorer process
│ │ │ │ └─ If token retrieval succeeds
│ │ │ │ ├─ Impersonate the logged-on user associated with the token
│ │ │ │ │ └─ If impersonation succeeds
│ │ │ │ │ ├─ Close the token handle
│ │ │ │ │ ├─ Close the process handle
│ │ │ │ │ └─ Return success (1)
│ │ │ │ └─ If impersonation fails
│ │ │ │ ├─ Close the token handle if valid
│ │ │ │ └─ Close the process handle if valid
│ │ │ └─ If token retrieval fails
│ │ │ ├─ Close the process handle if valid
│ │ │ └─ Proceed to failure path
│ │ └─ If process handle is invalid
│ │ └─ Proceed to failure path
│ └─ If explorer process ID is invalid
│ └─ Proceed to failure path
└─ If enabling debug privileges fails
└─ Return failure (0)
```
当伪代码密集或高度混淆时,此选项卡特别有用,控制流的纯语言摘要有助于定位分析方向。
#### 函数详情
显示从 IDA 收集的关于当前活动函数的上下文元数据,无需进行任何 AI 调用。
显示的信息:
- **调用者** — 调用此函数的函数及其地址
- **被调用者(API / 库)** — 从此函数调用的外部 API 和库函数(例如,`CreateFileW`、`VirtualAlloc`)
- **被调用者(内部)** — 从此函数调用的其他用户定义函数
- **字符串引用** — 此函数中指令引用的字符串字面量
- 以及更多
此选项卡有助于在决定是否运行更深层次的 AI 操作之前快速收集上下文。
### 重命名函数
**快捷键:** `Ctrl+Alt+N`(代码模式) · `Ctrl+Alt+M`(恶意软件模式)
将当前函数的反编译伪代码发送给 AI,并根据代码的实际行为请求一个有意义的名称。
- **代码模式** — 通用模式。关注代码的逻辑和行为。
- **恶意软件模式** — 在提示词中添加恶意软件分析上下文。AI 了解 TTP、C2 模式、规避技术和常见的恶意软件模式。
此时会出现一个确认对话框,其中包含建议的名称、置信度分数和简要理由。你可以接受、编辑或拒绝该建议。
重命名前缀(默认为 `fn_`)和可选的地址后缀可以在设置中配置。

### 重命名变量
**快捷键:** `Ctrl+Alt+R`
将反编译代码发送给 AI,AI 会返回一个旧变量名到新语义名的映射(例如,`v3 -> socket_fd`、`v12 -> encrypted_buffer`)。
插件使用 `ida_hexrays.rename_lvar()` 将所有重命名直接应用于 Hex-Rays 反编译器。如果由于过期的反编译器缓存导致重命名返回 `False`,则会使用备用验证步骤。

### 添加注释(伪代码)
**快捷键:** `Ctrl+Alt+C`
AI 读取反编译代码并在关键逻辑点添加内联注释。注释被写入为 Hex-Rays 用户注释,并且也作为重复注释与反汇编视图同步。

### 添加节注释
**菜单:** `Edit > Plugins > PseudoNote > Add Section Comments (IDA-View)`
在反汇编视图中工作。AI 将指令分组到逻辑节中,并为每个节提供一个简短的纯英文标签(例如,`初始化堆栈帧`、`验证参数`、`调用导出解析器`)。
此操作也适用于**选区**。在 IDA-View 中高亮显示指令范围,然后触发操作 — 仅将选定范围发送给 AI。这对于分析较大函数中嵌入的 shellcode 块特别有用。

### 函数原型
**快捷键:** `Ctrl+Alt+S`
AI 推断函数的调用约定、参数名、参数类型和返回类型,然后使用 `idc.apply_type()` 将结果直接应用于 IDA。应用前可以审查生成的原型。
### 结构体编辑器
**访问方式:** 在伪代码中的变量名上右键单击 > **PseudoNote** > **结构体编辑器**
打开一个带有空白结构体模板的对话框。点击 **AI 建议** 让 AI 通过分析当前函数及其调用者中的所有字段访问(例如,`ptr + 0x18`、`v5->field_20`)来推断结构体布局。
你可以选择提供结构体的确切总大小,以便 AI 可以精确计算填充。生成后,你可以:
- 在代码编辑器中手动编辑定义
- 复制到剪贴板
- 应用到 IDA — 解析并将其导入到本地类型(`Shift+F1`),然后询问你是否要将该类型应用于变量
### 智能问答(AI)
**快捷键:** `Ctrl+Alt+A`
打开一个可停靠的聊天窗口,该窗口针对当前函数进行上下文关联。AI 预加载了函数的反编译代码,因此你可以提出有针对性的问题:
- "此函数使用什么 API 实现持久化?"
- "`v7` 在这里代表什么?"
- "这是一个已知的解密算法吗?"
- "用 Python 重写这段代码。"
聊天记录按函数持久化到 IDB 中。当你返回某个函数时,历史记录会自动恢复。当你导航到不同的函数时,聊天会无缝切换上下文并发出通知。

### 批量函数重命名器
**快捷键:** `Ctrl+Shift+R`
一个批量重命名工具,可以在一次会话中重命名数百个函数。
主要功能:
- 带有复选框的函数列表,用于包含或排除特定函数
- 过滤器仅显示未命名(`sub_*`)函数并隐藏系统/库函数
- 队列系统 — 根据复杂度将函数分类为 `高`、`中`、`低` 优先级
- 可配置的批处理大小和并行 Worker 数量
- 应用前预览 — 在提交之前审查所有建议的重命名
- API 批次之间可配置的速率限制冷却时间
- 前缀和地址后缀命名样式(例如,`fn_my_function_401000`)
AI 受到严格约束:它不会在没有证据的情况下凭空捏造名称。对于仅调用 `sub_*` 且没有字符串或已知 API 证据的函数,会赋予 `wrap_` 的名称,置信度为 30% 或更低。

### 批量变量重命名器
**快捷键:** `Ctrl+Shift+V`
与函数重命名器相同的批量架构,但用于跨多个函数的局部变量。
- 以可配置的批处理大小处理函数
- 将每个函数的反编译代码发送给 AI,并接收 `{old_name: new_name}` 映射
- 通过 `ida_hexrays.rename_lvar()` 应用重命名,并提供备用验证
- 在结果表中显示每个函数的重命名计数和失败数
- 结果存储在 IDB 中,以便在会话后进行审查

### 批量函数分析器
**快捷键:** `Ctrl+Shift+A`
一种快速的分类工具,使用恶意软件行为标签和置信度百分比对每个函数进行分类,无需进行深入的逐函数分析。
标签包括:`malicious`、`suspicious`、`benign`,以及子类别,如 `networking`、`encryption`、`injection`、`persistence`、`file_ops`、`evasion` 等。
分析器使用:
1. 静态启发式 — 针对 `malware_api_tags.json` 进行 API 分类查找,以识别已知的恶意 Windows API 模式
2. AI 分类 — 将反编译代码、字符串和 API 调用列表发送给 AI 以做出裁决
3. 熵和复杂性评分 — 将字节熵和 CFG 分支计数作为附加信号
4. 组合规则 — 检测危险的 API 组合(例如,`VirtualAlloc` + `WriteProcessMemory` + `CreateRemoteThread` = 进程注入)
结果显示在可排序、可过滤的表格中。你可以按标签过滤或双击导航到某个函数。

### 函数调用链总结器
**菜单:** 在反汇编/伪代码中右键单击 > `PseudoNote > Function Chain Summarizer`
深度分析器的专用、轻量级替代方案。此工具不再重命名符号和输出庞大的 HTML 报告,而是构建一个功能性的 Map-Reduce 文本摘要,准确说明执行链的作用。
主要功能:
- **调用图映射:** 原生发现多达你配置的节点限制(例如 150 个函数),而不会用过早的重命名污染 IDB。
- **智能过滤:** 自动绕过库、API thunk 和微小的噪声/填充函数。
- **Map-Reduce 架构:** 将包含目标函数的庞大图分解为安全的块,要求 AI 在不发生 token 溢出的情况下安全分析它们,并合成一个最终的连贯 Markdown 报告,代表自顶向下的逻辑。
- **持久化:** 生成的摘要持久存储在 IDB `netnode` 中。对以前分析的链打开总结器会立即加载保存的 Map-Reduce 报告!
### 深度分析器
**快捷键:** `Ctrl+Shift+S`
PseudoNote 中最强大的功能。一个完整的递归、多阶段分析流水线:
1. 从你选择的入口点构建完整的调用图
2. 自底向上重命名所有函数和变量,从叶函数开始
3. 执行深入的逐函数 AI 分析
4. 使用调用者上下文升级或降级风险评估
5. 生成全面的 HTML 取证报告
有关完整的逐阶段分解,请参见下面的[深度分析器流水线](#deep-analyzer-pipeline)部分。
#### PhantomNet 样本分析的 HTML 报告示例
### FLOSS 字符串发现
快捷键:** `Ctrl+Shift+F`
将 [FLOSS (FLARE Obfuscated String Solver)](https://github.com/mandiant/flare-floss) 直接集成到 IDA 中。
FLOSS 能够找到在常规字符串扫描中不出现的字符串,因为它们是:
- **堆栈字符串** — 在堆栈上逐个字符构建
- **紧凑字符串** — 在紧凑循环中构造
- **解码字符串** — 在运行时解密或去混淆
**设置:** 安装 FLOSS 并在“设置”>“外部工具”>“FLOSS 路径”中配置其完整路径。
结果显示在带有类型、字符串值和函数地址列的选项卡式 IDA 选择器中。单击结果可导航到相关函数。结果持久保存在 IDB 中,因此你无需在每个会话中重新运行 FLOSS。
### 字节/指令/Shellcode 分析
**菜单:** `Edit > Plugins > PseudoNote > Bytes/Instruction/Shellcode Analysis)`
打开选定字节/指令/Shellcode 的静态分析对话框。在启动之前在 IDA-View 中选择一个字节范围 — 选定的字节和反汇编将被预加载到对话框中。AI 提供有关字节/指令/Shellcode 可能用途、技术和目标平台的高级分析。
### 调用高亮器
**菜单:** `Edit > Plugins > PseudoNote > Toggle Call Highlight (Pseudocode / Graph/Linear)`
在视觉上高亮显示函数调用:
- 在伪代码中 — 用浅薰衣草色背景高亮包含函数调用的任何行
- 在反汇编中 — 用相同颜色高亮 `call` 和 `jmp` 指令
还会高亮任何带有 `fn_`、`wrap_` 或 `sub_` 前缀的函数,使得识别哪些调用已经重命名、哪些仍然未知变得容易。
### 调用树
**快捷键:** `Ctrl+Alt+X`
一个专用的、浮动的交互式树状查看器(灵感来自 dnSpy 等工具),用于浏览函数交叉引用(`Used By`)和依赖项(`Uses`)。
它充当 IDA 原生 `Alt+X` 交叉引用窗口的大规模升级替代品:
- **递归扩展:** 通过扩展图叶节点无限懒加载子函数,让你在不失去 UI 上下文的情况下直观地跟踪执行路径。
- **API 高亮:** 可选择将 `.idata` thunk 和 `extern` 指针解析为其可见的 API 字符串名称,并在内部行内显示(例如,`__imp_LoadLibraryA`)。
- **实时搜索过滤:** 包含一个顶部停靠的文本过滤器,可将层次结构动态修剪为与你正在搜索的函数或 API 完全匹配的内容。
- **导航:** 双击树中的任何元素,自动将你的 IDB 快照定位到调用指令。
### 搜索工具
可从反汇编或伪代码视图的右键上下文菜单中使用。
| 操作 | 如何触发 | 作用 |
|---|---|---|
| 在 VirusTotal 中搜索字节 | 在 IDA-View 中选择字节,右键单击 | 打开 VT 内容搜索以查找选定的十六进制字节 |
| 将字节添加到 CyberChef | 在 IDA-View 中选择字节,右键单击 | 进行 Base64 编码并打开以字节为输入的 CyberChef |
| 在 VirusTotal 中搜索字符串 | 高亮文本,右键单击 | 在 VT 中作为文件内容搜索字符串 |
| 在 Google 中搜索字符串 | 高亮文本,右键单击 | 精确短语 Google 搜索 |
| 在 GitHub 中搜索字符串 | 高亮文本,右键单击 | GitHub 上的代码搜索 |
| 在 MSDN 中搜索字符串 | 高亮文本,右键单击 | MSDN 文档搜索 |
| 将字符串添加到 CyberChef | 高亮文本,右键单击 | 打开以该字符串为输入的 CyberChef |
### IDA 视图高级复制
**菜单:** 在 IDA-View(反汇编)中右键单击 > `PseudoNote > IDA View Advance copy`
为恶意软件报告和签名开发高度优化的复制格式。此实用程序直接从当前选区提取原始字节和操作码,并将其转换为各种即用型格式。
| 格式 | 描述 |
|---|---|
| **YARA Raw** | 为 YARA 规则格式化的原始十六进制字节(例如,`{ 55 8B EC 83 EC 10 }`) |
| **YARA Mask** | 为立即偏移和相对跳转自动生成通配符(`??`) |
| **YARA No Imm** | 屏蔽所有立即数值,适用于查找具有不同常量的相似函数 |
| **YARA Opcodes** | 仅提取操作码和前缀,完全忽略操作数 |
| **YARA Rule** | 为选定代码生成完整、有效的 YARA 规则模板 |
| **Python** | 将字节格式化为 Python 字节字符串:`b"\x55\x8b\xec..."` |
| **C Array** | 将字节格式化为 C 十六进制数组:`unsigned char data[] = { 0x55, 0x8B, ... };` |
| **Disassembly** | 复制不带地址/偏移前缀的干净反汇编文本 |
典型用例:为恶意函数创建 YARA 签名、为 Python 模拟器提取 shellcode,或将干净的代码逻辑复制到技术报告中。
### 十六进制查看器
PseudoNote 十六进制查看器是一个自定义的可停靠面板,它提供了整个加载二进制文件的干净、简单的十六进制编辑器视图。它被设计为 IDA-View 和伪代码面板的配套工具,用于需要直接处理原始字节的任务。
**打开十六进制查看器**
| 方法 | 操作 |
|---|---|
| 快捷键 | `Ctrl+Alt+B` |
| 右键菜单 | `PseudoNote > Hex Viewer` |
| 插件菜单 | `Edit > Plugins > PseudoNote > Hex Viewer` |
**布局**
查看器分为三列:
- **地址栏** — 每行的绝对 EA(十六进制)。
- **十六进制字节** — 每行 16 个字节,分为 8 个一组。未加载的字节显示为 `..`。
- **ASCII** — 可打印字符行内呈现;不可打印字节显示为 `·`。
该视图通过在绘制时直接从嵌入式小部件读取 Qt 调色板,自动适应 IDA 当前的颜色主题(亮色或暗色)。
**光标同步**
当启用 **自动跟随光标**(默认)时,十六进制查看器会滚动到 IDA-View 或伪代码中当前选定的字节,并用红色矩形标记。取消选中该框或使用 **立即同步** 手动控制同步。
**导航二进制文件**
查看器在打开时加载整个二进制内存映射(所有段)。使用工具栏中的 **跳转到 EA** 输入字段直接导航到任何地址:
1. 在字段中输入或粘贴十六进制地址。
2. 按 `Enter` 或点击 **Go**。
**选择字节**
| 操作 | 结果 |
|---|---|
| 左键单击 | 在字节处设置选区起点 |
| 左键单击 + 拖动 | 选择连续的字节范围 |
| Shift + 单击 | 将现有选区扩展到单击的字节 |
| Shift + 向上滚动 | 向上滚动视图并将选区扩展到顶部可见行 |
| Shift + 向下滚动 | 向下滚动视图并将选区扩展到底部可见行 |
底部的状态栏显示当前的 EA、选定范围以及十六进制、十进制和 ASCII 格式的字节值。
**复制选定字节**
右键单击任何选区以打开复制菜单:
| 格式 | 输出示例 |
|---|---|
| 十六进制字节 | `55 8B EC 83 EC 10` |
| YARA pattern | `{ 55 8B EC 83 EC 10 }` |
| Python literal | `b"\x55\x8b\xec\x83\xec\x10"` |
| C/C++ array | `unsigned char data[6] = { 0x55, 0x8B, 0xEC, 0x83, 0xEC, 0x10 };` |
| Base64 | 标准 base64 编码字符串 |
**高亮字节范围**
可以同时以不同颜色高亮显示多个字节范围,这对于在手动分析期间注释协议字段、shellcode 阶段或可疑序列非常有用。
1. 通过点击并拖动(或使用 Shift+单击 / Shift+滚动 选择大范围)选择一个字节范围。
2. 右键单击并选择 **高亮选定内容...**
3. 设置标签(可选)并从对话框中选择颜色。
4. 点击 **OK** — 该范围立即在十六进制和 ASCII 列中同时高亮显示。
要移除高亮,请右键单击任何高亮的字节并选择 **移除高亮:label**。要移除全部高亮,请选择 **清除所有高亮**。
高亮呈现为扁平、无缝的颜色填充,与大多数专业十六进制编辑器的风格相匹配 — 没有按字节划分的框或边框。
## 批量分析器 vs 深度分析器
| 方面 | 批量函数分析器 | 深度分析器 |
|---|---|---|
| 目的 | 快速分类 — 标记并对每个函数进行分类 | 从选定的入口点进行完整的取证分析 |
| 范围 | 二进制文件中所有函数的平铺列表 | 从选定的根函数开始的递归调用图 |
| 分析深度 | 每个函数批次单次 AI 处理 | 多阶段流水线(7 个阶段) |
| 调用图 | 无 | 有,完全自底向上遍历 |
| 变量重命名 | 无 | 有,按函数自底向上进行 |
| 可读 C 代码生成 | 无 | 有 |
| 输出 | UI 表格中的标签和置信度;保存到 IDB | IDB 重命名 + 完整的 HTML 报告 + 磁盘产物 |
| 速度 | 快(并行批次) | 慢(彻底;可配置阶段) |
| 适用场景 | 未知二进制文件的初始分类 | 深入研究特定的执行路径 |
**推荐工作流:**
1. 首先运行 **批量函数分析器** 以获得全局概览并识别可疑函数。
2. 选择一个有趣的标记为 `malicious` 的函数作为 **深度分析器** 的入口点。
3. 使用 **智能问答** 详细调查特定的函数。
## 深度分析器流水线
深度分析器分为两个主要阶段运行,共 7 个步骤。
/readable/`。
#### 阶段 5 — 上下文代码分析细化
结合调用者上下文重新分析每个函数。AI 现在知道为什么要调用某个函数。这允许:
- 当从恶意上下文调用时,升级看起来是良性实用工具的函数
- 当调用上下文显示合法使用时,降级误报
- 在调用链中上下传播行为意图
#### 阶段 6 — 报告数据生成
综合所有收集到的分析数据:
- 执行摘要
- IOC 提取(IP、域、注册表项、文件路径、互斥锁名)
- 字符串分类
- MITRE ATT&CK 技术映射
- Mermaid 调用图渲染
- 函数级风险热图
#### 阶段 7 — HTML 报告生成
生成一个独立的、带样式的 HTML 报告,保存到 `/report.html`。报告包括:
- 带有总体风险评估的执行摘要
- MITRE ATT&CK 覆盖表
- 包含可读 C 代码、指标和风险徽章的逐函数分析卡
- IOC 表
- 字符串分析部分
- 交互式调用图(Mermaid 图表)
## 批量函数分析器流水线
/
└── _pseudonote/
├── decomp/ <- raw Hex-Rays decompiled code
├── readable/ <- AI-generated readable C
├── exec_flow/ <- execution flow text graphs
└── report.html <- full forensic HTML report
```
## 配置文件参考
配置存储在插件文件夹中的 `PseudoNote.ini` 中,如果插件文件夹不可写,则存储在 `~/.pseudonote.ini` 中。
| 部分 | 键 | 默认值 | 描述 |
|---|---|---|---|
| `[PseudoNote]` | `PROVIDER` | `openai` | 活动的 AI 提供商 |
| `[Analysis]` | `BULK_BATCH_SIZE` | `10` | 每批函数数量(批量重命名器) |
| `[Analysis]` | `BULK_WORKERS` | `5` | 并行 Worker 线程数(批量重命名器) |
| `[Analysis]` | `BULK_COOLDOWN` | `22` | 批次之间的秒数 |
| `[Analysis]` | `VAR_BATCH_SIZE` | `5` | 每批函数数量(变量重命名器) |
| `[Analysis]` | `DEEP_MAX_LINES` | `200` | 每个函数的最大反编译行数(深度分析器) |
| `[Analysis]` | `MAX_GRAPH_NODES` | `500` | 最大调用图节点数(深度分析器) |
| `[Analysis]` | `MAX_GRAPH_DEPTH` | `15` | 最大调用图深度(深度分析器) |
| `[Analysis]` | `DEEP_VAR_RENAME` | `True` | 在深度分析器中启用变量重命名 |
| `[Analysis]` | `DEEP_FUNC_COMMENT` | `True` | 在深度分析器中启用函数注释 |
| `[Analysis]` | `DEEP_REFINEMENT` | `True` | 启用阶段 5 上下文细化 |
| `[ExternalTools]` | `FLOSS_PATH` | (空) | floss 可执行文件的完整路径 |
| `[Fonts]` | `CODE_FONT` | `Consolas` | 代码显示区域的字体 |
**从批量分析器开始定位**
在跳入深度分析器之前,运行批量分析器来映射哪些函数是可疑的。这有助于你为深度分析选择一个好的入口点。
**对恶意软件样本使用“重命名函数(恶意软件模式)”**
特定于恶意软件的提示词为 AI 提供了关于 TTP 的额外上下文。这通常能为加载器、注入器和 C2 通信例程等函数生成更准确的名称。
**在使用节注释之前选择 shellcode 字节**
在 IDA-View 中,选择一个字节范围,然后触发节注释。仅将选定范围发送给 AI — 非常适合分析较大函数中嵌入的 shellcode 块。
**聊天是你的交互式伴侣**
当你对特定代码段有疑问时使用智能问答。AI 已经将反编译代码作为上下文 — 提出精确的问题,如“第 23 行的 v5 是什么?”而无需手动粘贴任何代码。
**根据你的速率限制调整批处理大小**
如果你遇到 API 速率限制,请在设置中减少 `BULK_WORKERS` 并增加 `BULK_COOLDOWN`。对于本地模型(Ollama、LM Studio),你可以设置 `BULK_COOLDOWN=0` 并随意增加 Worker。
**FLOSS 结果会持久保存**
运行 FLOSS 字符串发现后,结果会保存到 IDB 中。后续会话将从 IDB 即时加载,而无需重新运行 FLOSS。
## 故障排除
| 问题 | 可能的原因 | 解决方法 |
|---|---|---|
| 插件未加载 | 缺少 `openai` 或 `httpx` 包 | 使用 IDA 的 Python 运行 `pip install openai httpx` |
| "AI Provider not configured" | 未保存 API 密钥 | 打开设置,输入密钥,点击保存 |
| AI 请求超时 | 网络问题或需要代理 | 在“设置”>“PseudoNote”选项卡中设置代理 |
| 变量重命名显示失败 | Hex-Rays 过期的反编译器缓存 | 对于某些变量是正常的;内置了备用验证步骤 |
| 深度分析器在大型二进制文件上崩溃 | 调用图过大 | 在设置中减少 `MAX_GRAPH_NODES` 和 `MAX_GRAPH_DEPTH` |
| FLOSS 未产生结果 | 配置了错误的 FLOSS 路径 | 在“设置”>“外部工具”中验证 `floss` 可执行文件的路径 |
| 配置未保存 | Program Files 权限被拒绝 | 配置自动回退到 `~/.pseudonote.ini` |
| 启动时提示 "Hex-Rays not available" | 未获得 Hex-Rays 反编译器许可 | 需要伪代码的功能(重命名、注释)需要 Hex-Rays 许可证 |
*所有 AI 生成的结果应被视为辅助参考,而非绝对事实。请务必手动验证关键发现。*
## 配置 & AI 提供商
PseudoNote 支持六种 AI 提供商:
| 提供商 | 状态 | 备注 |
|---|---|---|
| OpenAI | 完全测试 | GPT-4、GPT-4o 等。推荐以获得最佳结果 |
| LM Studio | 完全测试 | 通过与 OpenAI 兼容的端点使用本地模型 |
| OpenAI 兼容 | 完全测试 | 任何使用 OpenAI API 规范通信的端点 |
| DeepSeek | 未完全测试 | 兼容 OpenAI 端点格式 |
| Anthropic (Claude) | 未完全测试 | 需要 `anthropic` Python 包 |
| Google Gemini | 未完全测试 | 需要 `google-generativeai` Python 包 |
| Ollama | 未完全测试 | 通过 `http://localhost:11434/v1` 使用本地模型 |
## 快速入门
1. 在 IDA Pro 中打开一个二进制文件,并等待 IDA 完成自动分析。
2. 在伪代码视图中导航到一个函数。
3. 右键单击 > **PseudoNote** > 选择一个操作。
4. 或使用下表中的快捷键。
伪代码右键菜单:
IDA 视图右键菜单:
## 所有操作 & 快捷键
| 操作 | 快捷键 | 可用性 |
|---|---|---|
| 显示 PseudoNote 面板 | `Ctrl+Alt+G` | 均可 |
| 查看保存的笔记 | `Ctrl+Alt+L` | 均可 |
| 配置设置 | 仅菜单 | 均可 |
| 重命名函数(代码模式) | `Ctrl+Alt+N` | 均可 |
| 重命名函数(恶意软件模式) | `Ctrl+Alt+M` | 均可 |
| 重命名变量 | `Ctrl+Alt+R` | 均可 |
| 函数原型 | `Ctrl+Alt+S` | 伪代码 |
| 添加注释(伪代码) | `Ctrl+Alt+C` | 伪代码 |
| 添加节注释 | 仅菜单 | 反汇编 |
| 删除注释(伪代码) | `Ctrl+Alt+D` | 伪代码 |
| 删除注释 | 仅菜单 | 反汇编 |
| 智能问答(AI) | `Ctrl+Alt+A` | 均可 |
| 批量函数重命名器 | `Ctrl+Shift+R` | 均可 |
| 批量变量重命名器 | `Ctrl+Shift+V` | 均可 |
| 批量函数分析器 | `Ctrl+Shift+A` | 均可 |
| 深度分析器 | `Ctrl+Shift+S` | 均可 |
| 函数调用链总结器 | 仅菜单 | 均可 |
| FLOSS 字符串发现 | `Ctrl+Shift+F` | 均可 |
| Shellcode 分析(静态) | 仅菜单 | 反汇编 |
| 切换调用高亮(伪代码) | `Ctrl+Alt+H` | 伪代码 |
| 切换调用高亮(图形/线性) | 仅菜单 | 反汇编 |
| 交互式调用层次结构 | `Ctrl+Alt+X` | 均可 |
| 结构体编辑器 | `Ctrl+Alt+E` | 伪代码 |
| 在 VirusTotal 中搜索字节 | 右键单击,选择字节 | 反汇编 |
| 将字节添加到 CyberChef | 右键单击,选择字节 | 反汇编 |
| 在 VirusTotal 中搜索字符串 | 右键单击,高亮文本 | 均可 |
| 在 Google 中搜索字符串 | 右键单击,高亮文本 | 均可 |
| 在 GitHub 中搜索字符串 | 右键单击,高亮文本 | 均可 |
| 在 MSDN 中搜索字符串 | 右键单击,高亮文本 | 均可 |
| 将字符串添加到 CyberChef | 右键单击,高亮文本 | 均可 |
## 功能详解
### PseudoNote 面板
主要的可停靠侧边面板。使用 `Ctrl+Alt+G` 打开。
该面板包含七个选项卡,每个选项卡在分析过程中都有其独特的作用。
#### 可读代码
显示为当前活动函数生成的、由 AI 编写的、人类可读的 C 代码。当你点击 **生成** 时,插件会使用 Hex-Rays 反编译该函数,将输出发送给 AI,并接收经过清理的、带有良好注释的代码版本。
关键行为:
- 你可以在生成之前选择目标语言,以请求用其他语言(Python、Rust、Go 等)进行重写。
- 生成的代码显示在带有语法高亮的编辑器中。
- 结果会自动保存到 IDB 中,以函数地址键,因此下次打开同一函数时会恢复结果。
- 你可以随时重新生成,以便在重命名或修改函数后获得更新的结果。

#### Markdown 笔记
直接集成在 IDA 中的全功能 Markdown 编辑器。使用它为每个函数编写和组织你的分析发现。
主要功能:
- **实时预览** — 随时在原始 Markdown 编辑器和渲染预览之间切换
- **格式化工具栏** — 一键实现粗体、斜体、标题、代码块、项目列表和水平分割线
- **自动保存到 IDB** — 笔记直接保存到 IDB 文件中,以函数地址为键;无需外部文件
- **单函数作用域** — 每个函数都有自己的笔记。导航到函数时会自动恢复笔记。
- **导出** — 笔记可以作为纯 Markdown 复制,用于外部报告
典型用例:记录函数的功能、记录发现的 IOC、记录待解决的问题、跟踪重命名的项目。

#### 自定义 Prompt
位于分析师笔记部分的 **自定义 Prompt** 子选项卡,允许你使用完全自定义的临时指令对选定函数查询 AI。
主要功能:
- 切换开关可自动将 **伪代码** 和/或原始 **汇编** 上下文与你的查询一起包含。
- 响应和提示词会按函数自动保存在 IDB 中,以便你可以回顾你的自定义分析。
#### 函数解释
解释当前函数的作用。
#### 树形图
显示由 AI 生成的当前函数的基于文本的高层次执行流图。
与原始调用图不同,这是执行如何在函数中移动的叙述性表示——以简单的英文展示决策分支、循环以及每个块背后的意图。
输出示例:
```
├─ Attempt to enable debug privileges
│ └─ If enabling debug privileges succeeds
│ ├─ Retrieve the explorer process ID
│ │ └─ If explorer process ID is valid
│ │ ├─ Open the explorer process with required access rights
│ │ │ └─ If process handle is valid
│ │ │ ├─ Obtain the primary token of the explorer process
│ │ │ │ └─ If token retrieval succeeds
│ │ │ │ ├─ Impersonate the logged-on user associated with the token
│ │ │ │ │ └─ If impersonation succeeds
│ │ │ │ │ ├─ Close the token handle
│ │ │ │ │ ├─ Close the process handle
│ │ │ │ │ └─ Return success (1)
│ │ │ │ └─ If impersonation fails
│ │ │ │ ├─ Close the token handle if valid
│ │ │ │ └─ Close the process handle if valid
│ │ │ └─ If token retrieval fails
│ │ │ ├─ Close the process handle if valid
│ │ │ └─ Proceed to failure path
│ │ └─ If process handle is invalid
│ │ └─ Proceed to failure path
│ └─ If explorer process ID is invalid
│ └─ Proceed to failure path
└─ If enabling debug privileges fails
└─ Return failure (0)
```
当伪代码密集或高度混淆时,此选项卡特别有用,控制流的纯语言摘要有助于定位分析方向。
#### 函数详情
显示从 IDA 收集的关于当前活动函数的上下文元数据,无需进行任何 AI 调用。
显示的信息:
- **调用者** — 调用此函数的函数及其地址
- **被调用者(API / 库)** — 从此函数调用的外部 API 和库函数(例如,`CreateFileW`、`VirtualAlloc`)
- **被调用者(内部)** — 从此函数调用的其他用户定义函数
- **字符串引用** — 此函数中指令引用的字符串字面量
- 以及更多
此选项卡有助于在决定是否运行更深层次的 AI 操作之前快速收集上下文。
### 重命名函数
**快捷键:** `Ctrl+Alt+N`(代码模式) · `Ctrl+Alt+M`(恶意软件模式)
将当前函数的反编译伪代码发送给 AI,并根据代码的实际行为请求一个有意义的名称。
- **代码模式** — 通用模式。关注代码的逻辑和行为。
- **恶意软件模式** — 在提示词中添加恶意软件分析上下文。AI 了解 TTP、C2 模式、规避技术和常见的恶意软件模式。
此时会出现一个确认对话框,其中包含建议的名称、置信度分数和简要理由。你可以接受、编辑或拒绝该建议。
重命名前缀(默认为 `fn_`)和可选的地址后缀可以在设置中配置。

### 重命名变量
**快捷键:** `Ctrl+Alt+R`
将反编译代码发送给 AI,AI 会返回一个旧变量名到新语义名的映射(例如,`v3 -> socket_fd`、`v12 -> encrypted_buffer`)。
插件使用 `ida_hexrays.rename_lvar()` 将所有重命名直接应用于 Hex-Rays 反编译器。如果由于过期的反编译器缓存导致重命名返回 `False`,则会使用备用验证步骤。

### 添加注释(伪代码)
**快捷键:** `Ctrl+Alt+C`
AI 读取反编译代码并在关键逻辑点添加内联注释。注释被写入为 Hex-Rays 用户注释,并且也作为重复注释与反汇编视图同步。

### 添加节注释
**菜单:** `Edit > Plugins > PseudoNote > Add Section Comments (IDA-View)`
在反汇编视图中工作。AI 将指令分组到逻辑节中,并为每个节提供一个简短的纯英文标签(例如,`初始化堆栈帧`、`验证参数`、`调用导出解析器`)。
此操作也适用于**选区**。在 IDA-View 中高亮显示指令范围,然后触发操作 — 仅将选定范围发送给 AI。这对于分析较大函数中嵌入的 shellcode 块特别有用。

### 函数原型
**快捷键:** `Ctrl+Alt+S`
AI 推断函数的调用约定、参数名、参数类型和返回类型,然后使用 `idc.apply_type()` 将结果直接应用于 IDA。应用前可以审查生成的原型。
### 结构体编辑器
**访问方式:** 在伪代码中的变量名上右键单击 > **PseudoNote** > **结构体编辑器**
打开一个带有空白结构体模板的对话框。点击 **AI 建议** 让 AI 通过分析当前函数及其调用者中的所有字段访问(例如,`ptr + 0x18`、`v5->field_20`)来推断结构体布局。
你可以选择提供结构体的确切总大小,以便 AI 可以精确计算填充。生成后,你可以:
- 在代码编辑器中手动编辑定义
- 复制到剪贴板
- 应用到 IDA — 解析并将其导入到本地类型(`Shift+F1`),然后询问你是否要将该类型应用于变量
### 智能问答(AI)
**快捷键:** `Ctrl+Alt+A`
打开一个可停靠的聊天窗口,该窗口针对当前函数进行上下文关联。AI 预加载了函数的反编译代码,因此你可以提出有针对性的问题:
- "此函数使用什么 API 实现持久化?"
- "`v7` 在这里代表什么?"
- "这是一个已知的解密算法吗?"
- "用 Python 重写这段代码。"
聊天记录按函数持久化到 IDB 中。当你返回某个函数时,历史记录会自动恢复。当你导航到不同的函数时,聊天会无缝切换上下文并发出通知。

### 批量函数重命名器
**快捷键:** `Ctrl+Shift+R`
一个批量重命名工具,可以在一次会话中重命名数百个函数。
主要功能:
- 带有复选框的函数列表,用于包含或排除特定函数
- 过滤器仅显示未命名(`sub_*`)函数并隐藏系统/库函数
- 队列系统 — 根据复杂度将函数分类为 `高`、`中`、`低` 优先级
- 可配置的批处理大小和并行 Worker 数量
- 应用前预览 — 在提交之前审查所有建议的重命名
- API 批次之间可配置的速率限制冷却时间
- 前缀和地址后缀命名样式(例如,`fn_my_function_401000`)
AI 受到严格约束:它不会在没有证据的情况下凭空捏造名称。对于仅调用 `sub_*` 且没有字符串或已知 API 证据的函数,会赋予 `wrap_
### 深度分析器
**快捷键:** `Ctrl+Shift+S`
PseudoNote 中最强大的功能。一个完整的递归、多阶段分析流水线:
1. 从你选择的入口点构建完整的调用图
2. 自底向上重命名所有函数和变量,从叶函数开始
3. 执行深入的逐函数 AI 分析
4. 使用调用者上下文升级或降级风险评估
5. 生成全面的 HTML 取证报告
有关完整的逐阶段分解,请参见下面的[深度分析器流水线](#deep-analyzer-pipeline)部分。
#### PhantomNet 样本分析的 HTML 报告示例
### FLOSS 字符串发现
快捷键:** `Ctrl+Shift+F`
将 [FLOSS (FLARE Obfuscated String Solver)](https://github.com/mandiant/flare-floss) 直接集成到 IDA 中。
FLOSS 能够找到在常规字符串扫描中不出现的字符串,因为它们是:
- **堆栈字符串** — 在堆栈上逐个字符构建
- **紧凑字符串** — 在紧凑循环中构造
- **解码字符串** — 在运行时解密或去混淆
**设置:** 安装 FLOSS 并在“设置”>“外部工具”>“FLOSS 路径”中配置其完整路径。
结果显示在带有类型、字符串值和函数地址列的选项卡式 IDA 选择器中。单击结果可导航到相关函数。结果持久保存在 IDB 中,因此你无需在每个会话中重新运行 FLOSS。
### 字节/指令/Shellcode 分析
**菜单:** `Edit > Plugins > PseudoNote > Bytes/Instruction/Shellcode Analysis)`
打开选定字节/指令/Shellcode 的静态分析对话框。在启动之前在 IDA-View 中选择一个字节范围 — 选定的字节和反汇编将被预加载到对话框中。AI 提供有关字节/指令/Shellcode 可能用途、技术和目标平台的高级分析。
### 调用高亮器
**菜单:** `Edit > Plugins > PseudoNote > Toggle Call Highlight (Pseudocode / Graph/Linear)`
在视觉上高亮显示函数调用:
- 在伪代码中 — 用浅薰衣草色背景高亮包含函数调用的任何行
- 在反汇编中 — 用相同颜色高亮 `call` 和 `jmp` 指令
还会高亮任何带有 `fn_`、`wrap_` 或 `sub_` 前缀的函数,使得识别哪些调用已经重命名、哪些仍然未知变得容易。
### 调用树
**快捷键:** `Ctrl+Alt+X`
一个专用的、浮动的交互式树状查看器(灵感来自 dnSpy 等工具),用于浏览函数交叉引用(`Used By`)和依赖项(`Uses`)。
它充当 IDA 原生 `Alt+X` 交叉引用窗口的大规模升级替代品:
- **递归扩展:** 通过扩展图叶节点无限懒加载子函数,让你在不失去 UI 上下文的情况下直观地跟踪执行路径。
- **API 高亮:** 可选择将 `.idata` thunk 和 `extern` 指针解析为其可见的 API 字符串名称,并在内部行内显示(例如,`__imp_LoadLibraryA`)。
- **实时搜索过滤:** 包含一个顶部停靠的文本过滤器,可将层次结构动态修剪为与你正在搜索的函数或 API 完全匹配的内容。
- **导航:** 双击树中的任何元素,自动将你的 IDB 快照定位到调用指令。
### 搜索工具
可从反汇编或伪代码视图的右键上下文菜单中使用。
| 操作 | 如何触发 | 作用 |
|---|---|---|
| 在 VirusTotal 中搜索字节 | 在 IDA-View 中选择字节,右键单击 | 打开 VT 内容搜索以查找选定的十六进制字节 |
| 将字节添加到 CyberChef | 在 IDA-View 中选择字节,右键单击 | 进行 Base64 编码并打开以字节为输入的 CyberChef |
| 在 VirusTotal 中搜索字符串 | 高亮文本,右键单击 | 在 VT 中作为文件内容搜索字符串 |
| 在 Google 中搜索字符串 | 高亮文本,右键单击 | 精确短语 Google 搜索 |
| 在 GitHub 中搜索字符串 | 高亮文本,右键单击 | GitHub 上的代码搜索 |
| 在 MSDN 中搜索字符串 | 高亮文本,右键单击 | MSDN 文档搜索 |
| 将字符串添加到 CyberChef | 高亮文本,右键单击 | 打开以该字符串为输入的 CyberChef |
### IDA 视图高级复制
**菜单:** 在 IDA-View(反汇编)中右键单击 > `PseudoNote > IDA View Advance copy`
为恶意软件报告和签名开发高度优化的复制格式。此实用程序直接从当前选区提取原始字节和操作码,并将其转换为各种即用型格式。
| 格式 | 描述 |
|---|---|
| **YARA Raw** | 为 YARA 规则格式化的原始十六进制字节(例如,`{ 55 8B EC 83 EC 10 }`) |
| **YARA Mask** | 为立即偏移和相对跳转自动生成通配符(`??`) |
| **YARA No Imm** | 屏蔽所有立即数值,适用于查找具有不同常量的相似函数 |
| **YARA Opcodes** | 仅提取操作码和前缀,完全忽略操作数 |
| **YARA Rule** | 为选定代码生成完整、有效的 YARA 规则模板 |
| **Python** | 将字节格式化为 Python 字节字符串:`b"\x55\x8b\xec..."` |
| **C Array** | 将字节格式化为 C 十六进制数组:`unsigned char data[] = { 0x55, 0x8B, ... };` |
| **Disassembly** | 复制不带地址/偏移前缀的干净反汇编文本 |
典型用例:为恶意函数创建 YARA 签名、为 Python 模拟器提取 shellcode,或将干净的代码逻辑复制到技术报告中。
### 十六进制查看器
PseudoNote 十六进制查看器是一个自定义的可停靠面板,它提供了整个加载二进制文件的干净、简单的十六进制编辑器视图。它被设计为 IDA-View 和伪代码面板的配套工具,用于需要直接处理原始字节的任务。
**打开十六进制查看器**
| 方法 | 操作 |
|---|---|
| 快捷键 | `Ctrl+Alt+B` |
| 右键菜单 | `PseudoNote > Hex Viewer` |
| 插件菜单 | `Edit > Plugins > PseudoNote > Hex Viewer` |
**布局**
查看器分为三列:
- **地址栏** — 每行的绝对 EA(十六进制)。
- **十六进制字节** — 每行 16 个字节,分为 8 个一组。未加载的字节显示为 `..`。
- **ASCII** — 可打印字符行内呈现;不可打印字节显示为 `·`。
该视图通过在绘制时直接从嵌入式小部件读取 Qt 调色板,自动适应 IDA 当前的颜色主题(亮色或暗色)。
**光标同步**
当启用 **自动跟随光标**(默认)时,十六进制查看器会滚动到 IDA-View 或伪代码中当前选定的字节,并用红色矩形标记。取消选中该框或使用 **立即同步** 手动控制同步。
**导航二进制文件**
查看器在打开时加载整个二进制内存映射(所有段)。使用工具栏中的 **跳转到 EA** 输入字段直接导航到任何地址:
1. 在字段中输入或粘贴十六进制地址。
2. 按 `Enter` 或点击 **Go**。
**选择字节**
| 操作 | 结果 |
|---|---|
| 左键单击 | 在字节处设置选区起点 |
| 左键单击 + 拖动 | 选择连续的字节范围 |
| Shift + 单击 | 将现有选区扩展到单击的字节 |
| Shift + 向上滚动 | 向上滚动视图并将选区扩展到顶部可见行 |
| Shift + 向下滚动 | 向下滚动视图并将选区扩展到底部可见行 |
底部的状态栏显示当前的 EA、选定范围以及十六进制、十进制和 ASCII 格式的字节值。
**复制选定字节**
右键单击任何选区以打开复制菜单:
| 格式 | 输出示例 |
|---|---|
| 十六进制字节 | `55 8B EC 83 EC 10` |
| YARA pattern | `{ 55 8B EC 83 EC 10 }` |
| Python literal | `b"\x55\x8b\xec\x83\xec\x10"` |
| C/C++ array | `unsigned char data[6] = { 0x55, 0x8B, 0xEC, 0x83, 0xEC, 0x10 };` |
| Base64 | 标准 base64 编码字符串 |
**高亮字节范围**
可以同时以不同颜色高亮显示多个字节范围,这对于在手动分析期间注释协议字段、shellcode 阶段或可疑序列非常有用。
1. 通过点击并拖动(或使用 Shift+单击 / Shift+滚动 选择大范围)选择一个字节范围。
2. 右键单击并选择 **高亮选定内容...**
3. 设置标签(可选)并从对话框中选择颜色。
4. 点击 **OK** — 该范围立即在十六进制和 ASCII 列中同时高亮显示。
要移除高亮,请右键单击任何高亮的字节并选择 **移除高亮:label**。要移除全部高亮,请选择 **清除所有高亮**。
高亮呈现为扁平、无缝的颜色填充,与大多数专业十六进制编辑器的风格相匹配 — 没有按字节划分的框或边框。
## 批量分析器 vs 深度分析器
| 方面 | 批量函数分析器 | 深度分析器 |
|---|---|---|
| 目的 | 快速分类 — 标记并对每个函数进行分类 | 从选定的入口点进行完整的取证分析 |
| 范围 | 二进制文件中所有函数的平铺列表 | 从选定的根函数开始的递归调用图 |
| 分析深度 | 每个函数批次单次 AI 处理 | 多阶段流水线(7 个阶段) |
| 调用图 | 无 | 有,完全自底向上遍历 |
| 变量重命名 | 无 | 有,按函数自底向上进行 |
| 可读 C 代码生成 | 无 | 有 |
| 输出 | UI 表格中的标签和置信度;保存到 IDB | IDB 重命名 + 完整的 HTML 报告 + 磁盘产物 |
| 速度 | 快(并行批次) | 慢(彻底;可配置阶段) |
| 适用场景 | 未知二进制文件的初始分类 | 深入研究特定的执行路径 |
**推荐工作流:**
1. 首先运行 **批量函数分析器** 以获得全局概览并识别可疑函数。
2. 选择一个有趣的标记为 `malicious` 的函数作为 **深度分析器** 的入口点。
3. 使用 **智能问答** 详细调查特定的函数。
## 深度分析器流水线
深度分析器分为两个主要阶段运行,共 7 个步骤。
标签:ChatGPT, CTF 工具, DAST, DLL 劫持, Hex-Rays, IDA Pro 插件, Petitpotam, Promptflow, Python, Shellcode 分析, URL提取, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 人工智能, 反病毒, 反编译, 大语言模型, 恶意软件分析, 无后门, 用户模式Hook绕过, 网络威胁情报, 自动化注释, 逆向工具, 逆向工程, 静态分析