Activity都掌握了?来看看你还有多少漏洞!

移动安全学习笔记——组件安全之Activity组件漏洞挖掘 0x00 简介 ACtivity因组件不合理地导出,可能会产生以下安全风险: 越权绕过 信息泄露 钓鱼欺诈 拒绝服务 0x01 越权绕过漏洞 1、应用场景 在一些业务场景中,某些界面包含敏感数据需要验证后才能查看,但是由于该敏感信息的Activity是导出的,无权限验证,则攻击者无需输入验证信息即可绕过权限查看敏感信息。 2、利用方法 (1)直接启动敏感界面 (2)通过启动主界面的子界面再返回,达到启动主界面效果 (3)通过设置本地密码的Activity,重置密码 3、防护 私有Activity,不 阅读详情

1.前言

作为Android最基本的四大组件之一(Activity活动,Service服务,ContentProvider内容提供者,BroadcastReceiver广播),Activity主要负责与用户进行交互,是每位Android开发必须掌握的知识点。

本篇文章主要介绍 Android开发中的部分知识点,包含内容如下:

  1. Activity 生命周期 简介
  2. Activity 必须在AndroidMainfest.xml 中注册
  3. 启动Activity 的方法
  4. 启动带返回值的Activity
  5. Activity结束 方法
  6. Activity状态保存,恢复的方法
  7. 面试中经常问到的例子

2.正文

1. Activity 生命周期 简介

首先我们需要了解一下Activity的继承关系。

Activity 继承关系

Activity 继承关系如下:

java.lang.Object
   ↳    android.content.Context
       ↳    android.content.ContextWrapper
           ↳    android.view.ContextThemeWrapper
               ↳    android.app.Activity

理解完Activity的继承关系后,我们开始了解Activity的声明周期,Activity的生命周期直接影响到与用户的交互,此声明周期很重要。

Activity 生命周期

Activity生命周期图如下:

Activity 生命周期图

Activity 生命周期图

在代码中 Activity生命周期回调方法

Activity生命周期回调方法如下:

Activity 生命周期代码回调方法

Activity 4 种 生命周期状态

Activity 常见的四种生命周期状态如下:

  1. Active 运行状态

  2. Pause 暂停状态

  3. Stop 停止状态

  4. Killed 消亡状态

2. Activity 必须在 AndroidMainfest.xml 中注册

  • Activity是四大组件之一,Android规定四大组件必须在AndroidMainfest.xml中注册,Activity如果不注册,则会引起App Crash报错。

ActivityNotFoundException

如Activity不在AndroidMainfest.xml中注册,则app将会报错,报错主要异常信息如下 :
ActivityNotFoundException
例如以下报错信息:

//提示未在 AndroidMainfest.xml 中找到Activity类的声明android.content.ActivityNotFoundException:Unable to find explicit activity class //具体类名,包名如下:{com.wj.utils/com.wj.utils.basewidget.BaseButtonMethods}; have you declared this activity in your AndroidManifest.xml?                                                   

ActivityNotFoundException 异常Log 分析

#Activity 注册方法如下:

<manifest ... >
  <application ... >
      <activity android:name=".BaseButtonMethods" />
      ...  </application ... >
  ...</manifest >

常用Action 标签

  • android.action.MAIN:

  • 表示是当前App的入口 main方法类。

  • android.intent.category.LAUNCHER:

  • 表示 此Action会被Launcher扫描到,可以显示在Launcher的Icon列表上,如果去掉此Action,则无法在Launcher种查看到此app的Icon。

<activity android:name=".MainActivity">
       <intent-filter>
         <action android:name="android.intent.action.MAIN" />
         <category android:name="android.intent.category.LAUNCHER" />
       </intent-filter></activity>

3. 启动Activity 的方法

显示启动

Intent intent = new Intent(ActivityMethods.this, OtherActivity.class)
startActivity(intent);

隐式启动

Intent intent = new Intent("string_action");// intent.setAction("string_action");startActivity(intent);

4. 启动带返回值的Activity

启动带返回值的Activity方法

        Intent intent = new Intent();
        intent.setClass(ActivityMethods.this, OtherActivity.class);
        startActivityForResult(intent, mRequestCode);

处理返回值的回调方法

 //    获取 Activity 返回结果的方法
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        if (requestCode == mRequestCode && resultCode == mResultCode) {
            String result = data.getStringExtra("str_set_result");
            Toast.makeText(this, "result :" + result, Toast.LENGTH_SHORT).show();
        }

    }

