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 密钥,选择你的提供商和模型,然后在保存前点击 **测试连接**。 image ## 配置 & 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` 使用本地模型 | image ## 快速入门 1. 在 IDA Pro 中打开一个二进制文件,并等待 IDA 完成自动分析。 2. 在伪代码视图中导航到一个函数。 3. 右键单击 > **PseudoNote** > 选择一个操作。 4. 或使用下表中的快捷键。 伪代码右键菜单: image IDA 视图右键菜单: image ## 所有操作 & 快捷键 | 操作 | 快捷键 | 可用性 | |---|---|---| | 显示 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` 打开。 该面板包含七个选项卡,每个选项卡在分析过程中都有其独特的作用。 image #### 可读代码 显示为当前活动函数生成的、由 AI 编写的、人类可读的 C 代码。当你点击 **生成** 时,插件会使用 Hex-Rays 反编译该函数,将输出发送给 AI,并接收经过清理的、带有良好注释的代码版本。 关键行为: - 你可以在生成之前选择目标语言,以请求用其他语言(Python、Rust、Go 等)进行重写。 - 生成的代码显示在带有语法高亮的编辑器中。 - 结果会自动保存到 IDB 中,以函数地址键,因此下次打开同一函数时会恢复结果。 - 你可以随时重新生成,以便在重命名或修改函数后获得更新的结果。 ![可读代码](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/046a8d1806075050.gif) #### Markdown 笔记 直接集成在 IDA 中的全功能 Markdown 编辑器。使用它为每个函数编写和组织你的分析发现。 主要功能: - **实时预览** — 随时在原始 Markdown 编辑器和渲染预览之间切换 - **格式化工具栏** — 一键实现粗体、斜体、标题、代码块、项目列表和水平分割线 - **自动保存到 IDB** — 笔记直接保存到 IDB 文件中,以函数地址为键;无需外部文件 - **单函数作用域** — 每个函数都有自己的笔记。导航到函数时会自动恢复笔记。 - **导出** — 笔记可以作为纯 Markdown 复制,用于外部报告 典型用例:记录函数的功能、记录发现的 IOC、记录待解决的问题、跟踪重命名的项目。 ![ida_2kEzCpNSsB](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/14b29db79c075052.gif) #### 自定义 Prompt 位于分析师笔记部分的 **自定义 Prompt** 子选项卡,允许你使用完全自定义的临时指令对选定函数查询 AI。 主要功能: - 切换开关可自动将 **伪代码** 和/或原始 **汇编** 上下文与你的查询一起包含。 - 响应和提示词会按函数自动保存在 IDB 中,以便你可以回顾你的自定义分析。 image #### 函数解释 解释当前函数的作用。 image #### 树形图 显示由 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) ``` 当伪代码密集或高度混淆时,此选项卡特别有用,控制流的纯语言摘要有助于定位分析方向。 image #### 函数详情 显示从 IDA 收集的关于当前活动函数的上下文元数据,无需进行任何 AI 调用。 显示的信息: - **调用者** — 调用此函数的函数及其地址 - **被调用者(API / 库)** — 从此函数调用的外部 API 和库函数(例如,`CreateFileW`、`VirtualAlloc`) - **被调用者(内部)** — 从此函数调用的其他用户定义函数 - **字符串引用** — 此函数中指令引用的字符串字面量 - 以及更多 此选项卡有助于在决定是否运行更深层次的 AI 操作之前快速收集上下文。 image ### 重命名函数 **快捷键:** `Ctrl+Alt+N`(代码模式) · `Ctrl+Alt+M`(恶意软件模式) 将当前函数的反编译伪代码发送给 AI,并根据代码的实际行为请求一个有意义的名称。 - **代码模式** — 通用模式。关注代码的逻辑和行为。 - **恶意软件模式** — 在提示词中添加恶意软件分析上下文。AI 了解 TTP、C2 模式、规避技术和常见的恶意软件模式。 此时会出现一个确认对话框,其中包含建议的名称、置信度分数和简要理由。你可以接受、编辑或拒绝该建议。 重命名前缀(默认为 `fn_`)和可选的地址后缀可以在设置中配置。 ![ida_3PXAhsbh0V](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/0bec8cfca4075055.gif) ### 重命名变量 **快捷键:** `Ctrl+Alt+R` 将反编译代码发送给 AI,AI 会返回一个旧变量名到新语义名的映射(例如,`v3 -> socket_fd`、`v12 -> encrypted_buffer`)。 插件使用 `ida_hexrays.rename_lvar()` 将所有重命名直接应用于 Hex-Rays 反编译器。如果由于过期的反编译器缓存导致重命名返回 `False`,则会使用备用验证步骤。 ![nyQc7GMToe](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/ab4f718dac075057.gif) ### 添加注释(伪代码) **快捷键:** `Ctrl+Alt+C` AI 读取反编译代码并在关键逻辑点添加内联注释。注释被写入为 Hex-Rays 用户注释,并且也作为重复注释与反汇编视图同步。 ![1Ty7bxrf1Z](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/b7bc692f2f075100.gif) ### 添加节注释 **菜单:** `Edit > Plugins > PseudoNote > Add Section Comments (IDA-View)` 在反汇编视图中工作。AI 将指令分组到逻辑节中,并为每个节提供一个简短的纯英文标签(例如,`初始化堆栈帧`、`验证参数`、`调用导出解析器`)。 此操作也适用于**选区**。在 IDA-View 中高亮显示指令范围,然后触发操作 — 仅将选定范围发送给 AI。这对于分析较大函数中嵌入的 shellcode 块特别有用。 ![ida_WTUgWjwz3o](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/ed43a125bf075103.gif) ### 函数原型 **快捷键:** `Ctrl+Alt+S` AI 推断函数的调用约定、参数名、参数类型和返回类型,然后使用 `idc.apply_type()` 将结果直接应用于 IDA。应用前可以审查生成的原型。 image ### 结构体编辑器 **访问方式:** 在伪代码中的变量名上右键单击 > **PseudoNote** > **结构体编辑器** 打开一个带有空白结构体模板的对话框。点击 **AI 建议** 让 AI 通过分析当前函数及其调用者中的所有字段访问(例如,`ptr + 0x18`、`v5->field_20`)来推断结构体布局。 你可以选择提供结构体的确切总大小,以便 AI 可以精确计算填充。生成后,你可以: - 在代码编辑器中手动编辑定义 - 复制到剪贴板 - 应用到 IDA — 解析并将其导入到本地类型(`Shift+F1`),然后询问你是否要将该类型应用于变量 image ### 智能问答(AI) **快捷键:** `Ctrl+Alt+A` 打开一个可停靠的聊天窗口,该窗口针对当前函数进行上下文关联。AI 预加载了函数的反编译代码,因此你可以提出有针对性的问题: - "此函数使用什么 API 实现持久化?" - "`v7` 在这里代表什么?" - "这是一个已知的解密算法吗?" - "用 Python 重写这段代码。" 聊天记录按函数持久化到 IDB 中。当你返回某个函数时,历史记录会自动恢复。当你导航到不同的函数时,聊天会无缝切换上下文并发出通知。 ![ida_TPhxGX9F8O](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/51c8d2fbea075106.gif) ### 批量函数重命名器 **快捷键:** `Ctrl+Shift+R` 一个批量重命名工具,可以在一次会话中重命名数百个函数。 主要功能: - 带有复选框的函数列表,用于包含或排除特定函数 - 过滤器仅显示未命名(`sub_*`)函数并隐藏系统/库函数 - 队列系统 — 根据复杂度将函数分类为 `高`、`中`、`低` 优先级 - 可配置的批处理大小和并行 Worker 数量 - 应用前预览 — 在提交之前审查所有建议的重命名 - API 批次之间可配置的速率限制冷却时间 - 前缀和地址后缀命名样式(例如,`fn_my_function_401000`) AI 受到严格约束:它不会在没有证据的情况下凭空捏造名称。对于仅调用 `sub_*` 且没有字符串或已知 API 证据的函数,会赋予 `wrap_` 的名称,置信度为 30% 或更低。 ![ida_Y6QLFZ9MmN](https://github.com/user-attachments/assets/a48c8595-e76b-42fa-a53f-279aac295131) ### 批量变量重命名器 **快捷键:** `Ctrl+Shift+V` 与函数重命名器相同的批量架构,但用于跨多个函数的局部变量。 - 以可配置的批处理大小处理函数 - 将每个函数的反编译代码发送给 AI,并接收 `{old_name: new_name}` 映射 - 通过 `ida_hexrays.rename_lvar()` 应用重命名,并提供备用验证 - 在结果表中显示每个函数的重命名计数和失败数 - 结果存储在 IDB 中,以便在会话后进行审查 ![ida_QTsoEYQ9qc](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/e123750f9d075113.gif) ### 批量函数分析器 **快捷键:** `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` = 进程注入) 结果显示在可排序、可过滤的表格中。你可以按标签过滤或双击导航到某个函数。 ![ida_8MKhw3CUJs](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/63468fb391075127.gif) ### 函数调用链总结器 **菜单:** 在反汇编/伪代码中右键单击 > `PseudoNote > Function Chain Summarizer` 深度分析器的专用、轻量级替代方案。此工具不再重命名符号和输出庞大的 HTML 报告,而是构建一个功能性的 Map-Reduce 文本摘要,准确说明执行链的作用。 主要功能: - **调用图映射:** 原生发现多达你配置的节点限制(例如 150 个函数),而不会用过早的重命名污染 IDB。 - **智能过滤:** 自动绕过库、API thunk 和微小的噪声/填充函数。 - **Map-Reduce 架构:** 将包含目标函数的庞大图分解为安全的块,要求 AI 在不发生 token 溢出的情况下安全分析它们,并合成一个最终的连贯 Markdown 报告,代表自顶向下的逻辑。 - **持久化:** 生成的摘要持久存储在 IDB `netnode` 中。对以前分析的链打开总结器会立即加载保存的 Map-Reduce 报告! image ### 深度分析器 **快捷键:** `Ctrl+Shift+S` PseudoNote 中最强大的功能。一个完整的递归、多阶段分析流水线: 1. 从你选择的入口点构建完整的调用图 2. 自底向上重命名所有函数和变量,从叶函数开始 3. 执行深入的逐函数 AI 分析 4. 使用调用者上下文升级或降级风险评估 5. 生成全面的 HTML 取证报告 有关完整的逐阶段分解,请参见下面的[深度分析器流水线](#deep-analyzer-pipeline)部分。 image image #### PhantomNet 样本分析的 HTML 报告示例 image image image image image image image image image image image image ### FLOSS 字符串发现 快捷键:** `Ctrl+Shift+F` 将 [FLOSS (FLARE Obfuscated String Solver)](https://github.com/mandiant/flare-floss) 直接集成到 IDA 中。 FLOSS 能够找到在常规字符串扫描中不出现的字符串,因为它们是: - **堆栈字符串** — 在堆栈上逐个字符构建 - **紧凑字符串** — 在紧凑循环中构造 - **解码字符串** — 在运行时解密或去混淆 **设置:** 安装 FLOSS 并在“设置”>“外部工具”>“FLOSS 路径”中配置其完整路径。 结果显示在带有类型、字符串值和函数地址列的选项卡式 IDA 选择器中。单击结果可导航到相关函数。结果持久保存在 IDB 中,因此你无需在每个会话中重新运行 FLOSS。 image ### 字节/指令/Shellcode 分析 **菜单:** `Edit > Plugins > PseudoNote > Bytes/Instruction/Shellcode Analysis)` 打开选定字节/指令/Shellcode 的静态分析对话框。在启动之前在 IDA-View 中选择一个字节范围 — 选定的字节和反汇编将被预加载到对话框中。AI 提供有关字节/指令/Shellcode 可能用途、技术和目标平台的高级分析。 image ### 调用高亮器 **菜单:** `Edit > Plugins > PseudoNote > Toggle Call Highlight (Pseudocode / Graph/Linear)` 在视觉上高亮显示函数调用: - 在伪代码中 — 用浅薰衣草色背景高亮包含函数调用的任何行 - 在反汇编中 — 用相同颜色高亮 `call` 和 `jmp` 指令 还会高亮任何带有 `fn_`、`wrap_` 或 `sub_` 前缀的函数,使得识别哪些调用已经重命名、哪些仍然未知变得容易。 image ### 调用树 **快捷键:** `Ctrl+Alt+X` 一个专用的、浮动的交互式树状查看器(灵感来自 dnSpy 等工具),用于浏览函数交叉引用(`Used By`)和依赖项(`Uses`)。 它充当 IDA 原生 `Alt+X` 交叉引用窗口的大规模升级替代品: - **递归扩展:** 通过扩展图叶节点无限懒加载子函数,让你在不失去 UI 上下文的情况下直观地跟踪执行路径。 - **API 高亮:** 可选择将 `.idata` thunk 和 `extern` 指针解析为其可见的 API 字符串名称,并在内部行内显示(例如,`__imp_LoadLibraryA`)。 - **实时搜索过滤:** 包含一个顶部停靠的文本过滤器,可将层次结构动态修剪为与你正在搜索的函数或 API 完全匹配的内容。 - **导航:** 双击树中的任何元素,自动将你的 IDB 快照定位到调用指令。 image ### 搜索工具 可从反汇编或伪代码视图的右键上下文菜单中使用。 | 操作 | 如何触发 | 作用 | |---|---|---| | 在 VirusTotal 中搜索字节 | 在 IDA-View 中选择字节,右键单击 | 打开 VT 内容搜索以查找选定的十六进制字节 | | 将字节添加到 CyberChef | 在 IDA-View 中选择字节,右键单击 | 进行 Base64 编码并打开以字节为输入的 CyberChef | | 在 VirusTotal 中搜索字符串 | 高亮文本,右键单击 | 在 VT 中作为文件内容搜索字符串 | | 在 Google 中搜索字符串 | 高亮文本,右键单击 | 精确短语 Google 搜索 | | 在 GitHub 中搜索字符串 | 高亮文本,右键单击 | GitHub 上的代码搜索 | | 在 MSDN 中搜索字符串 | 高亮文本,右键单击 | MSDN 文档搜索 | | 将字符串添加到 CyberChef | 高亮文本,右键单击 | 打开以该字符串为输入的 CyberChef | image image ### 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,或将干净的代码逻辑复制到技术报告中。 image ### 十六进制查看器 PseudoNote 十六进制查看器是一个自定义的可停靠面板,它提供了整个加载二进制文件的干净、简单的十六进制编辑器视图。它被设计为 IDA-View 和伪代码面板的配套工具,用于需要直接处理原始字节的任务。 image **打开十六进制查看器** | 方法 | 操作 | |---|---| | 快捷键 | `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 列中同时高亮显示。 image image 要移除高亮,请右键单击任何高亮的字节并选择 **移除高亮:label**。要移除全部高亮,请选择 **清除所有高亮**。 高亮呈现为扁平、无缝的颜色填充,与大多数专业十六进制编辑器的风格相匹配 — 没有按字节划分的框或边框。 ## 批量分析器 vs 深度分析器 | 方面 | 批量函数分析器 | 深度分析器 | |---|---|---| | 目的 | 快速分类 — 标记并对每个函数进行分类 | 从选定的入口点进行完整的取证分析 | | 范围 | 二进制文件中所有函数的平铺列表 | 从选定的根函数开始的递归调用图 | | 分析深度 | 每个函数批次单次 AI 处理 | 多阶段流水线(7 个阶段) | | 调用图 | 无 | 有,完全自底向上遍历 | | 变量重命名 | 无 | 有,按函数自底向上进行 | | 可读 C 代码生成 | 无 | 有 | | 输出 | UI 表格中的标签和置信度;保存到 IDB | IDB 重命名 + 完整的 HTML 报告 + 磁盘产物 | | 速度 | 快(并行批次) | 慢(彻底;可配置阶段) | | 适用场景 | 未知二进制文件的初始分类 | 深入研究特定的执行路径 | **推荐工作流:** 1. 首先运行 **批量函数分析器** 以获得全局概览并识别可疑函数。 2. 选择一个有趣的标记为 `malicious` 的函数作为 **深度分析器** 的入口点。 3. 使用 **智能问答** 详细调查特定的函数。 ## 深度分析器流水线 深度分析器分为两个主要阶段运行,共 7 个步骤。

