好友
阅读权限20
听众
最后登录1970-1-1
|
通用的去除启动页广告方法(适应度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基本知识即可
第一篇教程,关注不丢失
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|