Hook破解B站客户端大会员缓存视频

0x0 前言

最近咸鱼收了个LG G8,这还是我第一回自己花钱买手机,哈哈。

因为以前的手机都是爸妈替下来的各种解不了锁的国内品牌机器,基本上没什么可折腾性,所以我一直没怎么对安卓有什么研究。买这个手机原因无外乎两条,第一买来折腾,第二在学校自己用。手机到手bl解了,但是root掉了,于是在学校通宵一个晚上在宿舍把root补了回来,面具lsp统统安排上了,于是我就对hook这种东西产生了兴趣。这个东西是我在学校抽了一个晚自习搞得,博客的图都是放假回家的情景再现。提高知识水平的同时还能顺便水一篇blog

这是我们的主角,这个看起来好欺负的弹窗↓01

就决定是你了!

0x1 原料

  1. 硬件

    • 一台root了并且激活了lsp框架的手机
  2. 软件

    • b站play版(com.bilibili.app.in)版本号7420600
    • SimpleHookR (需要把b站加入作用域)
    • mt管理器(有vip最好,因为可以转java逻辑更清晰)
  3. 知识储备

    • 最好有一点安卓开发的知识

如果没有mt vip也可以用电脑上的jadx之类的代替分析java逻辑。

0x2 过程

首先用mt打开b站的apk,在arsc编辑器++ 中搜索这个弹窗的内容:
02

我们知道,安卓应用的各种资源在源码中是以id的形式被引用的,所以我们把它的id复制下来:

03

然后我们使用dex编辑器++在代码中搜索这个id:

04

05

于是我们接着深入,看看这个id在哪里被使用了,也就是这个弹窗究竟是在哪里弹出的:

06

07

转java看一下:08

可以发现这个弹窗所在的方法是tv.danmaku.bili.ui.offline.g1.B,但是我们在里面并没有找到判断会员的逻辑,说明这个逻辑还在B的上层。那么我们再去找是谁调用了这个B:

09

10

我们从DownloadPageActivity里的调用看起:

11

可以发现弹窗函数g1.B()(40行)的条件是g1.s(cVar) != 0(35行),那我们再看看g1.s的逻辑:

12

发现这个函数调用了ml2.c.h,我们在dalvik代码视图中可以直接跳过去:13

看逻辑很明显,ml.c.h()就是判断用户vip状态的函数:

14

因为我懒不想搞清楚dVar究竟是什么东西,所以我们直接对231行的BiliAccountInfo.g().m()下手:

在dalvik视图中找到m的类,跳转:

15

16

其实这里我当初还有一步用SimpleHookR记录该函数的返回值的过程,这里略去,结论就是当登陆用户是大会员的时候这个函数会返回true。那么接下来就很简单了,只需要hook这个函数的返回值让它永远返回true即可绕过大会员检测。

17

0x3 效果&总结

现在在不登陆大会员状况下也能直接看大会员缓存视频了:

18

19

总结就是难度不大,适合我这样刚接触hook的小白~


Hook破解B站客户端大会员缓存视频
https://www.hakurei.org.cn/2024/05/01/hook-bili-vip-only-download-video/
作者
zjkimin
发布于
2024年5月1日
更新于
2024年5月1日
许可协议