趁着还有一些记忆,赶紧记录下。
今天我们要分析的app 是某瓜快数,版本号v1.0.8 ,小伙伴们可以去各大应用商定自行下载。
只做参数分析,用来学习,如有侵权,请联系博主,第一时间删除。
转载请注明出处:
https://blog.csdn.net/weixin_38819889/article/details/124979777
1.先来抓个包
第一步,先来抓个包,这里看到里面有一个sign参数
,sign=“00FC1849F8585E92CCE6B6C8FB8DCC57
”,看长度有32位,可以大胆的猜测下是MD5加密,接下来具体的验证下猜想。
对了,记得这个app被加固有壳,如果不把壳脱掉,是无法查看里面的代码。要是对脱壳不太清楚,移步看这篇文章: 使用 frida+dexdump对apk脱壳。
2.jadx静态分析
理论上来说,我们应该直接搜索"sign"
参数,但是搜索了一下,没有看到符合预期加密的地方,所以换一个参数"SessionId"
搜索
在这里,看到比较可疑地方hashMap.put("SessionId", str);
,来我们先点进去看看到底是个啥,看函数名叫setMd5Sign
,然后再看可疑的参数名称 md5
, md5_body
,大胆的猜测下 这里可能就是处理加密逻辑的地方。
是的没错,这里就是计算加密的地方。简单的逻辑下代码逻辑,首先定义了一个字符串stringBuffer
,然后用时间戳和随机数字定义一个currentTimeMillis
,之后向stringBuffer
拼接几个固定参数,包括固定盐值,SessionId,Platform, _rnd(时间戳)
,再之后把参数都塞到一个数组中,再对数组排个序,拼接成个字符串,最后做了一个MD5的加密操作。
也就是下面的代码
String md5 = C7495MD5Util.md5(stringBuffer.toString());
C7499SharedPreferencesUtil.getInstance().put("md5_body", md5);
3. frida动态调试
打开frida服务,运行命令: frida -U com.feigua.androidks -l ks_sign.js
hook代码如下:
Java.perform(function(){
var arrays = Java.use('java.util.Arrays');
var HttpApiService = Java.use('com.feigua.androidks.api.HttpApiService');
HttpApiService.setMd5Sign.implementation = function(parm1){
console.log("↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓");
console.log("参数1值:",parm1);
var result = HttpApiService.setMd5Sign(parm1);
console.log("加密返回值:", result);
console.log("返回值类型:", result.$className);
console.log('返回值打印:',arrays.toString(result.toArray()));
console.log("↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑");
return result
};
});
可以看到setMd5Sign
方法输入的参数是一个HashMap字典,输出结果是一个数组,第一个值是时间戳,第二个值就是加密的md5结果。
4.python还原
处理的逻辑并不是很复杂,接下来python还原一下,响应数据也拿到手了。
完事,手工,下一个。