12345下一页
返回列表 发新帖

移除简书广告

  [复制链接]

30

主题

1469

帖子

4718

积分

大学生

小北IT

Rank: 5Rank: 5

金币
1195
好评
21
贡献
1

2019-5.1节快乐MT论坛最佳新人MT论坛帅哥考神MT论坛活跃会员

QQ
发表于 2019-6-19 23:08:06 来自手机  | 显示全部楼层 | 阅读模式
本帖最后由 李易壮 于 2019-6-20 00:03 编辑

在简书发的文章,移除简书App的广告。
坐等被捶

移除简书App广告

好吧,昨天23:45的时候,上边那篇文章被简书官方给屏蔽了,就知道它就这niao性…还是MT论坛舒服

补一下教程:

#安卓逆向#轻度调戏“简书”App

好吧,我来讲一下为什么要这么搞:

今天刚下载回来了“简书”。写了篇新文章。但由于篇幅较长(约七千字),中途有很多次切换到其他软件(聊天之类的事),但仅仅是离开不到一分钟的时间,切换回简书时,就要强制播放几秒钟的广告。

下边讲一下逆向修改,轻度调戏简书App哈。

先是抓取Activity记录,发现打开软件的过程中,调用了下边这两个“包”:

com.baiji.jianshu.MainActivity

com.baiji.jianshu.ui.splash.SplashAdActivity

懂一点英语的人都知道,main是主要的意思,所以广告进程自然是下边这个啦。

Activity记录
然后按照我的习惯呢,是把AndroidManifest.xml中的

com.baiji.jianshu.ui.splash.SplashAdActivity

替换为

com.baiji.jianshu.MainActivity

也就是这段代码:

<activity

        android:theme="@style/ThemeSplash"

        android:name="com.baiji.jianshu.ui.splash.SplashScreenActivity"

        android:screenOrientation="portrait"

        android:windowSoftInputMode="adjustPan">

改为

<activity

        android:theme="@style/ThemeSplash"

        android:name="com.baiji.jianshu.MainActivity"

        android:screenOrientation="portrait"

        android:windowSoftInputMode="adjustPan">

这样就去除了启动页广告。但切换应用时弹出的广告还在。

用Dex编辑器依次打开播放广告的包,com.baiji.jianshu.ui.splash.SplashAdActivity

反编译后的java代码如下所示:

//

// Decompiled by Jadx - 5243ms

//

package com.baiji.jianshu.ui.splash;

import android.content.Context;

import android.os.Bundle;

import android.support.v4.app.FragmentActivity;

import android.text.TextUtils;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.View.OnTouchListener;

import android.view.ViewGroup;

import android.widget.ImageView;

import android.widget.TextView;

import com.baiji.jianshu.common.util.z;

import com.baiji.jianshu.core.http.models.splash.SplashSetting;

import com.baiji.jianshu.ui.splash.a.a;

import com.baiji.jianshu.ui.splash.base.BaseADSplashActivity;

import com.bumptech.glide.Priority;

import com.bumptech.glide.i;

import com.bumptech.glide.load.engine.DiskCacheStrategy;

import com.jianshu.jshulib.urlroute.b;

import com.sensorsdata.analytics.android.sdk.SensorsDataAutoTrackHelper;

import com.sensorsdata.analytics.android.sdk.SensorsDataInstrumented;

import jianshu.foundation.util.o;

import kotlin.Metadata;

import kotlin.jvm.internal.r;

import kotlin.l;

import org.jetbrains.annotations.NotNull;

import org.jetbrains.annotations.Nullable;

