本文主要介紹某apk的去廣告分析過程,先上圖:
本文樣本是我們常用的文件管理器:RE文件管理器。
下載鏈接:https://pan.baidu.com/s/1BUivyeioL2rb_WVOzp7Dvw 密碼: xmku
< 文中的apk修改僅用于研究學(xué)習(xí),如涉及權(quán)益侵犯請隨時聯(lián)系處理。 >
在開始分析之前,我們先安裝確認(rèn)需要分析處理的項目,安裝后我們發(fā)現(xiàn)兩個待處理項,如下圖:
左側(cè)廣告出現(xiàn)在剛打開RE管理器的時候,我們稱之為首屏廣告,右側(cè)的網(wǎng)頁出現(xiàn)在關(guān)閉RE管理器后,我們暫且稱之為末屏廣告。
接下來我們進行廣告去除步驟:檢查Manifest文件,邏輯跳過/刪除調(diào)用。
0x1.檢查Manifest文件
檢查Manifest文件的目的,是查看廣告相關(guān)的聲明,刪除掉這些聲明,這也是最簡單廣告的基本去除方式。
首先我們在Manifest文件中搜索廣告關(guān)鍵詞ads,結(jié)果如下:
我們發(fā)現(xiàn)了ads相關(guān)的activity及service聲明,我們將其刪除,同時我們發(fā)現(xiàn)了帶有AddDouDouWall2.WebPageDownLoadMainActivity的聲明,根據(jù)WebPageDownLoad我們可以推斷其為末屏廣告相關(guān)的聲明,我們將以上相關(guān)聲明全部刪除,如下圖:
然后回編譯,此處報錯如下:
由此可知,布局文件preference_list_fragment.xml中的資源未進行聲明,是因為我們刪除了Manifest文件中的聲明信息。我們將該布局文件中出現(xiàn)問題的第4行刪除(或者僅刪除提示未聲明的android:id="@android:id/menu"),然后再次進行回編譯,打包成功。
運行查看效果,發(fā)現(xiàn)首屏廣告及末屏廣告均已去除,但是出現(xiàn)了一個小問題,RE管理器退出后,會出現(xiàn)“RE管理器已停止運行”的提示,顯然這與末屏廣告有關(guān),由此我們進入smali部分分析邏輯。
0x2. 邏輯跳過/刪除調(diào)用
因為是在應(yīng)用程序結(jié)束時出現(xiàn)了此問題,我們最先想到的就是Activity的生命周期中的OnDestroy,根據(jù)程序包名om.speedsoftware.rootexplorer.RootExplorer,我們查看RootExplorer這個Activity中的OnDestroy。
根據(jù)smali我們可以分析出,OnDestroy首先判斷是否網(wǎng)絡(luò)可用,如果可用就啟動網(wǎng)頁加載,如果不可用就執(zhí)行:cond_0。為方便理解也可以查看jar代碼:
此處的處理可以直接刪除cond_0之前的代碼直接從cond_0開始執(zhí)行(刪除調(diào)用),或者在判斷網(wǎng)絡(luò)是否可用時無論如何跳轉(zhuǎn)到:cond_0(邏輯跳過)。
邏輯跳過可以修改if-eqz v0,:cond_0 為 goto :cond_0。修改后打包運行,已停止的提示消失。
總結(jié)
本文只是提供了部分思路,其他思路大家可以自己去嘗試,比如程序入口點相關(guān)分析。