zl6821 发表于 2024-8-14 11:28

新手小白抖*逆向学习探索(去抖*广告)

本帖最后由 zl6821 于 2024-8-14 12:06 编辑

# 新手小白抖*逆向学习探索(去广告)

## 1、apk基础信息



## 2、软件分析






分析1.开始软件会有一个选择线路的过程,紧接着开屏广告5s倒计时(多次实验一直5s)一直到显示进入,点击进入就可以进到程序主界面。

方案1.既然5s是固定的,那后台肯定会有个5s这样子的一个变量,将他修改为0s,不就完成。

方案2.点击“进入”才能启动页面,如果在广告启动的程序中直接插入点击后的function代码,也可以达到直接进入主界面跳过广告。



## 3、开干!

### 3.1先验证下有没有签名的问题?小白弄不了各种签名骚操作,别改完代码,最后有签名校验,那就白弄了。

3.1.1先用mt,重新签名。发现软件可以正常运行。



3.1.2用mtactive记录器定位开屏广告所在的active类。



软件在加载后会有一个选择路线的类:com.niming.weipa.widget.u

然后是开屏广告类:com.niming.weipa.ui.splash.SplashActivity

为了去掉广告,这次将对SplashActivity进行手术改造。

3.1.3 为了方便操作,使用jadex进行反编译代码分析,在mt进行修改,生成打包。



3.1.4 通过读秒,找到关键程序Y1,开始逐句分析,看不懂没事有GPT

```java
    public final void Y1(final AdBean adBean, SystemInfoBean systemInfoBean) {
      //i2获得了资源ID窗口
      int i2 = com.niming.weipa.R.id.iv_ADImg;
      //设置了i2为资源的动画,设置为渐入效果
      ObjectAnimator fadeOut = ObjectAnimator.ofFloat((ImageView) g1(i2), "alpha", androidx.core.widget.e.G0, 1.0f);
      //检查对象是否为空,防止报错,无关紧要
      Intrinsics.checkNotNullExpressionValue(fadeOut, "ofFloat(iv_ADImg, \"alpha\", 0f, 1f)");
      //设置动画持续时间为1秒
      fadeOut.setDuration(1000L);
      //开始动画
      fadeOut.start();
      //将广告图片加载入上面的动画中
      com.niming.framework.image.a.l(this).s(adBean.content).I().u1((ImageView) g1(i2));
      //设置点击监听
      ((ImageView) g1(i2)).setOnClickListener(new View.OnClickListener() {
            //设置点击触发函数
            public final void onClick(View view) {
                SplashActivity.Z1(SplashActivity.this, adBean, view);
            }
      });
      //获得广告时长
      int i3 = com.niming.weipa.R.id.tv_adTime;
      //设置窗口可见
      ((TextView) g1(i3)).setVisibility(0);
      //将广告时长和“秒”两个字符串合在一起,放到窗口
      ((TextView) g1(i3)).setText(Intrinsics.stringPlus(systemInfoBean.ad_show_time, " 秒"));
      //设置点击监听
      ((TextView) g1(i3)).setOnClickListener(new View.OnClickListener() {
            //设置点击事件
            public final void onClick(View view) {
                SplashActivity.U1(SplashActivity.this, view);
            }
      });

```

3.1.5 根据上面的代码,能够知道关键代码就是,直接删除对应的smali,然后重新编译打包安装。

```java
      //开始动画
      fadeOut.start();
      //将广告图片加载入上面的动画中
      com.niming.framework.image.a.l(this).s(adBean.content).I().u1((ImageView) g1(i2));
```

根据长得像原则,以下smali代码就是对应的这两句,删除-编译-打包-安装。



3.1.6运行后发现,广告已经没了,但是还是要倒计时。接下来用方案2,自动跳转,来解决这个问题



```java
      ((TextView) g1(i3)).setText(Intrinsics.stringPlus(systemInfoBean.ad_show_time, " 秒"));
      //设置点击监听
      ((TextView) g1(i3)).setOnClickListener(new View.OnClickListener() {
            //设置点击事件
            public final void onClick(View view) {
                SplashActivity.U1(SplashActivity.this, view);
            }
      });
```

