安卓安全概述

安卓安全概述

  • 1.Android系统概述
  • 2.Android系统安全概述
  • 3.Android系统的安全机制
    • 应用程序框架安全机制
    • 内核安全机制
    • 运行环境安全机制
  • 4.Android反编译工具

1.Android系统概述

Android采用层次化系统架构,Google官方公布的标准架构如图所示,自顶而下划分为5个主要功能层,分别是:

  • 系统应用层(System Apps)
  • 应用程序框架层(Java API Framework)
  • 系统运行时库层(Native C/C++ Libraries和Android Runtime)
  • 硬件抽象层(HAL)
  • Linux内核层(Linux Kernel)

image.png


2.Android系统安全概述

Android系统是基于Linux内核的,通常使用Java语言编程。Android拥有一些安全特性来保护用户数据和资源。其中包括通过Linux内核的强大安全性、权限模型、应用程序签名以及所有应用程序的沙箱方法。这些特征是必要的,但不足以保证Android平台的安全。

正是由于Android系统本身的安全保护机制不足以保证Android平台的安全,以及当今Android的APP数量呈爆炸式增长,使得应用安全的需求被无限放大,推动了Android应用软件保护技术的产生和发展,APP加固技术逐渐涌现。

传统的软件保护技术根据所使用的方法,主要分为两类:第一类是基于硬件的保护技术,而第二类是基于软件的保护技术。前一种加密技术需要考虑到硬件设备等底层设备的运行原理,其开发难度大、成本高,但其破解难度大,主要由Google和厂家设计,而大部分文献涉及的Android保护机制主要基于是软件保护技术来涉及的,主要包括注册验证,代码混淆,防篡改,加壳技术等,较为灵活,成本较低,同时安全性有限。


3.Android系统的安全机制

应用程序框架安全机制

主要有应用程序的权限控制机制和数字签名机制。应用程序必须在权限内运行,程序安装时系统会对相关文件进行安全检查,通过后授予相应权限。从Android 6.0 (API 23)开始后采用运行时权限策略,普通权限在安装时一次授权完毕,而危险权限在应用运行时由应用自行申请、用户授权同意。

在Android 6.0及更高的版本( API >= 23 )是系统采用运行时权限模式,应用在安装时不会通知用户应用的权限,但是在应用需要使用危险的权限时,会提示用户手动进行授权,而普通权限在安装时一次授权完毕;而在Android 5.1.1级更低的 ( API <=22 )版本,用户需要在应用安装时授权所有的权限,才能正常安装,否则无法安装该应用程序。

应用申请的所有的权限都写在AndroidManifest的标签中,比如需要发送SMS消息的应用程序需要包含以下行:

<manifest 
  xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.example.snazzyapp">
  <uses-permission android:name="android.permission.SEND_SMS"/>
  <application ...>
    ...
  </application>
</manifest>

Android的权限体系,一般是分为四种保护等级:正常、危险、签名和签名/特权,但是根据实际情况,往往有许多应用会申请一些不在这四种保护等级范围的权限,所以另外附加两种情况:不允许被第三方应用使用、已弃用

权限的四个基本保护等级

  • 正常(normal[N])权限的默认值。风险较低的权限,授权时会自动同意,无需用户手动同意。
  • 危险(dangerous[D])一种风险较高的权限,可以使请求的应用程序访问私有用户数据或控制可能对用户产生负面影响的设备。
  • 签名(signature[S])应用A有一个声明了signature等级的权限,则应用B必须具备应用A的相同的签名才行。若证书匹配,系统会自动授权,无需用户操作。
  • 签名/特权(signature/privileged[S/P])API > 23后使用signatureOrSystem表示。一是放置在Android系统上专用文件夹中的应用程序才能获得授权;二是另外一个应用B需要有和有标记为signature的权限的应用A相同的签名。

附加的两种权限,针对不允许被第三方应用使用权限,这里有必要提及一下第三方应用的概念,Android系统自带的应用以外的,也就是我们开发者开发的Android应用,比如QQ、微博、微信、今日头条、抖音和王者荣耀等等,都是第三方应用,这些应用都是不能拥有NU标注的权限的。

