乐安全内嵌广告屏蔽原理
一、原理
分析完了手机毒霸去广告功能的原理,接下来我们来看看“乐安全”是如何去内嵌广告的。对手机毒霸去广告功能感兴趣的读者可以看一下我们之前发的三篇技术博客:
手机毒霸去广告功能分析一:总体分析
http://blog.sina.com.cn/s/blog_be6dacae01018hjg.html
手机毒霸去广告功能分析二:广告View的识别
http://blog.sina.com.cn/s/blog_be6dacae01018lfb.html
手机毒霸去广告功能分析三:java代码(dex)注入
http://blog.sina.com.cn/s/blog_be6dacae01018pz2.html
好,言归正传。乐安全的去内嵌广告功能非常强大(如图)。
整个去内嵌广告功能就一个开关,“一键拦截全部应用内嵌广告”。要使用这个功能必须首先获得root权限。一开始笔者以为乐安全和手机毒霸的原理差不多,也是通过进程注入广告应用进程,然后将广告View隐藏来实现的。可是当笔者将广告应用进程的/proc/xxxx/maps打开一看,发现乐安全并没有注入它。于是对乐安全进行了逆向工程分析,发现乐安全原来是这么实现的。
首先,在介绍实现原理之前,你必须要知道/etc/hosts这个文件。这个文件里存放的就是本地域名解析规则,也就是说如果本机要访问某个域名,首先会到这个文件里查找,有没有这个域名对应的IP地址,如果有直接就访问这个IP地址了,如果没有才会去向DNS服务器发出域名解析请求。
其次,绝大多数广告的实现,都是后台从网络服务器上下载广告资源,然后再在本机显示。这个下载过程就必须要涉及到域名解析过程。如果在域名解析阶段,返回错误的IP地址,那么广告资源也就无法下载了。这样也就达到了屏蔽广告的目的。
最后,乐安全就是按照这一原理,修改了系统的/etc/hosts文件。让广告域名都指向本机IP地址。这里列出这个文件的片段,让大家有一个更加直观的感受:
127.0.0.1 localhost
::1 localhost
127.0.0.1 banners.vivilatina.com
127.0.0.1 208.185.87.8.liveadvert.com
127.0.0.1 counter.bizland.com
127.0.0.1 t2.leadlander.com
127.0.0.1 line07.metriweb.be
127.0.0.1 adpop.theglobe.net
127.0.0.1 ad.bharatstudent.com
…
二、优劣势
这种实现方式有其优势:
1. 开发和实现成本低,只需要维护一个广告服务器的黑名单即可
2. 用户操作简单,就一个总开关,打开之后,整个系统都没有广告了(前提是黑名单足够全)。
3. 对原系统的影响小:内存占用少,性能损失小
也有其劣势:
1. 有些服务器既提供广告服务,又提供正常的其他服务,比如web服务。那么如果这个服务器的域名被加入黑名单,那么用户要访问这个服务器上的网站也就不可能了。如果这个服务器的域名没有被加入黑名单,那么来自这个服务器的广告又屏蔽不了。
2. 无法屏蔽非实时网络抓取的广告。有的广告插件显示的广告并不是实时从网络上抓取的,而是内嵌在应用内部,或者是之前从网络上抓取下来放到本地的(假设之前乐安全屏蔽广告功能尚未开启)。那么乐安全就无法屏蔽这类广告。
三、与手机毒霸比较
下面将手机毒霸和乐安全的广告屏蔽功能做一比较
|
实现方式 |
实现难易和维护成本 |
去广告颗粒度 |
事前还是事后 |
是否会影响正常上网 |
是否需要root |
卸载后是否有文件残留 |
乐安全 |
修改/etc/hosts防止广告资源下载 |
容易,维护成本低 |
粗颗粒度,一个开关控制整个系统是否屏蔽广告,简单粗暴 |
事前防御,广告资源无法到达手机。 |
可能会影响。如果用户本意就是就要通过浏览器访问黑名单中的域名。 |
需要 |
是。广告屏蔽打开时,卸载乐安全,/etc/hosts不会自动复原。所以拦截依然生效。 |
手机毒霸 |
进程注入,隐藏广告View |
困难,维护成本高 |
细颗粒度,可以分别屏蔽每个应用的广告 |
事后补救,广告资源已到手机,只是内容显示不出来。 |
基本不会。 |
需要 |
否。进程注入本身不会修改系统文件。 |
更多内容请关注 http://blog.sina.com.cn/u/3194858670 以及 sina微博@ 安卓安全小分队