分析上述代码,这个倒计数是可以点击的,我们跟踪下U1函数。

```java
public static /* synthetic */ void U1(SplashActivity splashActivity, View view) {
      a2(splashActivity, view);
    }

```

发现U1就是个皮包商,怎么拿的,怎么送出去,这里有大大可以说下,这就是代码混淆么?接下来继续跟踪到a2

```java
    public static final void a2(SplashActivity this$0, View it) {
      Intrinsics.checkNotNullParameter(this$0, "this$0");
      if (TextUtils.equals(((TextView) this$0.g1(com.niming.weipa.R.id.tv_adTime)).getText().toString(), "进入")) {
            this$0.Q1();
      }
    }

```

这下就很清楚了,倒计时的点击了以后,先是判断显示的是不是“进入两个字”,如果是就执行 Q1函数;在跟踪一次。

```java
    public final void Q1() {
      h1(this.o1);
      P1();
    }

```

真相大白了,Q1里面的这两个就是跳转到程序,那就把程这两行直接插进主程序。(java幻想展示),请教大佬有没有能够直接修改java,不用修改smali的工具。

```java
public final void Y1(final AdBean adBean, SystemInfoBean systemInfoBean) {
............
      //获得广告时长
      int i3 = com.niming.weipa.R.id.tv_adTime;
      //设置窗口可见
      ((TextView) g1(i3)).setVisibility(0);
      //将广告时长和“秒”两个字符串合在一起,放到窗口
      ((TextView) g1(i3)).setText(Intrinsics.stringPlus(systemInfoBean.ad_show_time, " 秒"));
   
      //设置点击监听
      ((TextView) g1(i3)).setOnClickListener(new View.OnClickListener() {
            //设置点击事件
            public final void onClick(View view) {
                SplashActivity.U1(SplashActivity.this, view);
            }
            //插入代码到监听的外侧
         h1(this.o1);
         P1();
         .........
      });

```

锁定smali,把这段东西插到主函数Y1里(一定把line 什么的删除)通过setonclick就可以定位到应该插到哪里,有的兄弟可能会疑问,问什么插到这里,因为要顺着作者的逻辑,设置了监听以后,才有可能点击,为的就是免点击直接触发跳过。有兴趣朋友可以试下,如果放到设置监听前,程序就会崩溃。




3.1.7 保存修改-反编译-签名-打包-安装

通过以上步骤完美跳过广告,

## 4、下一阶段!去除内部广告





## 5、环境及工具

5.1 jadex

5.2 MT管理器

5.3 Pixel5(root)手机一台

5.4 Anlink手机投屏工具

虞美人草 发表于 2024-8-14 16:04

抖阴?6,名字不错{:1_918:}

debug_cat 发表于 2024-8-14 16:12

重打包之后功能都正常?期待后续。

传说中的yang哥 发表于 2024-8-14 16:22

能正常用?

marsliu1 发表于 2024-8-14 16:29

坐等后续。

zl6821 发表于 2024-8-14 16:32

传说中的yang哥 发表于 2024-8-14 16:22
能正常用?

可以用 已经在用了 清爽版

zl6821 发表于 2024-8-14 16:33

debug_cat 发表于 2024-8-14 16:12
重打包之后功能都正常?期待后续。

已经在用 清爽版

zl6821 发表于 2024-8-14 16:34

虞美人草 发表于 2024-8-14 16:04
抖阴?6,名字不错

道友好,同道中人,一眼看出:lol

beichen1031 发表于 2024-8-14 16:55

道友,肾重啊

zl6821 发表于 2024-8-14 17:36

PLMOKNB 发表于 2024-8-14 17:34
楼主直接发个破解好的软件链接吧

不敢发,发了就进去了
页: [1] 2 3 4 5 6 7 8 9
查看完整版本: 新手小白抖*逆向学习探索(去抖*广告)