对于带有已弃用标注的权限,有以下三种情况

  1. 从API级别高于某一值废弃。低于这个数值申请该权限属于正常,但是高于这个数值,再申请肯定是错误的,因为此权限被弃用。我们使用O-xxx来表示从API级别xxx以后废弃该权限。比如O-23表示从API Level为23以后弃用该权限。
  2. 该权限被某一权限替代。比如BIND_CARRIER_MESSAGING_SERVICEBIND_CARRIER_SERVICES取代。
  3. 该权限被永久废弃。我们用O-all来表示。

除了权限的概念外之外,Android系统中还有对权限的分组。权限分组为与设备功能或功能相关的组。在此系统下,权限请求会以组的形式进行提醒。例如,CONTACTS组(与此设备上的联系人和配置文件相关的权限),包括READ_CONTACTS、WRITE_CONTACTS和GET_ACCOUNT,当用户授权了READ_CONTACTS,则Android会自动授权另外两个权限,具体的权限是针对开发者,而对于用户而言是以组的形式展现。

内核安全机制

从技术架构角度来看,Android安全模型基于强健的Linux操作系统内核安全性,故Android的内核安全机制继承自Linux内核的安全机制。进程沙箱机制可以隔离隔离进程资源,限制资源间的自由度;低内存管理技术与新标准Binder IPC通信机制,适应嵌入式移动终端处理器的性能与内存容量的限制。还有完整的权限控制、管理和授权机制,加上签名的引入,能够对Android应用程序的行为进行规范化的管理,对应用之间的关系也进行了定义,包括信任关系和资源共享的授权。

运行环境安全机制

Android 4.4采用Dalvik虚拟机,每个应用都运行在独立的Dalvik虚拟机上,但虚拟机不作为隔离代码的安全边界,所以,在系统Android主要采用强制安全类型来进行加固。在Android 4.4以后Google引入了ART虚拟机,到5.5已经成为默认模式。Android 7.0 向 ART 中添加了一个 just-in-time(JIT)编译器,这样就可以在应用运行时持续的提高其性能。

image.png


4.Android反编译工具

为了达到反编译apk的最终目的,我们可以使用apktool、dex2jar、enjarify、jd-core( jd-gui )、cfr、procyon等工具。实际上,Apk可以看作是一个zip文件,其中的DEX是根据android系统中Dalvik或ART虚拟机优化后的Java字节码。在获取Java源代码之前,我们需要将DEX转换成等价的JAR。值得一提的是,我们可以认为Jar文件是封装一系列Java classes的包。最后,我们可以使用java反编译器:cfr、jd-core和procyon,三者中的任何一个都可以将JAR反编译成非常接近源项目的java文件。

由于反编译可能会出现错误,我们可以让三种java反编译器分别进行工作,结合三者的反编译结果来降低错误率。

不论如何我们也不能将APK文件完全恢复成java的源代码,还需要用我们的智慧手动地调整代码的细节,才能够完全恢复成原来项目的模样。更不要提,我们可能还会遇到混淆或者加固后的代码,这更加会增加我们恢复源码的难度。换句话说,这也是开发一个实用的反编译器的核心点和难点。

下图显示了Jar文件和Apk文件之间的区别。类文件本质上与dex文件相同,都是字节流的代码文件。换句话说,dex源自class文件,因为DVM或ART-VM是基于JVM开发的。我们可以使用JDK工具中的javap来反编译类文件,同样地,我们可以使用apktool来反编译dex文件:

image.png

1、从apk中获取资源文件和smali代码 - apktool

https://apktool.org/

一个用于逆向工程的第三方工具,可以用来逆向封闭的、二进制的Android应用程序。它可以将资源解码成几乎原始的形式,并在进行一些修改后重新构建它们。它还让应用程序使用起来变得更容易,因为APK项目本质上就是一个文件结构,我们可以将一些重复性的任务自动化,如构建apk等。

java -jar apktool.jar d yourapp.apk

2、从apk/dex中获取jar文件 - enjarify

https://github.com/google/enjarify

用于将Dalvik字节码转换为等价的Java字节码。

Enjarify是一个纯python 3应用程序,所以你可以直接运行它,你需要在命令行中进入到项目的根目录中,然后运行:

python -O -m enjarify.main yourapp.apk

3、从Jar中获取java代码

a. jd-core

https://github.com/nviennot/jd-core-java

JD-Core是jd-gui使用的java反编译器

java -jar jd-core.jar <compiled.jar> <out-dir>

