写在前面

相关教程: https://www.bilibili.com/video/BV1wT411N7sV
相关帖子: https://www.52pojie.cn/thread-1706691-1-1.html
相关附件可以从相关帖子中拿到地址,这里不多说环境相关的内容了。

广告展示

打开软件的第三关,打开之后有一个等待三秒的提示如下图

提示完毕之后的内容是一号弹窗

广告去除

给爷停三秒

在MT管理器的Activity的记录中,找到下面内容

这代表当前等待的这个页面的名字是AdActivity,我们通过jadx-gui找到这个位置

查看这个函数发现下面java代码

public final class AdActivity extends AppCompatActivity {
    /* JADX INFO: Access modifiers changed from: protected */
    @Override // androidx.fragment.app.FragmentActivity, androidx.activity.ComponentActivity, androidx.core.app.ComponentActivity, android.app.Activity
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ad_activity);
        loadAd();
    }

    /* JADX INFO: Access modifiers changed from: private */
    public final void jump() {
        startActivity(new Intent(this, (Class<?>) ChallengeThird.class));
        finish();
    }

    private final void loadAd() {
        new Handler().postDelayed(new Runnable() { // from class: com.zj.wuaipojie.ui.AdActivity$$ExternalSyntheticLambda0
            @Override // java.lang.Runnable
            public final void run() {
                AdActivity.this.jump();
            }
        }, 3000L);
    }
}

上面的onCreate是这个组件声明周期的一部分,代码会优先走到这里,然后调用loadAd函数,loadAd函数的主要内容是延迟3000毫秒之后执行自己的jump函数,这里的3000毫秒估计就是咱们打开页面等待的那个3秒,对应起来了,我们需要修改这个地方,改成0即可跳过,我们去看他的smali代码

.method private final loadAd()V
    .registers 5

    .line 27
    new-instance v0, Landroid/os/Handler;

    invoke-direct {v0}, Landroid/os/Handler;-><init>()V

    new-instance v1, Lcom/zj/wuaipojie/ui/AdActivity$$ExternalSyntheticLambda0;

    invoke-direct {v1, p0}, Lcom/zj/wuaipojie/ui/AdActivity$$ExternalSyntheticLambda0;-><init>(Lcom/zj/wuaipojie/ui/AdActivity;)V

    const-wide/16 v2, 0xbb8

    invoke-virtual {v0, v1, v2, v3}, Landroid/os/Handler;->postDelayed(Ljava/lang/Runnable;J)Z

    return-void
.end method

const-wide/16 v2, 0xbb8这里有一个0xbb8估计就是他的延迟时间了,他这个是16进制的数值,转换成10进制刚好就是3000,这里我们通过np管理器给他修改以下

保存之后再此打开应用,发现这个页面直接跳过了

一号、二号广告已就位

跳过上面暂停3秒的页面之后来到了这里,出现了一号广告位,通过MT管理器的Activity的记录得知他的页面名字是ChallengeThird,如下图

好,我们继续通过jadx去分析,通过搜索窗体名称,也可以通过字符串搜到这里,找到这个函数

打开代码直接就能发现下面源代码,二号广告位也在这里。

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_challenge_third);
        ChallengeThird challengeThird = this;
        AlertDialog.Builder builder = new AlertDialog.Builder(challengeThird);
        builder.setTitle("这是二号广告标题");
        builder.setMessage("这是二号广告内容");
        builder.setCancelable(false);
        builder.setPositiveButton("前往论坛", new DialogInterface.OnClickListener() { // from class: com.zj.wuaipojie.ui.ChallengeThird$$ExternalSyntheticLambda1
            @Override // android.content.DialogInterface.OnClickListener
            public final void onClick(DialogInterface dialogInterface, int i) {
                ChallengeThird.m43onCreate$lambda2$lambda0(ChallengeThird.this, dialogInterface, i);
            }
        });
        builder.setNegativeButton("退出软件", new DialogInterface.OnClickListener() { // from class: com.zj.wuaipojie.ui.ChallengeThird$$ExternalSyntheticLambda2
            @Override // android.content.DialogInterface.OnClickListener
            public final void onClick(DialogInterface dialogInterface, int i) {
                System.exit(0);
            }
        });
        builder.show();
        new CommonDialog.Builder(challengeThird).setMessage("一号广告弹窗已就位").setNegativeButton("退出软件", new DialogInterface.OnClickListener() { // from class: com.zj.wuaipojie.ui.ChallengeThird$$ExternalSyntheticLambda3
            @Override // android.content.DialogInterface.OnClickListener
            public final void onClick(DialogInterface dialogInterface, int i) {
                System.exit(0);
            }
        }).setMessageColor(ViewCompat.MEASURED_STATE_MASK).setPositiveButton("前往论坛", new DialogInterface.OnClickListener() { // from class: com.zj.wuaipojie.ui.ChallengeThird$$ExternalSyntheticLambda0
            @Override // android.content.DialogInterface.OnClickListener
            public final void onClick(DialogInterface dialogInterface, int i) {
                ChallengeThird.m46onCreate$lambda4(ChallengeThird.this, dialogInterface, i);
            }
        }).setWith(0.8f).create().show();
        checkUpdate();
    }

分析一下代码发现这两个弹窗刚好对应着俩show()函数,他一个窗口是通过builder对象创建的,还有一个是通过直接new到头然后直接执行的show(),好,拿到这个信息我们思路就清晰了,把这俩show函数给注释掉估计就成功了,我们再看一下这俩show在smali的什么位置,这里smali很长,我直接用图片展示了,下图是一号窗口的show函数位置

然后在38行又可以直接找到另外一个show()

他们在smali的函数分别是284334,我们去NP中给他注释掉,如下图

注释之后保存,打开软件,这两条确实是消失了,但是又有一个图片类型的广告

图片横幅广告

这种图片形式的,无法通过关键字搜索,我们通过开发助手的布局查看来看一下这个图片的一个资源id

打开布局查看器之后再次打开软件,选中广告位,如下图

选中会有一个View ID(hex),复制这个内容,去用这个资源的id去np管理器中搜索,查询到他的位置

打开这个文件之后会发现id根本就不存在,我们再去通过jdax去搜索这个id,发现了一个资源名称,如下图

他的名字是third_ad_image,这个是可以在那个资源文件中找到的,这刚好对应起来了

找到这个内容之后我们修改他的布局属性,高度和宽度,它默认的是wrap_content150.0dip我们都给他修改成0dp,然后再此打开软件,成功的变成了无广告。

写在后面

我要速速速速速速速速速速速速速速速速速速速速速速速速速速速速速速速速速速速速速速速速速速成逆向🤓👌

最后修改:2025 年 03 月 18 日
如果觉得我的文章对你有用,请随意赞赏