Android中的APK打包与安全
aapt2命令行实现apk打包
apk文件结构

-
classes.dex:Dex,即Android Dalvik执行文件
-
AndroidManifest.xml:工程中AndroidManifest.xml编译后得到的二进制xml文件
-
META-INF:主要保存各个资源文件的SHA1 hash值,用于校验资源文件是否被篡改,防止二次打包时资源文件被替换,该目录下主要包括下面三个文件:
- MANIFEST.MF:保存版本号以及对每个文件(包括资源文件)整体的SHA1 hash
- CERT.SF:保存对每个文件头3行的SHA1 hash
- CERT.RSA:保存签名和公钥证书
-
res:res目录下资源文件编译后得到的二进制xml文件
-
resources.arsc:包含了所有资源文件的映射,可以理解为资源索引,通过该文件能找到对应的资源文件信息
aapt2打包流程

- 通过aapt2打包res资源文件:生成R.java、resoucres.arsc和res文件
- 通过Javac编译R.java、Java源文件:生成class文件
- 通过d8命令:将class文件和第三方库中的class文件处理生成classes.dex
- 通过aapt2工具:将aapt生成的resoucres.arsc和res文件、未编译的资源assets文件和classes.dex一起打包生成apk
- 通过zipalign工具:将未签名的apk进行对齐处理
- 通过apksigner工具:对上面的apk进行debug或release签名

aapt2命令行实现打包





按照上面的顺序使用各个命令便可以打包生成一个apk包了。
Gradle构建工具打包
如果使用传统的aapt2的方式打包,在多模块的情况下将会十分的麻烦。幸好,gradle已经将上述的命令集成了在了各个task中。

