You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取Flutter安卓APP中动态生成JWT的签名密钥?

安卓APP内部JWT签名密钥与生成方法分析方案

针对你遇到的场景,结合已搭建的Frida和Burp Suite,可通过以下步骤定位JWT签名方法并获取密钥:


1. Hook Java层HMAC-SHA256核心加密方法

HS256本质是HMAC-SHA256算法,直接hook加密核心类的关键方法,可捕获密钥和待签名数据:

Java.perform(function() {
    var Mac = Java.use("javax.crypto.Mac");
    // Hook密钥初始化方法,输出密钥的十六进制格式
    Mac.init.overload("java.security.Key").implementation = function(key) {
        var secretKey = Java.cast(key, Java.use("javax.crypto.spec.SecretKeySpec"));
        console.log("HMAC密钥(hex): " + secretKey.getEncoded().toString('hex'));
        return this.init(key);
    };
    // Hook签名数据输入方法,输出待签名的原始内容(即JWT的header.payload部分)
    Mac.doFinal.overload("[B").implementation = function(data) {
        console.log("待签名数据: " + Buffer.from(data).toString('utf8'));
        return this.doFinal(data);
    };
});

2. Hook常见第三方JWT库的签名方法

多数APP会使用成熟JWT库生成令牌,直接hook对应库的签名方法更高效:

针对JJWT库

Java.perform(function() {
    var DefaultJwtSigner = Java.use("io.jsonwebtoken.impl.DefaultJwtSigner");
    DefaultJwtSigner.sign.overload("[B").implementation = function(data) {
        console.log("JJWT待签名数据: " + Buffer.from(data).toString('utf8'));
        console.log("JJWT密钥(hex): " + this.key.getEncoded().toString('hex'));
        return this.sign(data);
    };
});

针对Auth0 JWT库

Java.perform(function() {
    var JWTCreator = Java.use("com.auth0.jwt.JWTCreator.Builder");
    JWTCreator.sign.implementation = function() {
        console.log("Auth0 JWT Header: " + JSON.stringify(this.header));
        console.log("Auth0 JWT Payload: " + JSON.stringify(this.payload));
        var secret = this.algorithm.secret;
        if (secret) {
            console.log("Auth0密钥: " + secret.toString('utf8'));
        }
        return this.sign();
    };
});

3. 内存搜索定位签名调用栈

如果上述hook未命中,可通过内存搜索目标JWT的header.payload字符串,回溯调用栈找到签名逻辑:

Java.perform(function() {
    var targetJwtPrefix = '{"alg":"HS256","typ":"JWT"}.{"auth_token":"d871be6fffbb1b6318119c1be4ea7f44c3be08119","id":81,"issuedTime":1730122121.013}';
    Process.enumerateModules().forEach(function(module) {
        try {
            Memory.scan(module.base, module.size, targetJwtPrefix, {
                onMatch: function(address) {
                    console.log("找到目标JWT字符串地址: " + address.toString());
                    // 打印当前调用栈
                    console.log("调用栈:\n" + Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Throwable").$new()));
                },
                onComplete: function() {}
            });
        } catch(e) {}
    });
});

4. 静态分析辅助定位

若APP存在代码混淆,可配合jadx反编译APP,搜索HS256、JWT、auth_token等关键词,定位到签名相关代码块后,再用Frida精准hook对应方法。


内容的提问来源于stack exchange,提问作者tzippy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 17:53:32