moyu2 发表于 2019-3-6 16:48

兰台的Android破解绿化教程-01-通用的去除启动页广告方法(适应度98%)

通用的去除启动页广告方法(适应度98%)
by瀚海兰台
###未经许可,谢绝任何形式转载###
第一例:
以微博为例:
1.解压安装包,反编译

2.打开AndroidManifest.xml

搜索"android.intent.category.LAUNCHER"

定位启动页活动类:


<activity
            android:theme="@7f0b0052"
            android:name="com.sina.weibo.SplashActivity"
            android:screenOrientation="portrait"
            android:alwaysRetainTaskState="true">
            <intent-filter>
                <action
                  android:name="android.intent.action.MAIN" />
                <category
                  android:name="android.intent.category.LAUNCHER" />



。。。。。。。。。。。。。省略
      </activity>

3.发现启动页活动类:
com.sina.weibo.SplashActivity

4.顺着路径进去寻找进入

SplashActivity类:

5.jadx反编译一下:

package com.sina.weibo;

省略。。。。。。。。。。。。。。。
import com.weibo.mobileads.controller.WeiboAdTracking;
import com.weibo.mobileads.util.AdUtil;
import com.weibo.mobileads.util.AdUtil.SaveDBType;
import com.weibo.mobileads.util.LogUtils;
import com.weibo.mobileads.view.FlashAd;      
import com.weibo.mobileads.view.FlashAd.Orientation;


发现了这个导入包:import com.weibo.mobileads.view.FlashAd;

顾名思义很明显对吧!

6.然后全局搜索:"FlashAd"

发现如下成员变量:

public class SplashActivity extends Activity {
//无关省却;
    private FlashAd f = null;
      
      然后全局搜索 "this.f"   查看调用:
      

private void d() {
   // 省略 .............................
         
         

         
      } else if (this.g && this.h) {
            if (StaticInfo.a()) {
                intent = new Intent().setClass(getApplicationContext(), MainTabActivity.class);
            } else {
                intent = new Intent().setClass(getApplicationContext(), VisitorMainTabActivity.class);
            }
                        
                        
                        
以下代码删去即可                        
/*
                        
            if (this.f != null) {
                this.f.show(this, intent);                //细心的朋友可能注意到了,没错删去这一行即可
                return;
            }
                        
*/
                        
            startActivity(intent);
            finish();
                        
                        
                        
                        
                        
                        
      } else {
                        
                        
                        
      //省略:

               ..................
                  
                  
                  
                  
    }



7.具体到smali中就是:


    .line 368
    :goto_c6
    iget-object v10, p0, Lcom/sina/weibo/SplashActivity;->f:Lcom/weibo/mobileads/view/FlashAd;

    if-eqz v10, :cond_e0

#注释掉下面这俩即可


    .line 369
#iget-object v10, p0, Lcom/sina/weibo/SplashActivity;->f:Lcom/weibo/mobileads/view/FlashAd;

#invoke-virtual {v10, p0, v2}, Lcom/weibo/mobileads/view/FlashAd;->show(Landroid/app/Activity;Landroid/content/Intent;)V




    goto :goto_5e


第二个例子:
智友app启动页广告:

1.按照相同的方法找到:
com.zhiyoo.ui.MainActivity



//省略
import com.baidu.mobstat.StatService;
import com.bytedance.sdk.openadsdk.AdSlot.Builder;
import com.zhiyoo.app.PushService;
import com.zhiyoo.ui.VoteRefreshActivity.a;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
import org.json.JSONObject;


2.发现了导入包:

mport com.bytedance.sdk.openadsdk.AdSlot.Builder;

3.全局搜素"Builder"

发下了如下方法:

    private void y() {
      asg.a(getApplicationContext()).createAdNative(this).loadSplashAd(new Builder().setCodeId(this.z.bo()).setSupportDeepLink(true).setImageAcceptedSize(asn.b, asn.a).build(), new 4(this), 2000);
    }
}


4.可以看到防伪码权限是private

5.于是 smali中全局搜索"y()V" 查看方法调用:

于是我们注销掉即可,如下:

method static synthetic d(Lcom/zhiyoo/ui/MainActivity;)V
    .registers 1

    .prologue
      
      
#         invoke-virtual {p0}, Lcom/zhiyoo/ui/MainActivity;->y()V
         
         
         
    return-void
.end method


总结:
1.启动页广告,顾名思义肯定实在启动页活动加载展示
2.找到启动页活动类,分析导入包,类,一般很明显分析出广告包
3.根据导入的广告类查看如何调用,然后分析如何产生即可

后记:
1.为什么不直接跳过启动活动?
启动页是加载资源的,贸然跳过会出现问题&&非正规手段&&黑屏,反应迟钝问题
2.如何分析广告包:
需要简单的Java基本知识即可

第一篇教程,关注不丢失





CrazyNut 发表于 2019-3-6 17:07

大佬用代码编辑器贴代码搞上来吧

moyu2 发表于 2019-3-7 00:17

a48602 发表于 2019-3-6 23:00
小白不太懂,第一個及第二個範例的 import 列應該會有好多個.
大大是如何知道是 import com.weibo.mobilea ...

FlashAd就是闪屏广告啊,当然你也可以阻断其他的广告包,只要最终能达到去除效果即可

moyu2 发表于 2019-3-6 16:53

作者补充:
在smali语句前面加上   #   即可注释掉这句话,作用相当于删去

moyu2 发表于 2019-3-6 16:54

作者补充-02:
同学们可以继续查看启动页广告所在类其他方法,也能达到相同目的(自己要学会思考),本文仅起抛砖引玉作用

如果爱忘了 发表于 2019-3-6 17:28

感谢楼主分享通用思路,小白学习了

letu 发表于 2019-3-6 17:32

谢谢分享,

chang1582 发表于 2019-3-6 17:46

谢谢分享

voice 发表于 2019-3-6 17:49

排版看的眼疼,不过还是谢谢楼主分享技术

丶那年如此年少o 发表于 2019-3-6 18:21

我以前是在AndroidManifest.xml找到action.MAIN,替换成启动页后activity

moyu2 发表于 2019-3-6 19:25

丶那年如此年少o 发表于 2019-3-6 18:21
我以前是在AndroidManifest.xml找到action.MAIN,替换成启动页后activity

本文最后已经说了,这个方法根本不对
页: [1] 2 3 4
查看完整版本: 兰台的Android破解绿化教程-01-通用的去除启动页广告方法(适应度98%)