吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 13624|回复: 135
收起左侧

[Android 原创] Android 某东Sign与cipher解密

    [复制链接]
胡家二少 发表于 2022-12-21 15:50
本帖最后由 胡家二少 于 2022-12-21 17:13 编辑

Android 某东Sign与cipher解密

最近疫情原因,哎,又沦落到了抢抢抢的境地,洋洋洒洒的网页端一气呵成写了个小助手哈,想要买莲花清瘟,一看只能手机APP购买。我去!真无语!那么再拿手机端开个刀吧,作如下记录。

本人所发布的文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。如有侵权请联系我删除处理。

主要功能涉及如下:

1.解密sign

2.解密cipher

1.APP版本:


For Android V11.3.2 build98450

2.工具


预先善其事,必先利其器!请先准备如下分析工具

  1. Jadx
  2. IDA
  3. Frida
  4. unidbg
  5. Charles
  6. Pycharm(可选)
  7. Vscode(可选)

3.分析

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

Charles抓包

打开手机app,然后再点击购物车功能

https://api.m.*.com/client.action

我们在Charles会看到很多这个地址的请求,我们可以找一下购物车的包,地址中包含 functionid=cart 的就是购物车的请求

image-20221221141843811.png

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

image-20221221142058963.png

经过多次抓包查看,发现这三个值是变化的。因此我们开始分析APP。

Sign-Jadx静态分析

把app导入到jadx,我们要追踪st,sign,sv这三个参数的来源,那么我们线搜索一下,大概找下sign的位置

image-20221221145054285.png

看到我标注的那个方法,addQueryParameter 翻译一下不就是添加sign参数嘛。点进去分析看看。

经过frida注入调试,分析出确实是这个方法 但是他是不进这个if的,不是这上半部分的代码,而是下半部分的代码

image-20221221150033413.png

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

image-20221221150227804.png

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

image-20221221150429297.png

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

image-20221221150541963.png

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

image-20221221150642585.png

最终我们看到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

如上,我们可以看出,st sign sv都是从so来的。

至此,sign的来源已理清。

但是我们还有一个body的加密字段

image-20221221152009043.png

我们继续重复上面的分析。

cipher-Jadx静态分析

继续搜索”cipher“字段

image-20221221152200707.png

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

image-20221221152300274.png

通过frida注入这个b函数会发现b参数==MODIFIED_BASE64 就是进入的这个if,而且加密算法就在d.b()这个方法。直接用java还原就行了。

4.调用

sign签名用unidbg模拟调用so就可以了。cipher这个直接复制d这个类就包含了加解密。然后模拟登录再请求购物车信息就ok啦。

结果展示获取购物车数据:

image-20221221152726950.png

免费评分

参与人数 37吾爱币 +37 热心值 +33 收起 理由
业余小徐 + 1 + 1 用心讨论,共获提升!
CrazyDuck7 + 1 + 1 我很赞同!
X1a0 + 1 + 1 谢谢@Thanks!
Flytom + 1 + 1 我很赞同!
twl288 + 1 我很赞同!
ssbxnhw + 1 + 1 我很赞同!
Friday1 + 1 + 1 谢谢@Thanks!
Fxizenta + 1 + 1 用心讨论,共获提升!
xiaoyu907 + 1 + 1 我很赞同!
notifier + 1 + 1 我很赞同!
丶贤之 + 1 + 1 谢谢@Thanks!
Quincy379 + 1 + 1 谢谢@Thanks!
fengbolee + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
importhis + 1 + 1 谢谢@Thanks!
weirvip + 1 + 1 我很赞同!
guoruihotel + 1 + 1 谢谢@Thanks!
procurve + 1 + 1 谢谢@Thanks!
在线苦等 + 1 谢谢@Thanks!
gaosld + 1 + 1 谢谢@Thanks!
genliese + 2 + 1 我很赞同!
shenmadouyao + 1 + 1 我很赞同!
dincia + 1 谢谢@Thanks!
JinxBoy + 1 用心讨论,共获提升!
IT12345 + 1 热心回复!
allspark + 1 + 1 用心讨论,共获提升!
Tonyha7 + 2 + 1 用心讨论,共获提升!
izyq + 1 + 1 用心讨论,共获提升!
ID0876 + 1 + 1 我很赞同!
hubohang + 1 我很赞同!
笙若 + 1 + 1 谢谢@Thanks!
ncu.xxy + 1 + 1 谢谢@Thanks!
lijiaxian + 1 + 1 我很赞同!
zhan + 1 + 1 谢谢@Thanks!
surenyue + 1 用心讨论,共获提升!
ABC9758 + 1 + 1 谢谢@Thanks!
二十瞬 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
影子恋人 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

兜兜风f 发表于 2022-12-23 19:13
XUEXIxuexi学习了 谢谢分享
Ls3633 发表于 2023-6-15 12:01
ermuya 发表于 2023-3-26 23:40
额,刚才找到了,看到下面loadBMP 方法中有一个jdbitmapkit字符,找到了。

我也找到了jdbitmapkit这个
public static synchronized void loadBMP() {
        synchronized (BitmapkitUtils.class) {
            if (b || isBMPLoad) {
                return;
            }
            c.a(JdSdk.getInstance().getApplication(), "jdbitmapkit");
            b = true;
            isBMPLoad = true;
        }
    }

然后呢,咋去找so文件啊。。。。
老M 发表于 2022-12-22 16:50
makmak79 发表于 2022-12-22 17:09
厉害厉害👍,一遍没看明白,回帖继续看
影子恋人 发表于 2022-12-22 17:37
一遍没看明白,回帖继续看
2513002960 发表于 2022-12-22 17:47
最想学app爬虫的逆向!!
二十瞬 发表于 2022-12-22 19:37
谢谢分享   挺强的
ABC9758 发表于 2022-12-22 20:04
这个要好好学习
yufd1986 发表于 2022-12-22 20:46
京东还是看账号的,挂也没用。。。
乐在其中 发表于 2022-12-22 21:12
好好学习,期待
jjghaa1234 发表于 2022-12-22 21:56
十分感谢楼主分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-11 01:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表