电视盒子云视听极光修改无广告纯净版教程

心随674 发布于2021-3-17 11:27 423 次浏览 1 位用户参与讨论   [复制分享主题]
家里买了第三方基顶盒,装了云视听极光这个软件,里边资源很多的,但是广告很烦人,每次看视频都要有一分多钟的广告
于是本着研究的目的,对其中的广告播放进行研究
首先去网上下载最新版的云视听极光tv版sdk(我下载的版本是:ApkIDE_tv_video_3.3.0.1056_android_15000)
运行apk可以看到,点击视频,可以看到每次播放视频的广告:
QQ截图20210317110651.jpg
开始分析:
Android studio 里面提供的工具:logcat(用来查看app运行过程log信息)layout inspector(用来查看app运行过程中当前view的层次信息)
apkIDE(我用的是ApkIDE最新3.5.0少月增强版
分析过程:
首先打开apkide,反编译apk
QQ截图20210317111004.jpg
开始分析的切入点很关键,我使用layout inspector 分析广告的页面,作为切入点:
发现一个关键点:
tvk_playerVideoView这个关键字,使用apkIDE全局搜索这个关键字
然后使用apkIDE提供的源码查看器java decompiler 对全局搜索出来的smali文件分析源代码
发现亮点了:onPreAdPrepared,但是除了这个关键字没有其他可以下手的地方,于是继续以onPreAdPrepared关键字搜索
对搜索出来的smali对应的源码一一查看,这个过程需要比较耐心
终于发现了一个亮点:
分析出现了曙光,skipad和notifStateChange"adPlay" 是多么有价值的关键字啊,skip英文单词跳过的意思   ad一般是广告的缩写,于是我们在这里做做问问
这个时候,就需要一点smali的语法基础了,因为我们要修改这部分的代码
把这个代码
QQ截图20210317111903.jpg
然后使用apkide提供的编译功能,重新编译apk,去模拟器测试,发现完美去掉了播放中的视频
QQ截图20210317112043.jpg
QQ截图20210317110758.jpg
弄完这个后,看视频清爽很多,但是还是有横幅广告和开启app广告以及待机播放的广告,来来来,我们继续:
去掉开启广告和待机广告:
首先我们打开AndroidManifest.xml文件
  1. <activity android:configChanges="orientation|screenSize" android:label="@string/app_name" android:name="com.ktcp.video.activity.MainActivity" android:screenOrientation="landscape" android:theme="@style/AppStartTheme">
  2.             <intent-filter>
  3.                 <action android:name="android.intent.action.MAIN"/>
  4.                 <category android:name="android.intent.category.MONKEY"/>
  5.                 <category android:name="android.intent.category.LAUNCHER"/>
  6.                 <category android:name="android.intent.category.DEFAULT"/>
  7.             </intent-filter>
  8.             <intent-filter>
  9.                 <action android:name="com.tencent.qqlivetv.open.splash"/>
  10.                 <category android:name="android.intent.category.DEFAULT"/>
  11.             </intent-filter>
  12.         </activity>
复制代码
可以看到com.ktcp.video.activity.MainActivity 是最先启动的activity,我们去这个activity对它反编译看看里边的逻辑
里边有代码: SplashManager.getInstance().showSplash(new SplashManager.OnSplashShowCallback()
Splash很多时候代表是闪屏广告,我们可以从这里入手
不过直接屏蔽SplashManager.getInstance().showSplash 是不行的,这样太暴力了,容易程序崩溃,我们要本着最小化修改达到完美修改的目的
继续往下看:
  1. public boolean onTadReceived(ITadWrapper paramITadWrapper)
  2.     {
  3.       boolean bool = true;
  4.       if ((paramITadWrapper == null) || (paramITadWrapper.isEmpty()))
  5.       {
  6.         TVCommonLog.i("MainActivity", "requestSplashAd onNonAd");
  7.         MainActivity.a(MainActivity.this, true);
  8.         AppstartRenderTime.getInstance().putTimeOne();
  9.         AppstartRenderTime.getInstance().setIsHasAD(false);
  10.         AppStartFactory.getAppStartManager(MainActivity.this.getApplicationContext()).setAppInitStatuts(2);
  11.         ThreadPoolUtils.execute(new Runnable()
  12.         {
  13.           public void run()
  14.           {
  15.             PluginLoader.loadDexPlugin("mediaplayer");
  16.           }
  17.         });
  18.         MainActivity.this.runOnUiThread(new Runnable()
  19.         {
  20.           public void run()
  21.           {
  22.             MainActivity.a(MainActivity.this);
  23.           }
  24.         });
  25.         bool = false;
  26.       }
复制代码
发现亮点没有,咱们可以伪装requestSplashAd onNonAd 条件,让他直接通过:
.method public onTadReceived(Lcom/tencent/tads/main/ITadWrapper;)Z
    .locals 6

    .prologue
    const/4 v1, 0x0

    const/4 v0, 0x1

    .line 167
    if-eqz v1, :cond_0  #修改变量为v1 if-eqz:为等于0就跳转到:cond_0,:cond_0 就是跳过闪屏广告的代码逻辑  

    invoke-interface {p1}, Lcom/tencent/tads/main/ITadWrapper;->isEmpty()Z

    move-result v2

    if-eqz v2, :cond_1

    .line 169
    :cond_0
    const-string/jumbo v2, "MainActivity"

    const-string/jumbo v3, "requestSplashAd onNonAd"

待机广告也是差不多这个逻辑修改,全局搜索requestSplashAd onNonAd
在ScreenSaverActivity里边同样这么修改:
.method public onTadReceived(Lcom/tencent/tads/main/ITadWrapper;)Z
    .locals 10

    .prologue
    const/4 v8, 0x1

    const/4 v0, 0x0

    const/4 v3, 0x0

    .line 88
    if-eqz v3, :cond_0 #直接跳去:cond_0 代码段

    invoke-interface {p1}, Lcom/tencent/tads/main/ITadWrapper;->isEmpty()Z

    move-result v1

    if-eqz v1, :cond_1

    .line 90
    :cond_0
    const-string/jumbo v1, "ScreenSaverActivity"

    const-string/jumbo v2, "hsjkey requestSplashAd onNonAd"

去横幅广告处理:
横幅广告使用Android studio 的layout inpector 层级查看器,得到关键字Banner
使用apkIDE全局搜索Banner,当然会出很多代码,要一步步寻找有用的信息,终于找到一个关键代码点:
.line 211
    const-string/jumbo v0, "show_detail_banner_ad"

    const-string/jumbo v1, ""

    invoke-static {v0, v1}, Lcom/tencent/qqlivetv/model/advertisement/ADProxy;->notifyADShow(Ljava/lang/String;Ljava/lang/String;)V

    goto :goto_1

notifyADShow:通知广告的展示,而且还是静态方法,那我们就可以全局把这个代码 invoke-static {v0, v1}, Lcom/tencent/qqlivetv/model/advertisement/ADProxy;->notifyADShow(Ljava/lang/String;Ljava/lang/String;)V 替换为空,至此横幅广告成功屏蔽


成品下载地址:
云视听去广告版(下载次数:0, 售价: 1消费券, 下载记录)

这位网友懒得可以,居然没有设置签名
回复

使用道具 举报

已有(1)人评论

123456790 发表于 2021-3-17 11:27:13
我去搭建试试
我要说一句 收起回复
B Color Smilies
还可输入 200 个字符
回复

使用道具 举报

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

本版积分规则

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