被启动Activity设置返回值的方法

                int resultCode = 101;
                Intent intent = new Intent();
                intent.putExtra("str_set_result", "带返回结果的Activity");
                setResult(resultCode, intent);

5. Activity结束 方法

如果想结束掉当前Activity ,可以调用一下方法

        finish();        //或者根据请求码结束Activity
        finishActivity(int requestCode);

6. Activity状态保存,恢复的方法

当Activity异常退出时候,Activity会自动保存一些数据,但是,如果是app重要数据,还请在代码中手动保存Bundle类型的数据,防止Activity保存的数据不理想。

Activity 状态保存与恢复

Activity 状态保存与恢复的周期图如下:

Activity 状态保存生命周期图

Activity 状态保存与恢复的回调方法

Activity 状态保存与恢复的回调方法如下:

    // Activity 恢复数据的方法,经常在 oncreate 方法中恢复数据
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {        super.onRestoreInstanceState(savedInstanceState);
        Log.i(TAG, "----onRestoreInstanceState----");
    }    // Activity 保存数据的方法,经常在 onPause 方法中保存数据
    @Override
    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {        super.onSaveInstanceState(outState, outPersistentState);
        Log.i(TAG, "----onSaveInstanceState----");
    }

7. 面试中经常问到的例子

Activity A 启动 Activity B, 然后再返回A,简述一下其生命周期?

  1. 首先 A 启动的声明周期如下:
01-02 21:25:22.357 21225-21225/com.android.program.programandroid I/ActivityMethods wjwj:: ----onCreate----01-02 21:25:22.396 21225-21225/com.android.program.programandroid I/ActivityMethods wjwj:: ----onStart----01-02 21:25:22.402 21225-21225/com.android.program.programandroid I/ActivityMethods wjwj:: ----onResume----
  1. 点击A中的Button ,跳转到B,此时声明周期关系如下:
01-02 21:28:30.617 23845-23845/com.android.program.programandroid I/ActivityMethods wjwj:: ----onPause----01-02 21:28:30.723 23845-23845/com.android.program.programandroid I/OtherActivity wjwj:: ----onCreate----01-02 21:28:30.729 23845-23845/com.android.program.programandroid I/OtherActivity wjwj:: ----onStart----01-02 21:28:30.738 23845-23845/com.android.program.programandroid I/OtherActivity wjwj:: ----onResume----01-02 21:28:31.320 23845-23845/com.android.program.programandroid I/ActivityMethods wjwj:: ----onStop----
  1. 结束 B,返回 A ,生命周期如下:
01-02 21:29:38.646 23845-23845/com.android.program.programandroid I/OtherActivity wjwj:: ----onPause----01-02 21:29:38.668 23845-23845/com.android.program.programandroid I/ActivityMethods wjwj:: ----onRestart----01-02 21:29:38.672 23845-23845/com.android.program.programandroid I/ActivityMethods wjwj:: ----onStart----01-02 21:29:38.674 23845-23845/com.android.program.programandroid I/ActivityMethods wjwj:: ----onResume----01-02 21:29:39.058 23845-23845/com.android.program.programandroid I/OtherActivity wjwj:: ----onStop----01-02 21:29:39.059 23845-23845/com.android.program.programandroid I/OtherActivity wjwj:: ----onDestroy----

3.总结:

Activity A 启动 Activity B, 简述一下其生命周期? 大致流程如下图:

Activity A 启动 Activity B, 然后再返回A生命周期大致图

4.读者福利

加群免费领取安卓进阶学习视频,源码,面试资料,群内有大牛一起交流讨论技术;【1005956838】。 (包括跨平台开发(Flutter,Weex)、java基础与原理,自定义控件、NDK、架构设计、性能优化、完整商业项目开发等)

阿里P7系列视频教程.png

阿里P7系列视频教程.png


面试各大专题整理

面试各大专题整理

5.最后

至此,本篇已结束,如有不对的地方,欢迎建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

安卓Activity劫持与反劫持 安卓Activity劫持与反劫持 0x00前言 近日,挪威一家APP安全公司Promon发现并报道了一个特性漏洞已经被多个恶意应用利用的分析报告,他们通过监测发现该漏洞使恶意软件可以伪装成任何合法的应用程序,从而使黑客可以访问私人短信和照片,窃取受害者的登录凭据,跟踪位置或记录电话对话,甚至可以通过手机摄像头和麦克风进行监视。 研究人员将该漏洞命名为StrandHogg,这是北欧人的一种北欧海盗... 阅读详情

