申请会员ID:link168【申请通过】
1、申 请 I D:link1682、个人邮箱:
3、原创技术文章:电视盒子云视听极光(腾讯tv)播放视频广告去除
本文是原创,非论坛热门文章:原创破解:电视盒子 云视听极光前庭广告的手工去除 的模仿,因为这篇文章是对最新版云视听极光apk里面每次播放视频时候的一分多钟广告的去除
首先去网上下载最新版的云视听极光tv版sdk(我下载的版本是:ApkIDE_tv_video_3.3.0.1056_android_15000)
使用网易mumu模拟器运行,点击视频,可以看到每次播放视频的广告:
分析工具:
Android studio 里面提供的工具:logcat(用来查看app运行过程log信息)layout inspector(用来查看app运行过程中当前view的层次信息)
apkIDE(我用的是ApkIDE最新3.5.0少月增强版)
分析过程:
首先打开apkide,反编译apk
开始分析的切入点很关键,我使用layout inspector 分析广告的页面,作为切入点:
发现一个关键点:
tvk_playerVideoView这个关键字,使用apkIDE全局搜索这个关键字
然后使用apkIDE提供的源码查看器java decompiler 对全局搜索出来的smali文件分析源代码
发现亮点了:onPreAdPrepared,但是除了这个关键字没有其他可以下手的地方,于是继续以onPreAdPrepared关键字搜索
对搜索出来的smali对应的源码一一查看,这个过程需要比较耐心
终于发现了一个亮点:
分析出现了曙光,skipad和notifStateChange"adPlay" 是多么有价值的关键字啊,skip英文单词跳过的意思 ad一般是广告的缩写,于是我们在这里做做问问
这个时候,就需要一点smali的语法基础了,因为我们要修改这部分的代码
把这个代码
变成:
然后使用apkide提供的编译功能,重新编译apk,去模拟器测试,发现完美去掉了播放中的视频
附录修改后的apk分享:链接: https://pan.baidu.com/s/16nf5aTxfYEhZKFKj_eXI-g 密码: 7vui 过程有些简单,再提供更多技术分析吧。 分析过程确实略简单些,不过分析破解关键点确实是这个,关键切入点onPreAdPrepared ,skipad ,notifStateChange"adPlay"一切都会豁然开。这也是软件破解的魅力所在,无论分析过程多么复杂,找准关键点后,也就改那么几句代码就能完美绕过
这里分享一下,研究过程中几个错误的切入点
一,开始的思路是:既然app设置了vip免广告,那就从改用户vip属性入手,使用了apkIDE全局搜索“vip”关键字,改了一系列强制让 isVip() 的函数返回 true,结果还是不行
二,尝试采用抓包,使用青花瓷抓包一系列的url,分析里边数据后发现没有ad等广告关键字,而且包内的url等信息是加过密的,无法确认那些url是广告,也没法hook
三,全局搜索“ad”关键字,这个反过来看其实是有效的,但是包含的ad的关键字非常多,分析起来也非常耗时
最后才想到使用Android studio的layout inspector 分析当前运行view的层次寻找突破口,才最终发现onPreAdPrepared关键字,然后一步步分析才找到skipad最终解决问题
游客 183.48.32.x 发表于 2018-5-22 18:31
分析过程确实略简单些,不过分析破解关键点确实是这个,关键切入点onPreAdPrepared ,skipad ,notifStateC ...
还是太少了,你可以提供其他程序分析,来些技术含量更高的内容。 既然这样,那我就对腾讯视频tv版来个全广告去升级纯净版
云视听极光的广告共有三部分,播放视频时的广告,开启app的广告,待机广告以及横幅广告
去掉开启广告和待机广告:
首先我们打开AndroidManifest.xml文件
<activity android:configChanges="orientation|screenSize" android:label="@string/app_name" android:name="com.ktcp.video.activity.MainActivity" android:screenOrientation="landscape" android:theme="@style/AppStartTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.MONKEY"/>
<category android:name="android.intent.category.LAUNCHER"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<intent-filter>
<action android:name="com.tencent.qqlivetv.open.splash"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
可以看到com.ktcp.video.activity.MainActivity 是最先启动的activity,我们去这个activity对它反编译看看里边的逻辑
里边有代码: SplashManager.getInstance().showSplash(new SplashManager.OnSplashShowCallback()
Splash很多时候代表是闪屏广告,我们可以从这里入手
不过直接屏蔽SplashManager.getInstance().showSplash 是不行的,这样太暴力了,容易程序崩溃,我们要本着最小化修改达到完美修改的目的
继续往下看:
public boolean onTadReceived(ITadWrapper paramITadWrapper)
{
boolean bool = true;
if ((paramITadWrapper == null) || (paramITadWrapper.isEmpty()))
{
TVCommonLog.i("MainActivity", "requestSplashAd onNonAd");
MainActivity.a(MainActivity.this, true);
AppstartRenderTime.getInstance().putTimeOne();
AppstartRenderTime.getInstance().setIsHasAD(false);
AppStartFactory.getAppStartManager(MainActivity.this.getApplicationContext()).setAppInitStatuts(2);
ThreadPoolUtils.execute(new Runnable()
{
public void run()
{
PluginLoader.loadDexPlugin("mediaplayer");
}
});
MainActivity.this.runOnUiThread(new Runnable()
{
public void run()
{
MainActivity.a(MainActivity.this);
}
});
bool = false;
}
发现亮点没有,咱们可以伪装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 替换为空,至此横幅广告成功屏蔽
去升级提示:
我找到对应的函数:
.method private checkForceUpgrade()V 和 startCheckVersion
都是void的函数,所以我这边就比较简单粗暴,在函数开头给了个
return-void
把这些修改的逻辑保存,使用apkIDE重新编译修改的smali,就得到一个纯净版的无广告无升级的腾讯视频tv版了
I D:link168
邮箱:
申请通过,欢迎光临吾爱破解论坛,期待吾爱破解有你更加精彩,ID和密码自己通过邮件密码找回功能修改,请即时登陆并修改密码!
登陆后请在一周内在此帖报道,否则将删除ID信息。
PS:过程还是有些简单,通过后期待你有更多分享吧,登录后把文章整理一下发到移动安全区。 感谢版主的通过,我整理好就发到移动安全区,另外麻烦版主把邮箱信息隐藏,谢谢啦 前来报到
页:
[1]