編輯:關於Android編程
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名為:淨網大師
下面在來分析一下,這個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 activity的生命周期。分享給大家供大家參考,具體如下:activity類處於android.app包中,繼承體系如下:1.Java.l
前言前幾篇文章中,筆者對View的三大工作流程進行了詳細分析,而這篇文章則詳細講述與三大工作流程密切相關的兩個方法,分別是requestLayout和invalidate
因為Android的編譯系統不同於Linux Kernel的遞歸式的編譯系統,它的編譯系統是一種稱之為independent的模式,每個模塊基本獨立(它有可能依賴其他模塊
環境搭建git clone cd 到AndBug目錄,執行make58deMacBook-Pro-7:AndBug wuxian$ makePYTHONPATH=lib