Android逆向 Xposed去除廣告模塊

使用Xposed框架Hook第三方庫API——以Google Admob廣告為例
一.背景
筆者一開始接觸Xposed框架的時候荠呐,也是在此平臺的博客上看到的一篇關(guān)于利用Xposed框架劫持登錄界面的用戶名和密碼,鏈接如下 :Android逆向分析之Xposed的hook技術(shù)。關(guān)于Xposed環(huán)境的搭建也可以參考上述鏈接室琢,在此不作贅述遮糖。

由于其用到的是XposedHelpers.jar的findAndHookMethod,這個方法要傳遞待Hook函數(shù)的參數(shù)列表速客,比較麻煩。利用XposedBridge.jar的hookMethod五鲫,這個方法只需傳入待Hook函數(shù)的實例(instance)溺职,再實現(xiàn)XC_MethodHook這個回調(diào)接口就能完成對任意API的Hook。

回到主題位喂,要獲取函數(shù)的實例浪耘,可以使用Java反射機制,對于Android系統(tǒng)的API可以很容易地反射得到函數(shù)的實例塑崖,但對于本文提到的第三方庫API七冲,反射獲取第三方庫API的實例會在跨應(yīng)用時失效,需要換一種方式來獲取第三方庫API的實例规婆,以下將作詳細說明澜躺,并以廣告API作為例子。

二.類/API說明
IXposedHookLoadPackage接口
方法 描述
handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam)

這個方法用于在加載應(yīng)用程序的包的時候執(zhí)行用戶的操作
loadPackageParam這個參數(shù)包含了加載的應(yīng)用程序的一些基本信息抒蚜,可以利用此參數(shù)獲取API所在類的Class對象掘鄙,從而獲取API的實例。
XposedBridge類
方法 描述
hookMethod(Member hookMethod, XC_MethodHook callback)
1.參數(shù):Member hookMethod是待hook的API實例嗡髓,即方法對象操漠。
2.回調(diào)接口:實現(xiàn)XC_MethodHook接口,重寫待Hook API運行前和運行后的處理方法beforeHookedMethod和afterHookedMethod(舉例如下)饿这。
XposedBridge提供了很多API幫助開發(fā)者對函數(shù)進行hook浊伙,舉個例子如下:

XposedBridge.hookMethod(method, new XC_MethodHook() {
           @Override
           protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
               super.beforeHookedMethod(param);
               Log.d(TAG, "原函數(shù)執(zhí)行前執(zhí)行");
           }

           @Override
           protected void afterHookedMethod(MethodHookParam param) throws Throwable {
               super.afterHookedMethod(param);
               Log.d(TAG, "原函數(shù)執(zhí)行后執(zhí)行");
           }
       });

三.編寫Xposed模塊Hook廣告API
要對Google AdMob平臺的API進行Hook,并且能夠限制廣告的顯示长捧。首先我們需要知道AdMob平臺用于顯示廣告的API嚣鄙,通過查看AdMob廣告接入指南,以橫幅廣告為例串结,其顯示廣告的API是屬于com.google.android.gms.ads.AdView類的loadAd()拗慨。Hook此API,并禁止它的運行奉芦。具體實現(xiàn)如下赵抢。

編寫Xposed模塊

 public class Module implements IXposedHookLoadPackage {
     @Override
     public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws         Throwable {
       try {
       Class c = loadPackageParam.classLoader.loadClass("com.google.android.gms.ads.AdView");//關(guān)鍵一步,獲取Class對象
       Method method = null;
       for (Method m : c.getDeclaredMethods()) {//獲取loadAd的實例
           if (m.getName().equals("loadAd")) {
               method = m;
           }
       }
       Log.d("Module", method.toString());//查看loadAd是否獲取成功
       XposedBridge.hookMethod(method, new XC_MethodHook() {
           @Override
           protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
               super.beforeHookedMethod(param);
               param.setResult(null);//限制loadAd的運行
               Log.d("Module", "Confine loadAd");//打印日志
           }
           @Override
           protected void afterHookedMethod(MethodHookParam param) throws Throwable {
               super.afterHookedMethod(param);
           }
       });
   }catch (Exception ex){
       ex.printStackTrace();
   }
}

四.運行效果
1.LogCat顯示
在com.bigduckgames.flow這個包加載的時候声功,獲取了loadAd這個API的實例烦却,并限制了它的運行。

谷歌廣告去除

五.總結(jié)
實際上先巴,Xposed提供豐富的API給開發(fā)者對目標函數(shù)進行hook其爵,由于本文是專門對于第三方庫的函數(shù)進行hook冒冬,只提到了一些與之相關(guān)的API。在獲取第三方庫Class的時候摩渺,要利用到loadPackageParam這個參數(shù)简烤,所以要實現(xiàn)IXposedHookLoadPackage這個接口。雖然摇幻,本文只是簡單地提到了第三方廣告庫函數(shù)的hook横侦,但可以擴展到通用的第三方庫,可以以此提供參考绰姻。


壹杯敬月光
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末枉侧,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子狂芋,更是在濱河造成了極大的恐慌榨馁,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帜矾,死亡現(xiàn)場離奇詭異翼虫,居然都是意外死亡,警方通過查閱死者的電腦和手機屡萤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門蛙讥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人灭衷,你說我怎么就攤上這事次慢。” “怎么了翔曲?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵迫像,是天一觀的道長。 經(jīng)常有香客問我瞳遍,道長闻妓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任掠械,我火速辦了婚禮由缆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘猾蒂。我一直安慰自己均唉,他們只是感情好,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布肚菠。 她就那樣靜靜地躺著舔箭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上层扶,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天箫章,我揣著相機與錄音,去河邊找鬼镜会。 笑死檬寂,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的戳表。 我是一名探鬼主播桶至,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼扒袖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起亩码,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤季率,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后描沟,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體飒泻,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年吏廉,在試婚紗的時候發(fā)現(xiàn)自己被綠了泞遗。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡席覆,死狀恐怖史辙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情佩伤,我是刑警寧澤聊倔,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站生巡,受9級特大地震影響耙蔑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜孤荣,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一甸陌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盐股,春花似錦钱豁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至涛目,卻和暖如春秸谢,著一層夾襖步出監(jiān)牢的瞬間凛澎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工估蹄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留塑煎,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓臭蚁,卻偏偏與公主長得像最铁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子垮兑,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容