查看: 526|回复: 1

某安卓短视频逆向分析

[复制链接]
发表于 2020-11-22 10:20 | 显示全部楼层 |阅读模式
非法程序、 2020-11-22 10:20 526 1 显示全部楼层
某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,了解大概的功能,方便分析
  • 02.png

    • 发现该程序是一个类似某音的短视频app
    • app需要联网拉取播放列表和视频地址
  • 模拟器挂上代{过}{滤}理后上抓包工具
  • 发现http数据包里有一个很可疑的地址
  • http://interface.91apiapi.com:8080/api.php
  • 03.png
  • 该接口返回数据包特别大,从地址和返回包大小,猜测这就是视频数据的接口,先看看提交参数和返回内容
  • 04.png
  • 05.png
  • 发现几个特征

    • 请求提交的数据和返回的数据都是json格式
    • 都拥有 data(数据), timestamp(时间戳), sign(签名) 字段
    • data数据都是加密的
  • 尝试分析加密和解密方式

    • 将apk放入jadx分析源码
    • 搜索 .put("data"
      • 06.png
      • 为什么搜索 .put("data" 而不是其他的什么?因为根据java开发经验,提交数据是json,所以一般会使用JSONObject对象,当然不止这一种写法,还有很多就不一一列举了
    • 发现很多代码块都使用了 .put("data"
    • 但是最后两个的包名上有 encrypt 太过可疑
    • 咱们先双击查看第一个可疑点
      • 07.png
      • 发现该函数最终生成的json对象结构不对.多了route, via, token 等字段
      • 所以排除
    • 接下来我们看第二个可疑点
      • 08.png
      • 发现该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这个函数干了什么
      • 09.png
      • 10.png
      • 11.png
      • 到这里我们已经可以确定以下几点
        • h函数首先接收一个字符串
        • 然后调用b并传入接收到的字符串和另外一个字符串
        • b接收到两个字符串后,调用b.b,并传入调换位置的两个字符串
        • 然后b.b出现了加密
        • 加密算法是AES (对称加密)
          • 对称加密和非对称加密的区别是:
            • 对称加密,解密和加密的密钥是一样的
            • 非对称加密,密钥是有公钥和私钥的

        • 模式是CFB (AES拥有 ECB,CBC,CTR,CFB,OFB 5种模式) 如果感兴趣的朋友可以下来深入了解它们的区别和适用场景,这里我们不做深入
        • 通过确定加密方式 我们可以尝试分析加密和解密所密钥了
        • 我们逆推发现在h调用b时多了一个this.f13464c
        • 12.png
        • 猜测这个就是我们的密钥了.看看它的内容是什么?
        • 13.png
        • 14.png
        • 15.png
        • 发现有两个地方为它赋值了,分别是
        • e79465cfbb39cjdusimcuekd3b066a6e
        • ljhlksslgkjfhlksuo4lkdrju6p2od03
        • 其中第二个跟进去一看就是个测试代码,所以直接无视
        • 所以我们可以暂定我们需要的通讯密钥就是 e79465cfbb39cjdusimcuekd3b066a6e
        • 接下来编写代码解密data
        • 16.png
        • 解密成功!




以下内容可能引起不适,下面将进行破解收费视频和无限试看
  • 因为在分析app的时候发现该app有限制

    • 试看一定次数后就出现推荐后才能继续
    • 17.png
  • 接下来咱们先搞定 无限试看
  • 咱们先在jadx查下关键字 看看能否定位到关键代码
  • 在jadx中搜索 成功推广,发现只有一个地方,进入看到如下代码:
  • 20.png
  • 查看 i 函数 的交叉引用,发现有两个地方使用到
  • 19.png
  • 按照惯例,先分析第一个(实际上这里就已经感觉就是第一个了.因为他的包名太可疑了!)
  • 21.png
  • 当我们查看 o 函数的交叉引用时 发现没有任何函数调用过它,我们可以断定是因为反编译jadx的原因,没有分析出它的调用联,或者它的调用本身就是运行时生成的
  • 所以我们就需要上神器 Frida 和 辅助工具 objection 了(Frida的搭建和objection的环境搭建我就不多说了,网上有很多)
  • 废话不多说 开工
  • 22.png
  • 23.png
  • 函数hook成功,进入app让函数触发一下.
  • 24.png
  • 发现已经hook到了.从返回的信息中我们可以看出来
  • 这个函数是被在某一个线程中通过反射被动调用的.也就是说在这个线程流程中有某个值事先被设置好了,然后在特定的条件下触发.因此该段代码只能让我们知道,有某个东西决定了我们是否可以试看,而无法从该处就行反推.
  • 接下来我们从新整理下思路

    • app在出现试看限制的时候有个弹窗
    • 弹窗由某个值决定,这个值应该是由服务器返回的
    • 弹窗出现时 app会暂停播放视频
    • 弹窗出现时有一个按钮叫 去充值VIP
    • 猜想,会不会伪造一个vip身份就能绕过试看限制呢?
    • 会不会vip的身份证只是一个变量,由服务器返回的呢?
  • 废话不多说,先看api.php返回的超长data里面有些什么?
  • 经过对data的解密,我们发现了如下内容:
  • 25.png
  • isVip,会不会就是这个值决定的呢?
  • jadx搜一波.
  • 26.png
  • 发现结果中第三条和最后一条最为可疑
  • 因为我们经过上面的分析知道了,有某个值决定了试看限制的弹窗,而jadx搜出来的代码中,只有第三条和最后一条像赋值,但是我们还是一条一条看.先进入第三条
  • 27.png
  • 尝试修改让isVip永远是true 是不是就能绕过限制呢?
  • 上代码.
  • 28.png
  • OK,试看限制已经解除!
  • frida 只是运行时hook,也就是说并不是修改一次永久有效的.要实现修改持久化,方法较多,这里大概介绍一下两个比较常用的方法

    • Frida-gadget (容易)
    • 直接对apk进行smail字节修改(难)(推荐,理由是能学到很多扩展知识,比如smail汇编器指令,apk签名等)

目标实现结论
  • 服务器域名和ip是什么?是否有多个服务器?分别是什么?
    • 域名1: interface.91apiapi.com
      • ipv6: 2606:4700:e0::ac40:6a0c
      • 归属地: 美国
      • 域名服务器: godaddy.com

  • 数据通讯的加密方式是什么?
    • 加密算法: AES
    • 模式: CFB
    • 密钥: e79465cfbb39cjdusimcuekd3b066a6e
  • 如何动态破解限制?
    • 使用 objection 进行动态分析
    • 使用 frida 进行hook,修改原代码功能,实现破解


18.png
发表于 2020-11-22 11:07 | 显示全部楼层
魔影网络 2020-11-22 11:07 显示全部楼层
又见技术帖!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 返回列表 发新帖

快速回复 返回顶部 返回列表