让 agent 分析一个开源项目,它读仓库就行。但一个上架的 App 没有仓库,只有签名后的包:压缩过的 JS 、一个 Mach-O 、一个 plist ,没有入口。"这个竞品怎么做登录的"这类问题,最后变成一下午的解包、grep 、往对话框里贴 JSON 。
我做的就是把那个包变成 agent 能检索、能引用、能推论的证据,通过 MCP 接进你已经在用的客户端。

( gif 约 2MB ,加载慢的话可以看完整 51 秒版: https://github.com/zhuixin-labs/app-evidence/blob/main/scripts/demo/demo.mp4 )
终端里是同一套引擎的人类入口:
$ apptrace analyze <app-store-link>
[resolve] completed — 车工计算器
[analyze_javascript] started
[analyze_javascript] completed
Routes: 195
Modules: 17
Native: 1485 procedures, 6203 strings
Report: targets/.../reports/xxx.md
以这个 App 为例,报告第一屏给的是结论,不是清单:
- 195 条路由,分成 22 个路径组,最大的组 74 条(不是把 195 条平铺给你)
- 技术栈 uni-app / HBuilder
- 主程序每个切片都声明加密( cryptid=1 )→ 符号和字符串可读,但那部分反编译不可信
- 1485 个原生过程、6203 个字符串已建索引,可以按名字查、可以反编译单个符号
agent 那段是这样:给一个问题,它自己决定调哪个工具。
问:hong 相关的路由在哪
→ search_findings(query="hong", types=[route])
→ 17 findings · ev_8392e3ae42a5dfcc
→ 共 17 条,分布在 2 个文件,逐条给出文件:行
说明一句:agent 那段是真实会话( claude -p 接 apptrace 的 MCP ),画面是渲染的,不是屏幕录制。输出存在仓库里。
怎么装
npm install -g @zhuixin/cli
apptrace setup --write-config ~/.codex/config.toml --install-skill
国内如果用 npmmirror ,可能还没同步到最新版,建议加 --registry=https://registry.npmjs.org。Claude Code / Cursor / Claude Desktop 的配置路径在 README 。
它不能做什么(建议看完再决定要不要装)
- 需要你自己的 Apple ID ,且账号已取得该 App 的授权。下载走 ipatool ,用的是你的账号,可能触发 Apple 风控,这个风险在你这边。
- App Store 的二进制默认加密( cryptid=1 )。加密区不能反编译,这是 FairPlay 的性质,不是工具偷懒。能拿到的是 JS 包、路由、模块、资源、存储键、符号表、字符串表、签名与 entitlement 。
- macOS 本地 .app:签名 / entitlement / Electron JS 可以; Mach-O 原生分析没做,.dmg 不支持。
- Windows:PE 和 Authenticode 可以; MSIX/MSI 和原生分析没做。
- 首次安装约 1GB ( JDK + Ghidra + ipatool ); macOS arm64 还要编译 Ghidra 反编译器,需要 Xcode 命令行工具,几分钟。
- 0.2.7 ,preview ,全功能免费(含原生分析和版本对比)。仓库 0 star ,还没有真实用户反馈。
顺便回答"这是不是用来抄竞品/破解的"
工具只做静态读取:不执行目标 App ,不联网访问它的后端,不上传任何东西到你机器之外。加密的代码会被标成"加密",不会假装是源码。用途边界在你:自己的 App 、你被授权分析的 App 、公开样本的安全研究。
技术上值得说的两点
-
证据是一等公民。每条 finding 带 evidence id 和 file:line:column ,报告里每个结论都能点回去; agent 上下文只放摘要,完整语义图留在本地。
-
报告区分"没检查"和"没发现"。加密状态在没跑原生检查时写"未知",而不是"未加密"。这个区分我一开始做错了——报告只取最近 20 条任务,把第 25 位的原生检查截掉了,结果对一个已知加密的包写了"加密状态未知"。最近才修,加了测试。
想听两个反馈
- 你更希望它先解决哪个场景:竞品功能对标 / SDK 与权限清单 / 发版差异追踪 / 别的?
- 有没有人愿意拿自己的一个 App 跑一遍,我跟着修问题。
GitHub: https://github.com/zhuixin-labs/app-evidence npm: @zhuixin/cli