Android 破解视频App去除广告功能详解及解决办法总结

Android 破解视频App去除广告功能

作为一个屌丝程序猿也有追剧的时候,但是当打开视频app的时候,那些超长的广告已经让我这个屌丝无法忍受了,作为一个程序猿看视频还要出现广告那就是打我脸,但是我有没有钱买会员,只能靠着毕生技能去耍耍去除广告了。下面就来介绍一下如何进行视频广告的去除。

一、视频广告播放原理

首先我们需要了解的一个基本知识点那就是广告其实也是一段视频,那么他肯定有请求地址和播放地址。那么我们的思路就来了,如果能够得到这些地址的话,我们就可以去除广告了,为什么呢?因为我们知道所有的网络请求最终会走系统的hosts文件,在这个文件中记录了很多ip地址和域名的映射关系,系统的每一次网络请求都会先去查找系统的hosts文件,如果发现请求的域名在这里有,就是用域名对应的ip地址进行访问了,所以可以看到hosts文件其实相当于本地的一个简单的DNS功能文件。如果我们有了视频广告请求地址,那么就可以修改hosts文件,将广告请求地址的域名映射成本机地址127.0.0.1,那么这样就肯定会出现广告请求错误,本地播放广告错误,就会直接跳过广告了。当然具体的方式有三种:

第一种方式:设备root之后,修改设备的hosts文件

缺点:设备需要root

优点:一次修改,终身受用,一机在手,天下我有!

第二种方式:设备无root,可以设置电脑作为代理,修改电脑的hosts文件

缺点:设备播放视频必须依赖于电脑代理,不方便

优点:无需进行设备root

第三种方式:修改路由器过滤规则,添加地址屏蔽规则

缺点:设备播放视频必须依赖于路由器的局域网内,不方便

优点:无需进行设备root

但是这种方式可以受益多人使用,一般这种方式用于家庭的局域网内,这样一家人看视频都没有广告了。

二、破解app获取广告域名

上面分析了技术原理,那么下面就要来开始破解了,因为看到上面的原理之后发现最关键的就是如何得到视频广告的地址?在我所知道的就这么几种方式:

第一种:使用抓包工具进行抓包

这种方式难度在于要分析每个地址的请求信息

第二种:破解具体视频app

这种方式成本过大,耗时很久

第三种:从市场中找一个可以过滤广告的app进行破解

这种方式是最方便的,也是最靠谱的。

下面咋们去市场搜一下视频广告过滤的app,结果搜到了一个app名为:净网大师

Android 破解视频App去除广告功能详解及解决办法总结

下面在来分析一下,这个app的去除广告原理:

当有了视频广告的播放地址,方式还是很多的,一种是设备root之后修改hosts文件或者是拦截网络请求进行过滤,一种是非root设备采用VPNService功能进行网络请求拦截

从他的界面看来他是用了第二种方式,而对于Android中VPN开发不熟的同学可以自己去网上搜一些资料,就是注册一个VPNService,然后获取到系统的VPN权限,然后设备的网络请求都会通过这个Service,只要在这个Service中做处理就可以了。那么这个app中肯定有一个过滤库用来存放市面上所有视频播放的广告地址,这也是我们破解的入口。那么下面就来进行破解操作了。

首先还是使用apktool工具进行反编译,幸运的是他没有做应用加固,反编译很顺利。不过这里最好使用一个jadx工具,他是一个可视化反编译工具,比较方便,查看他的AndroidManifest.xml文件,找到VPNService声明:

Android 破解视频App去除广告功能详解及解决办法总结

然后去查看VPNRouterService类实现:

Android 破解视频App去除广告功能详解及解决办法总结

然后可以全局搜一下Builder这个名称,因为构建VPN必须使用到这个类:

Android 破解视频App去除广告功能详解及解决办法总结

这段代码就是开始构建VPNService了。下面继续深入跟进,最终到了run方法中:

Android 破解视频App去除广告功能详解及解决办法总结

然后在看一下startTunnel方法:

Android 破解视频App去除广告功能详解及解决办法总结

好了,这是一个native方法,下面继续来分析so文件了:

Android 破解视频App去除广告功能详解及解决办法总结

使用IDA工具打开,查看这个so文件内容:

Android 破解视频App去除广告功能详解及解决办法总结