b. cfr

https://www.benf.org/other/cfr/

CFR将对现代Java特性进行反编译——包括大部分Java 9、10和更高版本

java -jar cfr.jar <compiled.jar> --outputdir <dir>

c. procyon

https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler

Procyon是一套专注于代码生成和分析的Java元编程工具。

java -jar procyon.jar <compiled.jar> -o <dir>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/778258.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue事件处理v-on或@

事件处理v-on或 我们可以使用v-on指令&#xff08;简写&#xff09;来监听DOM事件&#xff0c;并在事件触发时执行对应的Javascript。用法&#xff1a;v-on:click"methodName"或click"hander" 事件处理器的值可以是&#xff1a; 内敛事件处理器&#xff1…

【MindSpore学习打卡】应用实践-自然语言处理-基于RNN的情感分类:使用MindSpore实现IMDB影评分类

情感分类是自然语言处理&#xff08;NLP&#xff09;中的一个经典任务&#xff0c;广泛应用于社交媒体分析、市场调研和客户反馈等领域。本篇博客将带领大家使用MindSpore框架&#xff0c;基于RNN&#xff08;循环神经网络&#xff09;实现一个情感分类模型。我们将详细介绍数据…

【数据结构(邓俊辉)学习笔记】高级搜索树01——伸展树

文章目录 1. 逐层伸展1. 1 宽松平衡1. 2 局部性1. 3 自适应调整1. 4 逐层伸展1. 5 实例1. 6 一步一步往上爬1. 7 最坏情况 2. 双层伸展2.1 双层伸展2.2 子孙异侧2.3 子孙同侧2.4 点睛之笔2.5 折叠效果2.6 分摊性能2.7 最后一步 3 算法实现3.1 功能接口3.2 伸展算法3.3 四种情况…

uniapp H5页面设置跨域请求