@Metadata(bv = {1, 0, 2}, d1 = {"\u0000<\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\u000b\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\u0002\n\u0002\b\t\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\b\u0006\u0018\u0000 \u001e2\u00020\u0001:\u0001\u001eB\u0005¢\u0006\u0002\u0010\u0002J\u0012\u0010\u000b\u001a\u00020\f2\b\u0010\r\u001a\u0004\u0018\u00010\nH\u0016J\u0010\u0010\u000e\u001a\u00020\f2\u0006\u0010\r\u001a\u00020\nH\u0002J\b\u0010\u000f\u001a\u00020\fH\u0016J\u0010\u0010\u0010\u001a\u00020\f2\u0006\u0010\r\u001a\u00020\nH\u0002J\b\u0010\u0011\u001a\u00020\u0006H\u0014J\b\u0010\u0012\u001a\u00020\fH\u0016J\b\u0010\u0013\u001a\u00020\fH\u0016J\u0010\u0010\u0014\u001a\u00020\f2\u0006\u0010\u0015\u001a\u00020\u0016H\u0016J\u0012\u0010\u0017\u001a\u00020\f2\b\u0010\u0018\u001a\u0004\u0018\u00010\u0019H\u0014J\b\u0010\u001a\u001a\u00020\fH\u0014J\b\u0010\u001b\u001a\u00020\fH\u0014J\b\u0010\u001c\u001a\u00020\fH\u0016J\b\u0010\u001d\u001a\u00020\fH\u0002R\u0010\u0010\u0003\u001a\u0004\u0018\u00010\u0004X�\u000e¢\u0006\u0002\n\u0000R\u000e\u0010\u0005\u001a\u00020\u0006X�\u000e¢\u0006\u0002\n\u0000R\u0010\u0010\u0007\u001a\u0004\u0018\u00010\bX�\u000e¢\u0006\u0002\n\u0000R\u0010\u0010\t\u001a\u0004\u0018\u00010\nX�\u000e¢\u0006\u0002\n\u0000¨\u0006\u001f"}, d2 = {"Lcom/baiji/jianshu/ui/splash/SplashAdActivity;", "Lcom/baiji/jianshu/ui/splash/base/BaseADSplashActivity;", "()V", "detailLayout", "Landroid/view/ViewGroup;", "isRewardAd", "", "mSplashImageView", "Landroid/widget/ImageView;", "mSplashSetting", "Lcom/baiji/jianshu/core/http/models/splash/SplashSetting;", "displayAD", "", "splashSetting", "displayAdWithGlide", "displayNormal", "initAdUI", "isOverrideDefaultTransition", "onAdClicked", "onBackPressed", "onClick", "v", "Landroid/view/View;", "onCreate", "savedInstanceState", "Landroid/os/Bundle;", "onPause", "onResume", "startMainActivityImmediately", "startToADActivity", "Companion", "JianShuMain_release"}, k = 1, mv = {1, 1, 9})

/* compiled from: SplashAdActivity.kt */

public final class SplashAdActivity extends BaseADSplashActivity {

  public static final a a = new a(null);

  private ViewGroup c;

  private SplashSetting d;

  private ImageView e;

  private boolean f;

