者:yueji0j1anke
首发于公号:剑客古月的安全屋
字数:2004
阅读时间: 15min
声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。合法渗透,本文章内容纯属虚构,如遇巧合,纯属意外
目录
-
前言
-
前置技术
-
实战
1.demo1
2.demo2
3.demo3
-
总结
0x01 前言
一直在做安卓逆向,却没有系统性的学习过,于是在app攻防开辟这个专题,用于提高自己的基础能力
0x02 前置知识
1.安卓四大组件
activity(活动)->在应用中的activity可以用来表示一个界面。一个安卓应用必须由activity来运行和启动,生命周期交由系统管理
Activity(活动)
-
负责管理应用的用户界面,通常一个activity表示一个界面
-
一个应用由多个activity组成,并在不同activity间跳转
-
每个activity可以与用户交互响应操作
Service(服务)
-
用于长时间后台运行任务的组件
-
没有用户界面,可以在后台运行,比如播放音乐,处理请求
-
分为前台服务和后台服务
BroadcastReceiver(广播接收器)
-
接受并响应其他应用发送广播信息的组件
-
令多个应用间通信
-
比如电量低 时区改变
ContentProvider(内容提供者)
-
通过数据共享接口,使应用共享数据和访问其他应用数据(访问媒体、通讯录)
-
通过ContentResolver机制查询、插入、更新、删除数据
-
访问数据库、文件等数据存储
2.activity的生命周期
-
onCreate()
-
触发时机:在
Activity
被创建时调用(如首次打开或屏幕旋转后)。 -
作用:初始化界面元素和基本组件,如加载布局文件、初始化变量、设置监听器等。
-
onStart()
-
触发时机:
Activity
即将显示给用户时调用。 -
作用:通常用于界面的更新,如刷新数据,或对用户可见的内容进行设置。
-
onResume()
-
触发时机:
Activity
即将与用户开始交互时调用。 -
作用:是
Activity
完全可见并位于前台的状态,此时可以进行动画、音频等与用户交互相关的操作。 -
onPause()
-
触发时机:
Activity
部分不可见(例如有对话框弹出)或即将被另一个Activity
覆盖时调用。 -
作用:用于保存未持久化的数据,停止动画和音乐,释放资源等,以确保节省系统资源。
-
onStop()
-
触发时机:
Activity
完全不可见时调用。 -
作用:用于释放不必要的资源(如广播接收器),暂停耗时操作(如数据库、网络请求等)。
-
onRestart()
-
触发时机:
Activity
在停止后再次启动时调用(例如用户返回此界面)。 -
作用:用于恢复因
onStop()
暂停的状态或资源,但不涉及布局重新加载。 -
onDestroy()
-
触发时机:
Activity
被销毁时调用。 -
作用:释放所有资源、停止线程等。在手动调用
finish()
、内存不足、或系统销毁Activity
时触发。
典型生命周期的三种模式
-
正常启动模式:
onCreate()
→onStart()
→onResume()
-
切换后台模式:
onPause()
→onStop()
-
返回前台模式:
onRestart()
→onStart()
→onResume()
-
销毁模式:
onPause()
→onStop()
→onDestroy()
0x03 实战
1.去广告
首先我们打开我们的testdemo
发现存在广告
广告页面有很多种剔除方法,这里讲解两种常用方法
1.修改时间
用mt管理器抓取一下类名
发现是从AdActivity跳转到该页面
打开dex编辑器进行搜索
点入转为java
逻辑代码意思是一旦进入页面执行loadAd广告,等待一定时间后跳转到ChallengeThird页面,那显然我们不想等待这个三秒,就把3000给他改了就行
把这个16进制数字直接改成0,就不用等待,即可完成广告跳转
反编译安装后直接跳转无广告
2.切换Activity
这里我们就要重新来审视一下AndroidManifest.xml
这里阐述了app组成的Activity页面,以及进入app的主页Activity,如果够大胆,可以直接替换主页面的Activity为跳过广告页面之后的Activity,不过不推荐使用,有可能会错过一些组件的加载
那我们不妨去看看是哪些代码调用跳转了广告页面,直接进行修改跳转即可
重新搜索类的smali路径代码
本类直接跳过不看
看这里,如果点击位置为3的话,会直接跳转到广告Activity而非ChallengeThird页面
直接修改
反编译安装后便可以直接跳转
2.去弹窗
接下来去掉版本更新的弹窗,大概这里会讲三种最常见方法
1.修改versioncode
修改到最新版本即可完成不更新去除弹窗操作
2.Hook
这边有算法助手帮助我们弹窗定位进行自动化hook
即可完成返回拒绝弹窗进行我们正常的app体验
当然我们也可以通过我们自己的frida代码去完成该项工作
首先打出弹窗堆栈信息
Java.perform(function () {
var ad = Java.use('com.zj.wuaipojie.ui.ChallengeThird');
// hook 普通方法
ad.onCreate.implementation = function(obj){
console.log("Hook start....");
showStacks();
return ; // 为hook的代码返回值,可以是当前方法,也可以是其他
}
function showStacks(){
console.log(
Java.use("android.util.Log") //首先找到log类
.getStackTraceString( //调用log类的该方法
Java.use("java.lang.Throwable").$new() //new一个对象
)
)
}
});
试试看直接将第二个方法置空
成功触发点入无弹窗
3.修改dex代码
这里查看弹窗日志
找到调用的堆栈
复制方法名进行搜索方法名
最后调用show方法进行显示弹窗
那我们最简单的就是把show方法给他注释掉,有两个弹窗,把两个弹窗的show都给他注释掉
最后直接无弹窗
接下来还有个横幅广告需要我们进行处理
3.修改横幅广告
非弹窗类广告一般在xml文件中存在对应元素。因为其是被布置在ui中的,也就是说一般会被放在res资源目录下
打开开发助手,布局查看
找到其hex值
最终搜索到这里,那最简单的方式直接就是把这张图片设置为不可见
android:visibility="gone"
打开第三关,成功去除
0x04 总结
本期教学还是学到了不少,比如Activity的生命周期,弹窗广告标志性的show(),以及对应横幅广告在资源文件中该如何修改。
参考链接: 看雪论坛
原文始发于微信公众号(剑客古月的安全屋):app攻防-实战修改资源&去广告与弹窗
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论