爱意满满的作品展示区。
daipeng7

做了个 MCP 工具:给 agent 一个 App Store 链接,它把包拆成可检索的证据

  •  
  •   daipeng7 · 2 days ago · 553 views

    让 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 、公开样本的安全研究。

    技术上值得说的两点

    1. 证据是一等公民。每条 finding 带 evidence id 和 file:line:column ,报告里每个结论都能点回去; agent 上下文只放摘要,完整语义图留在本地。

    2. 报告区分"没检查"和"没发现"。加密状态在没跑原生检查时写"未知",而不是"未加密"。这个区分我一开始做错了——报告只取最近 20 条任务,把第 25 位的原生检查截掉了,结果对一个已知加密的包写了"加密状态未知"。最近才修,加了测试。

    想听两个反馈

    1. 你更希望它先解决哪个场景:竞品功能对标 / SDK 与权限清单 / 发版差异追踪 / 别的?
    2. 有没有人愿意拿自己的一个 App 跑一遍,我跟着修问题。

    GitHub: https://github.com/zhuixin-labs/app-evidence npm: @zhuixin/cli

    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1924 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 16:51 · PVG 00:51 · LAX 08:51 · JFK 11:51
    ♥ Do have faith in what you're doing.