高中生

- 金币
- 647
- 好评
- 2
- 信誉
- 101
|
本帖最后由 冷妆╮ 于 2026-8-19 04:53 编辑
- 解锁永久 VIP
- 官方 WebUI 完全复刻本地化:浏览器即可操作应用 Hook、Frida 脚本、日志查询、调用图、数据库全局配置
- MCP:30+ 工具,AI 可直接接入操控
获取:出于版权考虑不直接发 APK,提供完整复刻指南,投喂给任意 AI 即可自行改包生成。
- ════════════════════════════════════════════════════════════════════
- AI 逆向任务书:算法助手 Pro 改包(永久会员 + 官方 WebUI + MCP)
- 本文件投喂给任意 AI Agent,AI 按步骤顺序执行即可完成全部逆向工作
- ════════════════════════════════════════════════════════════════════
- 【免责声明】
- 本任务仅供技术交流与学习研究使用,请勿用于商业用途或违反法律法规的活动。
- 使用、修改、传播本任务相关内容所产生的一切法律责任与后果由使用者自行承担。
- 请在下载、安装、使用后 24 小时内删除相关文件,支持正版软件。
- ────────────────────────────────────────────────────────────────────
- 【你的角色】
- 你是一名 Android 逆向工程师。目标 APK 是「算法助手 Pro」,
- 包名 com.junge.algorithmAidePro。你要对它做「直接改包」,产出最终 APK。
- 所有步骤都是已验证的成功路径,按顺序执行,不要跳过、不要自行发挥。
- 【交付物】
- 1. AlgorithmAidePro_VIP_mod.apk 修改后已签名 APK
- 2. AlgorithmAidePro_VIP_mod.zip 发布包(内含 APK)
- 【最终成果标准(做完必须全部达成)】
- a. App 免登录即管理员 + 永久 VIP
- b. 内置官方 WebUI,浏览器可访问完整操作界面
- c. 内置 REST API(23 个端点,与官方前端契约一致)
- d. 内置 MCP Server(30+ 工具,SSE 可接入)
- e. 插件 dex 与 WebUI 资产都在 APK 内
- ────────────────────────────────────────────────────────────────────
- 【环境与工具(已就绪,直接用绝对路径)】
- ────────────────────────────────────────────────────────────────────
- apktool /tmp/opencode/bin/apktool (2.7.0)
- android.jar /tmp/opencode/pf/android-36/android.jar (API 36)
- d8 /tmp/opencode/bt/android-16/d8 (转 dex)
- zipalign /tmp/opencode/bt/android-16/zipalign
- apksigner /tmp/opencode/bt/android-16/apksigner
- 签名密钥 /tmp/opencode/mod-keystore.jks alias=aidevip pass=aidevip123
- JDK javac(source/target 8)
- 原始 APK 放在工作目录,名为 算法助手Pro.apk
- ────────────────────────────────────────────────────────────────────
- 【第 1 步:反编译 APK】
- ────────────────────────────────────────────────────────────────────
- 执行:
- PATH=/tmp/opencode/bin:$PATH apktool d -f -o /tmp/opencode/apktool-out/alg 算法助手Pro.apk
- 得到目录 /tmp/opencode/apktool-out/alg/,包含:
- assets/ smali/ AndroidManifest.xml original/
- 验证:确认 smali/com/junge/algorithmAidePro/ 存在。
- ────────────────────────────────────────────────────────────────────
- 【第 2 步:smali 会员判断恒真】
- ────────────────────────────────────────────────────────────────────
- 文件:smali/com/junge/algorithmAidePro/bean/MemberInfo.smali
- 修改以下三个方法的方法体为恒真(保留原 .locals 声明):
- isAdmin()Z → const/4 v0, 0x1
- return v0
- isEmailActivated()Z → const/4 v0, 0x1
- return v0
- isVipPermanent()Z → const/4 v0, 0x1
- return v0
- 验证:grep 确认三个方法体均为 const/4 v0, 0x1。
- 效果:App 免登录即为管理员 + 永久 VIP。
- ────────────────────────────────────────────────────────────────────
- 【第 3 步:核对宿主接口(决定插件怎么调)】
- ────────────────────────────────────────────────────────────────────
- 执行并阅读:
- grep -E '^\s*\.method public ' smali/com/junge/algorithmAidePro/ipc/AlgorithmClient.smali
- 你必须以该输出为准,得到宿主 AlgorithmClient 的真实方法清单。
- 以下为参考清单(与宿主同名同签,用于编写 stub):
- service_isRunning() boolean
- service_getVersion() int
- service_getDataDirectoryName() String
- service_getAppsWithSwitch() List
- service_getConfigSize() long
- app_setSwitch(String, boolean) void
- app_isSwitch(String) boolean
- service_startApp(String) boolean
- service_forceStopApp(String) boolean
- scriptList(String) List
- app_getScript(String, String) String
- app_importScript(String,String,String) boolean
- app_deleteScript(String, String) boolean
- app_setScriptAlias(String,String,String) boolean
- app_getConfig(String) String
- app_setConfig(String, String) void
- service_getConfigItem(String) String
- service_setConfigItem(String, String) void
- service_clearConfig() void
- server_getLogTotal(String, GROUP) long
- server_getSimpleLogList(String, GROUP, int) List
- server_searchLog(String, GROUP, String) List
- server_clearLogs(String) boolean
- server_getDatabaseInfoList() List
- server_getLogData(String, Long) JSONObject
- server_getLogDatas(String, List) List
- server_getLogGraph(String, Long) JSONObject
- service_appIsRunning(String) boolean
- service_getFridaScriptApps() List
- service_getLibrary(String, String) ParcelFileDescriptor
- service_setDataDirectoryName(String) boolean
- service_changeDataDirectoryName(String, IDataDirectoryMigrationCallback) void
- 补充类型:
- LogDataV2.GROUP:静态实例 CIPHER / HASH / OTHER
- IDataDirectoryMigrationCallback:onMigrationStarted() / onCompleted(boolean)
- ────────────────────────────────────────────────────────────────────
- 【第 4 步:编写插件 dex 工程】
- ────────────────────────────────────────────────────────────────────
- 在 /workspace/AlgorithmAideVIP/plugin-dex/ 下建工程:
- src/com/junge/algorithmAidePro/vip/
- ├─ VipPluginEntry.java 插件入口(实现宿主 VipPlugin 接口)
- └─ McpHttpServer.java HTTP 服务 + REST + MCP(约 1500 行)
- stubs/com/junge/algorithmAidePro/
- ├─ bean/LogDataV2.java
- ├─ ipc/AlgorithmClient.java
- ├─ ipc/IDataDirectoryMigrationCallback.java
- ├─ plugin/ServerFeature.java
- └─ plugin/VipPlugin.java
- ── 宿主加载机制(你无需 hook,宿主自己加载插件)──
- 宿主 smali(q3/g.smali)打开 assets/vip-plugin.dex;
- q3/e.smali 用 DexClassLoader 加载类 com.junge.algorithmAidePro.vip.VipPluginEntry,
- 校验 instance-of VipPlugin 后调用 getFeature("mcp_http")。
- ── VipPlugin 接口(stub 声明)──
- int apiVersion()
- void initialize(Context, AlgorithmClient)
- Object getFeature(String)
- void close()
- ── ServerFeature 接口(stub 抽象声明,由 McpHttpServer 实现)──
- ── VipPluginEntry 实现 ──
- getFeature("mcp_http") 返回 McpHttpServer 单例;
- initialize 里保存 client;close 里停服。
- ── McpHttpServer 实现要求 ──
- 继承 ServerFeature,实现 start(int port)/stop()/isRunning();
- 用 com.sun.net.httpserver.HttpServer + 单线程 Handler;
- 路由:
- /ui、/、/webui → assets/webui/index.html
- /assets/* → assets/webui/assets/*
- /fridaApi.json → assets/webui/fridaApi.json
- /api/* → REST 端点(契约见第 7 步)
- /sse、POST /mcp → MCP(见第 8 步)
- 所有 client.xxx 调用必须 try-catch,异常返回 {"error":...}。
- ────────────────────────────────────────────────────────────────────
- 【第 5 步:编译插件 dex】
- ────────────────────────────────────────────────────────────────────
- 执行(工作目录 /workspace/AlgorithmAideVIP/plugin-dex):
- rm -rf build/classes build/dex && mkdir -p build/classes build/dex
- javac -source 8 -target 8 \
- -bootclasspath /tmp/opencode/pf/android-36/android.jar \
- -d build/classes \
- src/com/junge/algorithmAidePro/vip/*.java \
- stubs/com/junge/algorithmAidePro/**/*.java
- /tmp/opencode/bt/android-16/d8 --release --min-api 24 \
- --output build/dex \
- build/classes/com/junge/algorithmAidePro/vip/McpHttpServer.class \
- build/classes/com/junge/algorithmAidePro/vip/McpHttpServer\$1.class \
- build/classes/com/junge/algorithmAidePro/vip/McpHttpServer\$Handler.class \
- build/classes/com/junge/algorithmAidePro/vip/VipPluginEntry.class
- cp build/dex/classes.dex /tmp/opencode/apktool-out/alg/assets/vip-plugin.dex
- 要点:javac 必须 src + stubs 一起编;d8 只转插件自身类(不转 stub);
- d8 的 --output 是目录;若你的类列表不同,用 d8 的 .class glob 按实际补齐。
- ────────────────────────────────────────────────────────────────────
- 【第 6 步:官方 WebUI 本地化并写入 APK】
- ────────────────────────────────────────────────────────────────────
- 从官方在线版下载以下文件:
- http://junge666.cn/algorithmAidePro/webui/assets/app-D9fcB0kv.js (499KB 主包)
- http://junge666.cn/algorithmAidePro/webui/assets/app--pe5Roxk.css (37KB)
- http://junge666.cn/algorithmAidePro/webui/assets/index.css
- http://junge666.cn/algorithmAidePro/webui/assets/manifest.json
- http://junge666.cn/algorithmAidePro/webui/fridaApi.json
- 改动 2 处(必须,否则离线/换端口不可用):
- app-D9fcB0kv.js:所有 http://${window.location.hostname}:8788
- 改为 ${window.location.origin}
- fridaApi.json:所有 junge666.cn 绝对地址改为本地 /fridaApi.json
- 自写 index.html:
- <!doctype html>
- <html lang="zh-CN">
- <head>
- <meta charset="UTF-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>算法助手 Pro</title>
- <link rel="stylesheet" href="./assets/index.css" />
- <link rel="stylesheet" href="./assets/app--pe5Roxk.css" />
- </head>
- <body>
- <div id="root"></div>
- <script src="./assets/app-D9fcB0kv.js"></script>
- </body>
- </html>
- 最终目录结构(写入 APK):
- assets/webui/
- ├─ index.html 422B
- ├─ fridaApi.json 3283B
- └─ assets/
- ├─ app-D9fcB0kv.js 499702B
- ├─ app--pe5Roxk.css 37153B
- ├─ index.css 254B
- └─ manifest.json 183B
- 部署:cp -r 到 /tmp/opencode/apktool-out/alg/assets/webui/
- ────────────────────────────────────────────────────────────────────
- 【第 7 步:REST API 端点(按此契约实现,勿改字段名)】
- ────────────────────────────────────────────────────────────────────
- ── 应用 ──────────────────────────────────────────
- GET /api/apps 应用列表(含icon)
- GET /api/app/running?packageName= 是否运行 → true/false
- GET /api/app/switch?packageName= 开关状态 → true/false
- POST /api/app/switch 设置开关 {packageName, enable}
- POST /api/app/start 启动 {packageName} → {"success":true}
- POST /api/app/force-stop 强停 {packageName} → {"success":true}
- GET /api/app/icon?packageName= 图标 PNG(base64)
- GET /api/app/scripts?packageName= 脚本列表 [{name,fileName,alias}]
- GET /api/app/script?packageName=&name= 脚本内容 → 纯文本(非JSON)
- POST /api/app/script 导入 {packageName,name,alias,jsCode}
- DELETE /api/app/script?packageName=&name= 删除
- POST /api/app/script/alias 改名 {packageName,name,alias}
- GET /api/app/config?packageName= 配置 → 原始JSON字符串
- POST /api/app/config 写配置 {packageName,configData}
- POST /api/app/config/item 改单项 {packageName,configName,value}
- POST /api/app/hooks 新增hook {className,methodName,parameterSign,description,isConstructor,isEnable}
- GET /api/app/frida-script-apps 有脚本应用 [{packageName,scriptCount}]
- ── 服务 ──────────────────────────────────────────
- GET /api/service/running 服务运行 → true/false
- GET /api/service/version 版本号 → 原始字符串
- GET /api/service/apps-with-switch 开启调试的应用列表
- GET /api/config 全局配置
- ── 日志 ──────────────────────────────────────────
- GET /api/logs?packageName=&group=&page= 日志列表(每页300)
- GET /api/logs/count?packageName=&group= 总数 → {"total":N}
- GET /api/logs/search?packageName=&group=&text= 搜索
- GET /api/log?packageName=&logId= 日志详情 {data[],LogName,time,callStack,params}
- GET /api/log/graph?packageName=&logId= 调用图 {nodes[],edges[]}
- DELETE /api/frida/log?packageName= 清空日志 → {"success":true}
- ── 其它 ──────────────────────────────────────────
- GET /api/databases 目标应用数据库列表
- GET /api/tools MCP tools 定义
- 【契约要点(前端逐字段核对,必须一致)】
- start/force-stop/frida-log 返回 .success 字段
- config GET 返回原始 JSON 字符串(前端 JSON.parse)
- script GET 返回纯文本 JS;config/item body={packageName,configName,value}
- script/alias body={packageName,name,alias}
- 日志元素字段:id/logId、methodName/logName、returnValue、time、desc
- log/detail:LogName|logName|methodName、data[]、callStack、params
- log/graph:nodes[]、edges[]
- 【日志序列化方法】列表对象统一走 toLogItem 反射:
- JSONObject → 原样;Map → 逐键;其它对象 → 反射 getXxx() 提取字段,
- 递归 convertValue(Map/Iterable/String/Number/Boolean)。
- 否则宿主对象 toString 输出 ClassName@地址。
- 【log_list 获取方法】group 为空时遍历 CIPHER/HASH/OTHER 三组
- 各拉一次 server_getSimpleLogList,按 id 去重合并;单 group 直接传。
- REST /api/logs 与 MCP log_list 共用。
- 【log 详情/图表】必须调宿主专用方法:
- server_getLogData(pkg, Long id) / server_getLogGraph(pkg, Long id)
- ────────────────────────────────────────────────────────────────────
- 【第 8 步:MCP Server(30+ 工具,可扩展)】
- ────────────────────────────────────────────────────────────────────
- 协议:Streamable HTTP
- GET → SSE 流;POST → 按 Accept 返回 JSON 或 SSE
- 方法:initialize / notifications/initialized / ping / tools/list / tools/call
- 已实现工具(映射宿主 API):
- 应用类:app_info, app_switch, app_running, service_start, service_stop,
- service_version, apps_with_switch
- 脚本类:script_list, script_get, script_import, script_delete, script_rename,
- script_apps
- 配置类:config_get, config_set, config_item_get, config_item_set,
- config_clear, config_size
- 日志类:log_total, log_list, log_search, log_detail, log_details,
- log_graph, log_clear
- 其它类:database_list, library_get, data_dir_get, data_dir_set, data_dir_change
- 公共入参:package(必填除全局项)、group(cipher|hash|other)、count、name、
- content、alias、key、value、ids(数组)、id、lib、enable
- 返回:统一 JSON 数组/对象文本。
- 【扩展机制(工具不限于上述数量)】
- 宿主 AlgorithmClient 每个 public 方法都可映射成一个 MCP 工具。
- 加一个工具 = 三步:dispatch 分支 → tools/list 自动暴露 → /api/tools 同步。
- 命名:getXxx → xxx_get/xxx_list;只读直接暴露,写操作返回 {"success":bool};
- 参数用 schema 声明 required/type/description 供 AI 自动补全。
- 工具数量随宿主 API 面增长,最终以 /api/tools 返回为准。
- ────────────────────────────────────────────────────────────────────
- 【第 9 步:重打包 + 签名】
- ────────────────────────────────────────────────────────────────────
- 执行:
- rm -f /tmp/opencode/alg-vip-unsigned.apk
- PATH=/tmp/opencode/bin:$PATH apktool b --use-aapt2 \
- -o /tmp/opencode/alg-vip-unsigned.apk /tmp/opencode/apktool-out/alg
- /tmp/opencode/bt/android-16/zipalign -f 4 \
- /tmp/opencode/alg-vip-unsigned.apk /tmp/opencode/alg-vip-aligned.apk
- /tmp/opencode/bt/android-16/apksigner sign \
- --ks /tmp/opencode/mod-keystore.jks --ks-key-alias aidevip \
- --ks-pass pass:aidevip123 \
- --out /workspace/AlgorithmAideVIP/AlgorithmAidePro_VIP_mod.apk \
- /tmp/opencode/alg-vip-aligned.apk
- /tmp/opencode/bt/android-16/apksigner verify \
- /workspace/AlgorithmAideVIP/AlgorithmAidePro_VIP_mod.apk
- cd /tmp/opencode && zip -j alg-vip-pack.zip AlgorithmAidePro_VIP_mod.apk
- cp alg-vip-pack.zip /workspace/AlgorithmAideVIP/AlgorithmAidePro_VIP_mod.zip
- 验证(自校验,不要比对哈希,每个人产物不同):
- unzip -l .../AlgorithmAidePro_VIP_mod.apk | grep -E \
- "assets/(vip-plugin.dex|webui/index.html|webui/fridaApi.json)"
- ────────────────────────────────────────────────────────────────────
- 【第 10 步:安装与验收(有设备时执行)】
- ────────────────────────────────────────────────────────────────────
- adb uninstall com.junge.algorithmAidePro (签名不同,先卸旧版)
- adb install AlgorithmAidePro_VIP_mod.apk
- 打开 App → 应显示永久会员(无登录/订阅页)
- 开启「算法助手服务」→ 浏览器访问 http://<设备IP>:<端口>/ui
- MCP 接入:SSE 流地址 http://<设备IP>:<端口>/sse
- 验收清单:
- [ ] App 显示永久会员 / 管理员
- [ ] App 列表 / 开关 / 启动 / 强停
- [ ] Hook 配置增删改
- [ ] Frida 脚本增删改查
- [ ] 日志列表 / 搜索 / 详情 / 调用图
- [ ] 数据库列表
- [ ] 全局配置读写
- [ ] MCP 全部工具逐一可用(数量以 /api/tools 为准,30+)
- ────────────────────────────────────────────────────────────────────
- 【完成判定】
- 第 9 步 apksigner verify 通过 + APK 内含 vip-plugin.dex 与 webui/
- = 任务完成,交付两个文件:
- /workspace/AlgorithmAideVIP/AlgorithmAidePro_VIP_mod.apk
- /workspace/AlgorithmAideVIP/AlgorithmAidePro_VIP_mod.zip
- ════════════════════════════════════════════════════════════════════
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
-
查看全部评分
总评分:好评 +1
金币 +1
|