Android安装包反编译测试之重签名

Android程序要运行就必须要签名,在发布一款Android app之前,需要使用/jdk/bin目录下的keytool和jarsigner两个工具来完成签名任务。其中,keytool用来生成证书(keystore),jarsigner用来进行签名。

APK签名原理

1、要点:

a.所有的应用程序都必须有数字证书 ,Android系统不会安装一个没有数字证书的应用程序;

b.Android程序包使用的数字证书可以是自签名的,不需要一个权威的数字证书机构签名认证;

c.数字证书都是存在有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能。 

d.Android使用标准的java工具 Keytool 、Jarsigner 来生成数字证书,并给应用程序包签名。

2、作用

a、应用程序升级: 如果想升级应用程序,签名证书要相同,包名称要相同!

b、应用程序模块化:Android 系统可以允许同一个证书签名的多个应用程序在一个进程里运行,系统实际把他们作为一个单个的应用程序,此时就可以把我们的应用程序以模块的方式进行部署,而用户可以独立的升级其中的一个模块。

c、代码或者数据共享:Android 提供了基于签名的权限机制,那么一个应用程序就可 以为另一个以相同证书签名的应用程序公开自己的功能。以同一个证书对多个应用程序进行签名,利用基于签名的权限检查,你就可以在应用程序间以安全的方式共享代码和数据了。
3、重签名原理

a、Android系统签名主要有ROM签名和应用程序APK签名两种形式。ROM签名是针对已经生成的Android系统ROM包进行签名。应用程序APK签名是针对开发者开发的应用程序APK进行签名。

b、APK实际上是一个jar或者说是一个zip压缩文件,META-INF目录下存放的是压缩包中所有文件的签名信息,用来保证apk包的完整性和系统的安全。

c、重签名:实际上就是删除META-INF目录(删除已有签名),使用自已数据证书再次重签名。

APK重签名示例

1、生成本机keystore数字证书

keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -keyalg RSA -validity 10000

命令说明:

##
keytool是工具名称,-genkey意味着执行的是生成数字证书操作,-v表示将生成证书的详细信息打印出来,显示在dos窗口中; 
-keystore  debug.keystore 表示生成的数字证书的文件名为“ debug.keystore”;
-alias  androiddebugkey   表示证书的别名为“ androiddebugkey  ”,可以与Keystore一样;
-keyalg RSA 表示生成密钥文件所采用的算法为RSA;
-validity 10000 表示该数字证书的有效期为10000天,意味着10000天之后该证书将失效
##

 此时会在C盘根目录下生成一个debug.keystore证书文件。

2、删除原有的APK签名文件,具体操作如下:

a. 将app-debug.apk重命名为app-debug.zip,并解压

b. 并将文件夹app-debug重命名为app-debug_temp

c. 进入app-debug_temp,找到META-INF并删除

d. 将app-debug_temp整个文件夹重新打包成.zip压缩包,然后更改扩展名为.apk

3、APK重签名

jarsigner -verbose -keystore debug.keystore -storepass Android -keypass Android -signedjar app-debug_signed.apk app-debug_temp.apk androiddebugkey

命令说明:

##

jarsigner是Java的签名工具

-verbose参数表示:显示出签名详细信息

-keystore表示使用当前目录中的debug.keystore签名证书文件。

-storepass 密钥口令 

-signedjar ThinkDrive_signed.apk表示签名后生成的APK名称,

ThinkDrive_temp.apk 表示未签名的APK,

androiddebugkey表示debug.keystore的别名

##

此时,C盘根目录下会生成经过重签名后的一个新的.apk文件app-debug_signed.apk。

在手机上安装经过重签名的安装包,提示“解析软件包时出现问题”,安装失败,该apk文件采用了签名保护机制,阻止程序运行,从而保证应用不被恶意修改后重新发布。

一般的,对于apk文件的签名测试,如果存在这样的预期结果,即:更换签名后,触发应用防御机制,应用无法启动或提示“解析软件包时出现问题”,那么可以说明应用具备签名保护机制。

猜你喜欢

转载自www.cnblogs.com/gaopei/p/11511442.html