laos 发表于 2021-4-20 03:06

对某语(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之类的, 纯静态分析出来还是很满足的,哈哈哈

氓之嗤嗤 发表于 2021-4-21 21:12

so部分咋分析的啊

djxding 发表于 2021-4-20 10:48

本帖最后由 djxding 于 2021-4-20 10:50 编辑

感谢分享,写得还是很详细。

能不能分析一下,现在的常见加固的签名校验呢?
比如,通过分析,能知道这个APP的签名校验是在哪个数据库so文件中,
再具体些的话,能不能分析到具体函数中去,是如何进行签名校验的等等。

特别想学这方面的知识啊。
现在的APP逆向,首先连签名校验都过不了,就没有办法继续啦——这是一个坎!


加奈绘 发表于 2021-4-20 08:19

是个好思路

seeyou_shj 发表于 2021-4-20 09:00

学习了!

zhao4840875 发表于 2021-4-20 09:01

看着不错!

mitchzh 发表于 2021-4-20 09:05

学习了,谢谢

ningg 发表于 2021-4-20 09:25

学习了,但没学会

kbqns2012 发表于 2021-4-20 09:27

学习一下,谢谢

nemonemone 发表于 2021-4-20 09:30

学习了,谢谢~~

tyosei 发表于 2021-4-20 09:36

感谢大佬分享,膜拜大佬

雨中独撑伞 发表于 2021-4-20 09:48

学到了,感谢楼主!
页: [1] 2 3 4
查看完整版本: 对某语(Ti)音(Mi)APP的简单分析