🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

逆向工作台 jiuyou-7411/dsh-rea-plugin

DeepSeek Harnessv9.9.9
jiuyou-74117 天前有提交已提供中文文档扫描:高危

REA 逆向工作台 — 220 个逆向工具的纯中文界面,含调用统计、错误翻译、一键装引擎

36.5/100
综合分
2
GitHub 星标
81
npm 周下载
—/5
用户评分

数据截至 2026/10/25 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-rea-plugin
npm 源 · dsh-rea-plugin 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · dev
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 7 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-rea-plugin @ 9.9.9
✓Node 引擎要求 ^22.19.0 || ^24.11.0 || >=26.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/1 10:25:04

🔴 安全扫描发现高危能力自动 · 静态分析源码
v2.7.0
🔴 扫描:高危尚无人工评估

静态扫描发现安装期即执行代码,或命令参数由运行时变量拼接(参数来源无法静态判定,从严处理)。

命令参数由运行时变量拼接读写/删除本地文件发起外部网络请求
查看扫描证据(共 67 处,展示前 51 条)
  • 发起网络请求
    client.js:2559
    const response = await fetch(API.status, { headers: { accept: 'application/json' } });
  • 发起网络请求
    client.js:2585
    fetch(API.health, { headers: { accept: 'application/json' } }),
  • 发起网络请求
    client.js:2586
    fetch(`${API.metrics}?limit=${STREAM_LIMIT}`, { headers: { accept: 'application/json' } }),
  • 发起网络请求
    client.js:2611
    const response = await fetch(
  • 发起网络请求
    client.js:2641
    const response = await fetch(API.jdk, { headers: { accept: "application/json" } });
  • 发起网络请求
    client.js:2670
    const response = await fetch(API.jdkInstall, {
  • 发起网络请求
    lib/providers.js:308
    const response = await fetch(url, { redirect: 'follow', signal: controller.signal, headers });
  • 请求外部主机api.github.com
    lib/providers.js:627
    const response = await fetch('https://api.github.com/repos/NationalSecurityAgency/ghidra/releases?per_page=30', {
  • 发起网络请求
    lib/providers.js:627
    const response = await fetch('https://api.github.com/repos/NationalSecurityAgency/ghidra/releases?per_page=30', {
  • 请求外部主机api.github.com
    lib/providers.js:697
    const cliResponse = await fetch('https://api.github.com/repos/skylot/jadx/releases/latest', { signal, headers });
  • 发起网络请求
    lib/providers.js:697
    const cliResponse = await fetch('https://api.github.com/repos/skylot/jadx/releases/latest', { signal, headers });
  • 发起网络请求
    lib/providers.js:703
    const mcpResponse = await fetch(
  • 请求外部主机api.github.com
    lib/providers.js:793
    const response = await fetch('https://api.github.com/repos/iBotPeaches/Apktool/releases/latest', {
  • 发起网络请求
    lib/providers.js:793
    const response = await fetch('https://api.github.com/repos/iBotPeaches/Apktool/releases/latest', {
  • 读取本地文件
    lib/providers.js:1222
    for (const entry of readdirSync(root)) {
  • 读取本地文件
    lib/providers.js:1225
    if (existsSync(java)) return home;
  • 读取本地文件
    lib/providers.js:1251
    accessSync(path.join(ghidraRoot, launcher));
  • 读取本地文件
    lib/providers.js:1261
    accessSync(jar);
  • 读取本地文件
    lib/providers.js:1269
    accessSync(apktoolLauncher);
  • 读取本地文件
    lib/tools-mobile.js:86
    if (existsSync(candidate)) return candidate;
  • 执行外部命令来自配置/变量
    lib/tools-mobile.js:192
    const child = spawn(command, args, {
  • 读取本地文件
    lib/tools-mobile.js:234
    if (!existsSync(scriptPath)) {
  • 读取本地文件
    lib/tools-mobile.js:272
    if (!existsSync(file)) return null;
  • 读取本地文件
    lib/tools-mobile.js:273
    return readFileSync(file, 'utf8');
  • 读取本地文件
    lib/tools-mobile.js:574
    const tools = existsSync(TOOLS) ? readDirSafe(TOOLS) : [];
  • 读取本地文件
    lib/tools-mobile.js:575
    const docs = existsSync(REFERENCES) ? readDirSafe(REFERENCES) : [];
  • 执行外部命令来自配置/变量
    lib/tool-cli.js:52
    const child = spawn(command, fullArgs, {
  • 读取本地文件
    lib/tool-docs.js:31
    return existsSync(path.join(HERE, '..', 'vendor', 'rea-docs', 'VENDORED'));
  • 读取本地文件
    lib/tool-docs.js:98
    if (!existsSync(localPath)) {
  • 读取本地文件
    lib/skills-install.js:51
    if (existsSync(path.join(dir, '.dsh')) || existsSync(path.join(dir, '.agents'))) {
  • 读取本地文件
    lib/skills-install.js:147
    if (previousHash === source.hash && existsSync(dest)) {
  • 读取本地文件
    lib/skills-install.js:154
    if (existsSync(dest)) {
  • 发起网络请求
    lib/jdk.js:73
    const response = await fetch(`${directory}?mirrorlist`, {
  • 执行外部命令来自配置/变量
    lib/jdk.js:119
    const child = spawn(command, args, { stdio: ['ignore', 'pipe', 'pipe'], windowsHide: true });
  • 读取本地文件
    lib/jdk.js:153
    if (existsSync(JDK_ROOT)) {
  • 读取本地文件
    lib/jdk.js:184
    if (candidate.home && !existsSync(candidate.java)) continue;
  • 执行外部命令来自配置/变量
    lib/jdk.js:332
    const child = spawn(command, args, { stdio: ['ignore', 'pipe', 'pipe'], windowsHide: true });
  • 读取本地文件
    lib/jdk.js:357
    if (!existsSync(JDK_ROOT)) return { removed: false, freedBytes: 0 };
  • 读取本地文件
    lib/jdk.js:379
    if (!existsSync(JDK_ROOT)) return 0;
  • 读取本地文件
    lib/updater.js:69
    if (existsSync(manifest)) {
  • 读取本地文件
    lib/updater.js:71
    const pkg = JSON.parse(readFileSync(manifest, 'utf8'));
  • 读取本地文件
    lib/updater.js:105
    if (foundSelf || existsSync(path.join(HERE, '..', 'package.json'))) {
  • 读取本地文件
    lib/updater.js:106
    if (existsSync(path.join(HERE, '..', '..', '..', '.git'))) {
  • 读取本地文件
    lib/updater.js:121
    return JSON.parse(readFileSync(path.join(HERE, '..', 'package.json'), 'utf8')).version ?? null;
  • 读取本地文件
    lib/updater.js:185
    if (!existsSync(path.join(root, '.git'))) return null;
  • 执行外部命令来自配置/变量
    lib/python-install.js:138
    const child = spawn(python, ['-c', script], {
  • 执行外部命令来自配置/变量
    lib/python-install.js:253
    const child = spawn(this.python, args, {
  • 执行外部命令表达式求值
    lib/mcp-client.js:108
    await this.#spawn();
  • 执行外部命令表达式求值
    lib/mcp-client.js:141
    #spawn() {
  • 执行外部命令来自配置/变量
    lib/mcp-client.js:145
    child = spawn(this.command, this.args, {
  • 执行外部命令来自配置/变量
    lib/pip-mirrors.js:104
    const child = spawn(
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
涉及外部主机:api.github.com

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
v3.0.42026-10-21
· v3.0.4 - 界面全中文化 + GitHub 导航 · 🎯 核心改进 · 界面全中文 · 常用工具列表:46 个工具的中文名映射,原始 ID 作为副标题小字显示 - win_bash → 执行命令 - write / read / edit → 写文件 / 读文件 / 修改文件 - plugin_manager → 插件管理 - 完整列表见源码 TOOL_LABELS · 错误提示中文化 - 新增规则:file changed since it was read → "文件在你读过之后又被改动了" - 新增规则:cannot write → "写入文件失败" - 修复告警条目英文原文重复显示两次的问题 · 其他界面文本 - 状态徽章:OK → 成功,FAIL → 失败 - 连接类型:SSE → 实时连接 - JDK 来源:PATH → 系统环境变量 - 错误兜底:unknown → (无错误信息) · GitHub 导航按钮 · 顶部工具栏新增 GitHub 图标按钮 · 点击直接跳转到 · 真实 标签,新标签页打开 · 📸 界面预览 · 🔧 技术细节 · 前端热重载生效:client.js 改动刷新页面即可 · Host 端需重启:lib/error-explain.js 改动需要重启 DSH · 工具标签表:TOOL_LABELS 对象集中管理中文映射 · RankRow 组件升级:支持双行显示(中文名 + 原始 ID) · 📦 安装方式 · 通过 DSH 插件管理器 插件管理 → 安装插件 → 输入: jiuyou-7411/dsh-rea-plugin · 或完整 URL 安装后需重启 DSH 使 Host 端改动生效。 · 🙏 致谢 感谢 @用户 提供的真实错误截图,让错误提示规则更准确。 --- 完整变更日志:CHANGELOG.md 问题反馈:GitHub Issues
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-rea-plugin REA 逆向工作台 —— 为 DeepSeek Harness 提供 220 个逆向工具、72 篇离线文档和 4 个智能体技能。 装完插件,Android 分析立刻可用;native 分析需点一次 Ghidra 安装。 界面全中文,不需要看英文就知道每个工具是做什么的。 REA 逆向工作台界面 界面 打开 DSH 左侧「REA」即可进入工作台: | 区域 | 作用 | | 顶部导航 | 总览 / 实时流 / 错误 / 服务状态 / 引擎 / 能力,右侧是 GitHub 与引擎管理按钮 | | KPI 卡片 | 服务状态、已加载工具、本次调用、失败次数、成功率 | | 常用工具 | 按调用次数排序,中文名 + 原始工具 ID 双行显示 | | 近期告警 | 失败调用会自动翻译成中文说明,并给出修复建议 | | 快捷操作 | 查看实时流、检查分析引擎、查看能力矩阵 | 为什么做这个 逆向工具大多只有英文命令行,参数复杂、报错晦涩。
展开完整文档(README 剩余 1 节)
dsh-rea-plugin

REA 逆向工作台 —— 为 DeepSeek Harness 提供 220 个逆向工具、72 篇离线文档和 4 个智能体技能。

装完插件,Android 分析立刻可用;native 分析需点一次 Ghidra 安装。

界面全中文,不需要看英文就知道每个工具是做什么的。

REA 逆向工作台界面

界面

打开 DSH 左侧「REA」即可进入工作台:

| 区域 | 作用 |
| 顶部导航 | 总览 / 实时流 / 错误 / 服务状态 / 引擎 / 能力,右侧是 GitHub 与引擎管理按钮 |
| KPI 卡片 | 服务状态、已加载工具、本次调用、失败次数、成功率 |
| 常用工具 | 按调用次数排序,中文名 + 原始工具 ID 双行显示 |
| 近期告警 | 失败调用会自动翻译成中文说明,并给出修复建议 |
| 快捷操作 | 查看实时流、检查分析引擎、查看能力矩阵 |

为什么做这个

逆向工具大多只有英文命令行,参数复杂、报错晦涩。这个插件把它们收进一个中文界面:

- 不懂英文也能用 —— 工具名、报错、状态全部中文化
- 报错能看懂 —— file changed since it was read 会翻译成「文件在你读过之后又被改动了」,并告诉你「重新读一次文件再改」
- 不用记命令 —— 220 个工具列在面板里,点开就能看参数
- 离线文档 —— 72 篇分析手册打包在插件里,断网也能查

能做什么 / 不能做什么

先看这一节,能省掉一场期待错位。

能做

| 目标 | 给你什么 | 需要什么 |
| Android APK | 解包、反编译 Java、smali、脱壳、Frida hook、SO 分析 | 装好即用 |
| native 二进制(PE / ELF / Mach-O) | 伪代码、汇编、调用图、字符串、交叉引用 | Ghidra |
| .NET 程序集 | 类型、方法、字段、IL 调用边 | 装好即用 |
| JavaScript / Electron | 模块结构、路由、API 端点、IPC 通道 | 装好即用 |
| WebAssembly | 导入导出签名、WAT、段与候选函数 | 装好即用 |
| 固件镜像 | 签名扫描、提取、文件系统还原 | binwalk / unblob |
| 抓包文件(pcap / HAR / SAZ) | 端点、DNS、TLS SNI、协议分布 | tshark |

不能做

1. 不能还原原始源码

给的是反编译产物——伪代码和汇编,不是原始代码。变量名是 local_18、param_1 这种,注释、类型、原来的函数名都没了。

想靠它「拿到完整源码」,拿不到。

2. 不能自动破解

遇到加壳、反调试、代码混淆,它能分析能看,但不会自动脱壳或帮你绕过。反注入检测、Janus 检查这些工具告诉你「有没有保护」,绕不绕得过要你自己动手。

3. native 分析需要 Ghidra(1.5 GB)

不装 Ghidra:

- ✅ Android 那套照常能用(JADX / apktool / Frida)
- ❌ 面对 exe、so、elf 只能看基础信息,出不来伪代码

面板上点「安装 Ghidra」即可,不用敲命令。

4. 没有动态调试器

Frida 是运行时插桩(挂到进程上读内存、改函数返回),不是 GDB 那种单步调试、设断点、看寄存器的调试器。

要看执行流:静态分析 + Frida 打点,没有单步。

5. 不保证分析结果正确

反编译器会猜错:间接调用解析不出来、虚函数的实际目标不确定、控制流可能断。插件里每个结论都标了来源(静态观察 / 运行时验证 / 推测),没标的不要当事实用。

6. 不代替人判断

工具给的是事实和候选,最后「这是不是漏洞」「这个算法是什么」得你自己定。

装了什么

| 类别 | 数量 | 来源 |
| REA MCP 工具 | 207 | 上游 rea-agents,自建桥接,无需配配置档 |
| 移动端工具 | 6 | 内置 MobileRE-Skill:脱壳、Frida、反注入检测、SO 分析、模拟执行 |
| 本地工具 | 7 | 引擎安装、能力矩阵、脱壳、CLI 直调、文档检索 |
| 文档 | 72 篇 | 离线打包,1.2 MB |
| 智能体技能 | 4 | 自动部署到 DSH 技能目录 |

安装

本插件通过 GitHub 分发,不走 npm(同名包 dsh-plugin-rea 已被他人发布,且国内访问 npm 不稳定)。

方式一:克隆仓库(推荐)

cd ~/.dsh/profiles/desktop

把插件克隆到本地

git clone https://github.com/jiuyou-7411/dsh-rea-plugin.git plugins/dsh-rea-plugin

声明为本地依赖

npm install ./plugins/dsh-rea-plugin

方式二:下载压缩包

从 Releases 下载 dsh-rea-plugin-x.x.x.tgz,然后: bash
cd ~/.dsh/profiles/desktop
npm install /path/to/dsh-rea-plugin-3.0.0.tgz

启用

在 cordis.yml 加一行,然后重启 DSH: yaml
- id: rea-host
name: 'dsh-rea-plugin'
config:
reaVersion: 6.7.0
autoInstallProviders: true

详细步骤见 INSTALL.md。

更新 bash
cd ~/.dsh/profiles/desktop/plugins/dsh-rea-plugin
git pull
npm install

然后重启 DSH。面板顶部的横幅会显示「代码落后上游 N 个提交」——这是 git fetch 后的真实差异,不是猜测。

它自己会做的事

装完插件、重启 DSH,以下全部自动完成,不用点任何按钮:

| 项目 | 耗时 | 失败处理 |
| 下载 rea-agents(207 个工具) | 5–30 秒 | 自动重试 5 次,退避共 52 秒 |
| 部署 4 个 Agent 技能 | <1 秒 | 写入 .dsh/skills/rea/ 和 .agents/skills/rea/ |
| 安装 apktool + jadx | 约 1 分钟 | 失败会显示原因和修复建议 |
| 安装 7 个 Python 包 | 约 2 分钟 | 自动测速选最快的镜像 |

只有三样需要你主动点:

| 项目 | 大小 | 为什么手动 |
| Ghidra | 543 MB | native 分析用,不是所有人都需要 |
| JDK 21 | 196 MB | 只有装 Ghidra 才需要 |
| Frida 引擎 | npm 全局 | 会写全局 npm,可能和已有冲突 |

界面

六个页面,顶部导航(不是左侧——插件本身就在 DSH 侧边栏里):

| 页 | 能看什么 |
| 总览 | 工具总数、REA 成功率、常用工具、近期告警(中文解释) |
| 实时流 | 每次调用的参数和返回,点开看完整内容 |
| 错误 | 按错误类型聚合,中文说明「什么错 / 为什么 / 怎么办」 |
| 服务状态 | 六项检查,异常项给具体修复步骤 |
| 引擎 | 引擎、JDK、Python 依赖,每项独立安装/卸载 |
| 能力 | 8 类目标的分析能力、依赖哪个引擎 |

热更新

插件不能替换自己正在运行的代码——Node 还开着那些文件,Windows 上连改名都会失败。所以更新分两层:

前端:真热重载

改 client.js 后,DSH 的 HMR 会直接替换界面,不用重启。

Host 端:必须重启

改 lib/*.js、index.js 后必须重启 DSH。这不是偷懒,是模块加载器的限制。

怎么知道有更新

面板顶部横幅读的是 git fetch 之后 HEAD..@{u} 的真实提交差:

● 代码落后上游 3 个提交在插件目录执行:
git pull && npm install
github.com/jiuyou-7411/dsh-rea-plugin
[检查上游]

不是猜的,不是查 npm。 没有 .git 的安装副本(比如从 tgz 装的)只显示仓库地址,不显示提交数。

为什么不用 npm 检查版本

同名的 dsh-plugin-rea 在 npm 上是另一个作者(czcdr)的包,版本 2.0.10。如果面板按 npm 版本比较,会提示你"更新"到别人的代码。

所以 npm 检查是默认关闭的。需要时设环境变量 REA_UPDATE_CHECK=1 打开,且它仍然拒绝把低于当前版本的号当成"新版"。

需要什么

| 要求 | 检查 | 不满足会怎样 |
| Node.js 22.19+ / 24.11+ / 26+ | node -v | 插件不加载 |
| 网络(首次) | 能访问 npm | 自动重试 5 次后提示 |
| Python 3.9+(可选) | python -V | 6 个移动端工具不可用,其余正常 |

开发和发布 bash

刷新上游内容(技能、文档索引、文档正文)

npm run sync:all

从上游内容重建 DSH 技能

npm run build:skills

打包前自检:文件完整性、数量、禁止路径、硬编码路径

npm run verify

打包

npm pack

sync:all 把上游内容 pin 到具体 commit,所以同一个插件版本永远对应同一份文档和技能。

和上游的关系

本插件是 morluto/rea 的 DSH 集成层,不修改上游代码:

- 工具面与上游 MCP 完全一致(207 个,无裁剪)
- 技能来自上游 .agents/skills,pin 到 commit d672cc2
- 文档来自上游 docs/,pin 到 commit 25bea07
- MobileRE 是独立项目,补 Android 动态分析能力

许可

MIT。内置第三方内容各自遵循原项目许可,详见 LICENSE。
预览分享卡片长什么样 ↓jiuyou-7411/dsh-rea-plugin
分享 · DeepSeek Harness Hub
jiuyou-7411/dsh-rea-plugin

REA 逆向工作台 — 220 个逆向工具的纯中文界面,含调用统计、错误翻译、一键装引擎

回到顶部