安卓漏洞学习(十八):Android加固基本原理

server/2025/1/8 2:00:13/

APP加固技术发展历程

在这里插入图片描述

APK加固整体思路

在这里插入图片描述
加固整体思路:先解压apk文件,取出dex文件,对dex文件进行加密,然后组合壳中的dex文件(Android类加载机制),结合之前的apk资源(解压apk除dex以外的其他资源,如manifest、res等),打包新的apk文件,并对新的apk文件进行对齐、签名。

Android加固原理

在这里插入图片描述
Dex文件整体加固原理如下:
在这里插入图片描述
该过程涉及到三个对象,分别为:

1.源程序

源程序也就是我们的要加固的对象,这里面主要修改的是原apk文件中的classes.dex文件和AndroidManifest.xml文件。

2.壳程序

壳程序主要用于解密经过加密了的dex文件,并加载解密后的原dex文件,并正常启动原程序。

3. 加密程序

加密程序主要是对原dex文件进行加密,加密算法可以是简单的异或操作、反转、rc4、des、rsa等加密算法。
  该加固过程可以分为如下4个阶段:
  (1) 加密阶段
  (2)合成新的dex文件
  (3)修改原apk文件并重打包签名
  (4)运行壳程序加载原dex文件加密阶段

加密阶段

主要是将把原apk文件中提取出来的classes.dex文件通过加密程序进行加密。
在这里插入图片描述

合成新的dex文件

这一阶段主要是将上一步生成的加密的dex文件和我们的壳dex文件合并,将加密的dex文件追加在壳dex文件后面,并在文件末尾追加加密dex文件的大小数值。
 在这里插入图片描述
在壳程序里面,有个重要的类:ProxyApplication类,该类继承Application类,也是应用程序最先运行的类。所以,我们就是在这个类里面,在原程序运行之前,进行一些解密dex文件和加载原dex文件的操作。

修改原apk文件并重打包签名

在这一阶段,我们首先将apk解压,会看到如下图的6个文件和目录。其中,我们需要修改的只有2个文件,分别是classes.dex和AndroidManifest.xml文件,其他文件和文件加都不需要改动。
  首先,我们把解压后apk目录下原来的classes.dex文件替换成我们在上一步合成的新的classes.dex文件。然后,由于我们程序运行的时候,首先加载的其实是壳程序里的ProxyApplication类。所以,我们需要修改AndroidManifest.xml文件,指定application为ProxyApplication,这样才能正常找到识别ProxyApplication类并运行壳程序。
在这里插入图片描述

运行壳程序加载原dex文件

Dalvik虚拟机会加载我们经过修改的新的classes.dex文件,并最先运行ProxyApplication类。在这个类里面,有2个关键的方法:

attachBaseContext和onCreate方法

ProxyApplication先是运行attachBaseContext再运行onCreate方法。
  在attachBaseContext方法里,主要做两个工作:读取classes.dex文件末尾记录加密dex文件大小的数值,则加密dex文件在新classes.dex文件中的位置为:len(新classes.dex文件) – len(加密dex文件大小)。然后将加密的dex文件读取出来,解密并保存到资源目录下然后使用自定义的DexClassLoader加载解密后的原dex文件
  在onCreate方法中,主要做两个工作:通过反射修改ActivityThread类,并将Application指向原dex文件中的Application创建原Application对象,并调用原Application的onCreate方法启动原程序。
在这里插入图片描述

链接:https://www.zhihu.com/question/51585199/answer/3297302964
来源:知乎


http://www.ppmy.cn/server/156240.html

相关文章

el-table行列转换简单版,仅限单行数据

原始数据格式如下&#xff0c;如果不是此格式&#xff0c;请转换成以下格式在进行以下操作 [{ label: name, value: Tom },{ label: age, value: 25 },{ label: country, value: UK } ]代码如下 <template><el-table :data"tableData" style"width: …

探索光耦:光耦在风力发电中的应用——保障绿色能源的高效与安全

在全球能源结构加速向清洁、可再生方向转型的今天&#xff0c;风力发电作为一种绿色能源&#xff0c;已成为各国新能源发展的重要组成部分。然而&#xff0c;风力发电系统在复杂的环境中长时间运行&#xff0c;对系统的安全性、稳定性和抗干扰能力提出了极高要求。光耦&#xf…

ESP32学习--SPIFFS文件系统

文件系统SPIFFS学习 本次学习基于 storage/spiffsgen 例程 前言 在嵌入式系统的学习过程中&#xff0c;我们将越来越频繁的需要去和内存打交道&#xff0c;有的是外置存储&#xff0c;有的是内置的存储。当我们需要管理的内存越来越多的时候&#xff0c;再使用简单的地址读…

Spring Boot 3 配置大全系列 —— 如何配置用户的登录与认证?

学会这款 &#x1f525;全新设计的 Java 脚手架 &#xff0c;从此面试不再怕&#xff01; 升级 Spring Boot 3 配置讲解 —— 如何配置用户的登录与认证&#xff1f; 随着 Spring Boot 3 的发布&#xff0c;开发者迎来了许多新特性和改进&#xff0c;尤其是在安全性和用户认证…

题目解析与代码实现:You‘re Given a String

引言 本文将详细解读一道字符串处理题目 “You’re Given a String”&#xff0c;并用 Python 实现该题的解决方案&#xff0c;同时解析其核心算法逻辑。本文适合有一定基础的程序员&#xff0c;希望通过字符串算法提升能力的读者。 1. 题目描述 问题背景 题目给出了一个字符…

安卓11 SysteUI添加按钮以及下拉状态栏的色温调节按钮

最近客户想要做一个台灯产品&#xff0c;需要实现 串口调节台灯功能 &#xff0c;其中包括 亮度调节 色温调节 开关 三个功能 话不多说&#xff0c;贴代码 diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml old mode 100644 new …

wireshark超简单简单抓取自己网站的https包解密

端口8007 ip.addr 222.125.231.1 &&tcp.srcport8007&&http 我这网站虽然是https加密协议但是是超文本协议还是http1 而不是http2有的则是http2 也可以输入&&tls过滤只看传输层 image.png image.png 解密办法 配置日志文件到环境变量&#xff0c;然后c…

联邦学习的 AI 大模型微调中,加性、选择性、重参数化和混合微调

联邦学习的 AI 大模型微调中,加性、选择性、重参数化和混合微调 在联邦学习的 AI 大模型微调中,加性、选择性、重参数化和混合微调是不同的操作方式,具体如下: 加性微调 定义与原理:加性微调是在原始模型的基础上添加额外的可训练参数来进行模型调整。这种方式不会改变原…