本文全部内容均来源于吾爱破解论坛——参考链接:『逆向资源区』 (52pojie.cn)
参考教程:《安卓逆向这档事》系列 0基础 新手入门 视频动画教程——b站有相应视频学习
该博客仅用于学习记录,帮助有相同问题的兄弟姐妹,不作盈利目的,如果涉及版权,立马删除。
基础知识
1.广告类型
启动广告 弹窗&更新广告 横幅广告
2.安卓四大组件
组件 | 描述 |
---|---|
Activity(活动) | 在应用中的一个Activity可以用来表示一个界面,意思可以理解为“活动”,即一个活动开始,代表 Activity组件启动,活动结束,代表一个Activity的生命周期结束。一个Android应用必须通过Activity来运行和启动,Activity的生命周期交给系统统一管理。 |
Service(服务) | Service它可以在后台执行长时间运行操作而没有用户界面的应用组件,不依赖任何用户界面,例如后台播放音乐,后台下载文件等。 |
Broadcast Receiver(广播接收器) | 一个用于接收广播信息,并做出对应处理的组件。比如我们常见的系统广播:通知时区改变、电量低、用户改变了语言选项等。 |
Content Provider(内容提供者) | 作为应用程序之间唯一的共享数据的途径,Content Provider主要的功能就是存储并检索数据以及向其他应用程序提供访问数据的接口。Android内置的许多数据都是使用Content Provider形式,供开发者调用的(如视频,音频,图片,通讯录等) |
启动广告流程:
启动Activity->广告Activity->主页Activity
修改方法:
1.修改加载时间
2.Acitivity切换定位,修改Intent的Activity类名
1.修改加载时间
使用MT管理器的左侧栏里的activity提取,捕捉到应用的弹窗广告类名
选择类名搜索dex文件,找到对应Java代码
将const-wide/16 v2, 0xbb8里的0xbb8改为0。
保存并编译,重新安装
2.activitiy的切换(不推荐)
第三个类的名称是没有广告的界面,这一步就是将第一个活动的类替换成无广告类去首先加载。
<!---声明实现应用部分可视化界面的 Activity,必须使用 AndroidManifest 中的 <activity> 元素表示所有 Activity。系统不会识别和运行任何未进行声明的Activity。----->
<activity
android:label="@string/app_name"
android:name="com.zj.wuaipojie.ui.MainActivity"
android:exported="true"> <!--当前Activity是否可以被另一个Application的组件启动:true允许被启动;false不允许被启动-->
<!---指明这个activity可以以什么样的意图(intent)启动--->
<intent-filter>
<!--表示activity作为一个什么动作启动,android.intent.action.MAIN表示作为主activity启动--->
<action
android:name="android.intent.action.MAIN" />
<!--这是action元素的额外类别信息,android.intent.category.LAUNCHER表示这个activity为当前应用程序优先级最高的Activity-->
<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!--表明这个类作为启动的界面-->
</activity>
<activity
android:name="com.zj.wuaipojie.ui.ChallengeFirst" />
<activity
android:name="com.zj.wuaipojie.ui.ChallengeFifth"
android:exported="true" />
<activity
android:name="com.zj.wuaipojie.ui.ChallengeFourth"
android:exported="true" />
<activity
android:name="com.zj.wuaipojie.ui.ChallengeThird"
android:exported="false" />
<activity
android:name="com.zj.wuaipojie.ui.ChallengeSecond"
android:exported="false" />
<activity
android:name="com.zj.wuaipojie.ui.AdActivity" />
将android:name="com.zj.wuaipojie.ui.MainActivity" 改为android:name="com.zj.wuaipojie.ui.ChallengeThird"
3. activity更准确的切换
定位到具体的代码去修改
switch (position) {
case 0:
Intent intent = new Intent();
intent.setClass(it.getContext(), ChallengeFirst.class);
it.getContext().startActivity(intent);
return;
case 1:
Intent intent2 = new Intent();
intent2.setClass(it.getContext(), ChallengeSecond.class);
it.getContext().startActivity(intent2);
return;
case 2:
Intent intent3 = new Intent(); //new一个Intent,
intent3.setClass(it.getContext(), AdActivity.class); //传入要切换的Acitivity的类名
it.getContext().startActivity(intent3); //启动对应的Activity
return;
case 3:
Intent intent4 = new Intent();
intent4.setClass(it.getContext(), ChallengeFourth.class);
it.getContext().startActivity(intent4);
return;
default:
return;
}
将第三关的AdActivity切换成对应的类名,让其没有广告。
3.Activity生命周期
一般来说,弹窗的代码都写在onCreate()里。
4.弹窗定位&堆栈分析
修改方法:
1.修改xml中的versiocode(更新弹窗)——会自动检阅版本号是否更新
2.Hook弹窗(推荐算法助手开启弹窗定位)
- 使用算法助手,选择弹窗定位(返回键可取消)
- 使用屏蔽关键字弹窗,将关键字屏蔽掉
3.修改dex弹窗代码(学会如何定位弹窗在哪个代码里面)
从算法助手的日志找到调用的弹窗代码,在dex文件里去搜索这段代码(方法名)
把带有show方法的代码给删掉or注释掉
4.抓包修改响应体(也可以路由器拦截)
5.布局优化
取消横幅广告(开发助手)
1.开发者助手抓布局
2.MT管理器xml搜索定位
3.修改xml代码
复制这个View Id(Hex)
搜索资源ID
解决方法:
1.把高度和宽度改为0;
2.用这段代码把布局隐藏起来。(如果这个图片是在代码里动态加载的话你删掉会报错的,因为找不到要显示动态加载图片的布局了)
android:visibility="gone"