Jadx也想要翅膀
文章介绍如何使用Jadx AI插件和Frida Hook技术逆向分析某应用的Token生成流程,详细讲解了工具安装、配置及脚本编写过程,并展示了通过AI辅助成功捕获Token计算逻辑及加密细节。 2025-12-25 08:38:38 Author: 91fans.com.cn(查看原文) 阅读量:0 收藏

一、目标

一、目标

Jadx : "我也很想进步,古法太繁琐了,现在的年轻人都玩不转。"

fenfei : "这个可以有。"

二、步骤

安装

mcp是什么咱们就不解释了,刚来的同学可以翻翻前情提要回顾一下 http://91fans.com.cn/post/idamcp/

今天我的新朋友是 jadx-ai-mcp

https://github.com/zinja-coder/jadx-ai-mcp

她的安装分两部分

  • 去到 /Users/fenfei/Desktop/tool/jadx-1.5.3/bin 目录下面执行
./jadx plugins --install "github:zinja-coder:jadx-ai-mcp"
  • 下载 jadx-mcp-server 对接 AI 用

https://github.com/zinja-coder/jadx-ai-mcp/releases/download/v5.0.0/jadx-mcp-server-v5.0.0.zip

开工

找个软柿子捏一下

就用之前的 http://91fans.com.cn/post/txtread/ ,咱们换AI来搞 Jadx打开,然后 文件 → 首选项 → 插件

jadxplugin
1:jadxplugin

这说明插件部分安装OK

然后给 AI IDE 配置上 MCP Server

{
  "mcpServers": {
    "jadx": {
      "command": "/opt/miniconda3/envs/jadxmcp/bin/python",
      "args": [
        "/Users/fenfei/Desktop/tool/jadx-mcp-server/jadx_mcp_server.py"
      ],
      "alwaysAllow": [
        "get_android_manifest",
        "search_classes_by_keyword",
        "get_class_source",
        "search_method_by_name"
      ]
    }
  }
}

细心的同学可能发现和之前IDA的MCP配置有很大的不一样。

AI这玩意还在迅猛发展,百家争鸣,所以MCP的协议有很多种,具体这两种协议哪种先进,可以问问 AI。

咱们是实用主义着,先不纠结原理了,连上了就行,在 AI IDE里呼唤神龙…​

连接jadx mcp, 定位 token=rOW60Ct5iGxgRX0Olulcz9IXtWiGmAO7cbL7Y%2FU0tOc%3D 这个 token计算的位置,然后写个Frida hook 脚本

然后就是默默的等待,想起了 Chrome的恐龙游戏,我感觉在等待 AI干活的过程中,应该来个 是男人就下500层 的小游戏。怪不得李老板喜欢玩扫雷,原来他把我当AI了,发布命令,然后边玩扫雷,边等我的结果。

有了AI 咱们也能过上李老板的日子了,越来越有盼头了。

AI 写完了, 我就不贴代码了, (小声告诉你,贴 知识星球 了)

任务完成
已成功定位token计算位置并创建Frida hook脚本 token_hook.js

Token生成流程分析
根据反编译代码,token rOW60Ct5iGxgRX0Olulcz9IXtWiGmAO7cbL7Y%2FU0tOc%3D 的生成流程:

主要方法: Token.Companion.m() - getToken方法

输入: URI路径 + 参数Map
计算: hash_timestamp 格式的字符串
使用AES加密(密钥: 7A3II/M5Ja0S4gdf)
Hash计算: Token.Companion.k()

拼接: uri + 排序后的参数 + "mVjdXyqwjlEptwYY"
使用MurmurHash算法计算hash值
AES加密: AES.Companion.b()
算法: AES/CBC/PKCS5Padding
密钥: 7A3II/M5Ja0S4gdf
IV: 16-Bytes--String
输出: Base64编码
Hook脚本功能
脚本会拦截以下关键方法:

Token.getToken() - 捕获token生成
MurmurHash.d() - 捕获hash计算
AES.encodeAES() / AES.decodeAES() - 捕获加解密
SignatureUtil.sign() - 捕获签名生成
Token.getHash() - 捕获内部hash计算
Token.getUrlParamsByMap() - 捕获参数拼接
使用方法:

frida -U -f <包名> -l token_hook.js --no-pause

说的有模有样的,赶紧跑下代码试试。

我去,没效果

AI 又开始干活了,咱们继续扫雷。

过了几分钟,新的代码又搞完了,继续跑。 还是没有效果

AI 继续干活,咕嘟嘟,干了一通,扔给我了一个新的代码

[+] TokenUtil.f() - Calculate Hash
    Input1: /v1/category/female
    Input2: channel=zxf2019_19206_001&os=Android&package=cn.ttkmfxs.novel&udid=01bb90d6de80f3cb01bb90d6de80f3cb&v=3.3.24.R
    Hash: -1926105764

[+] TokenUtil.e() - AES Encrypt
    Plain: -1926105764_1766754803859

[+] AES.b() - Encrypt
    Value: -1926105764_1766754803859
    Key: @cLjKxIl7hlto3tR
    Encrypted: nADo5PoDE0nEwN6gKB9L8WF9OzAmwqviEgy/ljE1DI0=
    Encrypted: nADo5PoDE0nEwN6gKB9L8WF9OzAmwqviEgy/ljE1DI0=
    Generated Token (URL encoded): nADo5PoDE0nEwN6gKB9L8WF9OzAmwqviEgy%2FljE1DI0%3D

oh yeah,这次成功了。感觉和玩大转盘差不多,多玩几次,总会有惊喜。

三、总结

有种赛博求签的感觉,心诚则灵。理解了有些人有事就扑通跪倒在佛像前面,感情佛祖也是AI的一种。

基本功还是得有的,不然被ai骗人都不知道咋回事。

ffshow
1:ffshow

天地无穷期,生命则有穷期,去一日,便少一日;富贵有定数,学问则无定数,求一分,便得一分。

100

关注微信公众号,最新技术干货实时推送

100

文章作者 奋飞

上次更新 2025-12-25

许可协议 奋飞安全原创,转载请注明出处。


文章来源: http://91fans.com.cn/post/jadxmcp/
如有侵权请联系:admin#unsafe.sh