免责声明
免责声明本文内容仅供学习交流使用,严禁用于商业和非法用途。抓包数据、敏感网址以及数据接口已进行脱敏处理。
注:如有引用,请标注文章地址!!!!!!!
资源获取
关注公众号: 安卓破晓者(回复:tx漫画)
本文目标:
逆向参数:参数:sc 响应:解密
注:作者是个菜鸡,诸位大佬们看个乐就是了哈
正文开始
上图!!!
可以看到响应是一堆加密过的数据
老样子,看一下app有没有加壳
很显然并没有
那么逆向正式开始,打开app搜索一波
因为响应加密了,所以也只能从参数入手
可以看到结果并不多,那就一个个分析,最终定位到:private void m5793j(C16557x.a aVar, C16557x c16557x)
双击m5788e,继续跟进去
到这里代码明显清晰了不少
大致逻辑就是将各种参数拼接成sb2
最后在return返回:C5494q0.m20464a(sb2.toString());
为了更进一步验证,先来hook一下:C5494q0
Java.perform(function () {
let C5494q0 = Java.use("com.qq.ac.android.utils.q0");
C5494q0["a"].implementation = function (str) {
console.log(`C5494q0.m20464a is called: str=${str}`);
let result = this["a"](str);
console.log(`C5494q0.m20464a result=${result}`);
return result;
};
})
hook之前将抓包软件打开,把hook结果和抓包结果对比一下
return的结果和抓包的sc的值,一模一样
来,再看看代码具体实现
一眼看到有个md5
这里姑且当作是md5加密,回头看看刚才hook的sb2
整理一下:
/12.0.8/Home/tabs/
tab_id/6950604
a.ac.qq.com
0 (参数:fakeduin)
dc0d0003975ed7fced4fb0f210001be1860f (参数:qimei 固定)
1721455445729 (参数:localtime)
4jo2YHMm0d2VGt59tVYndX9P7eFcw8TvRv5lMqFP1TT (固定)
tab_id 根据实际接口拼接
localtime 是一个13位的时间戳
验证一下:
如此这般,sc参数解密也就完成了
接下来继续看代码,定位到响应位置
回到最开始的m5793j参数,跟一下它的引用
这里有个返回值,跟进去
发现是一个接口
没办法,只能花时间找找它的实现
CryptUtils,一眼就注意到这个参数很可疑,进去看看
发现是 native
先不着急往下,来一波hook
Java.perform(function () {
let CryptUtils = Java.use("com.qq.ac.android.utils.CryptUtils");
CryptUtils["gudKsDdgRDftyhRz"].implementation = function (bArr) {
console.log(`CryptUtils.gudKsDdgRDftyhRz is called: bArr=${bArr}`);
let result = this["gudKsDdgRDftyhRz"](bArr);
console.log(`CryptUtils.gudKsDdgRDftyhRz result=${result}`);
return result;
};
});
因为类型是byte[],这里需要做一下转换
转换后的参数:
转换后的返回值:
因为学不久,对so不熟悉,这里使用unidbg来解密
这个app没有什么需要补的环境
将框架搭好就行了
撒花!!!
标签:逆向,return,tx,hook,安卓,CryptUtils,C5494q0,参数,result From: https://blog.csdn.net/Coodekun/article/details/140570294