jackyvan 发表于 2017-7-2 10:12

去除Wifi分析仪底部广告

本帖最后由 jackyvan 于 2017-7-2 10:14 编辑

首先用 AndroidCrackTool 把apk文件反编译,然后提前其中的dex文件,反编译成jar文件。然后JD打开jar文件,根据反编译的AndroidMainfest.xml找到入口 com.farproc.wifi.analyzer.MyApplication 和 com.farproc.wifi.analyzer.MainScreen 。

用JD查看对应文件代码,发现 MyApplication.class 里没有什么特殊代码,那有很大可能就存在于文件MainScreen里。
用JD查看 MainScreen.class ,首先在最上面的 import 里 发现
import com.google.android.gms.ads.d;
import com.google.android.gms.ads.h;
这两个导入,看来用的是google的广告服务,然后接着往下看,在类的开始的位置 定义了一个 私有变量
private com.google.android.gms.ads.e G;

这个是广告的关键点的可能性非常大,根据这个变量在文件里查找相应的使用过此变量的地方,发现了好几处。
private void M()
{
    if (this.O == null)
    {
      this.O = new com.farproc.wifi.analyzer.a.a(this, this.J, "<script type=\"text/javascript\" src=\"http://ad.leadboltads.net/show_app_ad.js?section_id=977050972\"></script>");
      this.O.a(new a.a()
      {
      public void a(com.farproc.wifi.analyzer.a.a paramAnonymousa)
      {
          MainScreen.g(MainScreen.this).a(MainScreen.this, "Click");
          Settings.a(MainScreen.f(MainScreen.this).c);
          paramAnonymousa.c();
          MainScreen.a(MainScreen.this, null);
      }
      });
    }
    //此处根据判断G是否被实例化来设置起Visibility为显示
    if (this.G != null) {
      this.G.setVisibility(8);
    }
    this.O.a();
}


private void O()
{
    //此处判断G是否实例化,如果为null则实例化此变量
    if (this.G == null)
    {
      this.G = new com.google.android.gms.ads.e(this);
      this.G.setVisibility(8);
      this.G.setAdSize(d.g);
      this.G.setAdUnitId("ca-app-pub-7095649012086171/4602092489");
      this.G.setAdListener(this.Q);
      this.J.addView(this.G, new LinearLayout.LayoutParams(-1, -2));
      if (this.j.c.getBoolean("test_ad", false)) {
      this.G.setBackgroundColor(Settings.a());
      }
    }
    if (!this.R) {
      this.M.a(this, "Request");
    }
    try
    {
      this.G.a(Settings.a(this, P()));
      if (this.O != null) {
      this.O.b();
      }
      return;
    }
    catch (Throwable localThrowable)
    {
      for (;;)
      {
      Log.e("MainScreen", "showGoogleBannerAdView", localThrowable);
      }
    }
}剩下的还有几处代码,不过都是以判断G是否实例化为前提,所以判断G实例化之后才会显示广告,那如果我们不让其实例化则广告可能就不会显示,所以我们只要在 O() 最开始位置return 让其不实例化G就可以 private void O()
{
    return;
    ....
}我们在反编译apk后得到的smali文件夹中找到对应的MainScreen.smali文件 找到 .method private O()V ,修改如下.method private O()V
    .locals 5

    iget-object v0, p0, Lcom/farproc/wifi/analyzer/MainScreen;->G:Lcom/google/android/gms/ads/e;

    #此处新增一行返回
    return-void

    if-nez v0, :cond_0

    new-instance v0, Lcom/google/android/gms/ads/e;然后用AndroidCrackTool重新打包(把上面反编译apk后得到的目录路径填入源文件处即可),重新打包完再把生成的apk重新签名,安装运行,就发现广告不再显示了。

jackyvan 发表于 2017-7-2 11:03

lialu2009 发表于 2017-7-2 10:48
楼主厉害。工具是群里下载的么?

多谢支持 是mac版的,下载地址 https://github.com/Jermic/Android-Crack-Tool

lialu2009 发表于 2017-7-2 10:48

haojie261 发表于 2017-7-2 11:35

辛苦了。感谢分享

ningzhonghui 发表于 2017-7-2 11:37

不错学习下去广告

colacat315 发表于 2017-7-2 11:51

谢谢楼主分享,分析的很好!

海鷫 发表于 2017-7-2 11:51

这个不错,很有用处

swfz2008 发表于 2017-7-2 11:55

辛苦了。感谢分享

realzoc 发表于 2017-7-2 12:00

感谢分享

aijanice 发表于 2017-7-2 14:00

把去广告后的软件分享下咯{:1_918:}
页: [1] 2 3 4 5
查看完整版本: 去除Wifi分析仪底部广告