ttttttttttt 发表于 2024-2-23 21:41

从零开始对某电视投屏软件去广告

本帖最后由 ttttttttttt 于 2024-2-24 22:16 编辑



### CHANGLOG

* 2024-02-24 评论大佬说可以直接清空 `goToForceLogin`,于是修改了一下解决强制扫码登录的部分
* 2024-02-23 发帖

### 前言

本文在两份前辈文章的基础上,完善了对某电视投屏软件去广告的思路,增加解决强制扫码登录的原创部分。

不提供成品。

#### 需求

iOS + 华为智慧屏 V65 的使用场景下(别喷,电视不是我买的):

* 自带 DLNA 投屏:极其难用甚至不能用
* 第三方投屏软件:论坛大佬发的[**橙子投屏**](https://www.52pojie.cn/thread-1875110-1-1.html)挺好用,但是在某App投屏遇到有闪退场景

试了下国内市场份额最大的某投屏软件,完美解决我的日常使用需求。剩下强制扫码登录、投屏广告的问题,就让我来帮看看该投屏软件的安全问题吧。

#### 感谢

* [**某电视投屏软件去广告**](https://www.52pojie.cn/thread-1733587-1-1.html) @randompath
* [**修改了一下某电视投屏软件去除广告方法**](https://www.52pojie.cn/thread-1885576-1-1.html)@一个神奇的用户

首先感谢上述两篇完全相关的教程,让我自己动手有信心。

我对 Android 和逆向完全没有了解(但有 Java 基础),论坛大佬正己的系列课程[《安卓逆向这档事》](https://www.52pojie.cn/thread-1695141-1-1.html)非常适合入门,我 demand-driven 地看了 3 节课:

* [《安卓逆向这档事》一、模拟器环境搭建](https://www.52pojie.cn/thread-1695141-1-1.html)
* [《安卓逆向这档事》二、初识APK文件结构、双开、汉化、基础修改](https://www.52pojie.cn/thread-1695796-1-1.html)
* [《安卓逆向这档事》三、初识smali,vip终结者](https://www.52pojie.cn/thread-1701353-1-1.html)

然后就自己动手做出来了(剩下的就没看了)。

所以,如果你需要文中软件的去广告版,不妨也简单看看上述 3 节课,一起动手。

### 准备工作

速看《安卓逆向这档事》的前 3 节视频

安装环境和软件:

* 8.16.70版下载地址(用 base64 解码):aHR0cHM6Ly9kb3dubG9hZC5taXJyb3JjYXN0LmNuL3JlbGVhc2UvcGhvZW5peF9hcHAvMjAyNDAxMTgxNTQ3MjJfaHBwbGF5LTIwMDMtcmVsZWFzZS12OC4xNi43MF82N2FmYTYyYi5hcGs=
* `雷电模拟器`、`NP管理器`、`开发者助手`等其他相关软件请参考《安卓逆向这档事》

为了用 `NP管理器`:`雷电模拟器`设置断网(`软件设置`->`网络设置`->`断开网络`)

### 解决强制扫码登录

打开`开发者助手`,和`某投屏软件`,发现强制扫码登录的当前 Activity 为 `com.hpplay.happyplay.aw.app.ForceLoginActivity`



使用 `NP管理器`,安装包提取 `某投屏软件`,定位,查看,单击 `classes.dex`(用 `DEX编辑PLUS` 打开,全选,确定)



找到 `com.hpplay.happyplay.aw.app.ForceLoginActivity` 类,点击查看 smali 代码,右上角三个点切 Java 代码,观察了一下,看不出啥子。

那就找它的 Usage,搜索该类的使用:





搜索 `PluginBpi` 该类的代码中加载 `ForceLoginActivity` 类的逻辑:



有两种改法:

* 第一种。比较简单,直接把 `goToForceLogin` 方法清空,相当于把创建 `ForceLoginActivity` 的相关逻辑直接抹掉,代码改为以下:

```
.method public goToForceLogin()V
      .registers 1

      return-void
.end method
```

* 第二种。在 `goToForceLogin` 的第一行发现一行关键代码:

```java
      boolean isLogin = UserManager.getInstance().isLogin();
```

* 下一步,搜索该类 `UserManager`,修改其 `isLogin()` 方法使其永远返回 true:





* 该方法的代码改为以下:

```smali
.method public isLogin()Z
      .registers 2

      const/4 v0, 0x1

      return v0
.end method
```

解决咧

### 解决投屏广告

这里参照前辈帖子的思路(懒得赘述了),把 `com.hpplay.sdk.sink.business.ads.cloud.ADRequest` 类的 `getValidADs` 方法,找到图片所示位置,加入 `const/4 p1, 0x0`:



### 解决签名验证

也是参照前辈帖子的思路(懒得赘述了),搜索 `SignCheckHelper` 类,修改其 `check` 方法,让其永远返回 true,smali 代码改为以下:

```
.method public check()Z
    .registers 2

    const/4 v0, 0x1

    return v0
.end method
```

### 尾声

搞定啦,保存一下,`NP 管理器` 会自动签名,然后提取出来去安装就能用了。

ttttttttttt 发表于 2024-2-24 22:01

侃遍天下无二人 发表于 2024-2-24 12:36
太麻烦了,你直接把要改的方法清空就行了,还能提高运行效率

哇版主大大!{:1_889:}

回复一下:

我当时没有细读代码,整块代码删怕有啥 side-effect 会影响其他功能,只想尽可能小的改动去解决。

听你一说,我重新扫了一下代码,(解决强制登录部分)确实可以:直接把 `goToForceLogin` 方法的代码删掉,留个 `.locals 0` 和 `return-void` 就行了。

算是另一种修改思路,不需要再深入去追和改 `UserManager`,我编辑一下帖子。

理想的海洋 发表于 2024-2-25 21:30

大神你好可以把这个搞一下吗    基础不好   只看懂你的教程    这个帖子里面去登录按上面的方法 搞不定https://www.52pojie.cn/thread-1883888-1-1.html

正己 发表于 2024-2-23 23:11

期待大佬后续实战贴{:301_997:}

DBasketball 发表于 2024-2-24 03:37

竟然有SignCheckHelper 类{:1_904:}

bulesoft 发表于 2024-2-24 06:16

大佬,有没有PC端的思路啊

juecky 发表于 2024-2-24 08:18

谢谢分享,学习了

alanfish 发表于 2024-2-24 08:32

谢谢分享,学习了

理想的海洋 发表于 2024-2-24 08:38

优秀啊 大神多谢分享

sai609 发表于 2024-2-24 08:51

国内市场份额最大的某投屏软件是?橙子投屏吗

ynzyy2023 发表于 2024-2-24 08:53

学习了,多多谢谢!!!

kasahlee123 发表于 2024-2-24 09:08

很好,学习了!!多谢分享~!
页: [1] 2 3 4 5 6
查看完整版本: 从零开始对某电视投屏软件去广告