对某语(Ti)音(Mi)APP的简单分析
本帖最后由 laos 于 2021-4-20 04:33 编辑# 某语音APP的简单分析
## 脱壳
- 该APP使用某数字加固, 可直接使用r0ysue的frida dump脚本或者xposed 反射大师模块进行脱壳
## 抓包截图
>几乎所有请求协议头都带有"pkg"以及"imei", 我们随便取一条数据测试.
![微信截图_20210416102701](https://i.loli.net/2021/04/16/UuzBdPNLhm6ZSbW.png)
## 算法过程
jdax载入dex文件后, 直接搜索"pkg"定位到以下加密位置
## ![调用pkg地方](https://i.loli.net/2021/04/16/h78Q9O2BSNakPGx.png)
我们先看下,imei的处理过程
`aO.aO(com.taobao.accs.common.Constants.KEY_IMEI, str)`
其中aO.aO()这个方法是添加数据到协议头, 而imei的值对应的是str,也就是Constants.IMEI, 直接在变量名上右键"查找用例"
!(https://i.loli.net/2021/04/16/cd1Qli3BjIU8Ovu.png)
很直观就能确定到给imei赋值的地方, 再看加密方法名, 直接告诉了我们加密算法, 对手机imei进行md5而已
![微信截图_20210416102007](https://i.loli.net/2021/04/16/REcVUHFgN6XTszv.png)
```python
import hashlib
imei = '35xxxxxxxx59503'
imei_md5 = hashlib.md5(imei.encode('utf-8')).hexdigest()
print(imei_md5)
# print('4761ec8e17c0f52bd25b7cba9343f972')
```
接着往下看"pkg"的加密过程
```java
String headerPackage = SecurityLib.instance.getHeaderPackage(App.Ql());
if (headerPackage == null) {
headerPackage = "";
}
ab.a aO = Uj.Vw().aO("pkg", headerPackage.replaceAll(UMCustomLogInfoBuilder.LINE_SEP, "").replaceAll(" ", ""));
```
调用的是SecurityLib类下的getHeaderPackage方法进行处理 ,App.Ql()返回的是一个app对象
我们继续往下跟
!(https://i.loli.net/2021/04/16/Vs2qBlaQJvUgiec.png)
这里可以看出, 最终加密逻辑是在native层方法 libnative-lib.so下的`getPackage`
是时候祭出我们的神器IDA了, 打开它并载入libnative-lib.so
!(https://i.loli.net/2021/04/20/NCzA5tBukr2bYD9.png)
这里别看代码这么长, 总结起来也就是一些字符串的赋值拼接而已
还有就是变量参数太多, 为了方便阅读, 可根据个人习惯修改命名
注:F5转C代码后,有些地方很难读懂, 就比如getAES传入的参数,我们切到汇编就很容易了
接着查看getAES
!(https://i.loli.net/2021/04/20/f7FbZYpvMU3jyGe.png)
查看aes密钥 "*TiMi#Chat@2020*"
!(https://i.loli.net/2021/04/20/vAz8pqkWs9bt4ZD.png)
试着解密最后数据
!(https://i.loli.net/2021/04/20/FvAl3K9o8UEeYu5.png)
OK~
我们再验证之前的sha1也就是"s"的值是否正确...完美
!(https://i.loli.net/2021/04/20/YwnFIELB7UPM6aD.png)
这个APP处理虽然简单,但没有借助frida objection之类的, 纯静态分析出来还是很满足的,哈哈哈
so部分咋分析的啊 本帖最后由 djxding 于 2021-4-20 10:50 编辑
感谢分享,写得还是很详细。
能不能分析一下,现在的常见加固的签名校验呢?
比如,通过分析,能知道这个APP的签名校验是在哪个数据库so文件中,
再具体些的话,能不能分析到具体函数中去,是如何进行签名校验的等等。
特别想学这方面的知识啊。
现在的APP逆向,首先连签名校验都过不了,就没有办法继续啦——这是一个坎!
是个好思路 学习了! 看着不错! 学习了,谢谢 学习了,但没学会 学习一下,谢谢 学习了,谢谢~~ 感谢大佬分享,膜拜大佬 学到了,感谢楼主!