1. 程式人生 > >Android中靜態方式破解某App實現所有視訊app去除廣告功能

Android中靜態方式破解某App實現所有視訊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地址,那麼就不讓其看視訊內容,但是這種方式是不是可行還有待驗證!

六、總結

本文主要介紹的內容還是破解相關的知識點,而本文在破解的過程中用到了大量的猜想,然後通過實踐去證明猜想,有時候多一些猜想也會讓破解過程變得更加便捷,同時通過本文之後,小編以後看視訊在也不用看廣告了。