### 阶段 1:发现 & 准备 #### 阶段 1 — 环境设置 在 IDB 旁边初始化工作空间目录,从 IDA 检测二进制文件路径,验证 AI 已配置,并检查所有依赖项。在 IDB 文件旁边创建一个名为 `DeepAnalyzer_{EntryFunction}_{Filename}_{Timestamp}` 的工作空间文件夹。 #### 阶段 2 — 递归调用图发现 从你选择的入口函数开始,分析器使用 IDA 的交叉引用引擎递归遍历所有被调用者。它构建一个完整的 `FuncNode` 图,包含: - 调用者和被调用者关系 - 距离入口点的函数深度 - 库和 thunk 检测(默认情况下排除在深度分析之外) - 可配置的限制:最大节点数、最大深度、每个节点的最大被调用者数、最大队列大小 #### 阶段 3 — 初始函数 & 变量重命名 在深度分析开始之前消除 `sub_XXXXXX` 名称。使用自底向上的方法(先是叶函数),这样当分析调用者时,其被调用者已经具有有意义的名称。 - 通过批量变量重命名器流水线进行变量重命名 - 使用与独立重命名操作相同的 AI 提示词进行函数重命名 - 可配置的前缀(默认为 `da_`)和可选的地址后缀 ### 阶段 2:深度恶意代码分析 #### 阶段 4 — 初始代码分析 + 可读 C 代码生成 对于调用图中的每个函数,AI 会: - 将反编译代码重写为干净、可读的 C 代码 - 执行基线威胁评估(加密、网络、文件 I/O、进程注入等) - 分配初始风险标签(`malicious`、`suspicious`、`benign`) - 识别技术指标 生成的可读 C 代码保存到磁盘上的 `/readable/`。 #### 阶段 5 — 上下文代码分析细化 结合调用者上下文重新分析每个函数。AI 现在知道为什么要调用某个函数。这允许: - 当从恶意上下文调用时,升级看起来是良性实用工具的函数 - 当调用上下文显示合法使用时,降级误报 - 在调用链中上下传播行为意图 #### 阶段 6 — 报告数据生成 综合所有收集到的分析数据: - 执行摘要 - IOC 提取(IP、域、注册表项、文件路径、互斥锁名) - 字符串分类 - MITRE ATT&CK 技术映射 - Mermaid 调用图渲染 - 函数级风险热图 #### 阶段 7 — HTML 报告生成 生成一个独立的、带样式的 HTML 报告,保存到 `/report.html`。报告包括: - 带有总体风险评估的执行摘要 - MITRE ATT&CK 覆盖表 - 包含可读 C 代码、指标和风险徽章的逐函数分析卡 - IOC 表 - 字符串分析部分 - 交互式调用图(Mermaid 图表) ## 批量函数分析器流水线

