欢迎新同学的光临 … … 人若无名,便可专心练剑
我不是一条咸鱼,而是一条死鱼啊!
0x01 前言
众所周知,Android系统在安装Apk的过程中,会对Apk进行签名校验,校验通过后才能安装成功。
APK签名是为了保证APK的完整性和来源的真实性,分为JAR签名和V2签名两种方案。核心思想均是计算APK内容的hash,再使用签名算法对hash进行签名。校验时通过签名者公钥解密签名,再与校验者计算的APK内容hash进行比对,一致则校验通过。
在开始之前我们先了解一下APK的基本结构
0x02 APK基本结构
Android应用程序包文件(APK)是一种Android操作系统上的应用程序安装文件格式,其英文全称为Application Package File。
一个Android应用程序的代码想要在Android设备上运行,必须先进行编译,然后被打包成一个Android系统能识别的文件,而这种能被Android系统识别并运行的文件格式便是APK。
一个APK文件内包含被编译的代码文件(.dex文件)、资源文件(resources)、assets、证书(certificates)和清单文件(manifest file)。
APK文件基于ZIP文件格式,它与JAR文件的构造方式相似,并以.apk作为文件扩展名。它的互联网媒体类型是application/vnd.android.package-archive。
apk的代码所在,所有的代码、业务逻辑、算法等,是由java代码转化过来的,一般篡改、加固都是针对这个文件
资源文件(字符文件),对一款软件显示的文字进行修改(对英语软件汉化)
注:反编译后消失,被反编译res文件下的values文件夹
apk的签名文件,是apk正盗版的唯一标识(一款软件想要安装在安卓系统上,必须要有一个合法的META-INF文件,不同的开发者签名文件一定是不一样的)
注:一般反编译后就没有该文件了,因为反编译会破坏这个apk,所以反编译后签名文件会被处理掉
图标、画面图片等
注:反编译后会比apk情况下多一些文件,其中resources.arsc文件一般会被反编译到res文件下的values文件夹下
这里存放应用程序依赖的native库文件,一般是用C/C++编写,这里的lib库可能包含4中不同类型,根据CPU型号的不同,大体可以分为ARM,ARM-v7a,MIPS,X86,分别对应着ARM架构,ARM-V7架构,MIPS架构和X86架构,这so库在APK包中
lib目录包含了指定处理器的已编译代码,是特定于处理器的软件层,可分为如下目录:
Armeabi:包含所有基于ARM处理器的编译后代码 armeabi-v7a:包含所有基于ARMv7及更高版本的处理器的编译后代码 arm64-v8a:包含所有基于ARMv8、ARM64及更高版本的处理器的编译后代码 x86:包含所有基于x86处理器的编译后代码 x86_64:包含所有基于x86_64处理器的编译后代码 Mips:包含所有基于MIPS处理器的编译后代码
用于存放需要打包到APK中的静态文件,和res的不同点在于,assets目录支持任意深度的子目录,用户可以根据自己的需求任意部署文件夹架构,而且res目录下的文件会在.R文件中生成对应的资源ID,assets不会自动生成对应的ID,访问的时候需要AssetManager类
配置清单文件:标识这一款软件有多少个页面、服务、组件
0x03 签名教程
使用signapk.jar为APK进行签名,为应用程序配置系统的签名:
解释: 第一个xxx.apk是项目打包后的apk, 第二个xx.apk被系统签名后的apk
java -jar signapk.jar platform.x509.pem platform.pk8 app-debug.apk launcherApp-debug.apk
Usage: signapk publickey.x509[.pem] privatekey.pk8 input.jar output.jar
再次调整未被系统签名的apk的路径,将apk拖动放到命令行中,重新输入:
java -jar signapk.jar platform.x509.pem platform.pk8 C:\Users\xxx\Desktop\signapk.jar\app-release.apk launcherApp.apk
注:有些APK会做反篡改保护,重打包后APK就会用不了,所以重打包之后还需要测试APK能否正常运行。
启动时不立刻闪退,并且运行至修改过的位置不崩溃,就是修改成功了。
0x04 其它知识以及案例
请前往如下:
https://blog.csdn.net/Ananas_Orangey/article/details/122090111
https://blog.csdn.net/m0_46204016/article/details/105605946
参考链接:
https://ljd1996.github.io/2019/08/26/Android%E7%AD%BE%E5%90%8D%E7%AC%94%E8%AE%B0/
https://www.jianshu.com/p/286d2b372334
https://blog.csdn.net/m0_37258694/article/details/113528815
https://blog.csdn.net/freeking101/article/details/106742734
https://www.cnblogs.com/LuLuLuHao/p/12863978.html
https://www.52pojie.cn/thread-1513149-1-1.html
https://blog.csdn.net/qq_34149335
《智能硬件安全》刘键皓等编著
我自横刀向天笑,去留肝胆两昆仑
|