生死看淡,不服就干!
http://www.wjdiankong.cn
目录视图 摘要视图 订阅
微信小程序实战项目——点餐系统 程序员11月书讯,评论得书啦 Get IT技能知识库,50个领域一键直达
Android中静态方式破解某App实现所有视频app去除广告功能
2016-10-19 08:09 4629人阅读 评论(20) 收藏 举报
分类: 逆向之旅(15) Android(136)
版权声明:本文为博主原创文章,未经博主允许不得转载。
目录(?)[+]
作为一个屌丝程序猿也有追剧的时候,但是当打开视频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地址,那么就不让其看视频内容,但是这种方式是不是可行还有待验证!
六、总结
本文主要介绍的内容还是破解相关的知识点,而本文在破解的过程中用到了大量的猜想,然后通过实践去证明猜想,有时候多一些猜想也会让破解过程变得更加便捷,同时通过本文之后,小编以后看视频在也不用看广告了。
更多内容:点击这里
关注微信公众号,最新技术干货实时推送
顶
45
踩
0
上一篇Android系统篇之—-编写系统服务并且将其编译到系统源码中
下一篇能刷脸、识脸、变脸的「扫描仪」你 get 了吗?| X 次元口袋
我的同类文章
逆向之旅(15) Android(136)
•带你开发一款给Apk中自动注入代码工具icodetools(开凿篇)2016-11-29阅读3
•能刷脸、识脸、变脸的「扫描仪」你 get 了吗?| X 次元口袋2016-10-19阅读967
•Android中Xposed框架篇—利用Xposed框架实现拦截系统方法2016-10-21阅读5180
•Android逆向之旅—运行时修改内存中的Dalvik指令来改变代码逻辑2016-07-02阅读6095
•Android逆向之旅—反编译利器Apktool和Jadx源码分析以及错误纠正2016-06-14阅读8872
•Android”挂逼”修炼之行—微信摇骰子和猜拳作弊器原理解析2016-11-07阅读8517
•Android中Xposed框架篇—修改系统位置信息实现自身隐藏功能2016-10-30阅读23342
•Android中直播视频技术探究之—基础知识大纲介绍2016-07-10阅读11173
•Apk脱壳圣战之—脱掉“360加固”的壳2016-06-28阅读8481
•Android逆向之旅—动态方式破解apk进阶篇(IDA调试so源码)2016-05-26阅读10683
更多文章
参考知识库
img
Android知识库
25621关注|2155收录
img
Python知识库
15703关注|1243收录
img
微信开发知识库
14795关注|518收录
img
算法与数据结构知识库
10609关注|2284收录
img
Java EE知识库
11521关注|797收录
img
MySQL知识库
16046关注|1436收录
img
Java SE知识库
16710关注|480收录
img
Java 知识库
19351关注|1398收录
猜你在找
Android开发—广告植入【Android APP开发】Android高级商业布局快速实现Android App性能调优、内存泄露检测Android APP开发之真机调试环境实现Android 5.x顶级视频课程
解决iOS开发中App启动广告的功能分分钟解决iOS开发中App启动广告的功能iOS开发中App启动广告的功能android一步一步实现视频客户端app一Android app基于DownloadProvider实现下载管理功能
查看评论
19楼 HELLO_CSL 2016-11-14 16:52发表 [回复] 楼主境界很深啊。。
18楼 qq_35678553 2016-11-10 15:30发表 [回复] 厉害厉害,不过看楼主的博文好像都是这方面的内容
17楼 Mr_keyboard_Man 2016-10-28 16:44发表 [回复] 厉害了 word 哥
16楼 android无聊大神 2016-10-28 16:06发表 [回复] 厉害厉害
15楼 杰_boat 2016-10-28 15:05发表 [回复] 厉害了,我的哥
14楼 sinat_36537246 2016-10-28 01:00发表 [回复] 文章写的很不错,学习了
13楼 fang_chuan 2016-10-27 21:21发表 [回复] 我顶啊
12楼 风雪_fx 2016-10-27 15:44发表 [回复] 顶了 66666
11楼 zhzhaaa 2016-10-27 15:26发表 [回复] 很厉害!
10楼 SEU_Calvin 2016-10-27 15:03发表 [回复] 我想知道那个APP是怎么得到那些广告域名地址的呢。。
9楼 爱源码分享 2016-10-27 12:44发表 [回复] 感谢分享。。
8楼 马北剑西 2016-10-27 11:21发表 [回复] 周末试试
7楼 xguijin 2016-10-27 11:13发表 [回复] 非常不错,思路写得很清楚。赞~
但是,有的(比如PC端的)绿色视频广告去除软件会直接把广告域名告诉你,这不就直接得到广告域名了么。还去破解APP是不是也挺费劲哈哈~
6楼 姜沐沐 2016-10-25 17:35发表 [回复] 原来是用了你写的那个java程序过滤的时候,把土豆的丢了,哈哈,不知道为啥~~
5楼 姜沐沐 2016-10-25 17:27发表 [回复] 但是土豆还是不能用,没有土豆的域名,还有啥招吗大神??Re: 康康ing 2016-10-28 16:55发表 [回复] 回复u010638180:q请问你你是怎样获取到域名的呢,我不会反编译哎
4楼 HHcoco 2016-10-19 14:08发表 [回复] 强势顶你
3楼 西湖猪 2016-10-19 09:56发表 [回复] 不错
2楼 clearMarkCC 2016-10-19 09:35发表 [回复] 很强势 感觉学到了
1楼 白完江 2016-10-19 08:56发表 [回复] 技术干货!顶一个。
发表评论
用 户 名:
zzytmxk
评论内容:
插入代码
提交
* 以上用户言论只代表其个人观点,不代表优快云网站的观点或立场
核心技术类目
全部主题 Hadoop AWS 移动游戏 Java Android iOS Swift 智能硬件 Docker OpenStack VPN Spark ERP IE10 Eclipse CRM JavaScript 数据库 Ubuntu NFC WAP jQuery BI HTML5 Spring Apache .NET API HTML SDK IIS Fedora XML LBS Unity Splashtop UML components Windows Mobile Rails QEMU KDE Cassandra CloudStack FTC coremail OPhone CouchBase 云计算 iOS6 Rackspace Web App SpringSide Maemo Compuware 大数据 aptech Perl Tornado Ruby Hibernate ThinkPHP HBase Pure Solr Angular Cloud Foundry Redis Scala Django Bootstrap
技术分享公众号
扫一扫关注
关注公众号留言可咨询问题和技术交流,推送最新技术文章!
编码美丽群聊组织
扫一扫加小编微信
添加时请注明:编码美丽,否则不予通过!
天真无谐
我的第一个App:
天真无谐
已经上线了,在各大市场都可以搜索到。希望大家多多支持!!
点击查看详情
个人资料
访问我的空间
尼古拉斯_赵四
6 1
访问:2951786次
积分:23687
等级:
排名:第211名
原创:229篇转载:2篇译文:0篇评论:16993条
文章搜索
搜索
博客专栏
移动安全与逆向
文章:25篇
阅读:232636
算法和数据结构
文章:0篇
阅读:0
Java总结
文章:23篇
阅读:195080
iOS学习总结
文章:25篇
阅读:336993
JavaWeb技术总结
文章:30篇
阅读:253147
Android技术
文章:64篇
阅读:830776
文章分类
Android(137)
Java(35)
JavaWeb(31)
IOS(29)
逆向之旅(16)
文章存档
2016年11月(4)
2016年10月(8)
2016年09月(7)
2016年08月(8)
2016年07月(5)
展开
阅读排行
Mac上的抓包工具Charles(197259)
Android中的onActivityResult和setResult方法的使用(82321)
抓包工具Fidder详解(主要来抓取Android中app的请求)(64480)
Android中运行的错误:java.lang.UnsatisfiedLinkError: Couldn’t load locSDK3: findLibrary returned null.(58501)
Android中的动态加载机制(51423)
Window 通过cmd查看端口占用、相应进程、杀死进程等的命令(49267)
Android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据(41658)
Android中微信抢红包插件原理解析和开发实现(39723)
Android中的Apk的加固(加壳)原理解析和实现(36883)
Android中dp,px,sp概念梳理以及如何做到屏幕适配(36230)
评论排行
Android工作两年之后的第一个App–天真无谐(145)
Android中的Apk的加固(加壳)原理解析和实现(49)
Android中的动态加载机制(36)
编译Android系统源码和内核源码(33)
Android”挂逼”修炼之行—微信摇骰子和猜拳作弊器原理解析(30)
Android中实现静态的默认安装和卸载应用(29)
Android逆向之旅—静态方式破解微信获取聊天记录和通讯录信息(29)
Mac上的抓包工具Charles(28)
Android中插件开发篇之—-动态加载Activity(免安装运行程序)(27)
Android中可以做的两件坏事—破解锁屏密码和获取Wifi密码(23)
推荐文章
* RxJava详解,由浅入深
* 倍升工作效率的小策略
* Android热修复框架AndFix原理解析及使用
* “区块链”究竟是什么鬼
* 架构设计:系统存储-MySQL主从方案业务连接透明化(中)
我是尼古拉斯.赵四,正在参加2016年博客之星评选,希望你能投我一票。
公司简介|招贤纳士|广告服务|联系方式|版权声明|法律顾问|问题报告|合作伙伴|论坛反馈
网站客服杂志客服微博客服webmaster@youkuaiyun.com400-600-2320|北京创新乐知信息技术有限公司 版权所有|江苏知之为计算机有限公司|江苏乐知网络技术有限公司
京 ICP 证 09002463 号|Copyright © 1999-2016, youkuaiyun.com, All Rights Reserved GongshangLogo