1. **加载所有函数** — 扫描二进制文件中定义的每个函数 2. **过滤** — 可选择跳过系统/库函数和没有代码的函数 3. **静态预标记** — 无需任何 LLM 调用即可应用恶意软件 API 分类;基于在每个函数中看到的 API 名称的快速启发式方法 4. **批量 AI 分类** — 将函数分组为可配置的批次,将反编译的伪代码、字符串和 API 调用列表发送给 AI 5. **结果应用** — 更新 UI 表格中的标签、置信度和原因,并保存到 IDB 6. **重试逻辑** — 失败的批次会自动排队重试 ## 数据持久化 PseudoNote 使用 IDA 原生的 NetNode 机制将所有内容存储在 IDA 数据库(IDB 文件)中。 - AI 分析、重命名的符号、笔记和聊天记录在 IDA 重启后依然存在 - 与队友共享 IDB 意味着他们会看到你所有的注释 - 核心功能不需要外部数据库或服务器 | 数据 | 存储位置 | IDB 标签 | |---|---|---| | 可读 C 代码(每个函数) | IDB NetNode `$ pseudonote:readable_c` | tag 0 | | 聊天记录(每个函数) | IDB NetNode(同一节点) | tag 90 | | 变量重命名结果 | IDB NetNode(同一节点) | tag 91 | | 分析器结果(标签/置信度) | IDB NetNode(同一节点) | tag 90 | | FLOSS 字符串结果 | IDB NetNode `$ pseudonote:floss_results` | — | | 分析师笔记 | IDB NetNode | — | | 函数链总结 | IDB NetNode(同一节点) | tag 90 | | 自定义 Prompts | IDB NetNode(同一节点) | tag 92 | 深度分析器磁盘产物保存在 IDB 旁边: ``` / └── _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 生成的结果应被视为辅助参考,而非绝对事实。请务必手动验证关键发现。*
标签:ChatGPT, CTF 工具, DAST, DLL 劫持, Hex-Rays, IDA Pro 插件, Petitpotam, Promptflow, Python, Shellcode 分析, URL提取, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 人工智能, 反病毒, 反编译, 大语言模型, 恶意软件分析, 无后门, 用户模式Hook绕过, 网络威胁情报, 自动化注释, 逆向工具, 逆向工程, 静态分析