|
|
某1短视频逆向分析目标- 服务器域名和ip是什么?是否有多个服务器?分别是什么?服务器域名注册于哪里?服务器ip归属地是哪里?
- 数据通讯的加密方式是什么?
- 如何动态破解限制?
使用到的工具- burp suite (http https websocket 抓包分析工具)
- jadx (java系列 反编译工具)
- mumu模拟器 (android 模拟器)
- frIDA (hook神器,支持ios android windows linux)
- objection (frida针对android方向的辅助分析工具)
- mt管理器 (在android端针对apk持久化修改神器)
正题开始- 运行apk,了解大概的功能,方便分析
- 发现该程序是一个类似某音的短视频app
- app需要联网拉取播放列表和视频地址
- 模拟器挂上代{过}{滤}理后上抓包工具
- 发现http数据包里有一个很可疑的地址
- http://interface.91apiapi.com:8080/api.php
-
- 该接口返回数据包特别大,从地址和返回包大小,猜测这就是视频数据的接口,先看看提交参数和返回内容
-
-
发现几个特征
- 请求提交的数据和返回的数据都是json格式
- 都拥有 data(数据), timestamp(时间戳), sign(签名) 字段
- data数据都是加密的
尝试分析加密和解密方式
- 将apk放入jadx分析源码
- 搜索 .put("data"
-
- 为什么搜索 .put("data" 而不是其他的什么?因为根据java开发经验,提交数据是json,所以一般会使用JSONObject对象,当然不止这一种写法,还有很多就不一一列举了
- 发现很多代码块都使用了 .put("data"
- 但是最后两个的包名上有 encrypt 太过可疑
- 咱们先双击查看第一个可疑点
-
- 发现该函数最终生成的json对象结构不对.多了route, via, token 等字段
- 所以排除
- 接下来我们看第二个可疑点
-
- 发现该json结构非常符合,首先只有三个put,并且有一个data的put
- 所以结果应该是 {"X1":, "data": h2, "X2":}
- 结构符合了.然后经过进一步跟进发现
- X1 是 timestamp
- X2 是 sign
- 所以最终结果就变为 {"timestamp":, "data": h2, "sign":}
- 完全符合
- 我们知道data被加密了.我们看到data中到底put的value是h2
- 而h2的最近一个赋值是 String h2 = h(str);
- str是该函数的参数,由调用者传入,类型是字符串
- 所以我们猜测str就是data的内容,至于是加密前还是加密后,我们还需要先看看h这个函数干了什么
-
-
-
- 到这里我们已经可以确定以下几点
- h函数首先接收一个字符串
- 然后调用b并传入接收到的字符串和另外一个字符串
- b接收到两个字符串后,调用b.b,并传入调换位置的两个字符串
- 然后b.b出现了加密
- 加密算法是AES (对称加密)
- 对称加密和非对称加密的区别是:
- 对称加密,解密和加密的密钥是一样的
- 非对称加密,密钥是有公钥和私钥的
- 模式是CFB (AES拥有 ECB,CBC,CTR,CFB,OFB 5种模式) 如果感兴趣的朋友可以下来深入了解它们的区别和适用场景,这里我们不做深入
- 通过确定加密方式 我们可以尝试分析加密和解密所密钥了
- 我们逆推发现在h调用b时多了一个this.f13464c
-
- 猜测这个就是我们的密钥了.看看它的内容是什么?
-
-
-
- 发现有两个地方为它赋值了,分别是
- e79465cfbb39cjdusimcuekd3b066a6e
- ljhlksslgkjfhlksuo4lkdrju6p2od03
- 其中第二个跟进去一看就是个测试代码,所以直接无视
- 所以我们可以暂定我们需要的通讯密钥就是 e79465cfbb39cjdusimcuekd3b066a6e
- 接下来编写代码解密data
-
- 解密成功!
以下内容可能引起不适,下面将进行破解收费视频和无限试看 目标实现结论- 服务器域名和ip是什么?是否有多个服务器?分别是什么?
- 域名1: interface.91apiapi.com
- ipv6: 2606:4700:e0::ac40:6a0c
- 归属地: 美国
- 域名服务器: godaddy.com
- 数据通讯的加密方式是什么?
- 加密算法: AES
- 模式: CFB
- 密钥: e79465cfbb39cjdusimcuekd3b066a6e
- 如何动态破解限制?
- 使用 objection 进行动态分析
- 使用 frida 进行hook,修改原代码功能,实现破解
|
-
|