Android APK加固原理

这篇具有很好参考价值的文章主要介绍了Android APK加固原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、前言

Android作为开源框架,开放之余,所要面临的就是安全问题,世间之事,有正就有邪,有攻就有守,作为开发者虽然不需要进入专业安全领域,但还是需要掌握基本的安全常识和原理。

二、加壳

加壳最初用于windows平台可执行程序,后被Andriod平台采用用于apk加固,可阻止对apk的反编译反调试等。

基本原理就是在程序中植入一段代码,在运行的时候取得控制权进行额外程序操作,跟病毒执行原理类似。

App的加固技术可分为:dex加密和so加密,其中dex加密更为重要,因为dex可反编译为java可读代码。

三、DEX文件

apk解压后可以从目录中看到classes.dex文件,它是运行在daivilk虚拟机上的Android可执行文件,包含应用程序的全部操作指令以及运行时数据。java程序编译成class后,使用dx工具将所有class文件整合到dex文件中,使各个类可以共享数据,文件结构更加紧凑且减少冗余,是传统jar文件大小的50%左右。

Dex文件整体结构图:

安卓加固原理,移动技术,Android,安全,android,安卓,java,移动开发,安全

从宏观上来说 dex 的文件结果很简单,实际上是由多个不同结构的数据体以首尾相接的方式拼接而成,如图:

安卓加固原理,移动技术,Android,安全,android,安卓,java,移动开发,安全

 ​​​​​​其中Header 的存储内容,如图:

安卓加固原理,移动技术,Android,安全,android,安卓,java,移动开发,安全​​​​​​​

这里主要关注3个字段:checksum、signature和fileSize。

checksum:校验码字段,占4bytes,主要用来检查从该字段(不包含checksum字段,也就是从12bytes开始算起)开始到文件末尾,这段数据是否完整,也就是完整性校验。它使用alder32算法校验。

signature:SHA-1签名字段,占20bytes,作用跟checksum一样,也是做完整性校验。之所以有两个完整性校验字段,是由于先使用checksum字段校验可以先快速检查出错的dex文件,然后才使用第二个计算量更大的校验码进行计算检查。

fileSize:文件长度字段,占4bytes,保存classes.dex文件总长度。

当加密后的程序写入Dex,需要修改checksum和signature确保两次文件检查通过,以及修改dex文件的大小,否则Dalvik虚拟机加载会报错。另外,脱壳的时候,需要拿到apk的大小,将源apk的大小追加到壳dex的末尾就可以了。

四、加固原理

加固apk运行流程:

安卓加固原理,移动技术,Android,安全,android,安卓,java,移动开发,安全
Dex文件整体加固原理:

 安卓加固原理,移动技术,Android,安全,android,安卓,java,移动开发,安全

在该过程中涉及到三个对象,分别如下:

源程序:加固的对象,主要修改原apk文件中的classes.dex和AndroidManifest.xml文件。

壳程序:用于解密dex(加密)文件,并加载解密后的原dex文件,然后正常启动原程序。

加密程序:对原dex文件进行加密,加密算法可选:异或操作、反转、rc4、des、rsa等。

加固过程可分4个阶段:

(1) 加密dex文件

(2)合成新的dex文件

(3)修改原apk文件打包

(4)运行壳程序加载原dex文件

4.1 加密dex文件

加密阶段主要是讲把原apk文件中提取出来的classes.dex文件通过加密程序进行加密。加密的时候如果使用des对称加密或者非对称加密算法,则需要注意处理好密钥保存的问题。

安卓加固原理,移动技术,Android,安全,android,安卓,java,移动开发,安全
4.2 合成新的dex文件

合成阶段主要是将上一步生成的加密的dex文件追加在壳dex文件后面,两个dex进行合并,然后在文件末尾追加加密dex文件的大小数值。

安卓加固原理,移动技术,Android,安全,android,安卓,java,移动开发,安全

壳程序里面ProxyApplication(继承自Application)类,是应用程序最先运行的类,在原程序运行之前,可以在在这个类里面进行解密dex文件和加载原dex文件的操作。

4.3 修改原apk文件打包

1.解压apk,准备修改2个文件:classes.dex和AndroidManifest.xml。

2.将classes.dex替换为上一步加密合成的classes.dex。

3.修改AndroidManifest.xml文件,指定application为ProxyApplication。

4.打包签名。

安卓加固原理,移动技术,Android,安全,android,安卓,java,移动开发,安全
4.4运行壳程序加载原dex文件

​​​​​​​执行步骤:

Dalvik虚拟机加载新classes.dex文件->运行ProxyApplication类->执行attachBaseContext方法->执行onCreate方法。