记录一下本地服务在uniapp H5页面访问请求报跨域的错误 这是我在本地起的服务端口号为8088 ip大家可打开cmd 输入ipconfig 查看 第一种方法 在源码视图中配置 "devServer": {"https": false, // 是否启用 https 协议&#xff0c;默认false"port&q…

vb.netcad二开自学笔记5:ActiveX链接CAD的.net写法

一、必不可少的对象引用 使用activex需要在项目属性中勾选以下两个引用&#xff0c;若找不到&#xff0c;则浏览定位直接添加下面两个文件&#xff0c;可以看到位于cad的安装路径下&#xff0c;图中的3个mgd.dll也可以勾选。 C:\Program Files\Autodesk\AutoCAD 2024\Autodes…

(数据大屏)(Hadoop)基于SSM框架的学院校友管理系统的设计与实现+文档

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

Java线上接口耗时分析神器 Arthas

介绍 程序员的日常&#xff0c;总是离不开“调优”和“排查”。尤其当线上环境出现问题&#xff0c;性能瓶颈把人逼疯。这时候&#xff0c;你就需要一款像 Arthas 这样的神器来救场。 什么是 Arthas&#xff1f; 简单来说&#xff0c;Arthas 是阿里巴巴开源的 Java 诊断工具…

前端八股文 对$nextTick的理解

$nexttick是什么? 获取更新后的dom内容 为什么会有$nexttick ? vue的异步更新策略 (这也是vue的优化之一 要不然一修改数据就更新dom 会造成大量的dom更新 浪费性能) 这是因为 message &#xff08;data&#xff09;数据在发现变化的时候&#xff0c;vue 并不会立刻去更…

学习笔记——动态路由——IS-IS中间系统到中间系统(区域划分)

三、IS-IS区域划分 根据IS-IS路由器邻居关系&#xff0c;可以将IS-IS划分为两个区域——骨干区域和非骨干区域。&#xff08;注意&#xff0c;这里的区域不是上文中提到的Area ID&#xff09;由L2的IS-IS邻居构成的区域为骨干区域&#xff0c;由L1的IS-IS邻居构成的区域为非骨…

c与c++的内存管理

给出内存四个分区名字&#xff1a;栈区、堆区、全局区&#xff08;俗话也叫静态变量区&#xff09;、代码区&#xff08;也叫代码段&#xff09;&#xff08;代码段又分很多种&#xff0c;比如常量区&#xff09; 当然也会看到别的定义如&#xff1a; 两者都正确&#xff0c;记…

Adobe Acrobat添加时间戳服务器

文章目录 前言一、Adobe Acrobat添加时间戳服务器1.打开Adobe Acrobat软件2.点击【菜单】→ 【首选项】3.点击【安全性】→【更多】4.点击【新建】5.输入【名称】→【服务器URL】 前言 一、Adobe Acrobat添加时间戳服务器 1.打开Adobe Acrobat软件 2.点击【菜单】→ 【首选项…

广州佛山中山数据中心机房搬迁公司

随着数据中心的发展和迭代&#xff0c;必然面临数据中心搬迁。数据中心搬迁听来简单&#xff0c;其实涉及诸多方面&#xff0c;如信息迁移的安全性、业务的连续性、搬迁的规范性、方案的可行性、组织的统一性等。友力科技&#xff08;广州&#xff09;有限公司&#xff0c;自原…

IT专业入门,高考假期预习指南—初识产品经理BRD、MRD 和 PRD

七月来临&#xff0c;各省高考分数已揭榜完成。而高考的完结并不意味着学习的结束&#xff0c;而是新旅程的开始。对于有志于踏入IT领域的高考少年们&#xff0c;这个假期是开启探索IT世界的绝佳时机。作为该领域的前行者和经验前辈&#xff0c;你是否愿意为准新生们提供一份全…

Python + OpenCV 开启图片、写入储存图片

这篇教学会介绍OpenCV 里imread()、imshow()、waitKey() 方法&#xff0c;透过这些方法&#xff0c;在电脑中使用不同的色彩模式开启图片并显示图片。 imread() 开启图片 使用imread() 方法&#xff0c;可以开启图片&#xff0c;imread() 有两个参数&#xff0c;第一个参数为档…

算法库应用--Brute - Force算法串匹配(顺序串)

学习贺利坚老师关于B-F算法的算法库 数据结构例程——串的模式匹配&#xff08;Brute-Force算法&#xff09;_sqstring s, t; strassign(s,"ababcabcacbabcaccab");-CSDN博客 本人规则解析博客 串的匹配 (Brute - Force 算法)_brute force算法-CSDN博客\ 版本更新日志…

郭明錤:苹果将为Vision Pro推出红外摄像头款AirPods

在科技界,苹果公司的每一次创新都备受瞩目。近日,著名苹果分析师郭明錤透露了一个令人振奋的消息:苹果计划在2026年推出配备红外摄像头的新款AirPods,这款耳机将特别优化与Apple Vision Pro头显的空间体验。这一消息不仅预示着苹果在音频设备领域的又一次技术飞跃,也进一步…

工作手机怎么做好业务员工作微信的监控管理

什么是工作手机管理系统&#xff1f; 工作手机管理系统是专为企业管理设计的员工微信管理&#xff0c;它通过监控通讯记录、保障数据安全、自动检测敏感行为、永久保留客户信息等功能&#xff0c;帮助企业提升销售效率、维护客户资源安全&#xff0c;并确保业务流程的合规性。…

04-ArcGIS For JavaScript的可视域分析功能

文章目录 综述代码实现代码解析结果 综述 在数字孪生或者实景三维的项目中&#xff0c;视频融合和可视域分析&#xff0c;一直都是热点问题。Cesium中&#xff0c;支持对阴影的后处理操作&#xff0c;通过重新编写GLSL代码就能实现视域和视频融合的功能。ArcGIS之前支持的可视…

在 PostgreSQL 中,如何处理数据的版本控制?

文章目录 一、使用时间戳字段进行版本控制二、使用版本号字段进行版本控制三、使用历史表进行版本控制四、使用 RETURNING 子句获取更新前后的版本五、使用数据库触发器进行版本控制 在 PostgreSQL 中&#xff0c;处理数据的版本控制可以通过多种方式实现&#xff0c;每种方式都…

开源六轴协作机械臂myCobot 280接入GPT4大模型!实现更复杂和智能化的任务

本文已经或者同济子豪兄作者授权对文章进行编辑和转载 引言 随着人工智能和机器人技术的快速发展&#xff0c;机械臂在工业、医疗和服务业等领域的应用越来越广泛。通过结合大模型和多模态AI&#xff0c;机械臂能够实现更加复杂和智能化的任务&#xff0c;提升了人机协作的效率…