发现这个方法中做了一些初始化工作,那么猜想视频广告地址应该是保存在一个加密的文件中,而且最有可能是一个数据库文件,同时这个过滤地址可以支持服务端更新,因为现在视频广告地址发生了改变了,这个app也是需要感知的。可以看到的确有一个入口可以更新过滤规则:

Android 破解视频App去除广告功能详解及解决办法总结

通过上面的代码可以分析到过滤规则文件加密了,那么可以进入这个加密方法中看看,这里使用IDA的F5功能键得到汇编对应的C代码:

Android 破解视频App去除广告功能详解及解决办法总结

这里就可以清晰的看到了,在这个应用的沙盒中有一个txt文件,这个文件中保存了数据库文件的路径:

Android 破解视频App去除广告功能详解及解决办法总结

然后我们把这个文件导出来,记得他为了掩人耳目,把db后缀名删了,我们需要手动的加上后缀名:v_0.0.32.db文件,可惜的是打开文件之后发现报错:

Android 破解视频App去除广告功能详解及解决办法总结

因为这个数据库文件是加密的,加密算法是AES:

Android 破解视频App去除广告功能详解及解决办法总结

看到这里,我们可能想到了,需要动态调试so得到这个加密的密码了,但是这里不这么干,因为我很懒,动态调试感觉老费劲了,所以就发现了一个捷径,我的思路是这样的:

前面分析了这个app过滤广告的原理是借助于VPN进行拦截请求,那么拦截到请求得到指定域名肯定是去和过滤规则进行比较判断的,因为这些规则是放在数据库中的,所以不可能每次都是去查询数据库中的记录进行比较,这样效率会很低下的,所以这里在想他为了提高效率,应该做了一个缓存池用来存放命中的域名地址。那么就好办了,如果做了缓存池的话,域名地址就是一些字符串值了,从另一方面在本地他应该也有默认的一些字符串地址,防止更新过滤规则失败作为备用的,从这两方面可以知道应该本地有一些广告域名字符串内容。

在IDA中我们可以使用Shift+F12查看一个so文件中的字符串值:

Android 破解视频App去除广告功能详解及解决办法总结

我们可以看到这里有很多字符串的值,可以往下查看,我们关注的内容是域名字符串,那么域名字符串的值有一个特点就是以.com结尾的,所以我们可以这么干,把这些内容复制出来放到一个txt文件中:

Android 破解视频App去除广告功能详解及解决办法总结

然后写一个简单的程序进行过了即可,忘记了Python脚本了,只能靠着老本行的Java语言写了:

Android 破解视频App去除广告功能详解及解决办法总结

代码很简单的,就是读取每一行内容,然后进行字符串过滤,得到域名,因为后面我们得到这个域名之后也是要添加到hosts文件中,所以就直接在这里构造一个ip地址和域名的映射关系了。运行程序之后,生成的文件内容如下:

Android 破解视频App去除广告功能详解及解决办法总结

感觉有点像是各家视频广告请求的域名地址了。

三、修改hosts文件进行验证

那么到这里我们就通过静态方式破解了净网大师得到了市面上视频app播放广告的域名地址了,下面就赶紧操作一下看看效果,这里为了方便,手上正好有一个root的手机,所以直接把上面生成的规则加到设备的hosts文件中,Android中的hosts文件存放的目录是在根目录下的  /etc/hosts

Android 破解视频App去除广告功能详解及解决办法总结

然后咋们添加成功之后,就立马来体验一下,这里选择了爱奇艺和腾讯视频作为案例操作一下:

首先来看一下爱奇艺的广告过滤效果:

Android 破解视频App去除广告功能详解及解决办法总结

看到了,这里点了两个热门视频都是没有广告的,再来看一下腾讯视频:

Android 破解视频App去除广告功能详解及解决办法总结

看到啦,也是没有广告了,看来是成功了,还有其他视频app,感情去的同学可以自己去尝试了。这里就不在演示了。

说明:

有的同学会好奇,既然这个app可以做到过滤广告,那还破解干嘛,直接用就可以了呀,其实这么想就是对程序猿的侮辱,其次是这个app使用了vpn功能,怎么说了,个人对这个功能和app并不怎么放心,感觉设备的所有网络请求都能被他拦截到是件多么恐怖的事,最重要的一点是,本文使用了root设备之后修改hosts文件实现的,如果哪天想通过修改路由器中添加规则,电脑挂代理方式操作那不就扯淡了,你都没有域名怎么办,所以不管怎么样都得破解这个app得到最终的域名,这样才保险,后续自己想怎么搞就怎么搞!

