Android 某东Sign与cipher解密

查看 173|回复 11
作者:胡家二少   
Android 某东Sign与cipher解密

最近疫情原因,哎,又沦落到了抢抢抢的境地,洋洋洒洒的网页端一气呵成写了个小助手哈,想要买莲花清瘟,一看只能手机APP购买。我去!真无语!那么再拿手机端开个刀吧,作如下记录。
本人所发布的文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。如有侵权请联系我删除处理。

主要功能涉及如下:
1.解密sign
2.解密cipher
1.APP版本:
For Android V11.3.2 build98450
2.工具
预先善其事,必先利其器!请先准备如下分析工具
[ol]
  • Jadx
  • IDA
  • Frida
  • unidbg
  • Charles
  • Pycharm(可选)
  • Vscode(可选)
    [/ol]
    3.分析

    手机环境配置抓包请大家自己解决。下面演示购物车数据的抓取功能。从手机到PC端代码实现。

    Charles抓包
    打开手机app,然后再点击购物车功能
    https://api.m.*.com/client.action
    我们在Charles会看到很多这个地址的请求,我们可以找一下购物车的包,地址中包含 functionid=cart 的就是购物车的请求


    image-20221221141843811.png (38.8 KB, 下载次数: 0)
    下载附件
    2022-12-21 15:48 上传

    我们详细的看一下这个请求所携带的数据如下:


    image-20221221142058963.png (42.39 KB, 下载次数: 0)
    下载附件
    2022-12-21 15:48 上传

    经过多次抓包查看,发现这三个值是变化的。因此我们开始分析APP。
    Sign-Jadx静态分析
    把app导入到jadx,我们要追踪st,sign,sv这三个参数的来源,那么我们线搜索一下,大概找下sign的位置


    image-20221221145054285.png (106.51 KB, 下载次数: 0)
    下载附件
    2022-12-21 15:48 上传

    看到我标注的那个方法,addQueryParameter 翻译一下不就是添加sign参数嘛。点进去分析看看。
    经过frida注入调试,分析出确实是这个方法 但是他是不进这个if的,不是这上半部分的代码,而是下半部分的代码


    image-20221221150033413.png (71.06 KB, 下载次数: 0)
    下载附件
    2022-12-21 15:48 上传

    最终定位到是下面的这行代码生成的sign,而且还有其他的2个参数 st与sv


    image-20221221150227804.png (56.99 KB, 下载次数: 0)
    下载附件
    2022-12-21 15:48 上传

    我们继续点击这个函数进去看一下发现是个接口。有接口必然有实现!


    image-20221221150429297.png (18.57 KB, 下载次数: 0)
    下载附件
    2022-12-21 15:48 上传

    那么如何去找它的实现类呢?我们继续搜索搜索这个类的完整路径  com.jingdong.jdsdk.d.c.s


    image-20221221150541963.png (59.68 KB, 下载次数: 0)
    下载附件
    2022-12-21 15:48 上传

    我们继续点击进去第一个,发现果真找到了接口的实现类如下:


    image-20221221150642585.png (36.95 KB, 下载次数: 0)
    下载附件
    2022-12-21 15:48 上传

    最终我们看到sign是调用的so....白瞎了之前的一顿操作。至此分析结束。那么我们用frida来验证下是不是这样。
    Sign-Frida注入验证
    注意新版京东有检测frida的,需要改个进程名跟端口。
    用frida注入如下函数  BitmapkitUtils.getSignFromJni(context, str, str2, str3, str4, str5);
    function HookHandle(clazz) {
        clazz.getSignFromJni.implementation = function (a, b, c, d, e, f) {
            console.log("=======================================")
            var r = this.getSignFromJni(a, b, c, d, e, f);
            console.log("param1: ", a)
            console.log("param2: ", b)
            console.log("param3: ", c)
            console.log("param4: ", d)
            console.log("param5: ", e)
            console.log("param6: ", f)
            console.log("result: ", r)
            return r;
        }
        console.log("HookHandle ok")
    }
    Java.perform(function () {
        Java.choose("dalvik.system.PathClassLoader", {
            onMatch: function (instance) {
                try {
                    var clazz = Java.use('com.jingdong.common.utils.BitmapkitUtils');
                    HookHandle(clazz)
                    return "stop"
                } catch (e) {
                    console.log("next")
                    console.log(e)
                }
            },
            onComplete: function () {
                console.log("success")
            }
        })
    })
    请使用上面这种注入方法,不然会发生找不到类的错误。


    image-20221221151759726.png (31.41 KB, 下载次数: 0)
    下载附件
    2022-12-21 15:48 上传

    如上,我们可以看出,st sign sv都是从so来的。
    至此,sign的来源已理清。
    但是我们还有一个body的加密字段


    image-20221221152009043.png (25.98 KB, 下载次数: 0)
    下载附件
    2022-12-21 15:48 上传

    我们继续重复上面的分析。
    cipher-Jadx静态分析
    继续搜索”cipher“字段


    image-20221221152200707.png (45.66 KB, 下载次数: 0)
    下载附件
    2022-12-21 15:48 上传

    可以看到就一个类,那么就很简单的可以得出加密算法了


    image-20221221152300274.png (72.27 KB, 下载次数: 0)
    下载附件
    2022-12-21 15:48 上传

    通过frida注入这个b函数会发现b参数==MODIFIED_BASE64 就是进入的这个if,而且加密算法就在d.b()这个方法。直接用java还原就行了。
    4.调用
    sign签名用unidbg模拟调用so就可以了。cipher这个直接复制d这个类就包含了加解密。然后模拟登录再请求购物车信息就ok啦。
    结果展示获取购物车数据:


    image-20221221152726950.png (66.76 KB, 下载次数: 0)
    下载附件
    2022-12-21 15:48 上传

    下载次数, 下载附件

  • 兜兜风f   

    XUEXIxuexi学习了 谢谢分享
    胡家二少
    OP
      


    赛浩 发表于 2022-12-23 09:03
    其他地方可以看懂   就到frida这里就蒙蔽了   frida有啥图文教程吗

    frida 多用用就会啦。理解教程遇到难点慢慢百度攻克就好。加油
    老M   

    牛逼!!!!!!!!!!
    makmak79   

    厉害厉害👍,一遍没看明白,回帖继续看
    影子恋人   

    一遍没看明白,回帖继续看
    2513002960   

    最想学app爬虫的逆向!!
    二十瞬   

    谢谢分享   挺强的
    ABC9758   

    这个要好好学习
    yufd1986   

    京东还是看账号的,挂也没用。。。
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部