相关推荐

Android-Activity劫持

Android-Acitivity劫持由于Android的设计缺陷,当我们为Activity指定标志位FLAG_ ACTIVITY_ NEW_ TASK时,就能使Activity置于栈顶,并呈现给用户。当然利用这个缺陷可以做很多羞羞的事情 【==】可以劫持用户信息,可以无限弹框(-。-;)等等ect.今天我们来实现Activity劫持的代码:1.通过遍历所有的进程,得到当前前台正在运行的应用进程2.

GHOST 1771

Android 基础知识系列之 Activity

Activity是Android最基本的四大组件之一(Activity活动,Service服务,ContentProvider内容提供者,BroadcastReceiver广播),Activity主要负责与用户进行交互,是每位Android开发必须掌握的知识点。 本篇文章主要介绍 Android开发中的部分知识点,包含内容如下: Activity 生命周期 简介 Activity 必须在An...

Android1974的博客 361

Android LaunchAnyWhere (Google Bug 7699048)漏洞详解及防御措施

开始 近日,Google修复一个组件安全的漏洞LaunchAnyWhere(Google Bug 7699048)。这个漏洞属于Intend Based提取漏洞,攻击者利用这个漏洞,可以突破了应用间的权限隔离,达到调用任意私有Activity(exported为false)的目的。 该漏洞影响Android 2.3至4.3固件。 漏洞分析 在分析这个漏洞之前,需要先介绍两个东西。 Acc

简行之旅 1万+

android全屏/沉浸式状态栏下,各种键盘挡住输入框解决办法

*本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 在开发中,经常会遇到键盘挡住输入框的情况,比如登录界面或注册界面,弹出的软键盘把登录或注册按钮挡住了,用户必须把软键盘收起,才能点击相应按钮,这样的用户体验非常不好。像微信则直接把登录按钮做在输入框的上面,但有很多情况下,这经常满足不了需求。同时如果输入框特别多的情况下,点击输入时,当前输入框没被挡住,但是当前输入框下面的输入框却

smileiam的专栏 8万+

Android安全:防范Activity劫持的有效措施

本文将介绍一种有效的防范Activity劫持的程序,并提供相应的源代码示例。Activity劫持是Android应用程序面临的一种常见安全威胁,攻击者通过篡改Activity的启动流程,将用户重定向到恶意页面或执行其他恶意行为。本文将介绍一种有效的防范Activity劫持的程序,并提供相应的源代码示例。然而,安全是一个不断演变的领域,开发人员仍然需要保持对新的安全威胁和漏洞的关注,并及时采取相应的措施应对。然而,安全是一个持续的过程,开发人员仍然需要密切关注新的安全威胁和漏洞,并及时采取相应的措施来应对。

PixelShadeZ的博客 817

ActivityFuzzer:检测Android Activity组件的安全漏洞

ActivityFuzzer:检测Android Activity组件的安全漏洞

【干货】如何简单粗暴解决Android Activity泄漏问题

Android日常开发中,内存泄漏的重灾区就是Activity。当测试跟你说你的XX Activity泄露了,你如何确认是否真的泄漏?确认泄漏后,你又如何定位是哪里的问题导致内存泄漏?相信这两个问题每个Android开发者都曾碰到过,遇到这种问题,我们一般都会祭出我们的杀手锏:Dump Java Heap然后MAT静态分析GC链。然后今天我想另辟蹊径,从更简单的角度定位并解决这种问题。

Hey_HelloWorld的博客 1556

计算机毕业设计springboot基于微信平台的二次元手办商场小程序【附源码】

选题背景: 随着二次元文化的兴起和普及,越来越多的人开始对二次元角色产生了浓厚的兴趣和喜爱。手办作为二次元文化的重要载体之一,成为了许多二次元爱好者收藏和展示的对象。然而,在传统的线下手办商场中,消费者往往面临着时间、空间和选择的限制。因此,基于微信平台的二次元手办商场小程序应运而生。 选题意义: 首先,基于微信平台的二次元手办商场小程序能够打破地域限制,使得用户可以随时随地通过手机进行购物。无论是在家中、上班途中还是旅行中,用户都能够方便地浏览和购买自己喜欢的手办,极大地提高了购物的便利性和灵活性。

