本帖最后由 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 里 发现
[Java] 纯文本查看 复制代码 import com.google.android.gms.ads.d;
import com.google.android.gms.ads.h;
这两个导入,看来用的是google的广告服务,然后接着往下看,在类的开始的位置 定义了一个 私有变量
[Java] 纯文本查看 复制代码 private com.google.android.gms.ads.e G;
这个是广告的关键点的可能性非常大,根据这个变量在文件里查找相应的使用过此变量的地方,发现了好几处。
[Java] 纯文本查看 复制代码 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就可以 [Java] 纯文本查看 复制代码 private void O()
{
return;
....
} 我们在反编译apk后得到的smali文件夹中找到对应的MainScreen.smali文件 找到 .method private O()V ,修改如下[Scala] 纯文本查看 复制代码 .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重新签名,安装运行,就发现广告不再显示了。 |