声明
本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!由于本人水平有限,如有理解或者描述不准确的地方,还望各位大佬指教!!
前言
今天我们要分析的app是某视频。分析这个app单纯就是为了学术交流,没有看真的没有看。话不多说直接开始分析。
过root和证书检测
第一步当然是进行抓包分析参数。但打开app发现它检测了root,无法打开app。
![916ac150dc782366f3fe14964963a90f.jpeg](https://img-blog.csdnimg.cn/img_convert/916ac150dc782366f3fe14964963a90f.jpeg)
我们可以使用 frida脚本过root检测,还有可以使用objection提供的过root检测(只需要一行命令,很方便)。怎么简单怎么来吧,这里我直接用objection过root检测。
objection -g appname explore --startup-command "android root disable"
记住一定要在app启动前输入这条命令,不然是过不了检测的。
![67d078be579b77ed7909f23c4f78d6cc.png](https://img-blog.csdnimg.cn/img_convert/67d078be579b77ed7909f23c4f78d6cc.png)
过了root检测后发现有证书效验,直接上objection 执行命令
android sslpinning disable
使用jadx打开apk发现是加壳的。直接使用frida-dexdump进行一键脱壳。在使用jadx打开脱下来的dex文件。
抓包分析
过了root和证书检测就能够正常进入app页面。我们需要抓到绑定邀请码的包。
![974185cc7ee2037f38bac77edfcf737f.png](https://img-blog.csdnimg.cn/img_convert/974185cc7ee2037f38bac77edfcf737f.png)
可以看到有两个参数x-codesign和x-auth-token还有响应的报文是加密的。x-auth-token是服务器返回的。x-device-id是设备参数信息。我们只需要构造x-device-id去登录就能获取x-auth-token。刷邀请的原理就是通过构造新用户的参数携带我们的邀请码去发包给服务器。
参数分析
现在我们的目标就很明确就是分析x-codesign和解密报文。在jadx里直接搜索x-codesign
![51ce740ee4115fea7176d570a0b741ea.png](https://img-blog.csdnimg.cn/img_convert/51ce740ee4115fea7176d570a0b741ea.png)
两个都是一样的随便点进去,可以看到x-codesign就是 B.f896a.a(linkedHashMap, a5)的结果。顺着引用找下去,发现是so层的,我们hook一下它的入参和结果。
![33c526c6fc6a8155ca3b1e25e5d8a0e2.png](https://img-blog.csdnimg.cn/img_convert/33c526c6fc6a8155ca3b1e25e5d8a0e2.png)
![3f3d704d4e74d8db2e7b7561432cf1fc.png](https://img-blog.csdnimg.cn/img_convert/3f3d704d4e74d8db2e7b7561432cf1fc.png)
它的参数组成是data和时间戳组成的。
function main(){
Java.perform(function(){
var TreUtil = Java.use('com.apple.video.common.utils.java.JniUtil');
TreUtil.getSignature.implementation = function(str){
console.log('str-->', Java.use('java.lang.String').$new(str));
var result = this.getSignature(str);
console.log('result-->', Java.use('java.lang.String').$new(result));
return result;
}
})
}
setImmediate(main)
![c8d2c76cf84208fb8d5e1aabd3983948.png](https://img-blog.csdnimg.cn/img_convert/c8d2c76cf84208fb8d5e1aabd3983948.png)
用ida打开lib文件下libsignature.so找到导出的函数getSignature函数。
![7a5909635b5217a7353769c2cf92e132.png](https://img-blog.csdnimg.cn/img_convert/7a5909635b5217a7353769c2cf92e132.png)
很明显可以看到是hmac_sha1加密。我们去验证一下结果。可以看到是正确的。
![af1afaf7c628eb38699f8ac0eb526723.png](https://img-blog.csdnimg.cn/img_convert/af1afaf7c628eb38699f8ac0eb526723.png)
接下来分析一下报文的解密。我们先跑一下自吐脚本看看有没有收获。
![2b5886c31f35c15cdd03ab693cffb88b.png](https://img-blog.csdnimg.cn/img_convert/2b5886c31f35c15cdd03ab693cffb88b.png)
算法采用AES 接下来 jadx分析调用栈,顺着引用找下去
![e8c5a46726b0ce1bce60fc6b3e58af0e.png](https://img-blog.csdnimg.cn/img_convert/e8c5a46726b0ce1bce60fc6b3e58af0e.png)
有了key和iv我们可以调用加密库直接直接生成。至此sign和密文解密就搞定了。我们还需要搞明白x-auth-token是怎么来的,需要抓登录的包
![4b22ad7551b943878e4f576ff4f3f9f7.png](https://img-blog.csdnimg.cn/img_convert/4b22ad7551b943878e4f576ff4f3f9f7.png)
可以看到是需要x-codesign和x-device-id这两个参数。而打开app会自动读取安卓id,生成x-device-id。而x-device-id是经过时间戳经过MD5加密的。然后加密请求服务器返回token,解析下返回报文。
![708ec86c45d4d477f1fbb4435aac0493.jpeg](https://img-blog.csdnimg.cn/img_convert/708ec86c45d4d477f1fbb4435aac0493.jpeg)
这个就是服务器返回的token,接下来我们伪造X-Device-ID然后发送这2个请求,就能成功邀请。
![83c1e8e041055a350731fd3124db919f.jpeg](https://img-blog.csdnimg.cn/img_convert/83c1e8e041055a350731fd3124db919f.jpeg)
自吐脚本和邀请代码:aHR0cHM6Ly93d3cuY2tjb29raWVzLmNuL2luZGV4LnBocC9hcmNoaXZlcy8zLw==
各位大佬觉得本文写的不错的话,可以一键四连哦。