本文仅用于逆向研究交流,禁止非法用途,如遇侵权联系删除!!!
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 层第一个参数str(jstring类型,字符串/zufang/app/rentlist/api_rentlist_data);
a4:对应 Java 层第二个参数bArr(jbyteArray类型,此处为null);
a5:对应 Java 层第三个参数str2(jstring类型,长字符串参数,包含clientid、guid等信息)。
最终调用sign函数返回值

sign函数
拼接了字符串5!#58ZUfang753149?#
最后通过md5计算返回值

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

被折叠的 条评论
为什么被折叠?