四、知识总结和回顾

到这里我们就完美的过滤了市面上所有视频app的广告逻辑了,在整个过程中我们可以看到有大部分的猜想,有了猜想然后才去进行实践逻辑的,所以说在逆向领域有时候需要丰富的经验,有时候也要敢大胆的猜想。下面来总结一下我们的操作流程:

第一步:了解现阶段视频广告播放的原理

现在移动端app的广告播放原理都是将广告短片和视频内容分开的,那么广告短片应该也是在线请求一个播放地址,如果要是能够得到这个播放地址就可以完成剔除工作。

第二步:有了广告域名如何进行广告过滤

这个需要了解系统在请求网络的时候的原理,其实是先去找本机的hosts文件,看看请求的域名有没有对应的ip地址,如果有就直接使用ip地址作为请求地址了,那么这里的思路就是可以修改hosts文件来做到广告域名请求的拦截工作,也就是在hosts文件中添加广告请求域名的映射关系,把域名指向本地ip地址:127.0.0.1即可

第三步:如何获取视频广告的请求域名

其实这里有多种方式:一种是进行网络抓包,一种是通过破解视频app,一种是借助其他家app。而本文中就是借助了第三方app叫做净网大师来获取到的域名,这时候就需要进行破解净网大师app了,而这个就是本文的一个重点。在破解的过程中我们一部分借助的是逆向经验一部分是借助的大胆猜想,比如猜想他域名肯定会在本地有一个字符串池保存,这个是本次破解的关键步骤。

第四步:有了域名如何进行过滤广告

这里因为前面了解了系统请求的原理,那么就可以有三种方式:一种是修改设备的hosts文件,前提是设备需要进行root;一种是通过挂代理,修改代理机器的hosts文件;一种是修改路由器的过滤规则;这三种方式各有优缺点。

严重声明:本文介绍的知识点完全是从一个技术分享角度出发,绝非用于任何商业活动和用途,如果涉及到任何法律问题将由操作者本人负责。本文作者将不负责任何法律责任!也请各位同学秉着技术角度出发的原则,切勿用于商业中!

视频App如何规避这种操作:作为视频App广告是其生存之本,所以对于这种操作的用户,因为自己也要做一些防护策略,可以本地启动一个后台服务,通过ping命令来检测当前广告域名对应的ip地址,如果发现不是自己域名对应的ip地址,那么就不让其看视频内容,但是这种方式是不是可行还有待验证!

六、总结

本文主要介绍的内容还是破解相关的知识点,而本文在破解的过程中用到了大量的猜想,然后通过实践去证明猜想,有时候多一些猜想也会让破解过程变得更加便捷,同时通过本文之后,小编以后看视频在也不用看广告了。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

时间: 2016-12-06

Js右下角视频广告代码(百度视窗)