拉期程序 452

Android 中 Activity的内存泄漏,原因以及处理方法

文章参考: 八个造成 Android 应用内存泄露的原因 Android内存泄漏产生的原因以及解决方案OOM 内存泄漏,说的更直白点,就是你想让一个对象在下次GC的时候彻底被回收,但是呢,这个对象所处的条件不符合GC所认定的应当回收的条件,而导致实际上没有被回收依然占用着内存空间,像这样的对象多了,,迟早会把内存撑爆引发大名鼎鼎的OOM问题。Android中最最露骨的就是Activity的内...

童年纸飞机的博客 6734

数字蓝军智能体关键技术课题研究

本研究提出基于人工智能大模型技术构建智能数字蓝军智能体系统,旨在提升作战模拟推演的智能化水平。系统采用"大模型+小模型"混合架构,整合感知、决策、规划、学习等核心模块,实现动态、智能的作战方案生成。关键技术包括大模型与知识图谱融合、多智能体协同、战场态势数字化表示等。研究成果将形成可复用的垂直领域智能体框架,为军事训练提供智能化对抗平台。该系统不仅能模拟真实对手的决策行为,还能通过自我博弈持续进化,有效增强推演的真实性和对抗性。

weixin_49042442的博客 1547

CESM笔记——CESM1.0-CESM1.2.2-CESM2.1.3三个版本模式工作流对比

最近测试了CESM1.0,CESM1.2.2和CESM2.1.3三个版本,不同版本在workflow上有一些区别,来做点笔记。 CESM1.0 测试compset:B_2000,F_2000 workflow: 1. create_newcase -case ~/CESM/cesm1_0/script/B_2000 -compset B_2000 -res f19_g16 -mach tianhe 2. cd B_2000 (optional) env_mach_pes.xml ##修改核数,

砍柴姑娘Jourosy的博客 4942

模板注入漏洞

模版语言背后的前提是语言在其他文档中“嵌入”。一些模版语言是完整的通用语言,比如PHP,ASP.NET和Java的JSP。也有其他的更专门用于模板化,例如:Velocity和FreeMaker(Java的两个实用程序)。许多文字处理器都有自己的模板功能。通常被称为“邮件合并”。

heyingcheng的博客 1088

Avalonia 超级详细学习指南

什么是 Avalonia?Avalonia 是一个开源的、跨平台的 GUI 框架,允许开发者使用 XAML 和 C# 构建现代化、高性能的桌面应用程序。与其他框架相比,Avalonia 具有强大的跨平台能力和灵活的界面设计。} }()Avalonia 的特点和优势跨平台性:Avalonia 可以在 Windows、Linux、macOS 等多个平台上运行,开发者可以编写一套代码,然后在不同的操作系统上运行相同的应用程序。

仰望星空的博客 1万+

launchAnyWhere: Activity组件权限绕过漏洞解析

1、通过了解漏洞原理,开发者可以更好地了解漏洞的产生机理,进而在应用开发过程中采取相应的安全措施,避免漏洞的产生,提高应用的安全性。2、学习漏洞原理可以帮助开发者更好地理解 Android 平台的工作原理,深入了解操作系统的内部机制,有助于开发高质量的应用程序。3、学习漏洞原理可以帮助开发者更好地理解代码的运行方式和效果,从而提高代码的可读性和可维护性。4、学习漏洞原理可以帮助开发者了解目前主流的安全防护技术,掌握安全防护的最佳实践,从而更好地保障应用程序的安全性。总之,了解和学习Android漏洞原理可以

stven_king的专栏 1877

用一套可追溯的闭环,把设备变成可管理的资产:SAP S/4HANA Asset Management 模块详解

摘要:SAP S/4HANA的资产管理模块(EAM)通过标准化流程管理企业资产全生命周期,解决资产状态、需求和资源的不确定性。系统将资产抽象为技术对象,支持纠正性和预防性维护流程,通过维护工单实现可执行的工作包,并与物料管理、财务、生产计划等模块集成形成管理闭环。该模块可帮助降低非计划停机时间,通过数据驱动决策优化维护策略,提升资产可用率和运营效率。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 251

英飞凌Tricore实战系列导读

笔者结合项目应用经验对Tricore MCU的开发及应用经验进一步总结,成人达己,渡己渡人。

