某居客APP端抓包+接口逆向解析so层分析

本文仅用于逆向研究交流,禁止非法用途,如遇侵权联系删除!!!

1APP版本

v 17.15.18

豌豆荚下载

2APP抓包

首先这个ap是有抓包检测的,如果你直接开代理抓,会被检测到

这里推荐的方案是

Lsposed+JustTrustMe 过掉ssl pinning

3接口分析

我这里是用搜索租房触发

目标是ajk_sign和signature

4signature逆向分析

反编译用jadx把app的包拖进去进行

我们搜索下关键词"signature"

看了一下有很多位置都有

可以挨个看分析,嫌麻烦也可以直接hook map put操作打印一下触发栈

但是观测到他的每个signture都经过了ji.c函数

我们进ji,c看一下

看着像标准的md5 hook下看看输入输出

frida hook 函数

Java.perform(function () {

let j1 = Java.use("com.wuba.housecommon.utils.j1");
j1["c"].implementation = function (str) {
    console.log(`j1.c is called: str=${str}`);
    let result = this["c"](str);
    console.log(`j1.c result=${result}`);
    return result;
};



});

启动hook脚本触发一下

看到

j1.c is called: str=bj17.15.8android1761480561762
j1.c result=738439aa0adceee4910b13243be8dac0
j1.c is called: str=bj17.15.8android1761480562560
j1.c result=262b5531cd130f6d7340217350299d0e

看了下就是标准md5

bj17.15.8android+时间戳组成

时间戳要与请求接口中的时间戳需要一致

5ajk_sign解析

搜索了下就只有一处我们进去看下

貌似是对接口信息进行的加密

再进加密函数看下 应该是so层加密了

先hook下看下都传入了什么

Java.perform(function () {

let SignUtil = Java.use("com.wuba.housecommon.sign.SignUtil");
SignUtil["sign"].implementation = function (str, bArr, str2) {
    console.log(`SignUtil.sign is called: str=${str}, bArr=${bArr}, str2=${str2}`);
    let result = this["sign"](str, bArr, str2);
    console.log(`SignUtil.sign result=${result}`);
    return result;
};

});

看下入参和返回

str=/zufang/app/rentlist/api_rentlist_data

bArr=null

str2=58clientid=d0b49dba3313f068eb22dae6d22722b3&_guid=4f0f6456-2186-40c4-be38-ccb818c51305&action=getListInfo&ajk_city_id=14&app=a-ajk&appId=1&areaType=qiankun&cid=&curVer=17.15.8&cv=17.15.8&filterParams=&focusActiveDict={"clicks":0}&format=json&from=mobile&geoty。。。。。。省略

返回是32位

14892e211bf6d7f043d159a74f8ffdb1

直接看下so里面的逻辑

文件名字是

libhouse_sign.so

我们去app的包找一下这个文件

用ida看下是什么注册

看下函数导出

静态注册而且还有md5标识很友好了,应该不难

进入函数,F5一下看看做了什么

简单看下没什么难度

a1:JNI 环境指针(JNIEnv*),用于调用 JNI 接口函数;

a2:Java 类对象(jclass,因是静态方法);

a3:对应 Java 层第一个参数strjstring类型,字符串/zufang/app/rentlist/api_rentlist_data);

a4:对应 Java 层第二个参数bArrjbyteArray类型,此处为null);

a5:对应 Java 层第三个参数str2jstring类型,长字符串参数,包含clientidguid等信息)。

最终调用sign函数返回值

sign函数

拼接了字符串5!#58ZUfang753149?#

最后通过md5计算返回值

总结

比较适合app逆向练手可以试试,不怎么难,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值