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

昭华安卓沙箱版 PnKoZCN/zhaohua-android-dsh

DeepSeek Harness
PnKoZCN22 天前有提交已提供中文文档扫描:含敏感能力

在手机上跑 Linux 沙箱,随时切换提示词与安全技能

29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add PnKoZCN/zhaohua-android-dsh
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么[目录]—
dsh 原生插件 · ui
暂无时间戳·判据 →
装得上吗[实装验证]!
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
数据截至 2026/11/04·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/05·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 22 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

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

验证判据与等级说明 →

可信度证据

⚠︎ 实装验证未通过(unknown · 2026/11/4) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 61 处,展示前 47 条)
  • 读取本地文件
    plugins/dsh-bash-router/lib/index.js:75
    try { await ac(p); return true; } catch { return false; }
  • 读取本地文件
    plugins/dsh-bash-router/lib/index.js:79
    try { accessSync(p, constants.F_OK); return true; } catch { return false; }
  • 读取本地文件
    plugins/dsh-bash-router/lib/index.js:128
    val = (await rf(file, "utf8")).trim().toLowerCase() === "on";
  • 写入本地文件
    plugins/dsh-bash-router/lib/index.js:156
    if (!(await exists(sbx))) await mk(sbx, { recursive: true });
  • 写入本地文件
    plugins/dsh-bash-router/lib/index.js:157
    if (!(await exists(rootfsDir))) await mk(rootfsDir, { recursive: true });
  • 写入本地文件
    plugins/dsh-bash-router/lib/index.js:158
    if (!(await exists(tmpDir))) await mk(tmpDir, { recursive: true });
  • 执行外部命令固定命令
    plugins/dsh-bash-router/lib/index.js:164
    execFile("python3", [extractor, tar, rootfsDir], { maxBuffer: 8 << 20 }, (err, so, se) =>
  • 写入本地文件
    plugins/dsh-bash-router/lib/index.js:168
    if (!(await exists(tmpDir))) await mk(tmpDir, { recursive: true });
  • 发起网络请求
    plugins/dsh-client-ui-settings-sandbox/lib/client.js:29
    const res = await fetch("/api/zhbox/status");
  • 发起网络请求
    plugins/dsh-client-ui-settings-sandbox/lib/client.js:48
    const res = await fetch(`/api/zhbox/${action}`, { method: "POST" });
  • 发起网络请求
    plugins/dsh-client-ui-settings-sandbox/lib/client.js:76
    const res = await fetch("/api/zhbox/gorust", { method: "POST" });
  • 执行外部命令来自配置/变量
    plugins/dsh-client-ui-settings-sandbox/lib/index.js:19
    execFile(file, [...args], { timeout: timeoutMs, maxBuffer: 4 << 20, encoding: "utf8" }, (error, stdout, stderr) => {
  • 读取本地文件
    plugins/dsh-client-ui-settings-sandbox/lib/index.js:28
    toggle = (await readFile(statePath(), "utf8")).trim().toLowerCase() === "on" ? "on" : "off";
  • 读取本地文件
    plugins/dsh-client-ui-settings-sandbox/lib/index.js:33
    await readFile(path.join(sandboxDir(), "rootfs/usr/bin/zh-setup"));
  • 写入本地文件
    plugins/dsh-client-ui-settings-sandbox/lib/index.js:51
    await writeFile(target, Buffer.from(ZH_SETUP_B64, "base64"));
  • 写入本地文件
    plugins/dsh-client-ui-settings-sandbox/lib/index.js:52
    await chmod(target, 493).catch(() => {
  • 写入本地文件
    plugins/dsh-client-ui-settings-sandbox/lib/index.js:70
    await mkdir(sbx, { recursive: true });
  • 写入本地文件
    plugins/dsh-client-ui-settings-sandbox/lib/index.js:71
    await writeFile(zhbox, script);
  • 写入本地文件
    plugins/dsh-client-ui-settings-sandbox/lib/index.js:72
    await chmod(zhbox, 493).catch(() => {
  • 写入本地文件
    plugins/dsh-client-ui-settings-sandbox/lib/index.js:99
    await writeFile(statePath(), `${next}
  • 读取本地文件
    plugins/dsh-client-ui-settings-sandbox/lib/index.js:109
    await readFile(path.join(sbx, "rootfs/usr/bin/zh-setup"));
  • 执行外部命令来自配置/变量
    plugins/dsh-client-ui-settings-sandbox/src/index.ts:48
    execFile(file, [...args], { timeout: timeoutMs, maxBuffer: 4 << 20, encoding: 'utf8' }, (error, stdout, stderr) => {
  • 读取本地文件
    plugins/dsh-client-ui-settings-sandbox/src/index.ts:57
    try { toggle = (await readFile(statePath(), 'utf8')).trim().toLowerCase() === 'on' ? 'on' : 'off' } catch {}
  • 读取本地文件
    plugins/dsh-client-ui-settings-sandbox/src/index.ts:59
    try { await readFile(path.join(sandboxDir(), 'rootfs/usr/bin/zh-setup')); rootfs = true } catch {}
  • 写入本地文件
    plugins/dsh-client-ui-settings-sandbox/src/index.ts:77
    await writeFile(target, Buffer.from(ZH_SETUP_B64, 'base64'))
  • 写入本地文件
    plugins/dsh-client-ui-settings-sandbox/src/index.ts:78
    await chmod(target, 0o755).catch(() => {})
  • 写入本地文件
    plugins/dsh-client-ui-settings-sandbox/src/index.ts:105
    await mkdir(sbx, { recursive: true })
  • 写入本地文件
    plugins/dsh-client-ui-settings-sandbox/src/index.ts:106
    await writeFile(zhbox, script)
  • 写入本地文件
    plugins/dsh-client-ui-settings-sandbox/src/index.ts:107
    await chmod(zhbox, 0o755).catch(() => {})
  • 写入本地文件
    plugins/dsh-client-ui-settings-sandbox/src/index.ts:133
    await writeFile(statePath(), `${next}\n`)
  • 读取本地文件
    plugins/dsh-client-ui-settings-sandbox/src/index.ts:141
    try { await readFile(path.join(sbx, 'rootfs/usr/bin/zh-setup')); seeded = true } catch {}
  • 发起网络请求
    plugins/dsh-prompt-switch/lib/client.js:16
    const res = await fetch("/api/zprompt/status");
  • 发起网络请求
    plugins/dsh-prompt-switch/lib/client.js:35
    if ((await fetch(`/api/zprompt/set-mode?mode=${encodeURIComponent(mode)}`, { method: "POST" })).ok) await refresh();
  • 读取本地文件
    plugins/dsh-prompt-switch/lib/index.js:18
    const m = readFileSync(homeFile("zh-prompt.mode"), "utf8").trim().toLowerCase();
  • 读取本地文件
    plugins/dsh-prompt-switch/lib/index.js:28
    const t = readFileSync(path.join(PROMPTS, file), "utf8");
  • 读取本地文件
    plugins/dsh-prompt-switch/lib/index.js:45
    const text = await readFile(src, "utf8");
  • 读取本地文件
    plugins/dsh-prompt-switch/lib/index.js:46
    if (!existsSync(dst) || readFileSync(dst, "utf8") !== text) writeFileSync(dst, text);
  • 写入本地文件
    plugins/dsh-prompt-switch/lib/index.js:46
    if (!existsSync(dst) || readFileSync(dst, "utf8") !== text) writeFileSync(dst, text);
  • 读取本地文件
    plugins/dsh-prompt-switch/lib/index.js:46
    if (!existsSync(dst) || readFileSync(dst, "utf8") !== text) writeFileSync(dst, text);
  • 写入本地文件
    plugins/dsh-prompt-switch/lib/index.js:86
    writeFileSync(homeFile("zh-prompt.mode"), mode + "\n");
  • 读取本地文件
    plugins/dsh-prompt-switch/src/index.host.ts:18
    const m = readFileSync(homeFile("zh-prompt.mode"), "utf8").trim().toLowerCase();
  • 读取本地文件
    plugins/dsh-prompt-switch/src/index.host.ts:28
    const t = readFileSync(path.join(PROMPTS, file), "utf8");
  • 读取本地文件
    plugins/dsh-prompt-switch/src/index.host.ts:46
    const text = await readFile(src, "utf8");
  • 读取本地文件
    plugins/dsh-prompt-switch/src/index.host.ts:47
    if (!existsSync(dst) || readFileSync(dst, "utf8") !== text) writeFileSync(dst, text);
  • 写入本地文件
    plugins/dsh-prompt-switch/src/index.host.ts:47
    if (!existsSync(dst) || readFileSync(dst, "utf8") !== text) writeFileSync(dst, text);
  • 读取本地文件
    plugins/dsh-prompt-switch/src/index.host.ts:47
    if (!existsSync(dst) || readFileSync(dst, "utf8") !== text) writeFileSync(dst, text);
  • 写入本地文件
    plugins/dsh-prompt-switch/src/index.host.ts:91
    writeFileSync(homeFile("zh-prompt.mode"), mode + "\n");
扫描于 2026/11/5(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库

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

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
展开完整介绍(121 字)↓

DeepSeek Harness 的 Android 改造发行版:本机 proot 沙箱 + 沙箱管理 UI + 三档提示词切换 + 安全分析技能库。Based on woaiys3/deepseek-harness-android-app.

README

由 DeepSeek 最新模型翻译生成
ZhaoHua Android DeepSeek Harness 把 DeepSeek Harness 打包成 Android APK,并叠加本机 proot 沙箱、双设置页 UI、三档提示词切换与安全分析流水线技能库的改造发行版。 English · 架构文档 · 构建指南 · 第三方开源项目 · 变更记录 这是什么 DeepSeek Harness(DSH)是 DeepSeek 官方的 agent 运行时。本项目的上游基线是 woaiys3/deepseek-harness-android-app——它把 DSH 内核(Node + 插件树)打进 Android APK,并提供原生控制台、无障碍助手、虚拟屏、AI 浏览器等设备侧能力。 ZhaoHua 版在其之上做四件事: | 能力 | 说明 | 位置 | | 本机 proot 沙箱 | 完全不依赖外部服务器的 Linux 环境:内置 Android proot + Alpine aarch64 rootfs。命中工具链命令(git/gcc/cmake/pip…
展开完整文档(README 剩余 1 节)
ZhaoHua Android DeepSeek Harness

把 DeepSeek Harness 打包成 Android APK,并叠加本机 proot 沙箱、双设置页 UI、三档提示词切换与安全分析流水线技能库的改造发行版。

English · 架构文档 · 构建指南 · 第三方开源项目 · 变更记录

这是什么

DeepSeek Harness(DSH)是 DeepSeek 官方的 agent 运行时。本项目的上游基线是 woaiys3/deepseek-harness-android-app——它把 DSH 内核(Node + 插件树)打进 Android APK,并提供原生控制台、无障碍助手、虚拟屏、AI 浏览器等设备侧能力。

ZhaoHua 版在其之上做四件事:

| 能力 | 说明 | 位置 |
| 本机 proot 沙箱 | 完全不依赖外部服务器的 Linux 环境:内置 Android proot + Alpine aarch64 rootfs。命中工具链命令(git/gcc/cmake/pip…)或开关打开时,命令进沙箱执行;沙箱不可用自动回落本机 | plugins/dsh-bash-router/ · sandbox/ |
| 沙箱管理 UI | DSH 设置页内的原生 React 卡片:状态探测 / 开关 / 一键安装工具箱 / 跑测试;另有 Go/Rust 工具链按需安装按钮 | plugins/dsh-client-ui-settings-sandbox/ |
| 三档提示词切换 | 设置页内切换人格:默认(中性)/ 常规破甲 / Claude 专用。热切换,下一条消息即生效,无需重启 | plugins/dsh-prompt-switch/ · prompts/ |
| 安全分析技能库 | 20 步流水线方法论 + 12 个开源渗透 Agent 平台文档 + 逆向/CTF/移动端技能集,作为 DSH Skill 内置 | skills/ · scripts/pack_security_toolkit.py |

技术底座不变:DSH 内核 0.2.0-rc.2,Android 壳为原生 Java + WebView。

快速开始

使用发行版

1. 从 Releases 下载 DeepSeekHarness-ZhaoHua-v181lite9b.apk(约 225 MB,sha256 见同页 SHA256SUMS.txt)
2. 卸载旧版后安装(改过 dshhome/ 下文件时覆盖安装不会更新,见 docs/BUILD.md)
3. 首次启动后在会话里说「沙箱状态」,或直接进 设置 → 插件 → ZhaoHua 沙箱 点「安装 / 修复工具箱」

从源码构建

需要 Linux 环境(本机、容器或远程构建机均可)+ JDK + Android SDK build-tools。详见 docs/BUILD.md。

1. 一次性:生成签名证书(纯 Python,无需 JDK)
python3 scripts/make_keystore.py --cn "Your Name" --out build

2. 准备沙箱资产(约 5 MB,不入库;见 vendor/README.md) sh sandbox/make-rootfs.sh vendor
python3 sandbox/fetch-sandbox-libs.py vendor/bin
并把 Android aarch64 的 proot / proot-loader 放进 vendor/bin/

3. 一键构建:重打包 → 签名 → 从成品校验 sh scripts/build.sh <上游APK> build/sign.key.pem build/sign.cert.der build/signed.apk

单步等价命令:scripts/repack.py --base <上游APK> → scripts/sign_apk_v2.py → scripts/verify.py。

三个插件

@zhaohua/dsh-bash-router — 双轨 bash 执行器

挂在 ctx.shell 接缝上,继承官方 dsh-bash-local。路由顺序:

1. 命令含 zhaohua-sandbox.state → 强制本机(开关操作本身永远可达)
2. 开关文件为 on → 全部进沙箱
3. 命中工具链关键词(git/gcc/cmake/apt/pip/qemu…)→ 进沙箱
4. 否则本机执行

沙箱调用形态:

env LD_LIBRARY_PATH=<payload>/bin \
PROOT_LOADER=<payload>/bin/proot-loader \
PROOT_TMP_DIR=<sandbox>/tmp \
<payload>/bin/proot -r <rootfs> -0 -w /root --link2symlink --kill-on-exit \
-b /dev -b /proc -b /sys -b /sdcard -b <tmp>:/tmp \
/usr/bin/env -i TERM=xterm HOME=/root PATH=... bash -c '<命令>'

@zhaohua/dsh-client-ui-settings-sandbox — 沙箱设置页

- host 半:注册 /api/zhbox 控制路由(status / toggle / install / test / gorust),挂在引擎的 connection 信任墙后
- browser 半:React 卡片,注册进 plugins.item 插槽(与官方设置页同级)
- 安装器脚本以 base64 内嵌,避免「设备上旧文件不被覆盖」问题

@zhaohua/dsh-prompt-switch — 三档提示词切换

- 注册全局提示词变量 zhaohua_prompt,persona prefix 全部改为 {{zhaohua_prompt}} 插值
- provider 每次装配读模式文件 $DSH_HOME/zh-prompt.mode,改动下一条消息生效
- 三档各带触发词便于自检:

| 档位 | 触发词(仅此二字) | 回复 |
| 默认 | 默认 | 已成功 |
| 常规破甲 | 朝花 | 已成功 |
| Claude 专用 | 专用 | 已成功 |

本机 proot 沙箱

不依赖任何外部服务器。核心事实:

| 项 | 值 |
| rootfs | Alpine 3.20 aarch64,首次使用时从 dshhome/zh-rootfs.tar.gz 解包到 $DSH_HOME/zh-sandbox/rootfs |
| proot | Android NDK 构建,需 PROOT_LOADER 指向静态 loader;两个 bionic 依赖 libhosdlatalloc.so / libandroidshmem.so 随包 |
| 沙箱内身份 | uid=0(proot -0 假 root) |
| 工具箱 | zh-setup 分区安装:base / build / python / node / binutils / net / re / efficiency / pyre /(可选)gorust |
| 解包器 | zh-extract.py——自行解析 tar,避开发硬链接(Android 的 /data f2fs 与 /sdcard FUSE 均拒绝 link(2)) |

细节与排障见 docs/SANDBOX.md。

提示词三档

提示词全文在 prompts/:

- default.txt — 中性身份 + 环境说明,不含破甲条款
- regular.txt — 完整 ZhaoHua 人格(身份/激活词/环境/执行原则/台账进度/稳定性/输出纪律/硬拒绝场景/禁用话术/技能路由/静态脱壳方法论/反作弊检测面/对话记录/上下文压缩/任务定向)
- claude.txt — 面向 Claude 系列优化:路由先行 [ROUTE]、输出自检(识别免责句式即整段重写)、交付契约 RESULT→CHANGED→VERIFY→NEXT
- capability.txt — 能力清单,仅在激活时按需输出(常驻文本保持中性)

设计说明见 docs/PROMPTS.md。

仓库结构

.
├── plugins/ 三个自研 DSH 插件(源码 + 构建产物) │ ├── dsh-bash-router/ 双轨 bash 执行器(proot 沙箱) │ ├── dsh-client-ui-settings-sandbox/ 沙箱设置页(host 路由 + React 卡片) │ └── dsh-prompt-switch/ 三档提示词切换 ├── skills/ │ └── sandbox-manager/ 沙箱管理技能(含一键体检脚本) ├── sandbox/ │ ├── zh-setup 沙箱内工具箱安装器(分区幂等) │ ├── zh-extract.py 硬链接容错 tar 解包器 │ ├── fetch-sandbox-libs.py 从 Termux 仓库取 proot 的 bionic 依赖 │ └── make-rootfs.sh 构建 Alpine rootfs 归档 ├── prompts/ 四份提示词全文 ├── scripts/ │ ├── build.sh 一键构建(资产 → 打包 → 签名 → 校验) │ ├── repack.py 重打包(注入插件/改配置/对齐) │ ├── sign_apk_v2.py 纯 Python APK v2 签名器 │ ├── make_keystore.py 生成自签名证书(无需 JDK) │ ├── verify.py 成品解包校验 │ └── reference/ 各版本实际构建脚本(留档) ├── vendor/ 沙箱运行时资产(不入库,见其 README) ├── docs/ 架构 / 构建 / 沙箱 / 提示词文档 └── requirements.txt Python 依赖(cryptography)

上游与第三方

本项目不是从零实现,而是站在若干开源项目之上。完整清单、版本与许可证见 THIRD_PARTY.md。要点:

- DSH 内核:deepseek-ai/deepseek-harness(MIT)——agent 运行时本体
- Android 封装基线:woaiys3/deepseek-harness-android-app——APK 壳、控制台、设备侧插件
- PRoot:termux/proot(GPL-2.0)——用户态路径重写与 syscall 拦截
- Alpine Linux——沙箱 rootfs
- Termux 软件包——proot 的 talloc / libandroid-shmem 依赖
- 免费模型插件:Ebony-Vinyl/dsh-our-free-model——内置的免 Key 模型通道
- 提示词设计参考:yan-tianshi-shu/claude-code-(ColdBrew)——路由/自检/交付契约的组织方式
- 安全分析技能库:20 步流水线方法论与 12 个渗透 Agent 平台(redamon / pentagi / strix / CyberStrike / raptor / Decepticon / VulnClaw / Pentest-Swarm-AI / reagent / mantis / cyber-harness / pentestagent)等,详见 THIRD_PARTY.md

免责

- 本项目是技术研究性质的改造发行版,与 DeepSeek、Anthropic、Alpine、Termux 等组织无隶属或背书关系。
- 内置的提示词档位与技能库面向授权范围内的安全研究。使用者需自行确保对分析目标拥有合法权限;相关风险由使用者承担。
- 本项目不修改任何模型权重、服务端策略或第三方服务条款。

许可证

本项目自有代码以 MIT 发布,见 LICENSE。随包分发的第三方组件遵循其各自许可证(THIRD_PARTY.md 逐项标注);GPL 组件(PRoot)以独立可执行文件形式附带,未与 MIT 代码静态链接。
预览分享卡片长什么样 ↓PnKoZCN/zhaohua-android-dsh
分享 · DeepSeek Harness Hub
PnKoZCN/zhaohua-android-dsh

在手机上跑 Linux 沙箱,随时切换提示词与安全技能

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部