二:去除游戲Zoo Trip中的廣告,完美去廣告是指刪掉程序中一切跟廣告調用相關的類,方法,視圖
將apk文件拷貝到 d:\android\crack\apktool 目錄下,為方便操作,重命名為a.apk
打開cmd窗口
輸入:
cd d:\android\crack\apktool
d:
輸入:adb devices
檢測虛擬設備是否連上,正常的會返回:emulator-5554 device 類似信息
輸入:adb install a.apk
在虛擬設備上安裝原apk文件,并運行查看效果,先玩一通,看下廣告都在哪
廣告總共出現在四處:
接下來的過程需要很大的耐心與細心,進行以下操作前,請認真學習常用Dalvik指令集(至少要花一天時間),保證能看懂一般的smali代碼!?。?br>打開里面的AndroidManifest.xml文件
找到以<activity 打頭的xml節(jié)點,在android程序中的 activity 通常是指一個界面,但是一個界面并不會是一個activity,一個activity可能包括多個界面
這里一共出現了六處,其中節(jié)點中帶有 <action android:name="android.intent.action.MAIN" /> 這類信息的是主活動,可以理解成主界面
我們首先來刪掉主界面的廣告
通過AndroidManifest.xml中的描述,我們知道主界面對應的類的名稱是:".CoverActivity" 字符"."前面的東西是程序命名空間,在AndroidManifest.xml 中的package="com.droidhen.game.zootrip" 中定義,也就是說主界面的類名是:
com.droidhen.game.zootrip.CoverActivity,所以我們依次展開 smali\com\droidhen\game\zootrip 在里面找到CoverActivity.smali文件并打開,
這里可以看到兩個以CoverActivity打頭的,其中的CoverActivity$1.smali是CoverActivity中的子類,可以不用看
用編輯器在 smali\com\droidhen 文件夾中查找 GoogleAdView(GoogleAdView這個是google廣告的標志)
共找到四個文件:MoreActivity.smali Ad.smali AdController.smali OnlineScoreActivity.smali,都打開
第一個對應的是:更多游戲的界面,第二個只是定義了一個結構,第三個里面出現最多,是廣告的實際控制類,第四個是在線排行的界面
接下來回到第一屏的CoverActivity.smali,在里面搜索 AdController
第一處:
Code : .method private tryMore()V .locals 1 .prologue .line 83 sget-object v0, Lcom/droidhen/game/zootrip/global/AdController;->INSTANCE:Lcom/droidhen/game/zootrip/global/AdController; invoke-static {p0, v0}, Lcom/droidhen/activity/MoreHelper;->showMoreGames(Landroid/content/Context;Lcom/droidhen/Ad;)V .line 84 return-void .end method |
Code : package com.droidhen.activity; import com.droidhen.Ad; class MoreHelper{ public static Ad AD; public void showMoreGames(Context context, Ad ad){ Intent intent = new Intent(context, MoreActivity.class); MoreHelper.AD=ad; context.startActivity(intent); } } |
Code :.line 35 sget-object v0, Lcom/droidhen/activity/MoreHelper;->AD:Lcom/droidhen/Ad; |
Code :.line 36 .local v0, ad:Lcom/droidhen/Ad; |
Code : if-eqz v0, :cond_0 .line 37 new-instance v2, Lcom/google/ads/GoogleAdView; invoke-direct {v2, p0}, Lcom/google/ads/GoogleAdView;-><init>(Landroid/content/Context;)V .line 38 .local v2, googleAdView:Lcom/google/ads/GoogleAdView; new-instance v3, Landroid/widget/LinearLayout$LayoutParams; .end local v3 #params:Landroid/widget/LinearLayout$LayoutParams; const/4 v7, -0x2 invoke-direct {v3, v9, v7}, Landroid/widget/LinearLayout$LayoutParams;-><init>(II)V .line 39 .restart local v3 #params:Landroid/widget/LinearLayout$LayoutParams; invoke-virtual {v4, v2, v3}, Landroid/widget/LinearLayout;->addView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V .line 40 invoke-interface {v0, p0, v2, v10}, Lcom/droidhen/Ad;->show(Landroid/app/Activity;Lcom/google/ads/GoogleAdView;Z)V .line 42 .end local v2 #googleAdView:Lcom/google/ads/GoogleAdView; :cond_0 |
Code : .class public Lcom/droidhen/activity/MoreHelper; .super Ljava/lang/Object; .source "MoreHelper.java" # direct methods .method public constructor <init>()V .locals 0 .prologue .line 8 invoke-direct {p0}, Ljava/lang/Object;-><init>()V return-void .end method .method public static showMoreGames(Landroid/content/Context;)V .locals 2 .parameter "context" .prologue .line 12 new-instance v0, Landroid/content/Intent; const-class v1, Lcom/droidhen/activity/MoreActivity; invoke-direct {v0, p0, v1}, Landroid/content/Intent;-><init>(Landroid/content/Context;Ljava/lang/Class;)V .line 13 .local v0, intent:Landroid/content/Intent; .line 14 invoke-virtual {p0, v0}, Landroid/content/Context;->startActivity(Landroid/content/Intent;)V .line 15 return-void .end method |
Code : .method private tryMore()V .locals 1 .prologue .line 83 invoke-static {p0}, Lcom/droidhen/activity/MoreHelper;->showMoreGames(Landroid/content/Context;)V .line 84 return-void .end method |
Code : .line 36 const/4 v1, 0x0 invoke-static {p0, v1}, Lcom/droidhen/game/zootrip/global/AdController;->initAdArea(Landroid/app/Activity;Z)V |
Code : E/AndroidRuntime( 509): FATAL EXCEPTION: main E/AndroidRuntime( 509): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.droidhen.game.zootrip/com.droidhen.game.zootrip.CoverActivity}:java.lang.RuntimeException: Binary XML file line #10: You must supply a layout_width attribute. |
Code : .line 30 const/high16 v1, 0x7f03 invoke-virtual {p0, v1}, Lcom/droidhen/game/zootrip/CoverActivity;->setContentView(I)V |
Code : .line 78 new-instance v0, Landroid/content/Intent; const-class v1, Lcom/droidhen/game/zootrip/GameActivity; invoke-direct {v0, p0, v1}, Landroid/content/Intent;-><init>(Landroid/content/Context;Ljava/lang/Class;)V .line 79 .local v0, intent:Landroid/content/Intent; invoke-virtual {p0, v0}, Lcom/droidhen/game/zootrip/CoverActivity;->startActivity(Landroid/content/Intent;)V |
Code : android.content.Intent intent=new android.content.Intent(this, com.droidhen.game.zootrip.GameActivity.class); startActivity(intent); |
Code : .method more()V .locals 1 .prologue .line 151 sget-object v0, Lcom/droidhen/game/zootrip/global/AdController;->INSTANCE:Lcom/droidhen/game/zootrip/global/AdController; invoke-static {p0, v0}, Lcom/droidhen/activity/MoreHelper;->showMoreGames(Landroid/content/Context;Lcom/droidhen/Ad;)V .line 152 invoke-virtual {p0}, Lcom/droidhen/game/zootrip/GameActivity;->finish()V .line 153 return-void .end method |
Code : .method more()V .locals 1 .prologue .line 151 invoke-static {p0}, Lcom/droidhen/activity/MoreHelper;->showMoreGames(Landroid/content/Context;)V .line 152 invoke-virtual {p0}, Lcom/droidhen/game/zootrip/GameActivity;->finish()V .line 153 return-void .end method |
Code :invoke-static {p0, v4}, Lcom/droidhen/game/zootrip/global/AdController;->initAdArea(Landroid/app/Activity;Z)V |
Code : .line 57 const/high16 v2, 0x7f07 invoke-static {p0, v2, v4}, Lcom/droidhen/score/ScoreUtil;->showView(Landroid/app/Activity;IZ)V |
Code : .line 112 const/high16 v1, 0x7f07 const/4 v2, 0x1 invoke-static {p0, v1, v2}, Lcom/droidhen/score/ScoreUtil;->showView(Landroid/app/Activity;IZ)V |
Code : .method submit()V .locals 4 .prologue .line 158 sget-object v0, Lcom/droidhen/game/zootrip/global/AdController;->INSTANCE:Lcom/droidhen/game/zootrip/global/AdController; const/4 v1, 0x1 sget-object v2, Lcom/droidhen/game/zootrip/GameActivity;->server:Ljava/lang/String; const/4 v3, 0x0 invoke-static {p0, v0, v1, v2, v3}, Lcom/droidhen/score/ScoreUtil;->redirectToSubmit(Landroid/app/Activity;Lcom/droidhen/Ad;ZLjava/lang/String;Z)V .line 159 return-void .end method |
Code : .method public static redirectToSubmit(Landroid/app/Activity;Lcom/droidhen/Ad;ZLjava/lang/String;Ljava/lang/String;ZZ)V .locals 2 .parameter "activity" .parameter "ad" .parameter "finishSelf" .parameter "server" .parameter "category" .parameter "asc" .parameter "isFloat" .prologue .line 60 invoke-static {p1}, Lcom/droidhen/score/OnlineScoreActivity;->setAdController(Lcom/droidhen/Ad;)V .line 61 new-instance v0, Landroid/content/Intent; const-class v1, Lcom/droidhen/score/OnlineScoreActivity; invoke-direct {v0, p0, v1}, Landroid/content/Intent;-><init>(Landroid/content/Context;Ljava/lang/Class;)V .line 62 .local v0, intent:Landroid/content/Intent; const-string v1, "server" invoke-virtual {v0, v1, p3}, Landroid/content/Intent;->putExtra(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent; .line 63 const-string v1, "category" invoke-virtual {v0, v1, p4}, Landroid/content/Intent;->putExtra(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent; .line 64 const-string v1, "asc" invoke-virtual {v0, v1, p5}, Landroid/content/Intent;->putExtra(Ljava/lang/String;Z)Landroid/content/Intent; .line 65 const-string v1, "float" invoke-virtual {v0, v1, p6}, Landroid/content/Intent;->putExtra(Ljava/lang/String;Z)Landroid/content/Intent; .line 66 invoke-virtual {p0, v0}, Landroid/app/Activity;->startActivity(Landroid/content/Intent;)V .line 67 if-eqz p2, :cond_0 .line 68 invoke-virtual {p0}, Landroid/app/Activity;->finish()V .line 70 :cond_0 return-void .end method |
Code : .method public static redirectToSubmit(Landroid/app/Activity;Lcom/droidhen/Ad;ZLjava/lang/String;Z)V .locals 7 .parameter "activity" .parameter "ad" .parameter "finishSelf" .parameter "server" .parameter "asc" .prologue .line 55 const-string v4, "0" const/4 v6, 0x0 move-object v0, p0 move-object v1, p1 move v2, p2 move-object v3, p3 move v5, p4 invoke-static/range {v0 .. v6}, Lcom/droidhen/score/ScoreUtil;->redirectToSubmit(Landroid/app/Activity;Lcom/droidhen/Ad;ZLjava/lang/String;Ljava/lang/String;ZZ)V .line 56 return-void .end method |
Code : .method public static redirectToSubmit(Landroid/app/Activity;ZLjava/lang/String;Ljava/lang/String;ZZ)V .locals 2 .parameter "activity" .parameter "finishSelf" .parameter "server" .parameter "category" .parameter "asc" .parameter "isFloat" .prologue .line 61 new-instance v0, Landroid/content/Intent; const-class v1, Lcom/droidhen/score/OnlineScoreActivity; invoke-direct {v0, p0, v1}, Landroid/content/Intent;-><init>(Landroid/content/Context;Ljava/lang/Class;)V .line 62 .local v0, intent:Landroid/content/Intent; const-string v1, "server" invoke-virtual {v0, v1, p2}, Landroid/content/Intent;->putExtra(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent; .line 63 const-string v1, "category" invoke-virtual {v0, v1, p3}, Landroid/content/Intent;->putExtra(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent; .line 64 const-string v1, "asc" invoke-virtual {v0, v1, p4}, Landroid/content/Intent;->putExtra(Ljava/lang/String;Z)Landroid/content/Intent; .line 65 const-string v1, "float" invoke-virtual {v0, v1, p5}, Landroid/content/Intent;->putExtra(Ljava/lang/String;Z)Landroid/content/Intent; .line 66 invoke-virtual {p0, v0}, Landroid/app/Activity;->startActivity(Landroid/content/Intent;)V .line 67 if-eqz p2, :cond_0 .line 68 invoke-virtual {p0}, Landroid/app/Activity;->finish()V .line 70 :cond_0 return-void .end method |
Code : .method public static redirectToSubmit(Landroid/app/Activity;ZLjava/lang/String;Z)V .locals 7 .parameter "activity" .parameter "finishSelf" .parameter "server" .parameter "asc" .prologue .line 55 const-string v3, "0" const/4 v5, 0x0 move-object v0, p0 move v1, p1 move-object v2, p2 move v4, p3 invoke-static/range {v0 .. v5}, Lcom/droidhen/score/ScoreUtil;->redirectToSubmit(Landroid/app/Activity;ZLjava/lang/String;Ljava/lang/String;ZZ)V .line 56 return-void .end method |
Code : .method submit()V .locals 4 .prologue .line 158 const/4 v1, 0x1 sget-object v2, Lcom/droidhen/game/zootrip/GameActivity;->server:Ljava/lang/String; const/4 v3, 0x0 invoke-static {p0, v1, v2, v3}, Lcom/droidhen/score/ScoreUtil;->redirectToSubmit(Landroid/app/Activity;ZLjava/lang/String;Z)V .line 159 return-void .end method |
Code : E/AndroidRuntime( 244): FATAL EXCEPTION: main E/AndroidRuntime( 244): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.droidhen.game.zootrip/com.droidhen.score.OnlineScoreActivity}: java.lang.RuntimeException: Binary XML file line #49: You must supply a layout_width attribute. |
Code :<activity android:label="@string/app_name" android:name="com.droidhen.score.OnlineScoreActivity" android:screenOrientation="landscape" /> |
Code : <Button android:id="@id/top" android:layout_marginRight="8.0dip" android:text="@string/top" style="\@style/button_small" /> <Button android:id="@id/previous" android:layout_marginRight="8.0dip" android:text="@string/previous" style="\@style/button_small" /> <Button android:id="@id/next" android:layout_marginRight="8.0dip" android:text="@string/next" style="\@style/button_small" /> |
Code : <Button android:id="@id/top" android:layout_marginRight="8.0dip" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/top" style="\@style/button_small" /> <Button android:id="@id/previous" android:layout_marginRight="8.0dip" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/previous" style="\@style/button_small" /> <Button android:id="@id/next" android:layout_marginRight="8.0dip" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/next" style="\@style/button_small" /> |
Code :android:layout_height="wrap_content" android:layout_width="wrap_content" |
Code :.field private static adController:Lcom/droidhen/Ad; |
Code : .line 111 const/high16 v1, 0x7f07 invoke-virtual {p0, v1}, Lcom/droidhen/score/OnlineScoreActivity;->findViewById(I)Landroid/view/View; move-result-object v0 check-cast v0, Lcom/google/ads/GoogleAdView; .line 112 .local v0, adView:Lcom/google/ads/GoogleAdView; sget-object v1, Lcom/droidhen/score/OnlineScoreActivity;->adController:Lcom/droidhen/Ad; if-eqz v1, :cond_0 .line 113 sget-object v1, Lcom/droidhen/score/OnlineScoreActivity;->adController:Lcom/droidhen/Ad; const/4 v2, 0x0 invoke-interface {v1, p0, v0, v2}, Lcom/droidhen/Ad;->show(Landroid/app/Activity;Lcom/google/ads/GoogleAdView;Z)V |
Code : GoogleAdView adView=(GoogleAdView)findViewById(0x7f070000); if(this.adController!=null){ this.adController.show(this,adView,false); } |
Code :<com.google.ads.GoogleAdView android:id="@id/ad_area" android:layout_width="320.0dip" android:layout_height="50.0dip" /> |
Code : .line 38 invoke-static {p0}, Lcom/droidhen/recommend/RecommendUtil;->fetch(Landroid/content/Context;)V |
Code : .line 113 invoke-static {p0}, Lcom/droidhen/recommend/RecommendUtil;->show(Landroid/content/Context;)V |
Code : .line 37 invoke-static {p0}, Lcom/droidhen/game/zootrip/global/TrackUtil;->track(Landroid/content/Context;)V |
Code : .line 43 invoke-static {}, Lcom/droidhen/game/zootrip/global/TrackUtil;->stopTrack()V |