  private final void d(SplashSetting splashSetting) {

      View view;

      View findViewById;

      if (splashSetting.isFullDisplay()) {

        findViewById = findViewById(0x7f1103d3);

        if (findViewById == null) {

            throw new l("null cannot be cast to non-null type android.widget.ImageView");

        }

        this.e = (ImageView) findViewById;

        findViewById = findViewById(0x7f1103d4);

        if (findViewById == null) {

            throw new l("null cannot be cast to non-null type android.widget.TextView");

        }

        view = (TextView) findViewById;

      } else {

        findViewById = findViewById(0x7f1103d6);

        if (findViewById == null) {

            throw new l("null cannot be cast to non-null type android.widget.ImageView");

        }

        this.e = (ImageView) findViewById;

        View findViewById2 = findViewById(0x7f1103da);

        if (findViewById2 == null) {

            throw new l("null cannot be cast to non-null type android.widget.TextView");

        }

        TextView textView = (TextView) findViewById2;

        findViewById = findViewById(0x7f1103d8);

        if (findViewById == null) {

            throw new l("null cannot be cast to non-null type android.widget.TextView");

        }

        view = (TextView) findViewById;

        findViewById = findViewById(0x7f1103d9);

        if (findViewById == null) {

            throw new l("null cannot be cast to non-null type android.view.ViewGroup");

        }

        this.c = (ViewGroup) findViewById;

        findViewById(0x7f1103d5).setOnTouchListener((OnTouchListener) this);

        String title = splashSetting.getTitle();

        if (!TextUtils.isEmpty(title)) {

            ViewGroup viewGroup = this.c;

            if (viewGroup != null) {

              viewGroup.setVisibility(0);

            }

            textView.setText(title);

        }

        if (this.f) {

            View findViewById3 = findViewById(0x7f1103dc);

            r.a(findViewById3, "flBottomLogo");

            findViewById3.setVisibility(4);

        } else {

            c(splashSetting);

        }

      }

      if (splashSetting.getAdDuration() > 0) {

        this.b = new a(splashSetting.isHarukiAd(), (long) (splashSetting.getAdDuration() * 1000), 1, (TextView) view, (a) new b(this));

        a aVar = this.b;

        if (aVar != null) {

            aVar.a(this.f);

        }

      }

      ((TextView) view).setClickable(splashSetting.isAdCanSkipable());

      if (!this.f) {

        view.setOnClickListener((OnClickListener) this);

      }

  }

  private final void e(SplashSetting splashSetting) {

      if (splashSetting.isGifImage()) {

        i.a((FragmentActivity) this).a(splashSetting.getGifImageUrl()).k().a(DiskCacheStrategy.SOURCE).a(this.e);

      } else {

        i.a((FragmentActivity) this).a(splashSetting.getSplashAdImageUrl()).a(Priority.IMMEDIATE).a(DiskCacheStrategy.RESULT).a(0).b(0).a(this.e);

      }

      g();

      b.a(splashSetting);

  }

  private final void i() {

      SplashSetting splashSetting = this.d;

      if (splashSetting != null) {

        if (splashSetting.isHarukiAd()) {

            b.a((Context) this, splashSetting.getOpenUrl());

        } else {

            com.jianshu.jshulib.ad.http.a.a.a().a((Context) this, splashSetting, f());

        }

        b.c(splashSetting);

      }

  }

  public void a() {

      c();

  }

  public void a(@org.jetbrains.annotations.Nullable com.baiji.jianshu.core.http.models.splash.SplashSetting r1) {

      /* JADX: method processing error */

/*

Error: jadx.core.utils.exceptions.DecodeException: Load method exception in method: com.baiji.jianshu.ui.splash.SplashAdActivity.a(com.baiji.jianshu.core.http.models.splash.SplashSetting):void

at jadx.core.dex.nodes.MethodNode.load(MethodNode.java:116)

at jadx.core.dex.nodes.ClassNode.load(ClassNode.java:249)

at jadx.core.ProcessClass.process(ProcessClass.java:34)

at jadx.api.JadxDecompiler.processClass(JadxDecompiler.java:318)

at jadx.api.JavaClass.decompile(JavaClass.java:62)

at jadx.api.JavaClass.getCode(JavaClass.java:48)

Caused by: java.lang.NullPointerException

at jadx.core.dex.nodes.MethodNode.addJump(MethodNode.java:370)

at jadx.core.dex.nodes.MethodNode.initJumps(MethodNode.java:356)

at jadx.core.dex.nodes.MethodNode.load(MethodNode.java:106)

... 5 more

*/

      /*

      r0 = this;

      r5.d = r6;

      if (r6 == 0) goto L_0x0029;

  L_0x0004:

      r2 = r6;

      r3 = r5.e();

      if (r3 == 0) goto L_0x0020;

  L_0x000b:

      r4 = r2.getAdDisplayStyle();

      r3 = r3.a(r4);

      r3 = java.lang.Integer.valueOf(r3);

      r3 = (java.lang.Number) r3;

      r0 = r3.intValue();

      r5.setContentView(r0);

      r5.d(r2); Catch:{ Exception -> 0x002a }

      r5.e(r2); Catch:{ Exception -> 0x002a }

  L_0x0029:

      return;

  L_0x002a:

      r1 = move-exception;

      r1.printStackTrace();

      goto L_0x0027;

      */

      throw new UnsupportedOperationException("Method not decompiled: com.baiji.jianshu.ui.splash.SplashAdActivity.a(com.baiji.jianshu.core.http.models.splash.SplashSetting):void");

  }