initiallizer的博客 3790

android 高危漏洞,activity劫持,动态调试及so注入

如上图,apk已经用腾讯加固过,但是被检测出3个高危漏洞(RN项目) 1、activity劫持: 在MainActivity中: @Override protected void onResume() { AntiHijackingUtils.getinstance().onResume(); super.onResume(); Log.e("生命周期","onResume"); } @Override protected void onPause() { An..

kingwjh的专栏 2183

基于深度学习的水果新鲜程度检测系统(UI界面 + YOLOv8/v7/v6/v5代码 + 训练数据集)

本文详细介绍了如何使用YOLO系列模型(YOLOv5、YOLOv6、YOLOv7、YOLOv8)构建水果新鲜度检测系统。通过数据集准备、模型训练、推理过程以及UI界面的实现,我们能够构建一个实时检测水果新鲜度的系统。通过本博客,您可以全面了解如何应用深度学习技术解决实际问题,尤其是在智能监控和食品质量检测领域。

YOLO 815

android 常见漏洞总结

对于每种漏洞只写出了原理和防护建议,并没有给出实例,投了下Freebuf没通过,说是内容不够详实,的确只是给出了文字说明,没有把实例写下来的确存在不足,不管怎样,我先放这里记录一下。     目录 目录 目录... 1 Activity漏洞... 3 越权绕过漏洞... 3 钓鱼欺诈劫持... 3 隐式启动intent包含敏感数据... 3 拒绝服务... 3 Service...

weixin_41508948的博客 2831

【Python机器学习】零基础掌握RFECV特征选择

通过应用算法,有效地识别了影响购买意愿的关键特征(浏览时长和点击数)和历史货币流通的主要因素(年代、人口和货币流通量)。这样的特征选择不仅提高了模型的解释能力,还可能用于电商推荐系统和历史研究的优化。优点总结,这种方法可以高效地找出对目标变量有最大影响的特征,进而可以用于各种实际应用场景,如电商推荐和历史研究。优点名称对应描述说明高解释性易于理解哪些特征最为重要泛化性能强通过交叉验证提高模型的稳健性应用场景多样可用于电商、金融、历史研究等多个领域。

Mr数据杨 1995

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Activity的启动

Activity相关知识

weixin_42277946的博客 322

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

launchAnyWhere: Activity组件权限绕过漏洞解析(Google Bug 7699048 )

作者:申迪      转载请注明出处    http://blogs.360.cn/360mobile/2014/08/19/launchanywhere-google-bug-7699048/前几天在试用gitx这个软件时偶然看到Google修复了一个漏洞,并记为Google Bug 7699048。这是一个AccountManagerService的漏洞,利用这个漏洞,我们可以任意调起任意未导

移动安全研究和Android/iOS/小程序隐私合规 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

APP漏洞类型

1. 信息泄露漏洞 logcat输出敏感信息 ​ 应用层log敏感信息输出 ​ 应用层System.out.println敏感信息输出 ​ 系统bug异常导致log输出 ​ Native层敏感Log输出 2. 组件越权漏洞 Activity 组件越权 广播越权 3. 中间人劫持 Http造成的中间人劫持 https造成的中间人劫持 UXSS漏洞 浏览器自身的XSS漏洞 4. 远程代码执行漏洞 Webview漏洞 5. Content Provider SQL注入 6. openFile函数目录遍历 7.

weixin_43801663的博客 1551

【错误记录】Android 应用安全检测漏洞修复 ( StrandHogg 漏洞 | 设置 Activity 组件 android:taskAffinity=““ )

一、报错信息、 二、修改方案

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 3843

深度解析APP四大组件漏洞挖掘,从零基础到精通,收藏这篇就够了!

组件用途Activity组件代表应用程序中的单个屏幕或用户界面,用于处理用户与应用程序的交互和响应用户的操作Activity组件的整体防护建议1.权限管理修复检查和设置权限:查看 AndroidManifest.xml,只请求必要权限。对于敏感权限,向用户解释用途,合理设置保护级别。权限验证:在代码中每次操作前用ContextCompat.checkSelfPermission()检查权限,没权限就请求,有就执行操作。2.Intent 安全修复。

Libra1313的博客 1364
上一篇: Android中高级面试题准备整理分享
下一篇: 生活不只诗和远方,还有Android开发者的痛苦和很方!
Android从高级到---
博客等级 码龄8年 15粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值