安卓逆向 - 某东body参数算法还原

本文仅供学习交流,只提供关键思路不会给出完整代码,严禁用于非法用途,拒绝转载,若有侵权请联系我删除!

目标app:5Lqs5LicYXBwMTEuMy4y

目标接口:aHR0cHM6Ly9hcGkubS5qZC5jb20vY2xpZW50LmFjdGlvbj9mdW5jdGlvbklkPXNlYXJjaA==

一、引言

今天来研究下某东的搜索接口,尝试将加密的参数还原出来。

二、抓包分析

1、在模拟器或者真机上安装app

2、配置Fiddler代理,安装证书

3、点击app上方的输入框,输入关键字,成功抓到关键词搜索的包,我们发现请求url中有个sign参数,这个经过我分析是调用的so中的方法,这个参数放到下篇文章,通过Unidbg主动调用来生成该参数。今天我们主要来研究下请求体中加密参数的生成。

 三、调试

1、定位关键代码

使用jadx打开apk文件,搜索关键字cipher、body等。我们会发现出来的结果特别多,这对于我们分析非常不友好。

安卓逆向 - 某东body参数算法还原_第1张图片这时候不妨搜索下周边的几个参数名称,如:hdid,其他几个参数很多时候都是在附近的,搜索结果明显少了很多,我们依次点开分析

安卓逆向 - 某东body参数算法还原_第2张图片

 定位到如下位置,果然关键代码就在附近 

安卓逆向 - 某东body参数算法还原_第3张图片

2、我们尝试hook上层方法,看下入参和返回值。

let e = Java.use("com.jd.phc.e");
e["b"].implementation = function (map, bVar) {
    console.log(`e.b is called: map=${map}, bVar=${bVar}`);
    let result = this["b"](map, bVar);
    console.log(`e.b result=${result}`);
    return result;
};

入参是个map,再通过JSONObject转一下,成功打印出入参字符串。和我们抓包抓到的信息比对,一模一样!

       var jsonObj = Java.use('org.json.JSONObject').$new(map);
        console.log("map : " + jsonObj.toString())

安卓逆向 - 某东body参数算法还原_第4张图片

 3、仔细分析代码,cipher是由这一段代码赋值

jSONObject2.put("cipher", jSONObject);

查看上方代码:jSONObject是这边生成的,map就是这个方法 的入参,都是明文。

安卓逆向 - 某东body参数算法还原_第5张图片

我们hook到bVar的值是5,和b.MODIFIED_BASE64.value()值相等

安卓逆向 - 某东body参数算法还原_第6张图片

所以最终执行的代码是这一段,我们扣出来尝试还原。

for (String str2 : map.keySet()) {
    String str3 = map.get(str2);
    String b2 = d.b(str3.getBytes());
    com.jd.phc.i.b.a("PHCEngine", "brian Encoded str of " + str3 + " is :" + b2);
    jSONObject.put(str2, b2);
}

四、还原

1、删除无效代码:

com.jd.phc.i.b.a("PHCEngine", "brian Encoded str of " + str3 + " is :" + b2);

2、需要补全d.b(),跟进去把代码扣出来

安卓逆向 - 某东body参数算法还原_第7张图片

3、补全缺少的数组f7339a

  private static char[] f7339a = {'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'};

五、最后

将入参封装成一个HashMap,成功还原出加密的body,效果如下: 

安卓逆向 - 某东body参数算法还原_第8张图片

收工! 

你可能感兴趣的:(爬虫,android,安卓逆向,爬虫,Java,Frida)