  public void b() {

      if (b(this.d)) {

        c();

      }

      i();

  }

  public void c() {

      if (this.f) {

        com.jianshu.jshulib.e.a.a a = com.jianshu.jshulib.e.b.a("finish_ad_in_luckywheel").a("ad_type", "静态");

        String str = "ad_duration";

        SplashSetting splashSetting = this.d;

        a.a(str, splashSetting != null ? String.valueOf(splashSetting.getAdDuration()) : null).b();

        setResult(-1);

      }

      com.baiji.jianshu.common.util.a.i((Context) this);

      finish();

      overridePendingTransition(0, 0);

  }

  protected boolean isOverrideDefaultTransition() {

      return false;

  }

  public void onBackPressed() {

      if (!this.f) {

        super.onBackPressed();

        overridePendingTransition(0, 0);

      }

  }

  @SensorsDataInstrumented

  public void onClick(@NotNull View view) {

      r.b(view, "v");

      if (z.a()) {

        SensorsDataAutoTrackHelper.trackViewOnClick(view);

        return;

      }

      switch (view.getId()) {

        case 0x7f1103d4:

        case 0x7f1103d8:

            b.b(this.d);

            break;

      }

      h();

      c();

  }

  protected void onCreate(@Nullable Bundle bundle) {

      super.onCreate(bundle);

      this.f = getIntent().getBooleanExtra("is_reward_ad", false);

      this.d = (SplashSetting) getIntent().getSerializableExtra("splash_setting");

      SplashSetting splashSetting = this.d;

      if ((splashSetting != null ? splashSetting.getVendorSplashAdModel() : null) == null) {

        finish();

      } else {

        d e = e();

        if (e != null) {

            e.a(this.d, 1);

        }

        com.jianshu.jshulib.e.a.a a = com.jianshu.jshulib.e.b.a("show_ad_in_luckywheel").a("ad_type", "静态");

        String str = "ad_duration";

        splashSetting = this.d;

        a.a(str, splashSetting != null ? String.valueOf(splashSetting.getAdDuration()) : null).b();

      }

      o.b("J.chou", "SplashAdActivity onCreate");

  }

  protected void onPause() {

      super.onPause();

      o.b("J.chou", "SplashAdActivity onPause");

  }

  protected void onResume() {

      super.onResume();

      o.b("J.chou", "SplashAdActivity onResume");

  }

}

说实话,当我看到d1、d2、()V的内容时,我差点哭出来,太疯狂了。

(⊙o⊙)啥?没找到?那我手动复制一下:

d1 = {"\u0000<\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\u000b\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\u0002\n\u0002\b\t\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\b\u0006\u0018\u0000 \u001e2\u00020\u0001:\u0001\u001eB\u0005¢\u0006\u0002\u0010\u0002J\u0012\u0010\u000b\u001a\u00020\f2\b\u0010\r\u001a\u0004\u0018\u00010\nH\u0016J\u0010\u0010\u000e\u001a\u00020\f2\u0006\u0010\r\u001a\u00020\nH\u0002J\b\u0010\u000f\u001a\u00020\fH\u0016J\u0010\u0010\u0010\u001a\u00020\f2\u0006\u0010\r\u001a\u00020\nH\u0002J\b\u0010\u0011\u001a\u00020\u0006H\u0014J\b\u0010\u0012\u001a\u00020\fH\u0016J\b\u0010\u0013\u001a\u00020\fH\u0016J\u0010\u0010\u0014\u001a\u00020\f2\u0006\u0010\u0015\u001a\u00020\u0016H\u0016J\u0012\u0010\u0017\u001a\u00020\f2\b\u0010\u0018\u001a\u0004\u0018\u00010\u0019H\u0014J\b\u0010\u001a\u001a\u00020\fH\u0014J\b\u0010\u001b\u001a\u00020\fH\u0014J\b\u0010\u001c\u001a\u00020\fH\u0016J\b\u0010\u001d\u001a\u00020\fH\u0002R\u0010\u0010\u0003\u001a\u0004\u0018\u00010\u0004X�\u000e¢\u0006\u0002\n\u0000R\u000e\u0010\u0005\u001a\u00020\u0006X�\u000e¢\u0006\u0002\n\u0000R\u0010\u0010\u0007\u001a\u0004\u0018\u00010\bX�\u000e¢\u0006\u0002\n\u0000R\u0010\u0010\t\u001a\u0004\u0018\u00010\nX�\u000e¢\u0006\u0002\n\u0000¨\u0006\u001f"}, d2 = {"Lcom/baiji/jianshu/ui/splash/SplashAdActivity;", "Lcom/baiji/jianshu/ui/splash/base/BaseADSplashActivity;", "()V", "detailLayout", "Landroid/view/ViewGroup;", "isRewardAd", "", "mSplashImageView", "Landroid/widget/ImageView;", "mSplashSetting", "Lcom/baiji/jianshu/core/http/models/splash/SplashSetting;", "displayAD", "", "splashSetting", "displayAdWithGlide", "displayNormal", "initAdUI", "isOverrideDefaultTransition", "onAdClicked", "onBackPressed", "onClick", "v", "Landroid/view/View;", "onCreate", "savedInstanceState", "Landroid/os/Bundle;", "onPause", "onResume", "startMainActivityImmediately", "startToADActivity", "Companion", "JianShuMain_release"}

看得懂的话,恭喜你(≧^.^≦)喵~

不卖关子了,把d方法里的代码全部改为c方法的代码就可以啦。Why?

d方法用的是if循环语句,else时才输入“不显示广告”的代码:

else {

            c(splashSetting)

c里边是啥代码嘞?

  public void c() {

      if (this.f) {

        com.jianshu.jshulib.e.a.a a = com.jianshu.jshulib.e.b.a("finish_ad_in_luckywheel").a("ad_type", "静态");

        String str = "ad_duration";

        SplashSetting splashSetting = this.d;

        a.a(str, splashSetting != null ? String.valueOf(splashSetting.getAdDuration()) : null).b();

        setResult(-1);

      }

      com.baiji.jianshu.common.util.a.i((Context) this);

      finish();

      overridePendingTransition(0, 0);

  }

  protected boolean isOverrideDefaultTransition() {

      return false;

  }

顺便小声逼逼,辣鸡简书钻,已经卸了
小北IT创始人
回复

使用道具 举报

30

主题

1469

帖子

4718

积分

大学生

小北IT

Rank: 5Rank: 5

金币
1195
好评
21
贡献
1

2019-5.1节快乐MT论坛最佳新人MT论坛帅哥考神MT论坛活跃会员

QQ
发表于 2019-6-19 23:10:10 来自手机  | 显示全部楼层
emm,破解过程的精彩截图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

278

主题

1万

帖子

3万

积分

版主

一个水怪

Rank: 7Rank: 7Rank: 7

金币
9493
好评
148
贡献
2

MT论坛灌水老大MT论坛最佳新人2019-5.1节快乐考神MT论坛侠客MT论坛活跃会员

发表于 2019-6-19 23:21:44 来自手机  | 显示全部楼层
回复看隐藏
回复

使用道具 举报

13

主题

1469

帖子

4064

积分

大学生

Rank: 5Rank: 5

金币
784
好评
5
贡献
1
发表于 2019-6-19 23:25:26 来自手机  | 显示全部楼层
感谢分享
回复

使用道具 举报

30

主题

1469

帖子

4718

积分

大学生

小北IT

Rank: 5Rank: 5

金币
1195
好评
21
贡献
1

2019-5.1节快乐MT论坛最佳新人MT论坛帅哥考神MT论坛活跃会员

QQ
发表于 2019-6-19 23:27:43 来自手机  | 显示全部楼层
尼斯湖水怪 发表于 2019-6-19 23:21
回复看隐藏

大水怪,我又来水贴子啦(现在心里慌得一批,怕被简书官方捶我
回复

使用道具 举报

1

主题

449

帖子

1403

积分

高中生

Rank: 4

金币
981
好评
0
贡献
0
发表于 2019-6-19 23:33:42 来自手机  | 显示全部楼层
本帖最后由 \(^o^)/ 于 2019-6-19 23:36 编辑

学习下怎么弄的
回复

使用道具 举报

2

主题

396

帖子

1508

积分

高中生

Rank: 4

金币
438
好评
0
贡献
0

考神MT论坛最佳新人MT论坛帅哥

发表于 2019-6-19 23:39:17 来自手机  | 显示全部楼层
看看再说
回复

使用道具 举报

2

主题

119

帖子

486

积分

初中生

Rank: 3Rank: 3

金币
209
好评
0
贡献
0
发表于 2019-6-19 23:41:39 来自手机  | 显示全部楼层
学习一下
回复

使用道具 举报

3

主题

215

帖子

742

积分

初中生

Rank: 3Rank: 3

金币
403
好评
0
贡献
0
QQ
发表于 2019-6-19 23:42:29 来自手机  | 显示全部楼层
不知道行不行,试试再说
回复

使用道具 举报

17

主题

2030

帖子

5935

积分

硕士生

麟杰

Rank: 6Rank: 6

金币
1047
好评
17
贡献
0

2019-5.1节快乐MT论坛帅哥MT论坛最佳新人考神

QQ
发表于 2019-6-19 23:54:59 来自手机  | 显示全部楼层
这个不错
回复

使用道具 举报

60

主题

6040

帖子

1万

积分

版主

Rank: 7Rank: 7Rank: 7

金币
3599
好评
45
贡献
0

MT论坛帅哥2018国庆节考神MT论坛活跃会员

QQ
发表于 2019-6-20 00:05:43 来自手机  | 显示全部楼层
感谢分享,查看隐藏
回复

使用道具 举报

30

主题

1469

帖子

4718

积分

大学生

小北IT

Rank: 5Rank: 5

金币
1195
好评
21
贡献
1

2019-5.1节快乐MT论坛最佳新人MT论坛帅哥考神MT论坛活跃会员

QQ
发表于 2019-6-20 00:07:58 来自手机  | 显示全部楼层
luoawai 发表于 2019-6-20 00:05
感谢分享,查看隐藏

还不睡鸭
回复

使用道具 举报

30

主题

1469

帖子

4718

积分

大学生

小北IT

Rank: 5Rank: 5

金币
1195
好评
21
贡献
1

2019-5.1节快乐MT论坛最佳新人MT论坛帅哥考神MT论坛活跃会员

QQ
发表于 2019-6-20 00:08:19 来自手机  | 显示全部楼层
©麟杰 发表于 2019-6-19 23:54
这个不错

更新了下帖子
回复

使用道具 举报

1

主题

100

帖子

356

积分

初中生

Rank: 3Rank: 3

金币
116
好评
0
贡献
0
发表于 2019-6-20 00:14:34 来自手机  | 显示全部楼层
哈哈哈呵呵哈哈哈
回复

使用道具 举报

30

主题

1469

帖子

4718

积分

大学生

小北IT

Rank: 5Rank: 5

金币
1195
好评
21
贡献
1

2019-5.1节快乐MT论坛最佳新人MT论坛帅哥考神MT论坛活跃会员

QQ
发表于 2019-6-20 00:14:52 来自手机  | 显示全部楼层
hhhhhhaa 发表于 2019-6-20 00:14
哈哈哈呵呵哈哈哈

早点睡,晚安
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表