[IOV安全入门] 十二. Android安全之签名机制


欢迎新同学的光临
… …
人若无名,便可专心练剑


我不是一条咸鱼,而是一条死鱼啊!


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。

  • classes.dex

apk的代码所在,所有的代码、业务逻辑、算法等,是由java代码转化过来的,一般篡改、加固都是针对这个文件

  • resources.arsc:

资源文件(字符文件),对一款软件显示的文字进行修改(对英语软件汉化)

:反编译后消失,被反编译res文件下的values文件夹

  • META-INF

apk的签名文件,是apk正盗版的唯一标识(一款软件想要安装在安卓系统上,必须要有一个合法的META-INF文件,不同的开发者签名文件一定是不一样的)

:一般反编译后就没有该文件了,因为反编译会破坏这个apk,所以反编译后签名文件会被处理掉

  • res文件

图标、画面图片等

:反编译后会比apk情况下多一些文件,其中resources.arsc文件一般会被反编译到res文件下的values文件夹下

  • lib目录

这里存放应用程序依赖的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处理器的编译后代码

  • assets目录

用于存放需要打包到APK中的静态文件,和res的不同点在于,assets目录支持任意深度的子目录,用户可以根据自己的需求任意部署文件夹架构,而且res目录下的文件会在.R文件中生成对应的资源ID,assets不会自动生成对应的ID,访问的时候需要AssetManager类

  • AndroidManifest.xml

配置清单文件:标识这一款软件有多少个页面、服务、组件

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

《智能硬件安全》刘键皓等编著


我自横刀向天笑,去留肝胆两昆仑


猜你喜欢

转载自blog.csdn.net/Ananas_Orangey/article/details/122269019
今日推荐