Android逆向3-去弹框,更新

原文:https://www.52pojie.cn/thread-1706691-1-1.html

做适当补充

安卓四大组件

组件 描述
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类名

image-20250107195250691

点击Activity记录,启动服务,然后访问有弹窗的页面

提取安装包,搜索com.zj.wuaipojie.ui.AdActivity

image-20250107195458100

转java要会员,转np管理器

image-20250107195808677

image-20250107195909864

方法2:

Manifests

image-20250107200158057

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<!---声明实现应用部分可视化界面的 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" />

修改替换上面的xml这里用MT管理器,NP管理器有bug,下面那已经把Main了

image-20250107201129003

不建议此方法,因为启动可能会有一些数据被加载,跳过会导致数据缺失

方法3:

再次搜索刚才的类名,长按复制:

最底下那个,搜索,选择代码:

image-20250107201433328

要从结果筛选出其他的类

image-20250107201630893

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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;
}

替换成third

Acitivity生命周期

函数名称 描述
onCreate() 一个Activity启动后第一个被调用的函数,常用来在此方法中进行Activity的一些初始化操作。例如创建View,绑定数据,注册监听,加载参数等。
onStart() 当Activity显示在屏幕上时,此方法被调用但此时还无法进行与用户的交互操作。
onResume() 这个方法在onStart()之后调用,也就是在Activity准备好与用户进行交互的时候调用,此时的Activity一定位于Activity栈顶,处于运行状态。
onPause() 这个方法是在系统准备去启动或者恢复另外一个Activity的时候调用,通常在这个方法中执行一些释放资源的方法,以及保存一些关键数据。
onStop() 这个方法是在Activity完全不可见的时候调用的。
onDestroy() 这个方法在Activity销毁之前调用,之后Activity的状态为销毁状态。
onRestart() 当Activity从停止stop状态恢进入start状态时调用状态。

image-20250107202447250

弹框去除

修改方法:

  1. 修改xml中的versiocode
  2. Hook弹窗(推荐算法助手开启弹窗定位)
  3. 修改dex弹窗代码
  4. 抓包修改响应体(也可以路由器拦截)

方法一

改成2

image-20250107203341799

方法二

安装算法助手,进入软件打开应用总开关和UI中的弹窗定位

返回就有用了“

image-20250107203739603

打开屏蔽关键词弹窗

image-20250107203831017

改成广告

方法三

image-20250107204242554

image-20250107204256602

代码运行逻辑顺序

复制onCreate

MT搜索

image-20250107204433875

image-20250107204459855

注意show方法

image-20250107204554393

直接注释

二号弹窗就没了

方法四

抓包

广告修改:

image-20250107205021617

选择布局查看

image-20250107205449605

0x7f0801ca

image-20250107205627282

继续搜索

image-20250107205749873

把宽高改成0

第二种该法,插入代码

1
android:visibility="gone"

隐藏

image-20250107205931885

作业

LSP打开算法助手模块

image-20250107233143765

允许作业,打开算法助手配置

image-20250107233203713

再次打开弹窗可用返回去除

打开日志:

image-20250107233444121

其中第三行是np管理器注入弹窗,产生的混淆

np.֏.ށ

这是方法名

去MT管理器搜索

image-20250107233859846

最简单的方法是注释

打开就没弹窗了

可以查找调用处

image-20250107234332408

image-20250107234407468

这里注释掉也行

image-20250107234527291

方法二

直接搜索字符串”弹窗”,然后一个个查找调用出,没调用的就不是