we1005/MT-31b-LLM-TUI-Reverse-Agent

GitHub: we1005/MT-31b-LLM-TUI-Reverse-Agent

专为本地小参数量模型定制的安卓 APK 逆向分析 Agent CLI,通过协议注入和工具白名单实现可控的 LLM 逆向工作流。

Stars: 0 | Forks: 0

# rev-agent 本地 LLM agent CLI,专为安卓 APK 逆向场景设计。 强制把“4 阶段渐进探索协议 + 7 铁律 + token 预算”作为 system prompt 注入,让本地小模型(gemma4-26B / qwen3.6-35B-MoE 等)在 128k 上下文限制下做可控的逆向分析。 参考栈对齐 [Cline CLI](https://github.com/cline/cline/tree/main/apps/cli)(OpenTUI + Vercel AI SDK),但**agent loop 自己写**避免 Cline monorepo 的复杂依赖。 ## 装好的依赖 - 运行时:`bun >= 1.2` - LLM 抽象:`ai@6.0.196` + `@ai-sdk/openai@3.0.67` + `@ai-sdk/anthropic@3.0.81` - Schema:`zod@4.4.3` - CLI:`commander@14.0.3` - TUI(待 task #21 接):`@opentui/core@0.1.102` + `@opentui/react@0.1.102` - MCP:`@modelcontextprotocol/sdk@1.29.0` ## 配置 默认走本地 LAN 上的 lemonade(gemma4 26B MoE): ``` # ~/.config/rev-agent/config.toml (可选,纯 CLI 参数也行) backend = "lemonade" model = "gemma-4-26B-A4B-it-uncensored" baseURL = "http://192.168.9.101:13305/api/v1" # 你 lemonade 服务地址 tokenBudget = 80000 notesPath = "/tmp/work-notes.md" ``` 支持的 backend: | backend | 默认 baseURL | 默认 model | |---|---|---| | `lemonade` | `http://192.168.9.101:13305/api/v1` | `Huihui-Qwen3.6-35B-A3B-abliterated-ggml` | | `lm-studio` | `http://localhost:1234/v1` | `gemma-3-27b-it` | | `ollama` | `http://localhost:11434/v1` | `gemma3:27b` | | `local` | 必须 `--base-url` 显式 | 必须 `--model` 显式 | | `claude` | 走 Anthropic 云 | `claude-opus-4-7` | | `openai` | 走 OpenAI 云 | `gpt-4o` | 切换 lemonade 已加载的其他模型: ``` # 注意:lemonade 10.x 有 #2014 bug —— extra_models_dir 本地 GGUF 通过 OpenAI API # 自动加载时会误判为 HF model 触发 "Failed to fetch model info from HF API (404)"。 # 切其他模型前必须先在服务器侧 `lemonade load [--ctx-size N]` 手动预加载。 rev-agent --model Qwen3.5-35B-A3B-unsloth --once "..." ``` ## 用法 ### 一次性任务(`--once`,最常用) ``` # 默认 §1 短 system prompt(约 400 token) bun src/index.tsx --once "在 ../work/mt-jadx/sources 里找 MT 2.26.5 的 MCP 入口类" # 复杂任务用 §2 长 prompt(约 1100 token,含 7 铁律全文) bun src/index.tsx --once "分析这个 APK 的签名算法" --verbose # 切 backend bun src/index.tsx --once "..." --backend claude # ANTHROPIC_API_KEY 须设 ``` ### 交互模式(默认,OpenTUI 待 task #21) ``` bun src/index.tsx # 当前回落到 readline 单任务输入,待 task #21 接 OpenTUI ``` ### 跑 MVP 验收 5 项 ``` bun run demo ``` ## 工具白名单 agent 只能调下面 4 个工具: | 工具 | 类别 | 审批 | 说明 | |---|---|---|---| | `shell` | mixed | 查询自动 / 写入弹审批 / 危险拒 | 仅白名单内的逆向工具(jadx/apktool/apkid/adb/frida/grep/strings/...),`rm -rf / sudo / curl / wget` 等硬拒 | | `read_file` | read | auto | 硬限单次 ≤ 200 行(铁律 2 编进 Zod schema) | | `grep` | read | auto | 优先 ripgrep,硬限单次 ≤ 50 命中 | | `append_note` | write | **always ask** | 追加 `/tmp/work-notes.md`,首次自动 cp 模板 | shell 审批分级: - `auto`:`aapt2 dump`/`apkid`/`jadx -d`/`grep`/`strings` 等查询命令 - `ask`:`cp`/`mv`/`apktool b`/`apksigner sign`/`adb install`/`adb push` 等写入或副作用 - `deny`:`rm -rf`/`sudo`/`curl`/`wget`/`ssh`/`dd` 等危险或外泄 ## 协议层(system prompt 来源) agent 启动时从同级目录的 `../LLM首轮注入prompt.md` 抽取 prompt: - 默认 `§1`(短,~847 字符 / 约 400 token)—— 含 7 铁律 + Token 预算 + 4 阶段渐进协议三件套 - `--verbose` 切 `§2`(长,~2714 字符 / 约 1100 token)—— 加用户意图映射 / 卡住自救 / 笔记同步纪律 通过 `REV_AGENT_PROMPT_PATH` env 或 `config.toml` 的 `promptPath` 覆盖 prompt 文件路径。 ## 工作笔记 `/tmp/work-notes.md` 是 agent 的“长期记忆”: - 任务超过 5 步、token 用 > 70% 时会被 prompt 引导调 `append_note` - 首次写入自动 `cp ../LLM工作笔记模板.md /tmp/work-notes.md` - 跨会话续传:新会话首轮注入 `@/tmp/work-notes.md` 即可继续 ## 已知边界(V0.1 范围) - ❌ 不暴露 MCP server(`@modelcontextprotocol/sdk` 装了但只 import 不 expose;V0.2 实现) - ❌ 不做 sub-agent / 多 agent 协作 - ❌ 不做 GUI / Web UI - ❌ 不做 RAG / 向量检索(grep + 笔记够用) - ❌ 不做 chroot/docker 沙箱(白名单+timeout+截断三层兜底) - ❌ 不做对话持久化 DB(笔记落 /tmp 即可) - ❌ 不做插件系统(ToolRegistry 编译期静态注册) - ❌ 不内置任何破解 / 绕过类预设(合规边界,见 plan §0) ## 项目结构 ``` rev-agent/ ├── src/ │ ├── index.tsx # CLI 入口(commander) │ ├── agent.ts # Plan-Act 主循环 │ ├── llm.ts # 后端切换 lemonade/lm-studio/ollama/local/claude/openai │ ├── budget.ts # Token 预算 + 70%/90% 告警 │ ├── prompts.ts # 从 ../LLM首轮注入prompt.md 抽 §1 / §2 │ ├── config.ts # ~/.config/rev-agent/config.toml │ ├── runtime/ │ │ ├── run-once.ts # --once 模式实现 │ │ └── run-interactive.ts # OpenTUI 入口(待 task #21) │ └── tools/ │ ├── index.ts # ToolRegistry + classify 审批路由 │ ├── shell.ts # 白/黑名单 + timeout + 输出截断 │ ├── read-file.ts # Zod 强制 ≤200 行 │ ├── grep.ts # ripgrep 优先 + head -N 硬限 │ └── note.ts # append-only /tmp/work-notes.md └── scripts/ └── demo.sh # MVP 验收 5 项 ``` ## 关联协议文档(项目根目录) - `Mac 安卓逆向工具与工作流指南.md` — 主指南(4 阶段渐进 + 7 工作流) - `LLM工作笔记模板.md` — `/tmp/work-notes.md` 模板源 - `LLM首轮注入prompt.md` — system prompt 数据源(§1 ~ §5) - `SKILL.md.draft` — skill 化版本(未安装) ## 开发 ``` bun install bun typecheck # tsc --noEmit bun lint # biome check bun format # biome format --write bun start # 跑 src/index.tsx bun run demo # MVP 验收 bun run compile # bun build --compile → dist/rev-agent 单二进制 ``` ## License 私自使用。基于 Cline (Apache 2.0) 的设计思路,不分发。
标签:LLM Agent, TypeScript, 云资产清单, 人工智能, 安全插件, 安卓逆向, 本地部署, 用户模式Hook绕过, 自动化攻击, 逆向工程