复现某APP的最新版本签名算法分析
2023-1-28 14:31:0 Author: xz.aliyun.com(查看原文) 阅读量:28 收藏

目标
安卓版本10.0.2,对其进行抓包并探索sign签名算法

分析
通过全局搜索sign=

在com.jingdong.sdk.gatewaysign和com.jingdong.jdsdk.network.toolbox中发现对sign的操作

由此直接hook最先的加密的class,即javax.crypto.spec.SecretKeySpec
hook构造函数,和普通的函数是有区别的,要用$init这种形式,并且要return this.$init(arg1,arg2)调用原始的函数实现

function hook(){
    Java.perform(function (){
        var hookclass = Java.use("javax.crypto.spec.SecretKeySpec");
        hookclass.$init.overload('[B','java.lang.String').implementation = function (a,b){
            var result = this.$init(a,b);
            console.log("算法为: "+ b);
            console.log(a);
            return result;
        }
    });
}
setImmediate(hook);

通过返回得知

>>>算法为: HmacSHA256
>>>51,52,54,54,57,99,54,54,97,101,56,51,52,53,55,97,57,97,56,101,55,98,52,100,48,52,49,55,102,48,50,102
>>>算法为: AES
>>>92,71,-78,37,6,27,-125,-92,21,103,84,15,88,-112,-80,45

将算法为HmacSHA256进行加密得到

aed1ebaab9e61fcc51ec0ab97fb522f13deea2b57958533c4bd511871806d5b0

这与抓到的位数不同
另寻他路
通过全局搜索没有找到组装reqest参数的代码,判断组装代码在so文件中。在so文件libjdbitmapkit.so,通过全局搜索sign的关键词,得到了

在逐一查看的时候,发现地址00012EB0和00012C4E都写到了该调用的代码

1最终
在方法中发现其调用者

即Java_com_jingdong_common_utils_BitmapkitUtils_getSignFromJni

在这个function中追踪到了代码包com.jingdong.common.utils,而调用该方法的getSignFromJni

因此,hook为

function hook(){
    Java.perform(function (){
        var hookclass = Java.use('com.jingdong.common.utils.BitmapkitUtils');
        hookclass.getSignFromJni.implementation = function(a,b,c,d,e,f){
            var result = this.getSignFromJni(a,b,c,d,e,f);
            console.log(">>> hook = " + b + ' / ' + c + ' / ' + d + ' / ' + d + ' / ' + f + ' \n rc= ' + result);
            return result;
        }
    });
}
setImmediate(hook);

文章来源: https://xz.aliyun.com/t/12073
如有侵权请联系:admin#unsafe.sh