右下角视窗 请看窗口右下角 var BD_HY_VIDEOAD={};(function(){var F={videoId:"BD_HY_VIDEOAD_"+new Date().getTime().toString().substring(5,13),bgFlashShow:0,bdLogoShow:"true",bdSmallShow:"true",bdLogo:"http://eiv.baidu.com/mapm2/0306vid

在视频前插入广告

1.加入背景图片      <TD align=middle width=329                  background="IMAGES/vod_05.jpg"> <OBJECT id=NSPlay                    codeBase=http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701            

C++实现优酷土豆去视频广告的方法

本文实例讲述了C++实现优酷土豆去视频广告的方法.分享给大家供大家参考.具体分析如下: 之前写的一个工具,好不好用我不知道,我自己用着挺好,编译环境VC6.0,原理是改HOST文件,不过还改了其他地方,可以看看源码,暂时支持XP,WIN7没写,代码可能有些乱,有兴趣的朋友可以自己改改. // guanggaoDlg.cpp : implementation file WIN32_FIND_DATA FindFileData; void CGuanggaoDlg::OnButton1() { //

页面中加载优酷视频去掉广告的方法

1.优酷视频去广告代码: <embed src=" http://static.youku.com/v1.0.0149/v/swf/qplayer_rtmp.swf?VideoIDS=你的视频ID&winType=adshow&isAutoPlay=true" quality="high" width="宽度" height="高度" align="middle" type="

文章中优酷视频全屏及去除广告在线转换

近来翻看很多朋友的BLOG,都发现很多好看的优酷视频不能全屏,或一点全屏又跳到官方网了,结果又要重新缓冲. 于是就找了一些资料拼了一个在线转换的出来.(不算是插件,算是一个辅助工具吧) 我分别添加了两个相同的视频,一个是没有修改过的视频,不能全屏.一个是修改过的视频,可以全屏. 具体大家对比一下.转换器和下载都在两个视频的下面,大家可以试一下. (注:这个转换器是用php,UTF-8写的,不同编码的朋友可以转换一下,出现乱码不负责任) 加优酷视频请用FCKeditor模式.再把转换好的地址复出去

layer弹出层中H5播放器全屏出错的解决方法

1. 在layer弹窗组件中 如果使用了flash播放器,全屏是正常的 但若使用了HTML5的播放器,全屏失效 举个栗子 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script src="http://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.js

Android 使用Vitamio打造自己的万能播放器(5)——在线播放(播放优酷视频)

 前言 为了保证每周一篇的进度,又由于Vitamio新版本没有发布, 决定推迟本地播放的一些功能(截图.视频时间.尺寸等),跳过直接写在线播放部分的章节.从Vitamio的介绍可以看得出,其支持http.m3u8等多种网络协议,本章将编写播放优酷视频的例子. 系列 1.Android使用Vitamio打造自己的万能播放器(1)--准备 2.Android使用Vitamio打造自己的Android万能播放器(2)-- 手势控制亮度.音量.缩放 3.Android使用Vitamio打造自己的Andr

JavaScript使用DeviceOne开发实战(四)仿优酷视频应用

大家没有进行开发之前首先需要考虑系统的差异性,比如说IOS手机有没有回退键,所以在开发时一定要考虑二级解密需要有回退键,否则ios的手机就会陷入到这个页面回不去. 安卓系统有回退键,针对这个情况需要要求用户在3秒钟之内连续按回退键两次才退出系统,以此防止用户误按回退键,具体代码实现如下: [mw_shl_code=javascript,true]page.on("back", function(){ if (canBack) { global.exit(); } else { nf.t

Android如何让WebView中的HTML5页面实现视频全屏播放

前言 本文主要是将最近工作中遇到的一个问题进行总结分享,主要介绍的是如何让WebView中H5页面全屏播放视频.关于这个问题,做一下简单分析,希望对大家有所帮助,下面话不多说了,来看看详细的介绍吧. 效果图 运行效果 其实很简单,就是配置问题.关键地方配好了,基本没什么问题了. 硬件加速 设置WebView 在清单需要配置的AndroidManifest.xml <application android:allowBackup="true" android:icon="

iOS程序开发中设置UITableView的全屏分隔线的方法(不画线)

ableView是app开发中常用到的控件,功能很强大,多用于数据的显示.下面给大家介绍设置UITableView的全屏分隔线的两种方法. 具体详情如下所示: 如图 添加如下代码 sTableView.separatorInset = UIEdgeInsetsZero; sTableView.layoutMargins = UIEdgeInsetsZero; cell.layoutMargins = UIEdgeInsetsZero; 第二种方法如下图 -(void)viewDidLayoutS

C#中让控件全屏显示的实现代码(WinForm)

1.使用winapi "SetParent" 接口: 复制代码 代码如下: [DllImport("user32.dll", SetLastError = true)] static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent); 复制代码 代码如下: control.Dock = DockStyle.None; control.Left = 0; control.Top = 0; c

java实现优酷视频地址解析示例代码分享

举个例子比较好理解,比如我现在要下http://v.youku.com/v_show/id_XNDM2Mjc0MzAw.html这个视频.这里我们要获得的是视频的id,就是XNDM2Mjc0MzAw这部分,这是一个视频唯一的,所以在解析的时候肯定会用到. 为了能看清楚youku视频的播放过程,可以使用火狐的插件firebug对网页进行跟踪,如下图. 可以看到有很多GET,我们要找的应该是以这个id作为参数的GET,在下面我们可以找到这个链接http://v.youku.com/player/ge

java获取优酷视频地址示例

复制代码 代码如下: import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.URL;import java.util.regex.Matcher;import java.util.regex.Pattern; import net.sf.json.JSONArray;import net.sf.json.JSONException;import net.sf.json.JSONObject;