APK安全攻守道
| 风险种类 | 风险描述 | 解决方案 |
|---|---|---|
| App防止反编译 | 被反编译会暴露客户端逻辑,加密算法,密钥等等 | I加密,邦邦加固,360加固包等 |
| 资源文件泄漏风险 | 获取图片,js等文件 | 资源混淆(AndResGuard),加固等 |
| so文件破解风险 | 导致核心代码逻辑泄漏 | so加固 |
| 测试开关的代码被打包发布 | 通过测试的url,测试账号等对正式服务器进行攻击 | 正式服务器与测试服务器不要使用同一个 |
| Root设备运行风险 | 已经root的手机通过获取应用的敏感信息等 | root手机禁止应用启动 |
| 模拟器运行风险 | 刷单,模拟虚拟位置等 | 禁止在虚拟器上运行 |
| 截屏攻击风险 | 对app运行中的界面进行截图或录制来获取用户信息 | 添加属性getWindow().setFlags(FLAG_SECURE,FLAG_SECURE)不让用户截图和录屏 |
| 输入监听风险 | 用户输入的信息被监听 | 自定义键盘 |
相关文章:
Android中的APK打包与安全
aapt2命令行实现apk打包 apk文件结构 classes.dex:Dex,即Android Dalvik执行文件 AndroidManifest.xml:工程中AndroidManifest.xml编译后得到的二进制xml文件 META-INF:主要保存各个资源文件的SHA1 hash值,用于校验…...
HTTPS单向认证与双向认证
HTTPS单向认证与双向认证 HTTPSCA证书单向认证双向认证 HTTPS Https就是HTTPSSL/TSL的简称。 SSL(Secure Socket Layer 安全套接层)是TCP/IP协议中基于HTTP之下TCP之上的一个可选协议层。 起初HTTP在传输数据时使用的是明文,传输过程中并不安全。网景(N…...
(七) ElasticSearch 分词器
1.分词器 分词器是 Elasticsearch 用于将文本拆分为单词(词项)的组件,以便于搜索和索引。以下是一些关于 Elasticsearch 分词器的常见问题和相关操作的介绍: 1)什么是分词器? 分词器是 Elasticsearch 中…...
足球- EDA的历史数据分析并可视化
足球- EDA的历史数据分析并可视化 背景数据介绍探索数据时需要遵循的一些方向:数据处理导入库数据探索 数据可视化赛事分析主客场比分相关性分析时间序列分析 总结 背景 该数据集包括从1872年第一场正式比赛到2023年的44,341场国际足球比赛的结果。比赛范围从FIFA世…...
用正则处理Unicode 编码的文本
Unicode(中文:万国码、国际码、统一码、单一码)是计算机科学领域里的一项业界标准。它对世界上大部分的文字进行了整理、编码。Unicode 使计算机呈现和处理文字变得简单。 现在的 Unicode 字符分为 17 组编排,每组为一个平面&…...
【分布式技术专题】「OSS中间件系列」从0到1的介绍一下开源对象存储MinIO技术架构
MinIO背景介绍 MinIO创始者是Anand Babu Periasamy, Harshavardhana(戒日王)等人, Anand是GlusterFS的初始开发者、Gluster公司的创始人与CTO,Harshavardhana曾经是GlusterFS的开发人员,直到2011年红帽收购了Gluster公…...
生成式人工智能的潜在有害影响与未来之路(三)
产品责任法的潜在适用 背景和风险 产品责任是整个二十世纪发展起来的一个法律领域,旨在应对大规模生产的产品可能对社会造成的伤害。这一法律领域侧重于三个主要危害:设计缺陷的产品、制造缺陷的产品和营销缺陷的产品。产品责任法的特点有两个要素&…...
【2023钉钉杯复赛】A题 智能手机用户监测数据分析 Python代码分析
【2023钉钉杯复赛】A题 智能手机用户监测数据分析 Python代码分析 1 题目 一、问题背景 近年来,随着智能手机的产生,发展到爆炸式的普及增长,不仅推动了中 国智能手机市场的发展和扩大,还快速的促进手机软件的开发。近年中国智能…...
Django(5)-视图函数和模板渲染
Django 中的视图的概念是「一类具有相同功能和模板的网页的集合」 在我们的投票应用中,我们需要下列几个视图: 问题索引页——展示最近的几个投票问题。 问题详情页——展示某个投票的问题和不带结果的选项列表。 问题结果页——展示某个投票的结果。 投…...
Windows下 MySql通过拷贝data目录迁移数据库的方法
MySQL数据库的文件目录下图所示, 现举例说明通过COPY文件夹data下数据库文件,进行数据拷贝的步骤;源数据库运行在A服务器上,拷贝到B服务器,假定B服务器上MySQL数据库已经安装完成,为空数据库。 首先进入A服…...
RabbitMQ---订阅模型-Fanout
1、 订阅模型-Fanout Fanout,也称为广播。 流程图: 在广播模式下,消息发送流程是这样的: 1) 可以有多个消费者 2) 每个消费者有自己的queue(队列) 3) 每个队列都要绑定…...
nginx 中新增url请求参数
1、nginx中新增配置: set $args "$args&参数名参数值"; 示例: set $args "$args&demo1cn_yaojin&demo2123123&myip$remote_addr"; location / {add_header Access-Control-Allow-Origin *;add_header Access-Contro…...
[系统] 电脑突然变卡 / 电脑突然** / 各种突发情况解决思路
今天来公司办公,开机之后发现电脑出现各种问题,死机、卡顿、点什么都加载,甚至开一个文件夹要1分钟才能打开,花了2个小时才解决,走了很多弯路,其实早点想通,5分钟就能解决问题,所以打…...
改进YOLO系列:8.添加SimAM注意力机制
添加SimAM注意力机制 1. SimAM注意力机制论文2. SimAM注意力机制原理3. SimAM注意力机制的配置3.1common.py配置3.2yolo.py配置3.3yaml文件配置1. SimAM注意力机制论文 论文题目:SimAM: A Simple, Parameter-Free Attention Module for Convolutional Neural Network…...
Go与Rust的对比与分析
Rust 和 Go 是两种现代语言,近年来获得了巨大的关注,每种语言都有自己独特的优势和权衡。在这篇文章中,我们将深入探讨 Rust 和 Go 之间的差异,重点关注性能、语言功能和其他关键因素,以帮助您针对您的开发需求做出明智…...
SpingMVC拦截器-异常处理的思路,用户体验不好的地方
1、异常处理机制 1.1 原先我们的异常都是手动的try..catch() 2、他存在着一些缺陷:这里创建了一个Demo的controller,内部有一个show方法: 3、访问内部,我要实现demoshow方法,我们来调用show1和show2的方法: 4、有一…...
【C++设计模式】用动画片《少年骇客》(Ben10)来解释策略模式
2023年8月25日,周五上午 今天上午学习设计模式中的策略模式时,发现这个有点像很多卡通片里面的变身器... #include<iostream>//alien hero是外星英雄的意思 //在《少年骇客》中,主角可以通过变身器变成10种外星英雄 class AlienHero{ …...
软件测试及数据分析处理实训室建设方案
一 、系统概述 软件测试及数据分析处理是软件开发过程中的一项重要测试活动,旨在验证不同软件模块或组件之间的集成与交互是否正常。综合测试确保各个模块按照设计要求正确地协同工作,以实现整个软件系统的功能和性能。以下是软件测试及数据分析处理的一…...
切换Debian的crontab的nano编辑器
Debian的crontab默认的编辑器是nano,用起来很不习惯,怎么才能转回vim呢? 用以下命令便可: #update-alternatives --config editor 出现以下所示的界面: 而后选择8使用/usr/bin/vim就能够了。 PS:若是你发现你的定时没有生效&…...
Spring Cloud Alibaba-Sentinel--服务容错
1 高并发带来的问题 在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用,但是由于网络 原因或者自身的原因,服务并不能保证服务的100%可用,如果单个服务出现问题,调用这个服务就会出…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
区块链技术概述
区块链技术是一种去中心化、分布式账本技术,通过密码学、共识机制和智能合约等核心组件,实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点:数据存储在网络中的多个节点(计算机),而非…...
结构化文件管理实战:实现目录自动创建与归类
手动操作容易因疲劳或疏忽导致命名错误、路径混乱等问题,进而引发后续程序异常。使用工具进行标准化操作,能有效降低出错概率。 需要快速整理大量文件的技术用户而言,这款工具提供了一种轻便高效的解决方案。程序体积仅有 156KB,…...