attachBaseContext方法任务:

1.获取加密dex文件的位置:len(新classes.dex文件) – len(加密dex文件大小:classes.dex文件末尾记录),读取加密的dex文件,将其解密并保存到资源目录下。

2.使用自定义的DexClassLoader加载解密后的原dex文件。

onCreate方法任务:

1.通过反射修改ActivityThread类,将Application指向原dex文件中的Application。

2.创建原Application对象,调用原Application的onCreate方法启动原程序。

安卓加固原理,移动技术,Android,安全,android,安卓,java,移动开发,安全

欢迎关注微信公众号:android-tech文章来源地址https://www.toymoban.com/news/detail-725893.html

到了这里,关于Android APK加固原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 安卓apk修改(Android反编译apk)

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步: 反编译解包,修改, 重打包 , 修改签名等步骤。 1. 系统配置好Java JDK环境变量 2. 需要

    2024年02月01日
    浏览(45)
  • 实现Android APK加固:代码加密隐藏、资源加密隐藏、so库加密隐藏。兼容unity引擎。附加固工具链接。

    0.1.可自动批量循环改包 改包包括:自动换包名(可选),自动改类,清单处理等 使用场景:原包为母包,争取处理出来的包没有容易被标记的地方 0.2.可自动批量循环加固,改包后自动加固 使用场景:原包为母包,争取处理出来的包每个包都不一样 0.3 改包加固效果 原包代码不可见,原包

    2024年02月09日
    浏览(60)
  • 安卓apk加固后重签名

    等保检测,安卓apk使用第三方加固后签名信息会丢失,需要我们重新进行签名 APP失效无法安装 我们在这里使用Android SDK的apksigner进行签名 #apksigner export AAPT_HOME=/Users/你的用户名/Library/Android/sdk/build-tools/30.0.2 export PATH=$PATH:$AAPT_HOME 查看配置是否生效 输入命令行 apksigner 看到就是

    2024年01月18日
    浏览(42)
  • 利用MSF打包加固APK对安卓手机进行控制

    由于经典的MSF生成apk安装包控制,版本较低,高版本安卓手机可能会出现版本不支持或无法使用的现象,而且apk无法正常使用,没有图形化界面,比较假。 相比于原始的msf远控,此版本app在进行远控时,被注入的app可以正常运行,原始msf生成的app程序,只在桌面上有一个图标

    2024年01月16日
    浏览(40)
  • Mac安装安卓虚拟机 - Android Studio运行apk安装包

    下载安装 Download Android Studio App Tools - Android Developers 选择“Download options” 选择“Mac”版本,大概1G 打开安装包,拖拽程序到应用程序文件夹 按下F4,打开Android Studio 第一次运行,选择不倒入任何设置: 设置代理 为不使用代理 打开主界面,“more actions”,选择“Virtual Device

    2024年02月04日
    浏览(86)
  • Android APK 签名打包原理分析(二)【Android签名原理】

    说到签名,从这个词来理解,正常个人需要签名的时候,一般是用来证明这是某个人的特属认证。 大家是否有印象?还记得我们之前在学习、总结网络相关知识的时候,说到过,客户端和服务端虽然通信数据上,可以采用对称加密和非对称加密组合去进行数据的加密,但是这

    2024年01月18日
    浏览(48)
  • Android SDK安全加固问题与分析

    作者 | 百度APP技术平台 导读 在移动互联网快速发展的背景下,保护Android应用程序的安全性和知识产权变得尤为重要。为了防止恶意攻击和未授权访问,通常采用对dex文件进行代码加固来保护应用程序。随着Android加固技术经过动态加载、不落地加载、指令抽取、java2cpp、VMP等

    2024年02月11日
    浏览(44)
  • Android APK 签名打包原理分析(一)【APK结构分析】

    最近在看AOSP Apk安装的相关源码时,发现自己对这块知识一直停留到用的层面,并未有深入的了解,例如打包的具体过程、签名的具体过程、渠道打包,最重要的,自己这几年在做系统方面的应用时,也解决过很多apk 安装的问题,修改过部分的系统源码,可是没有把这块知识

    2024年02月02日
    浏览(49)
  • Android中的APK打包与安全

    apk文件结构 classes.dex:Dex,即Android Dalvik执行文件 AndroidManifest.xml:工程中AndroidManifest.xml编译后得到的二进制xml文件 META-INF:主要保存各个资源文件的SHA1 hash值,用于校验资源文件是否被篡改,防止二次打包时资源文件被替换,该目录下主要包括下面三个文件: MANIFEST.MF:保

    2024年02月11日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包