Android 破解視頻App去除廣告功能詳解及解決辦法總結(jié)
Android 破解視頻App去除廣告功能
作為一個(gè)屌絲程序猿也有追劇的時(shí)候,但是當(dāng)打開(kāi)視頻app的時(shí)候,那些超長(zhǎng)的廣告已經(jīng)讓我這個(gè)屌絲無(wú)法忍受了,作為一個(gè)程序猿看視頻還要出現(xiàn)廣告那就是打我臉,但是我有沒(méi)有錢(qián)買(mǎi)會(huì)員,只能靠著畢生技能去耍耍去除廣告了。下面就來(lái)介紹一下如何進(jìn)行視頻廣告的去除。
一、視頻廣告播放原理
首先我們需要了解的一個(gè)基本知識(shí)點(diǎn)那就是廣告其實(shí)也是一段視頻,那么他肯定有請(qǐng)求地址和播放地址。那么我們的思路就來(lái)了,如果能夠得到這些地址的話,我們就可以去除廣告了,為什么呢?因?yàn)槲覀冎浪械木W(wǎng)絡(luò)請(qǐng)求最終會(huì)走系統(tǒng)的hosts文件,在這個(gè)文件中記錄了很多ip地址和域名的映射關(guān)系,系統(tǒng)的每一次網(wǎng)絡(luò)請(qǐng)求都會(huì)先去查找系統(tǒng)的hosts文件,如果發(fā)現(xiàn)請(qǐng)求的域名在這里有,就是用域名對(duì)應(yīng)的ip地址進(jìn)行訪問(wèn)了,所以可以看到hosts文件其實(shí)相當(dāng)于本地的一個(gè)簡(jiǎn)單的DNS功能文件。如果我們有了視頻廣告請(qǐng)求地址,那么就可以修改hosts文件,將廣告請(qǐng)求地址的域名映射成本機(jī)地址127.0.0.1,那么這樣就肯定會(huì)出現(xiàn)廣告請(qǐng)求錯(cuò)誤,本地播放廣告錯(cuò)誤,就會(huì)直接跳過(guò)廣告了。當(dāng)然具體的方式有三種:
第一種方式:設(shè)備root之后,修改設(shè)備的hosts文件
缺點(diǎn):設(shè)備需要root
優(yōu)點(diǎn):一次修改,終身受用,一機(jī)在手,天下我有!
第二種方式:設(shè)備無(wú)root,可以設(shè)置電腦作為代理,修改電腦的hosts文件
缺點(diǎn):設(shè)備播放視頻必須依賴(lài)于電腦代理,不方便
優(yōu)點(diǎn):無(wú)需進(jìn)行設(shè)備root
第三種方式:修改路由器過(guò)濾規(guī)則,添加地址屏蔽規(guī)則
缺點(diǎn):設(shè)備播放視頻必須依賴(lài)于路由器的局域網(wǎng)內(nèi),不方便
優(yōu)點(diǎn):無(wú)需進(jìn)行設(shè)備root
但是這種方式可以受益多人使用,一般這種方式用于家庭的局域網(wǎng)內(nèi),這樣一家人看視頻都沒(méi)有廣告了。
二、破解app獲取廣告域名
上面分析了技術(shù)原理,那么下面就要來(lái)開(kāi)始破解了,因?yàn)榭吹缴厦娴脑碇蟀l(fā)現(xiàn)最關(guān)鍵的就是如何得到視頻廣告的地址?在我所知道的就這么幾種方式:
第一種:使用抓包工具進(jìn)行抓包
這種方式難度在于要分析每個(gè)地址的請(qǐng)求信息
第二種:破解具體視頻app
這種方式成本過(guò)大,耗時(shí)很久
第三種:從市場(chǎng)中找一個(gè)可以過(guò)濾廣告的app進(jìn)行破解
這種方式是最方便的,也是最靠譜的。
下面咋們?nèi)ナ袌?chǎng)搜一下視頻廣告過(guò)濾的app,結(jié)果搜到了一個(gè)app名為:凈網(wǎng)大師
下面在來(lái)分析一下,這個(gè)app的去除廣告原理:
當(dāng)有了視頻廣告的播放地址,方式還是很多的,一種是設(shè)備root之后修改hosts文件或者是攔截網(wǎng)絡(luò)請(qǐng)求進(jìn)行過(guò)濾,一種是非root設(shè)備采用VPNService功能進(jìn)行網(wǎng)絡(luò)請(qǐng)求攔截。
從他的界面看來(lái)他是用了第二種方式,而對(duì)于Android中VPN開(kāi)發(fā)不熟的同學(xué)可以自己去網(wǎng)上搜一些資料,就是注冊(cè)一個(gè)VPNService,然后獲取到系統(tǒng)的VPN權(quán)限,然后設(shè)備的網(wǎng)絡(luò)請(qǐng)求都會(huì)通過(guò)這個(gè)Service,只要在這個(gè)Service中做處理就可以了。那么這個(gè)app中肯定有一個(gè)過(guò)濾庫(kù)用來(lái)存放市面上所有視頻播放的廣告地址,這也是我們破解的入口。那么下面就來(lái)進(jìn)行破解操作了。
首先還是使用apktool工具進(jìn)行反編譯,幸運(yùn)的是他沒(méi)有做應(yīng)用加固,反編譯很順利。不過(guò)這里最好使用一個(gè)jadx工具,他是一個(gè)可視化反編譯工具,比較方便,查看他的AndroidManifest.xml文件,找到VPNService聲明:
然后去查看VPNRouterService類(lèi)實(shí)現(xiàn):
然后可以全局搜一下Builder這個(gè)名稱(chēng),因?yàn)闃?gòu)建VPN必須使用到這個(gè)類(lèi):
這段代碼就是開(kāi)始構(gòu)建VPNService了。下面繼續(xù)深入跟進(jìn),最終到了run方法中:
然后在看一下startTunnel方法:
好了,這是一個(gè)native方法,下面繼續(xù)來(lái)分析so文件了:
使用IDA工具打開(kāi),查看這個(gè)so文件內(nèi)容:
發(fā)現(xiàn)這個(gè)方法中做了一些初始化工作,那么猜想視頻廣告地址應(yīng)該是保存在一個(gè)加密的文件中,而且最有可能是一個(gè)數(shù)據(jù)庫(kù)文件,同時(shí)這個(gè)過(guò)濾地址可以支持服務(wù)端更新,因?yàn)楝F(xiàn)在視頻廣告地址發(fā)生了改變了,這個(gè)app也是需要感知的。可以看到的確有一個(gè)入口可以更新過(guò)濾規(guī)則:
通過(guò)上面的代碼可以分析到過(guò)濾規(guī)則文件加密了,那么可以進(jìn)入這個(gè)加密方法中看看,這里使用IDA的F5功能鍵得到匯編對(duì)應(yīng)的C代碼:
這里就可以清晰的看到了,在這個(gè)應(yīng)用的沙盒中有一個(gè)txt文件,這個(gè)文件中保存了數(shù)據(jù)庫(kù)文件的路徑:
然后我們把這個(gè)文件導(dǎo)出來(lái),記得他為了掩人耳目,把db后綴名刪了,我們需要手動(dòng)的加上后綴名:v_0.0.32.db文件,可惜的是打開(kāi)文件之后發(fā)現(xiàn)報(bào)錯(cuò):
因?yàn)檫@個(gè)數(shù)據(jù)庫(kù)文件是加密的,加密算法是AES:
看到這里,我們可能想到了,需要?jiǎng)討B(tài)調(diào)試so得到這個(gè)加密的密碼了,但是這里不這么干,因?yàn)槲液軕?,?dòng)態(tài)調(diào)試感覺(jué)老費(fèi)勁了,所以就發(fā)現(xiàn)了一個(gè)捷徑,我的思路是這樣的:
前面分析了這個(gè)app過(guò)濾廣告的原理是借助于VPN進(jìn)行攔截請(qǐng)求,那么攔截到請(qǐng)求得到指定域名肯定是去和過(guò)濾規(guī)則進(jìn)行比較判斷的,因?yàn)檫@些規(guī)則是放在數(shù)據(jù)庫(kù)中的,所以不可能每次都是去查詢(xún)數(shù)據(jù)庫(kù)中的記錄進(jìn)行比較,這樣效率會(huì)很低下的,所以這里在想他為了提高效率,應(yīng)該做了一個(gè)緩存池用來(lái)存放命中的域名地址。那么就好辦了,如果做了緩存池的話,域名地址就是一些字符串值了,從另一方面在本地他應(yīng)該也有默認(rèn)的一些字符串地址,防止更新過(guò)濾規(guī)則失敗作為備用的,從這兩方面可以知道應(yīng)該本地有一些廣告域名字符串內(nèi)容。
在IDA中我們可以使用Shift+F12查看一個(gè)so文件中的字符串值:
我們可以看到這里有很多字符串的值,可以往下查看,我們關(guān)注的內(nèi)容是域名字符串,那么域名字符串的值有一個(gè)特點(diǎn)就是以.com結(jié)尾的,所以我們可以這么干,把這些內(nèi)容復(fù)制出來(lái)放到一個(gè)txt文件中:
然后寫(xiě)一個(gè)簡(jiǎn)單的程序進(jìn)行過(guò)了即可,忘記了Python腳本了,只能靠著老本行的Java語(yǔ)言寫(xiě)了:
代碼很簡(jiǎn)單的,就是讀取每一行內(nèi)容,然后進(jìn)行字符串過(guò)濾,得到域名,因?yàn)楹竺嫖覀兊玫竭@個(gè)域名之后也是要添加到hosts文件中,所以就直接在這里構(gòu)造一個(gè)ip地址和域名的映射關(guān)系了。運(yùn)行程序之后,生成的文件內(nèi)容如下:
感覺(jué)有點(diǎn)像是各家視頻廣告請(qǐng)求的域名地址了。
三、修改hosts文件進(jìn)行驗(yàn)證
那么到這里我們就通過(guò)靜態(tài)方式破解了凈網(wǎng)大師得到了市面上視頻app播放廣告的域名地址了,下面就趕緊操作一下看看效果,這里為了方便,手上正好有一個(gè)root的手機(jī),所以直接把上面生成的規(guī)則加到設(shè)備的hosts文件中,Android中的hosts文件存放的目錄是在根目錄下的 /etc/hosts
然后咋們添加成功之后,就立馬來(lái)體驗(yàn)一下,這里選擇了愛(ài)奇藝和騰訊視頻作為案例操作一下:
首先來(lái)看一下愛(ài)奇藝的廣告過(guò)濾效果:
看到了,這里點(diǎn)了兩個(gè)熱門(mén)視頻都是沒(méi)有廣告的,再來(lái)看一下騰訊視頻:
看到啦,也是沒(méi)有廣告了,看來(lái)是成功了,還有其他視頻app,感情去的同學(xué)可以自己去嘗試了。這里就不在演示了。
說(shuō)明:
有的同學(xué)會(huì)好奇,既然這個(gè)app可以做到過(guò)濾廣告,那還破解干嘛,直接用就可以了呀,其實(shí)這么想就是對(duì)程序猿的侮辱,其次是這個(gè)app使用了vpn功能,怎么說(shuō)了,個(gè)人對(duì)這個(gè)功能和app并不怎么放心,感覺(jué)設(shè)備的所有網(wǎng)絡(luò)請(qǐng)求都能被他攔截到是件多么恐怖的事,最重要的一點(diǎn)是,本文使用了root設(shè)備之后修改hosts文件實(shí)現(xiàn)的,如果哪天想通過(guò)修改路由器中添加規(guī)則,電腦掛代理方式操作那不就扯淡了,你都沒(méi)有域名怎么辦,所以不管怎么樣都得破解這個(gè)app得到最終的域名,這樣才保險(xiǎn),后續(xù)自己想怎么搞就怎么搞!
四、知識(shí)總結(jié)和回顧
到這里我們就完美的過(guò)濾了市面上所有視頻app的廣告邏輯了,在整個(gè)過(guò)程中我們可以看到有大部分的猜想,有了猜想然后才去進(jìn)行實(shí)踐邏輯的,所以說(shuō)在逆向領(lǐng)域有時(shí)候需要豐富的經(jīng)驗(yàn),有時(shí)候也要敢大膽的猜想。下面來(lái)總結(jié)一下我們的操作流程:
第一步:了解現(xiàn)階段視頻廣告播放的原理
現(xiàn)在移動(dòng)端app的廣告播放原理都是將廣告短片和視頻內(nèi)容分開(kāi)的,那么廣告短片應(yīng)該也是在線請(qǐng)求一個(gè)播放地址,如果要是能夠得到這個(gè)播放地址就可以完成剔除工作。
第二步:有了廣告域名如何進(jìn)行廣告過(guò)濾
這個(gè)需要了解系統(tǒng)在請(qǐng)求網(wǎng)絡(luò)的時(shí)候的原理,其實(shí)是先去找本機(jī)的hosts文件,看看請(qǐng)求的域名有沒(méi)有對(duì)應(yīng)的ip地址,如果有就直接使用ip地址作為請(qǐng)求地址了,那么這里的思路就是可以修改hosts文件來(lái)做到廣告域名請(qǐng)求的攔截工作,也就是在hosts文件中添加廣告請(qǐng)求域名的映射關(guān)系,把域名指向本地ip地址:127.0.0.1即可
第三步:如何獲取視頻廣告的請(qǐng)求域名
其實(shí)這里有多種方式:一種是進(jìn)行網(wǎng)絡(luò)抓包,一種是通過(guò)破解視頻app,一種是借助其他家app。而本文中就是借助了第三方app叫做凈網(wǎng)大師來(lái)獲取到的域名,這時(shí)候就需要進(jìn)行破解凈網(wǎng)大師app了,而這個(gè)就是本文的一個(gè)重點(diǎn)。在破解的過(guò)程中我們一部分借助的是逆向經(jīng)驗(yàn)一部分是借助的大膽猜想,比如猜想他域名肯定會(huì)在本地有一個(gè)字符串池保存,這個(gè)是本次破解的關(guān)鍵步驟。
第四步:有了域名如何進(jìn)行過(guò)濾廣告
這里因?yàn)榍懊媪私饬讼到y(tǒng)請(qǐng)求的原理,那么就可以有三種方式:一種是修改設(shè)備的hosts文件,前提是設(shè)備需要進(jìn)行root;一種是通過(guò)掛代理,修改代理機(jī)器的hosts文件;一種是修改路由器的過(guò)濾規(guī)則;這三種方式各有優(yōu)缺點(diǎn)。
嚴(yán)重聲明:本文介紹的知識(shí)點(diǎn)完全是從一個(gè)技術(shù)分享角度出發(fā),絕非用于任何商業(yè)活動(dòng)和用途,如果涉及到任何法律問(wèn)題將由操作者本人負(fù)責(zé)。本文作者將不負(fù)責(zé)任何法律責(zé)任!也請(qǐng)各位同學(xué)秉著技術(shù)角度出發(fā)的原則,切勿用于商業(yè)中!
視頻App如何規(guī)避這種操作:作為視頻App廣告是其生存之本,所以對(duì)于這種操作的用戶(hù),因?yàn)樽约阂惨鲆恍┓雷o(hù)策略,可以本地啟動(dòng)一個(gè)后臺(tái)服務(wù),通過(guò)ping命令來(lái)檢測(cè)當(dāng)前廣告域名對(duì)應(yīng)的ip地址,如果發(fā)現(xiàn)不是自己域名對(duì)應(yīng)的ip地址,那么就不讓其看視頻內(nèi)容,但是這種方式是不是可行還有待驗(yàn)證!
六、總結(jié)
本文主要介紹的內(nèi)容還是破解相關(guān)的知識(shí)點(diǎn),而本文在破解的過(guò)程中用到了大量的猜想,然后通過(guò)實(shí)踐去證明猜想,有時(shí)候多一些猜想也會(huì)讓破解過(guò)程變得更加便捷,同時(shí)通過(guò)本文之后,小編以后看視頻在也不用看廣告了。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- Android實(shí)現(xiàn)加載廣告圖片和倒計(jì)時(shí)的開(kāi)屏布局
- Android利用ViewPager實(shí)現(xiàn)滑動(dòng)廣告板實(shí)例源碼
- Android實(shí)現(xiàn)Banner界面廣告圖片循環(huán)輪播(包括實(shí)現(xiàn)手動(dòng)滑動(dòng)循環(huán))
- Android自定義View實(shí)現(xiàn)廣告信息上下滾動(dòng)效果
- Android筆記之:App應(yīng)用之發(fā)布各廣告平臺(tái)版本的詳解
- Android實(shí)現(xiàn)廣告圖片輪播效果
- Android編程實(shí)現(xiàn)ListView頭部ViewPager廣告輪詢(xún)圖效果
- Android新聞廣告條滾動(dòng)效果
- Android 應(yīng)用啟動(dòng)歡迎界面廣告的實(shí)現(xiàn)實(shí)例
- Android開(kāi)啟新線程實(shí)現(xiàn)電子廣告牌項(xiàng)目
相關(guān)文章
Android 中LayoutInflater.inflate()方法的介紹
這篇文章主要介紹了Android 中LayoutInflater.inflate()方法的介紹的相關(guān)資料,希望通過(guò)本文大家能掌握這部分內(nèi)容,需要的朋友可以參考下2017-09-09Android通過(guò)startService實(shí)現(xiàn)文件批量下載
這篇文章主要為大家詳細(xì)介紹了Android通過(guò)startService實(shí)現(xiàn)文件批量下載的示例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-12-12Android基于Toolbar實(shí)現(xiàn)頂部標(biāo)題欄及后退鍵
這篇文章主要介紹了Android基于Toolbar實(shí)現(xiàn)頂部標(biāo)題欄及后退鍵,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09Android開(kāi)發(fā)之時(shí)間日期操作實(shí)例
這篇文章主要介紹了Android開(kāi)發(fā)之時(shí)間日期操作,是Android程序開(kāi)發(fā)中常見(jiàn)的一個(gè)功能,需要的朋友可以參考下2014-08-08Android中TabLayout+ViewPager 簡(jiǎn)單實(shí)現(xiàn)app底部Tab導(dǎo)航欄
TabLayout 是Android com.android.support:design庫(kù)的一個(gè)控件。本文主要給大家介紹TabLayout+ViewPager 簡(jiǎn)單實(shí)現(xiàn)app底部Tab布局,需要的的朋友參考下2017-02-02淺析Android手機(jī)衛(wèi)士之抖動(dòng)輸入框和手機(jī)震動(dòng)
這篇文章主要介紹了淺析Android手機(jī)衛(wèi)士之輸入框抖動(dòng)和手機(jī)震動(dòng)的相關(guān)資料,需要的朋友可以參考下2016-04-04Android DragVideo實(shí)現(xiàn)播放視頻時(shí)任意拖拽的方法
這篇文章主要介紹了Android DragVideo實(shí)現(xiàn)播放視頻時(shí)任意拖拽的方法的相關(guān)資料,一種在播放視頻時(shí),能夠拖拽的方案,需要的朋友可以參考下2016-12-12Android 中WallpaperManager用法實(shí)例
這篇文章主要介紹了Android 中WallpaperManager用法實(shí)例的相關(guān)資料,希望通過(guò)本文能幫助到大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-09-09Android Notification實(shí)現(xiàn)動(dòng)態(tài)顯示通話時(shí)間
這篇文章主要為大家詳細(xì)介紹了Android Notification實(shí)現(xiàn)動(dòng)態(tài)顯示通話時(shí)間,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09