【网络安全】【Frida实践案例】某付费视频应用“一举拿下”

Y29tLnZpZGVvLmxpdmU=

二、环境

  • PyCharm
  • Android Studio
  • Frida
  • Reqable
  • Jadx
  • uiautomatorviewer
  • 手机Android13

三、步骤

1、查壳

刚拿到安装包时,直接丢jadx中,发现没有加壳。可以直接开搞了。开始的时候有点懵,无从下手。
那就先看下要处理的界面吧。

2、定位付费界面布局

关键布局id:tv_open_vip_btn发现使用的ViewBinding进而找到对应的Activity

在这里插入图片描述

3、找到可疑方法

在这里插入图片描述

心想:这么简单的嘛,直接hook这个方法,不执行不就完了嘛。
hook代码:

let VideoDetailActivity = Java.use("[包名].VideoDetailActivity");
VideoDetailActivity["addOpenVipView"].implementation = function (a) {
    console.log(`VideoDetailActivity.addOpenVipView is called: a=${a}`);
    this["addOpenVipView"](a);
};

是我想多了,还是不可用,并没有什么作用。

4、那就看下请求信息吧,看下有没有思路

在这里插入图片描述
发现好多请求,都是加密的。通过后缀可以看出是AES的图片加密。我们的目标是视频,图片没啥用,都是封面啥的。

5、其他请求(列表,视频信息,获取播放url)

在这里插入图片描述

  • getList:获取列表信息
  • getInfo:获取某视频信息
  • geturl:获取播放视频地址
  • getpreurl:获取预看地址

1、看了下所有请求参数都有加密,响应数据明文。
2、着手搞参数加密就可以了。

  • endata:请求参数
  • ents:时间戳

6、请求参数加密算法

在这里插入图片描述
还算顺利,搜索关键字就可以查到。

测试:

def encrypt(data: str) -> str:
    print(data)
    key = "[key]"
    iv = "[iv]"

    key_bytes = key.encode('UTF-8')
    iv_bytes = iv.encode('UTF-8')

    cipher = AES.new(key_bytes, AES.MODE_CBC, iv_bytes)
    plaintext_bytes = data.encode('UTF-8')
    plaintext_bytes_padded = pad(plaintext_bytes, AES.block_size, 'pkcs7')

    ciphertext_bytes = cipher.encrypt(plaintext_bytes_padded)
    ciphertext_base64_bytes = base64.b64encode(ciphertext_bytes)

    ciphertext = ciphertext_base64_bytes.decode('UTF-8')
    return f"{str(ciphertext)}\n"

自测可用,可以上手请求了。
实际效果:

{"code":607,"msg":"非法请求","data":{},"traceId":""}

o(╥﹏╥)o o(╥﹏╥)o o(╥﹏╥)o

  • 检查参数,反复测试没有问题。
  • 请求头信息没有特别数据。
  • 模拟请求,快速再次重试,过10s左右会请求失败。

7、图片信息解密

数据请求暂时告一段落,先看下图片处理吧。
在这里插入图片描述
关键代码反编译失败了,看smali吧。
拿到关键key,加解密方式。OK了~~~

8、数据请求关键点

请求参数是没有问题的,header也没有其他签名数据。为什么会请求失败了呢,关键还是时间戳的问题。
继续扣代码…
在这里插入图片描述
找到关键位置,该时间戳并不是用的现在时间。真想大白o(╥﹏╥)o…
测试:可以正常返回数据。

9、以上都是废话

是我太高估这个APP了,发现logcat里面有明文输出。oh,my zsh…

10、直接找关键hook点

  1. 短视频部分:
    在这里插入图片描述
    判断是登录用户,直接开始播放。
  let AppExtendKt = Java.use("[包名].AppExtendKt");
    AppExtendKt["isUserLogin"].implementation = function () {
        console.log(`AppExtendKt.isUserLogin is called`);
        let result = this["isUserLogin"]();
        console.log(`AppExtendKt.isUserLogin result=${result}`);
        return true;
    };

  • 成功之后,视频仅播放部分。
  • 通过参数测试,可调整参数来返回完整数据。
  • 在设置播放链接的部分调整播放时间。
  let BaseVideoView = Java.use("[包名].BaseVideoView");
    BaseVideoView["setUrl"].overload('java.lang.String').implementation = function (str) {
        str = str.replace(/start=\d+&end=\d+&/g, '');
        console.log(`BaseVideoView.setUrl is called: str=${str}`);
        this["setUrl"](str);
    };

(。◕ˇ∀ˇ◕)搞定,可正常播放。

  1. 正常视频部分:

在这里插入图片描述

  • 通过获取用户信息,找到关键代码进行用户信息调整,发现APP so层会崩溃[pass]。
  • 通过关键部分进行主动调用获取数据。
{"code":2002,"msg":"无权限获取","data":{},"traceId":""}
## 最后

**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。**

![img](https://img-blog.csdnimg.cn/img_convert/4178dd2d25f8e0ea171c9610581a885c.png)

![img](https://img-blog.csdnimg.cn/img_convert/efb0a5ec11eaaf179b00447492b43bc1.png)

![img](https://img-blog.csdnimg.cn/img_convert/d13baf0dc3d5c9f0549ec534c5df3e5d.png)

![img](https://img-blog.csdnimg.cn/img_convert/c5dd0869dcbb60890814e31e1555209c.png)

![img](https://img-blog.csdnimg.cn/img_convert/66c600004228b72fda96c976dc98b8ce.png)

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点!真正的体系化!**

[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618653875)

**由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**

592539874)]

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点!真正的体系化!**

[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618653875)

**由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值