前言
本文在两份前辈文章的基础上,完善了对某电视投屏软件去广告的思路,增加解决强制扫码登录的原创部分。
不提供成品。
需求
iOS + 华为智慧屏 V65 的使用场景下(别喷,电视不是我买的):
试了下国内市场份额最大的某投屏软件,完美解决我的日常使用需求。剩下强制扫码登录、投屏广告的问题,就让我来帮看看该投屏软件的安全问题吧。
感谢
首先感谢上述两篇完全相关的教程,让我自己动手有信心。
我对 Android 和逆向完全没有了解(但有 Java 基础),论坛大佬正己的系列课程《安卓逆向这档事》非常适合入门,我 demand-driven 地看了 3 节课:
然后就自己动手做出来了(剩下的就没看了)。
所以,如果你需要文中软件的去广告版,不妨也简单看看上述 3 节课,一起动手。
准备工作
速看《安卓逆向这档事》的前 3 节视频
安装环境和软件:
为了用 NP管理器:雷电模拟器设置断网(软件设置->网络设置->断开网络)
解决强制扫码登录
打开开发者助手,和某投屏软件,发现强制扫码登录的当前 Activity 为 com.hpplay.happyplay.aw.app.ForceLoginActivity
image-20240223205717596.png (339.8 KB, 下载次数: 0)
下载附件
2024-2-23 21:38 上传
使用 NP管理器,安装包提取 某投屏软件,定位,查看,单击 classes.dex(用 DEX编辑PLUS 打开,全选,确定)
image-20240223210243955.png (88.52 KB, 下载次数: 0)
下载附件
2024-2-23 21:38 上传
找到 com.hpplay.happyplay.aw.app.ForceLoginActivity 类,点击查看 smali 代码,右上角三个点切 Java 代码,观察了一下,看不出啥子。
那就找它的 Usage,搜索该类的使用:
image-20240223210732507.png (58.59 KB, 下载次数: 0)
下载附件
2024-2-23 21:39 上传
image-20240223210822213.png (36.09 KB, 下载次数: 0)
下载附件
2024-2-23 21:39 上传
搜索 PluginBpi 该类的代码中加载 ForceLoginActivity 类的逻辑:
image-20240223210917260.png (330.21 KB, 下载次数: 0)
下载附件
2024-2-23 21:39 上传
有两种改法:
第一种。比较简单,直接把 goToForceLogin 方法清空,相当于把创建 ForceLoginActivity 的相关逻辑直接抹掉,代码改为以下:
.method public goToForceLogin()V
.registers 1
return-void
.end method
第二种。在 goToForceLogin 的第一行发现一行关键代码:
boolean isLogin = UserManager.getInstance().isLogin();
image-20240223211130001.png (78.43 KB, 下载次数: 0)
下载附件
2024-2-23 21:39 上传
image-20240223211247327.png (216.34 KB, 下载次数: 0)
下载附件
2024-2-23 21:39 上传
.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:
image-20240223211714445.png (241.92 KB, 下载次数: 0)
下载附件
2024-2-23 21:39 上传
解决签名验证
也是参照前辈帖子的思路(懒得赘述了),搜索 SignCheckHelper 类,修改其 check 方法,让其永远返回 true,smali 代码改为以下:
.method public check()Z
.registers 2
const/4 v0, 0x1
return v0
.end method
尾声
搞定啦,保存一下,NP 管理器 会自动签名,然后提取出来去安装就能用了。