Android中静态方式破解某App实现所有视频app去除广告功能

Android技术篇 尼古拉斯.赵四 23371℃ 0评论

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

一、视频广告播放原理

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

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

缺点:设备需要root

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

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

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

优点:无需进行设备root

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

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

优点:无需进行设备root

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

 

二、破解app获取广告域名

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

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

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

第二种:破解具体视频app

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

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

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

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

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

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

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

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

然后去查看VPNRouterService类实现:

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

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

然后在看一下startTunnel方法:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

三、修改hosts文件进行验证

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

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

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

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

看到啦,也是没有广告了,看来是成功了,还有其他视频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地址,那么就不让其看视频内容,但是这种方式是不是可行还有待验证!

 

五、总结

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

《Android应用安全防护和逆向分析》

点击立即购买:京东  天猫

更多内容:点击这里

关注微信公众号,最新技术干货实时推送

转载请注明:尼古拉斯.赵四 » Android中静态方式破解某App实现所有视频app去除广告功能

喜欢 (19)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(3)个小伙伴在吐槽
  1. 嘿嘿 今天闲来无事,玩玩这个, but:新版的净网大师已加固;java不熟练,用python写了一个过滤脚本 f = open(r"D:\temp.txt",'r') w = open(r"D:\result.txt",'w+') content = f.readlines() for line in content: laststr = line.rstrip().split(' ')[-1] if laststr.split('.')[-1] == "com": w.write("127.0.0.1 " + laststr + "\n") f.close() w.close() 几行搞定,渣渣大爱python,嘻嘻~ But 然而 依然有广告 重启也没用 😮
    lucy2016-10-27 13:47 回复
  2. 腾讯视频成功了!!!爱奇艺没用过滤掉,是不是爱奇艺的广告播放模式改变了???
    lucy2016-10-27 14:44 回复
  3. 思路不错,学习了。逆向除了经验 天马行空的猜想确实也很重要
    笨笨2016-11-02 07:50 回复