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

查看 75|回复 9
作者:zl6821   
新手小白抖*逆向学习探索(去广告)
1、apk基础信息


image-20240814092327915.png (43.61 KB, 下载次数: 0)
下载附件
2024-8-14 11:23 上传

2、软件分析


image-20240814093651611.png (19.39 KB, 下载次数: 0)
下载附件
2024-8-14 11:23 上传



image-20240814091707907.png (103.02 KB, 下载次数: 0)
下载附件
2024-8-14 11:23 上传



image-20240814091822012.png (103.16 KB, 下载次数: 0)
下载附件
2024-8-14 11:23 上传

分析1.开始软件会有一个选择线路的过程,紧接着开屏广告5s倒计时(多次实验一直5s)一直到显示进入,点击进入就可以进到程序主界面。
方案1.既然5s是固定的,那后台肯定会有个5s这样子的一个变量,将他修改为0s,不就完成。
方案2.点击“进入”才能启动页面,如果在广告启动的程序中直接插入点击后的function代码,也可以达到直接进入主界面跳过广告。
3、开干!
3.1先验证下有没有签名的问题?小白弄不了各种签名骚操作,别改完代码,最后有签名校验,那就白弄了。
3.1.1先用mt,重新签名。发现软件可以正常运行。


image-20240814093243552.png (40.62 KB, 下载次数: 0)
下载附件
2024-8-14 11:23 上传

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


image-20240814093455208.png (33.12 KB, 下载次数: 0)
下载附件
2024-8-14 11:23 上传



image-20240814093529068.png (36.25 KB, 下载次数: 0)
下载附件
2024-8-14 11:23 上传

软件在加载后会有一个选择路线的类:com.niming.weipa.widget.u
然后是开屏广告类:com.niming.weipa.ui.splash.SplashActivity
为了去掉广告,这次将对SplashActivity进行手术改造。
3.1.3 为了方便操作,使用jadex进行反编译代码分析,在mt进行修改,生成打包。


image-20240814100031507.png (54.05 KB, 下载次数: 0)
下载附件
2024-8-14 11:23 上传

3.1.4 通过读秒,找到关键程序Y1,开始逐句分析,看不懂没事有GPT
    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,然后重新编译打包安装。
        //开始动画
        fadeOut.start();
        //将广告图片加载入上面的动画中
        com.niming.framework.image.a.l(this).s(adBean.content).I().u1((ImageView) g1(i2));
根据长得像原则,以下smali代码就是对应的这两句,删除-编译-打包-安装。


image-20240814102147732.png (110 KB, 下载次数: 0)
下载附件
2024-8-14 11:23 上传

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


image-20240814102417042.png (24.03 KB, 下载次数: 0)
下载附件
2024-8-14 11:23 上传

        ((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函数。
  public static /* synthetic */ void U1(SplashActivity splashActivity, View view) {
        a2(splashActivity, view);
    }
发现U1就是个皮包商,怎么拿的,怎么送出去,这里有大大可以说下,这就是代码混淆么?接下来继续跟踪到a2
    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函数;在跟踪一次。
    public final void Q1() {
        h1(this.o1);
        P1();
    }
真相大白了,Q1里面的这两个就是跳转到程序,那就把程这两行直接插进主程序。(java幻想展示),请教大佬有没有能够直接修改java,不用修改smali的工具。
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就可以定位到应该插到哪里,有的兄弟可能会疑问,问什么插到这里,因为要顺着作者的逻辑,设置了监听以后,才有可能点击,为的就是免点击直接触发跳过。有兴趣朋友可以试下,如果放到设置监听前,程序就会崩溃。


image-20240814104927431.png (87.31 KB, 下载次数: 0)
下载附件
2024-8-14 11:23 上传



image-20240814111237436.png (76.61 KB, 下载次数: 0)
下载附件
2024-8-14 11:23 上传

3.1.7 保存修改-反编译-签名-打包-安装
通过以上步骤完美跳过广告,
4、下一阶段!去除内部广告


image-20240814111701084.png (250.62 KB, 下载次数: 0)
下载附件
2024-8-14 11:23 上传

5、环境及工具
5.1 jadex
5.2 MT管理器
5.3 Pixel5(root)手机一台
5.4 Anlink手机投屏工具
[/md]

下载次数, 广告

虞美人草   

抖阴?6,名字不错
debug_cat   

重打包之后功能都正常?期待后续。
传说中的yang哥   

能正常用?
marsliu1   

坐等后续。
zl6821
OP
  


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

可以用 已经在用了 清爽版
zl6821
OP
  


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

已经在用 清爽版
zl6821
OP
  


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

道友好,同道中人,一眼看出
beichen1031   

道友,肾重啊
zl6821
OP
  


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

不敢发,发了就进去了
您需要登录后才可以回帖 登录 | 立即注册

返回顶部