Android覆盖升级以及apk签名

合集下载

Android的打包签名

Android的打包签名

Android的打包签名1.为什么要签名?开发Android的人这么多,完全有可能大家都把类名,包名起成了一个同样的名字,这时候如何区分?签名这时候就是起区分作用的。

由于开发商可能通过使用相同的Package Name来混淆替换已经安装的程序,签名可以保证相同名字,但是签名不同的包不被替换。

APK如果使用一个key签名,发布时另一个key签名的文件将无法安装或覆盖老的版本,这样可以防止你已安装的应用被恶意的第三方覆盖或替换掉。

这样签名其实也是开发者的身份标识。

交易中抵赖等事情发生时,签名可以防止抵赖的发生。

在Android 系统中,所有安装到系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立的信任关系,如果一个permission的protectionLevel为signature,那么就只有那些跟该permission所在的程序拥有同一个数字证书的应用程序才能取得该权限。

Android使用Java的数字证书相关的机制来给apk加盖数字证书,要理解android的数字证书,需要先了解以下数字证书的概念和java的数字证书机制。

Android系统要求每一个安装进系统的应用程序都是经过数字证书签名的,数字证书的私钥则保存在程序开发者的手中。

Android将数字证书用来标识应用程序的作者和在应用程序之间建立的信任关系,不是用来决定最终用户可以安装哪些应用程序。

这个数字证书并不需要权威的数字证书签名机构认证,它只是用来让应用程序包自我认证的。

2.签名的注意事项1.所有的Android应用都必须有数字签名,没有不存在数字签名的应用,包括模拟器上运行的。

Android系统不会安装没有数字证书的应用。

2.签名的数字证书不需要权威机构来认证,是开发者自己产生的数字证书,即所谓的自签名。

3.正式发布一个Android应用时,必须使用一个合适的私钥生成的数字证书来给程序签名,不能使用ADT插件或者ANT工具生成的调试证书来发布。

给Android的APK程序签名和重新签名的方法

给Android的APK程序签名和重新签名的方法

给Android的APK程序签名和重新签名的⽅法签名⼯具的使⽤Android源码编译出来的signapk.jar既可给apk签名,也可给rom签名的。

使⽤格式:java –jar signapk.jar [-w] publickey.x509[.pem] privatekey.pk8 input.jar output.jar-w 是指对ROM签名时需使⽤的参数publickey.x509[.pem] 是公钥⽂件privatekey.pk8 是指私钥⽂件input.jar 要签名的apk或者romoutput.jar 签名后⽣成的apk或者romsignapk.java1) main函数main函数会⽣成公钥对象和私钥对象,并调⽤addDigestsToManifest函数⽣成清单对象Manifest后,再调⽤signFile签名。

public static void main(String[] args) {//...boolean signWholeFile = false;int argstart = 0;/*如果对ROM签名需传递-w参数*/if (args[0].equals("-w")) {signWholeFile = true;argstart = 1;}// ...try {File publicKeyFile = new File(args[argstart+0]);X509Certificate publicKey = readPublicKey(publicKeyFile);PrivateKey privateKey = readPrivateKey(new File(args[argstart+1]));inputJar = new JarFile(new File(args[argstart+2]), false);outputFile = new FileOutputStream(args[argstart+3]);/*对ROM签名,读者可⾃⾏分析,和Apk饿签名类似,但是它会添加otacert⽂件*/if (signWholeFile) {SignApk.signWholeFile(inputJar, publicKeyFile, publicKey,privateKey, outputFile);}else {JarOutputStream outputJar = new JarOutputStream(outputFile);outputJar.setLevel(9);/*addDigestsToManifest会⽣成Manifest对象,然后调⽤signFile进⾏签名*/signFile(addDigestsToManifest(inputJar), inputJar,publicKeyFile, publicKey, privateKey, outputJar);outputJar.close();}} catch (Exception e) {e.printStackTrace();System.exit(1);} finally {//...}}2) addDigestsToManifest⾸先我们得理解Manifest⽂件的结构,Manifest⽂件⾥⽤空⾏分割成多个段,每个段由多个属性组成,第⼀个段的属性集合称为主属性集合,其它段称为普通属性集合,普通属性集合⼀般会有Name属性,作为该属性集合所在段的名字。

Android APK签名详解

Android APK签名详解
java -jar signapk.jar platform.x509.pem platform.pk8 D:/ClockSetting.apk D:/ClockSettingSigned.apk
<3>、打开真机,安装:
adb connect IP:Port (IP为真机IP地址,Port为端口)
adb install D:/ClockSettingSigned.apk
打包system.img预置应用在这个目录下
build/target/product
<1>、编译jar
命令行cd到signapk.java代码目录下,
javac signapk.java
获取SignApk$SignatureOutputStream.class和SignApk.class
建立目录jar/com/android/signapk,将两个class文件放入目录下
一,签名系统APK
1、用eclipse编译出apk(ClockSetting.apk)文件,但这个文件不能用,删掉META-INF目录下的CERT.SF和CERT.RSA两个文件
2、使用当前android系统(android系统可能不同)的platform密钥来重新给apk文件签名(可能还未用用户米要签名)。
jar cvቤተ መጻሕፍቲ ባይዱm signapk.jar SignApk.mf -C jar/ .
注意:"jar/"后面的"."前面有空格
生成signapk.jar文件,得到了Android提供的签名程序signapk.jar
<2>、用目标系统的platform密钥签名

详解Androidv1、v2、v3签名(小结)

详解Androidv1、v2、v3签名(小结)

详解Androidv1、v2、v3签名(⼩结)Android签名机制什么是Android签名了解 HTTPS 通信的同学都知道,在消息通信时,必须⾄少解决两个问题:⼀是确保消息来源的真实性,⼆是确保消息不会被第三⽅篡改。

同理,在安装 apk 时,同样也需要确保 apk 来源的真实性,以及 apk 没有被第三⽅篡改。

为了解决这⼀问题,Android官⽅要求开发者对 apk 进⾏签名,⽽签名就是对apk进⾏加密的过程。

要了解如何实现签名,需要了解两个基本概念:消息摘要、数字签名和数字证书。

消息摘要消息摘要(Message Digest),⼜称数字摘要(Digital Digest)或数字指纹(Finger Print)。

简单来说,消息摘要就是在消息数据上,执⾏⼀个单向的 Hash 函数,⽣成⼀个固定长度的Hash值,这个Hash值即是消息摘要。

上⾯提到的的加密 Hash 函数就是消息摘要算法。

它有以下特征:⽆论输⼊的消息有多长,计算出来的消息摘要的长度总是固定的。

例如:应⽤ MD5 算法摘要的消息有128个⽐特位,⽤ SHA-1 算法摘要的消息最终有 160 ⽐特位的输出,SHA-1 的变体可以产⽣ 192 ⽐特位和 256 ⽐特位的消息摘要。

⼀般认为,摘要的最终输出越长,该摘要算法就越安全。

消息摘要看起来是「随机的」。

这些⽐特看上去是胡乱的杂凑在⼀起的。

可以⽤⼤量的输⼊来检验其输出是否相同,⼀般,不同的输⼊会有不同的输出,⽽且输出的摘要消息可以通过随机性检验。

但是,⼀个摘要并不是真正随机的,因为⽤相同的算法对相同的消息求两次摘要,其结果必然相同;⽽若是真正随机的,则⽆论如何都是⽆法重现的。

因此消息摘要是「伪随机的」。

消息摘要函数是单向函数,即只能进⾏正向的信息摘要,⽽⽆法从摘要中恢复出任何的消息,甚⾄根本就找不到任何与原信息相关的信息。

当然,可以采⽤强⼒攻击的⽅法,即尝试每⼀个可能的信息,计算其摘要,看看是否与已有的摘要相同,如果这样做,最终肯定会恢复出摘要的消息。

如何使用apk签名命令给Android应用签名

如何使用apk签名命令给Android应用签名

如何使用apk签名命令给Android应用签名在Android开发过程中,应用的签名是非常重要的一个环节。

签名可以确保应用的身份和完整性,使得用户能够信任应用并安心使用。

在发布应用之前,我们必须为应用签名,否则应用将无法被正常安装和运行。

本篇文章将会介绍如何使用apk签名命令来给Android 应用签名。

1. 准备工作在开始签名应用之前,我们需要进行一些准备工作。

首先,我们需要获取Android SDK,并确保在电脑上正确安装并配置好了Java Development Kit(JDK)。

我们还需要生成一个Keystore文件,这个文件是用来保护你的应用的私钥,确保别人不能对你的应用进行篡改。

可以通过以下步骤生成Keystore文件:a. 打开命令行窗口或终端。

b. 进入到Java JDK的bin文件夹下,输入以下命令:keytool -genkey -v -keystore mykeystore.keystore -alias mykeyalias -keyalg RSA -keysize 2048 -validity 10000c. 按照提示输入信息,包括密码、姓名、组织名称和国家/地区代码等。

2. 执行签名命令准备好Keystore文件后,我们可以使用apk签名命令来为应用签名了。

依次输入以下命令:a. 打开命令行窗口或终端,并进入到Android SDK的bin文件夹下。

通常这个文件夹路径是:sdk/platform-tools。

b. 执行以下命令:apksigner sign --ks mykeystore.keystore --out myapp_signed.apk myapp_unsigned.apkc. 替换mykeystore.keystore和myapp_unsigned.apk为你自己的文件名。

d. 如果签名成功,你应该会在终端看到签名成功的消息。

3. 验证签名为了确保应用签名成功,我们可以使用“jarsigner”命令来验证签名。

android 系统签名方法

android 系统签名方法

android 系统签名方法Android系统的签名方法涉及到应用程序的数字签名,用于验证应用程序的身份和完整性。

以下是进行Android系统签名的一般步骤:1. 获取密钥库和密钥:首先,您需要一个密钥库和私钥,用于创建应用程序的数字证书。

如果您已经有了一个密钥库和私钥,您可以跳过这一步。

否则,您需要生成一个新的密钥库和私钥。

2. 创建证书:使用`keytool`工具(它是Java Development Kit的一部分)创建证书。

例如,运行以下命令创建一个名为“my_”的证书:```csskeytool -genkey -alias my_certificate -keyalg RSA -keystore my_ -keysize 2048```3. 导出证书:使用`keytool`工具导出证书为`.pem`或`.cer`文件。

4. 签名应用程序:使用`jarsigner`工具(也是Java Development Kit的一部分)来签名您的应用程序。

例如:```bashjarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my_ my_certificate```5. 优化和打包:在签名之后,您通常会使用`zipalign`工具对应用程序进行优化和打包,以确保其在设备上运行得最好。

例如:```bashzipalign -v 4```6. 配置签名信息:在发布您的应用程序时,确保在Google Play Console中正确配置您的签名信息。

7. 发布:将签名的应用程序上传到Google Play或其他分发渠道。

请注意,具体的命令和参数可能会根据您的具体需求和环境有所不同。

此外,随着Android开发工具的更新,某些工具的位置或命令可能会有所变化。

确保参考最新的官方文档以获得最准确的信息。

android 覆盖apk原理

android 覆盖apk原理

android 覆盖apk原理Android覆盖APK原理概述在Android应用开发中,经常需要对已经安装的应用进行更新或者修复,而覆盖APK是一种常见的更新方式。

本文将介绍Android 覆盖APK的原理以及相关技术。

一、什么是APKAPK(Android Package Kit)是Android应用的安装包,它包含了应用的所有资源文件、源代码以及清单文件等。

当我们安装一个应用时,实际上是将APK文件解压并将其中的资源文件、代码等安装到设备上。

二、为什么需要覆盖APK在软件开发过程中,经常会有新版本的发布,包括功能的增加、优化以及错误的修复。

为了让用户享受到最新的功能和修复最新的问题,需要将新版本的APK覆盖到已经安装的应用上,从而实现应用的更新。

三、覆盖APK的原理覆盖APK的原理主要涉及到两个方面,即签名验证和应用替换。

1. 签名验证在Android系统中,每个应用都有一个唯一的数字签名,用于保证应用的安全性。

当我们安装一个应用时,系统会验证APK文件的签名是否与设备上已安装应用的签名一致。

如果一致,系统会认为是同一个应用,并允许覆盖安装;如果不一致,系统会提示签名不一致,无法覆盖安装。

2. 应用替换当签名验证通过后,系统会将新版本的APK文件解压并替换掉已安装应用的资源文件、代码等。

然后重新加载应用,使得用户可以使用更新后的应用。

需要注意的是,在覆盖APK时,系统会保留应用的数据和用户设置,以确保用户不会因为更新应用而丢失重要的数据。

四、覆盖APK的实现方式在Android开发中,覆盖APK的实现方式有多种,包括通过应用商店更新、通过网络下载更新、通过本地安装包更新等。

1. 应用商店更新通过应用商店更新是最常见的方式之一。

应用商店会检测应用的版本号,并提醒用户进行更新。

用户点击更新按钮后,应用商店会下载新版本的APK文件并进行覆盖安装。

2. 网络下载更新有些应用会在启动时通过网络检测是否有新版本,如果有,则会下载新版本的APK文件,并提示用户进行覆盖安装。

Android覆盖升级以及apk签名

Android覆盖升级以及apk签名
services/java/com/android/server/PackageManagerService.java
frameworks/base/core/java/android/content/pm/PackageManager.java
frameworks/base/cmds/pm/src/com/android/commands/pm/Pm.java
dalvik/libcore/security/src/main/java/java/security/Sign*
build/target/product/security/platform.*
build/tools/signapk/*
5. 签名的相关问题
一般在安装时提示出错:INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES
$ jarsigner -verify my_application.apk
d) 优化(签名后需要做对齐优化处理)
$ zipalign -v 4 your_project_name-unaligned.apk your_project_name.apk
3) 在源码中编译的签名
a) 使用源码中的默认签名
b) 为apk文件签名
$ jarsigner -verbose -keystore keyfile -signedjar signed.apk base.apk yan
注:keyfile为生成key存放的文件,signed.apk为签名后的apk,base.apk 为未签名的apk,yan为私钥
c) 看某个apk是否经过了签名
1. 为什么要签名
1) 发送者的身份认证
由于开发商可能通过使用相同的Package Name来混淆替换已经安装的程序,以此保证签名不同的包不被替换

apk签名原理

apk签名原理

apk签名原理
APK(Android Package)的签名原理如下:
1. 建立一个密钥库(Keystore):开发者使用Java的keytool
命令创建一个密钥库,保存私钥和对应的证书。

密钥库通常以.jks或.keystore文件格式保存。

2. 生成私钥和公钥对:使用keytool命令生成一个私钥和对应
的公钥。

私钥存储在密钥库中,而公钥将在APK文件中使用。

3. 生成证书签名请求(CSR):开发者使用keytool命令生成
一个证书签名请求,其中包含公钥和申请者的信息。

4. 证书颁发机构(CA)颁发签名证书:开发者将CSR文件发
送给证书颁发机构,机构会验证申请者信息并使用私钥对公钥进行签名。

然后,机构会颁发一个包含签名的证书。

5. 使用私钥对APK文件进行签名:开发者使用keytool或者Android Studio的构建工具将APK文件与开发者的私钥一起进
行签名。

6. 在Android系统中验证签名:当用户在设备上安装APK文
件时,Android系统会使用APK中包含的签名和证书进行验证。

系统会对签名进行检查,确保它与签名证书对应,并且证书的数字签名也是有效的。

通过签名,Android系统可以确保APK文件的完整性和身份认
证。

如果APK文件的签名无效或与证书不匹配,系统会禁止安装或者警告用户。

这个机制有助于防止未经授权的APK文件被安装,保护用户数据的安全性。

做自己的Android ROM-屏蔽apk签名检查

做自己的Android ROM-屏蔽apk签名检查

做自己的Android ROM,屏蔽对framework中的系统APK的签名检查作者:孤风一剑发布:2013-09-04 15:14 栏目:移动开发点击:538次抢沙发最近两天一直在尝试更新Android中的关键库以达到定制ROM的效果,中间比较曲折,记录下来供自己和大家参考。

因为我需要基于Android的原生代码做一定的修改,所以如果无法将我自己编译出的APK或Jar替换系统中的东西,则无法达成我的目标。

我的测试的机器:htc one 电信定制版(802d),Android版本:4.2.2;LG Nexus 4,Android版本:4.3。

测试第一步:将手机root掉,以替换修改系统文件的权限。

不同厂商的手机的root步骤不一样,自己上网搜索吧。

测试第二步:使用我自己编译出来的SystemUI.apk,替换Nexus 4的SystemUI.apk,通过adb logcat > 1.txt 查看日志,直接报下面的错;[plain][/plain] view plaincopyprint?1.W/PackageManager( 530): Signature mismatch for shared user : SharedUserSetting{41ea0bc8 android.uid.system/1000}2.3.E/PackageManager( 530): Package com.android.systemui has no signatures that match those in shared user android.uid.system; ignoring!签名有问题,根据这个关键字“has no signatures that match those”去搜索Android源代码,可以在PackageManagerService.java中找到如下函数:[java][/java] view plaincopyprint?1.private boolean verifySignaturesLP(PackageSetting pkgSetting,2. PackageParser.Package pkg) {3. if (pkgSetting.signatures.mSignatures != null) {4. // Already existing package. Make sure signatures match5. if (compareSignatures(pkgSetting.signatures.mSignatures, pkg.mSignatures) !=6. PackageManager.SIGNA TURE_MATCH) {7. Slog.e(TAG, "Package " + pkg.packageName8. + " signatures do not match the previously installed version; ignoring!");9. mLastScanError = PackageManager.INSTALL_FAILED_UPDA TE_INCOMPATIBLE;10. return false;11. }12. }13. // Check for shared user signatures14. if (pkgSetting.sharedUser != null && pkgSetting.sharedUser.signatures.mSignatures !=null) {15. if (compareSignatures(pkgSetting.sharedUser.signatures.mSignatures,16. pkg.mSignatures) != PackageManager.SIGNATURE_MATCH) {17. Slog.e(TAG, "Package " + pkg.packageName18. + " has no signatures that match those in shared user "19. + + "; ignoring!");20. mLastScanError = PackageManager.INSTALL_FAILED_SHARED_USER_INCOMPATIBLE;21. return false;22. }23. }24. return true;25.}直接替换,肯定是不行了,签名通不过,那我可否尝试将签名检查的代码给屏蔽掉?测试第三步:尝试屏蔽对系统级APK的签名检查,代码已经找到,在这个目录下:frameworks/base/services/java/com/android/server/pm。

apk签名与破解

apk签名与破解

Android APK 签名比对发布过Android应用的朋友们应该都知道,Android APK的发布是需要签名的。

签名机制在Android应用和框架中有着十分重要的作用。

例如,Android系统禁止更新安装签名不一致的APK;如果应用需要使用system权限,必须保证APK签名与Framework签名一致,等等。

在《APK Crack》一文中,我们了解到,要破解一个APK,必然需要重新对APK进行签名。

而这个签名,一般情况无法再与APK原先的签名保持一致。

(除非APK原作者的私钥泄漏,那已经是另一个层次的软件安全问题了。

)简单地说,签名机制标明了APK的发行机构。

因此,站在软件安全的角度,我们就可以通过比对APK的签名情况,判断此APK是否由“官方”发行,而不是被破解篡改过重新签名打包的“盗版软件”。

Android签名机制为了说明APK签名比对对软件安全的有效性,我们有必要了解一下Android APK的签名机制。

为了更易于大家理解,我们从Auto-S ign工具的一条批处理命令说起。

在《APK Crack》一文中,我们了解到,要签名一个没有签名过的APK,可以使用一个叫作Auto-sign的工具。

Auto-sign工具实际运行的是一个叫做Sign.bat的批处理命令。

用文本编辑器打开这个批处理文件,我们可以发现,实现签名功能的命令主要是这一行命令:java -jar signapk.jar testkey.x509.pem testkey.pk8 update.apk update_signed.a pk这条命令的意义是:通过signapk.jar这个可执行jar包,以“testkey.x509.pem”这个公钥文件和“testkey.pk8”这个私钥文件对“update.apk”进行签名,签名后的文件保存为“update_signed.apk”。

对于此处所使用的私钥和公钥的生成方式,这里就不做进一步介绍了。

APK签名命令的使用方法和步骤详解

APK签名命令的使用方法和步骤详解

APK签名命令的使用方法和步骤详解APK签名命令是应用程序开发中非常重要的一个步骤,它能够保护应用程序的完整性,保证应用安全性。

本文将为你详细介绍APK签名命令的使用方法和步骤,以帮助你更好的理解和使用APK签名命令。

一、什么是APK签名命令APK签名命令是用于给安装包进行数字签名的一项命令行工具。

一般用在应用程序开发完成后,通过签名才能发布和安装,并可以保证签名后的应用程序在安装时不被篡改。

APK签名方式有两种:V1签名和V2签名。

其中V1签名使用JAR签名、V2签名使用APK Signature Scheme v2 签名方式。

二、APK签名命令的使用方法1.首先在电脑端安装JDK环境,然后在安卓开发包中找到build-tool中的zip文件夹,将zip中的apksigner.bat文件复制到Windows\Systm32目录下。

2.将需要签名的应用加载到电脑中,然后打开CMD命令行工具。

3.在CMD中输入apksigner.bat命令,并按照下面的方式对应输入:```apksigner.bat sign --ks my.keystore --ks-key-alias mykeyalias my-app.apk```其中my.keystore是你的密钥文件名,mykeyalias是密钥别名,my-app.apk是需要签名的文件名。

4.按下回车键后,CMD会提示你输入密钥密码,之后输入签名证书密码,如果全部输入正确,签名过程就会自动完成。

5.签名完成后,在你的APK文件目录下,你可以找到一个新的已经签名的.apk文件。

这个签名后的APK文件可以安全地分发给其他用户。

三、APK签名命令的步骤详解步骤1:准备你的密钥在对APK签名之前,你需要先为APK创建一个签名密钥。

密钥是用来验证APK的完整性。

签名密钥是一个重要的文件,它会让应用程序可以广泛传播。

因此,你需要妥善保管这个文件,以免遭到泄露或滥用。

Android的APK应用签名机制以及读取签名的方法

Android的APK应用签名机制以及读取签名的方法

Android的APK应⽤签名机制以及读取签名的⽅法发布过Android应⽤的朋友们应该都知道,Android APK的发布是需要签名的。

签名机制在Android应⽤和框架中有着⼗分重要的作⽤。

例如,Android系统禁⽌更新安装签名不⼀致的APK;如果应⽤需要使⽤system权限,必须保证APK签名与Framework签名⼀致,等等。

什么是签名⾸先我们得知道什么是摘要,摘要是指采⽤单向Hash函数对数据进⾏计算⽣成的固定长度的Hash值,摘要算法有Md5,Sha1等,Md5⽣成的Hash值是128位的数字,即16个字节,⽤⼗六进制表⽰是32个字符,Sha1⽣成的Hash值是160位的数字,即20个字节,⽤⼗六进制表⽰是40个字符。

我们是不能通过摘要推算出⽤于计算摘要的数据,如果修改了数据,那么它的摘要⼀定会变化(其实这句话并不正确,只是很难正好找到不同的数据,⽽他们的摘要值正好相等)。

摘要经常⽤于验证数据的完整性,很多下载⽹站都会列出下载⽂件的md5值或者sha1值。

摘要和签名没有任何关系,⽹上常常将摘要和签名混为⼀谈,这是错误的。

签名和数字签名是同⼀个概念,是指信息的发送者⽤⾃⼰的私钥对消息摘要加密产⽣⼀个字符串,加密算法确保别⼈⽆法伪造⽣成这段字符串,这段数字串也是对信息的发送者发送信息真实性的⼀个有效证明。

其他发送者⽤他们的私钥对同⼀个消息摘要加密会得到不同的签名,接收者只有使⽤发送者签名时使⽤的私钥对应的公钥解密签名数据才能得到消息摘要,否则得到的不是正确的消息摘要。

数字签名是⾮对称密钥加密技术+数字摘要技术的结合。

数字签名技术是将信息摘要⽤发送者的私钥加密,和原⽂以及公钥⼀起传送给接收者。

接收者只有⽤发送者的公钥才能解密被加密的信息摘要,然后接收者⽤相同的Hash函数对收到的原⽂产⽣⼀个信息摘要,与解密的信息摘要做⽐对。

如果相同,则说明收到的信息是完整的,在传输过程中没有被修改;不同则说明信息被修改过,因此数字签名能保证信息的完整性。

Android系统签名简介

Android系统签名简介

Android系统签名简介apk的签名,简单说开发者可以通过签名对应⽤进⾏标识和更新。

包名在⼀个设备上是唯⼀的,这样可以避免被相同包名应⽤随意覆盖安装。

这是⼀个⾮常重要的安全功能。

系统中的签名⽂件,也是对系统中应⽤进⾏签名,编译应⽤是可以指定签名类型。

下⾯介绍的是Android系统中的签名相关内容。

Android系统中的主要签名⽂件media.pk8,media.x509.pem;platform.pk8,platform.x509.pem;releasekey.pk8,releasekey.x509.pem;shared.pk8,shared.x509.pem;testkey.pk8,testkey.x509.pem。

Android系统中的签名⽂件的路径build/target/product/security/⽬录下。

编译时签名⽂件的配置在Android.mk通过设置LOCAL_CERTIFICATE实现。

如:LOCAL_CERTIFICATE := platform即选择platform来签名。

注:预置⽆源码的apk应⽤时,很多时候仍然使⽤原本第三⽅签名,LOCAL_CERTIFICATE := PRESIGNED。

.pk8和.x509.pem的区别.pk8就是私钥⽂件,⽤于对apk进⾏签名。

这个私钥需要保密保存,不能公开。

.x509.pem是证书⽂件,相当于公钥。

这个可以公开,主要⽤于验证某个apk是否由相应的私钥签名。

系统不同签名⽂件的区别简介:sharedUserId每个apk或⽂件,系统都会分配属于⾃⼰的统⼀的⽤户ID(UID),创建沙箱保证其他应⽤的影响或影响其他应⽤。

如:⼀般应⽤只能访问⾃⼰包名下的⽂件(/data/data/pkgname),不能反问其他包名下的,其他应⽤也访问不了⾃⼰包名下的⽂件。

sharedUserId,拥有同⼀user id的应⽤之间就可以共享数据库和⽂件,相互访问。

Android中APK签名工具之jarsigner和apksigner详解

Android中APK签名工具之jarsigner和apksigner详解

Android中APK签名⼯具之jarsigner和apksigner详解⼀.⼯具介绍jarsigner是JDK提供的针对jar包签名的通⽤⼯具,位于JDK/bin/jarsigner.exeapksigner是Google官⽅提供的针对Android apk签名及验证的专⽤⼯具,位于Android SDK/build-tools/SDK版本/apksigner.bat不管是apk包,还是jar包,本质都是zip格式的压缩包,所以它们的签名过程都差不多(仅限V1签名),以上两个⼯具都可以对Android apk包进⾏签名.1.V1和V2签名的区别在Android Studio中点击菜单 Build->Generate signed apk... 打包签名过程中,可以看到两种签名选项 V1(Jar Signature) V2(Full APK Signature),刚开始升级AS看到这个懵了,既然是APK Signature,就放⼼偷懒选了V2,结果安装失败⽆奈,只能查资料...从Android 7.0开始, ⾕歌增加新签名⽅案 V2 Scheme (APK Signature);但Android 7.0以下版本, 只能⽤旧签名⽅案 V1 scheme (JAR signing)V1签名:来⾃JDK(jarsigner), 对zip压缩包的每个⽂件进⾏验证, 签名后还能对压缩包修改(移动/重新压缩⽂件)对V1签名的apk/jar解压,在META-INF存放签名⽂件(MANIFEST.MF, CERT.SF, CERT.RSA),其中MANIFEST.MF⽂件保存所有⽂件的SHA1指纹(除了META-INF⽂件), 由此可知: V1签名是对压缩包中单个⽂件签名验证V2签名:来⾃Google(apksigner), 对zip压缩包的整个⽂件验证, 签名后不能修改压缩包(包括zipalign),对V2签名的apk解压,没有发现签名⽂件,重新压缩后V2签名就失效, 由此可知: V2签名是对整个APK签名验证V2签名优点很明显:签名更安全(不能修改压缩包)签名验证时间更短(不需要解压验证),因⽽安装速度加快注意: apksigner⼯具默认同时使⽤V1和V2签名,以兼容Android 7.0以下版本2.zipalign和V2签名位于Android SDK/build-tools/SDK版本/zipalign.exezipalign 是对zip包对齐的⼯具,使APK包内未压缩的数据有序排列对齐,从⽽减少APP运⾏时内存消耗zipalign -v 4 in.apk out.apk //4字节对齐优化zipalign -c -v 4 in.apk //检查APK是否对齐zipalign可以在V1签名后执⾏但zipalign不能在V2签名后执⾏,只能在V2签名之前执⾏⼆.签名步骤1.⽣成密钥对(已有密钥库,可忽略)Eclipse或Android Studio在Debug时,对App签名都会使⽤⼀个默认的密钥库:默认在C:\Users\⽤户名\.android\debug.keystore密钥库名: debug.keystore密钥别名: androiddebugkey密钥库密码: android1.⽣成密钥对进⼊JDK/bin, 输⼊命令keytool -genkeypair -keystore 密钥库名 -alias 密钥别名 -validity 天数 -keyalg RSA参数:-genkeypair ⽣成⼀条密钥对(由私钥和公钥组成)-keystore 密钥库名字以及存储位置(默认当前⽬录)-alias 密钥对的别名(密钥库可以存在多个密钥对,⽤于区分不同密钥对)-validity 密钥对的有效期(单位: 天)-keyalg ⽣成密钥对的算法(常⽤RSA/DSA,DSA只⽤于签名,默认采⽤DSA) -delete 删除⼀条密钥提⽰: 可重复使⽤此条命令,在同⼀密钥库中创建多条密钥对例如:在debug.keystore中新增⼀对密钥,别名是releasekeytool -genkeypair -keystore debug.keystore -alias release -validity 300002.查看密钥库进⼊JDK/bin, 输⼊命令keytool -list -v -keystore 密钥库名参数:-list 查看密钥列表-v 查看密钥详情例如:keytool -list -v -keystore debug.keystore现在debug.keystore密钥库中有两对密钥, 别名分别是androiddebugkey release2.签名1.⽅法⼀(jarsigner,只⽀持V1签名)进⼊JDK/bin, 输⼊命令jarsigner -keystore 密钥库名 xxx.apk 密钥别名从JDK7开始, jarsigner默认算法是SHA256, 但Android 4.2以下不⽀持该算法,所以需要修改算法, 添加参数 -digestalg SHA1 -sigalg SHA1withRSAjarsigner -keystore 密钥库名 -digestalg SHA1 -sigalg SHA1withRSA xxx.apk 密钥别名参数:-digestalg 摘要算法-sigalg 签名算法例如:⽤JDK7及以上jarsigner签名,不⽀持Android 4.2 以下jarsigner -keystore debug.keystore MyApp.apk androiddebugkey⽤JDK7及以上jarsigner签名,兼容Android 4.2 以下jarsigner -keystore debug.keystore -digestalg SHA1 -sigalg SHA1withRSA MyApp.apk androiddebugkey2.⽅法⼆(apksigner,默认同时使⽤V1和V2签名)进⼊Android SDK/build-tools/SDK版本, 输⼊命令apksigner sign --ks 密钥库名 --ks-key-alias 密钥别名 xxx.apk若密钥库中有多个密钥对,则必须指定密钥别名apksigner sign --ks 密钥库名 --ks-key-alias 密钥别名 xxx.apk禁⽤V2签名apksigner sign --v2-signing-enabled false --ks 密钥库名 xxx.apk参数:--ks-key-alias 密钥别名,若密钥库有⼀个密钥对,则可省略,反之必选--v1-signing-enabled 是否开启V1签名,默认开启--v2-signing-enabled 是否开启V2签名,默认开启例如:在debug.keystore密钥库只有⼀个密钥对apksigner sign --ks debug.keystore MyApp.apk在debug.keystore密钥库中有多个密钥对,所以必须指定密钥别名apksigner sign --ks debug.keystore --ks-key-alias androiddebugkey MyApp.apk3.签名验证1.⽅法⼀(keytool,只⽀持V1签名校验)进⼊JDK/bin, 输⼊命令keytool -printcert -jarfile MyApp.apk (显⽰签名证书信息)参数:-printcert 打印证书内容-jarfile <filename> 已签名的jar⽂件或apk⽂件2.⽅法⼆(apksigner,⽀持V1和V2签名校验)进⼊Android SDK/build-tools/SDK版本, 输⼊命令apksigner verify -v --print-certs xxx.apk参数:-v, --verbose 显⽰详情(显⽰是否使⽤V1和V2签名)--print-certs 显⽰签名证书信息例如:apksigner verify -v MyApp.apkVerifiesVerified using v1 scheme (JAR signing): trueVerified using v2 scheme (APK Signature Scheme v2): trueNumber of signers: 1总结以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,如果有疑问⼤家可以留⾔交流,谢谢⼤家对的⽀持。

android 签名验签原理

android 签名验签原理

android 签名验签原理Android 签名验签原理Android 应用程序的签名和验签机制是保证应用程序安全性的重要手段。

下面将从以下几个方面介绍 Android 签名验签原理。

1. 签名的作用应用程序签名是为了保证应用程序的完整性和真实性,防止应用程序被篡改或冒充。

签名机制通过对应用程序进行数字签名,使得应用程序的发布者可以证明应用程序的来源和完整性,从而建立起应用程序与发布者之间的信任关系。

2. 签名的生成应用程序签名是通过将应用程序的代码进行哈希运算,然后使用私钥对哈希值进行数字签名生成的。

签名过程中,使用的私钥是由应用程序的发布者持有的,而公钥则会打包到应用程序的证书文件中。

3. 签名的验证应用程序签名的验证是通过对应用程序的证书文件进行验证来实现的。

当用户安装应用程序时,Android 系统会自动检查应用程序的证书文件,如果证书文件中包含的公钥与应用程序的签名匹配,那么就认为应用程序是可信的。

4. 证书的获取应用程序的证书文件是由应用程序的发布者在签名应用程序之前,通过向数字证书颁发机构申请证书获得的。

证书文件中包含了应用程序的公钥和发布者的信息,用于验证应用程序的完整性和真实性。

5. 证书的更新应用程序的证书文件是有有效期限的,一旦证书过期,那么应用程序就无法通过签名验证。

因此,应用程序的发布者需要定期更新证书文件,以确保应用程序的可信性和安全性。

6. 签名的重要性应用程序签名是保证应用程序安全性的重要手段,它可以防止应用程序被篡改或冒充,从而保护用户的隐私和安全。

因此,应用程序的发布者必须认真对待签名过程,确保签名的可靠性和安全性。

以上就是 Android 签名验签原理的相关内容,希望对大家有所帮助。

万能APK签名工具。彻底解决签名问题无法安装!+图标美化+极品锁屏

万能APK签名工具。彻底解决签名问题无法安装!+图标美化+极品锁屏

万能APK签名工具。

彻底解决签名问题无法安装!+图标美化+极品锁屏软件安装的时候出现过这样的问题吗,该应用签名有问题,无法安装-----豌豆荚亲试。

下载附件 APKSign.rar 直接解压双击APKSINGN.EXE使用万能apk签名工具,自己定制个性的rom 就轻而易举了!用的这个签名成功,然后将apk安装到了模拟器中。

用的时候很简单,选择apk包,然后选择签名就可以。

运行它,对rom里的应用程序增减,美化!1.有了这个软件,可以自己修改美化APK 文件2.用WINRAR打开APK文件,将自己的图片图标放进替换原有的,然后用本软件制作签名,然后安装进Android。

3.下载别人制作好的ROM,自己精简删除,或者添加APK文件。

4.用本软件给 ROM 制作签名 ,然后刷机大家的回复是对我的最大的支持。

更改APK文件的图标。

想每天都摸金元宝吗?想每天摸美女吗, 尽情看下面的亲试经验。

以一个很好用的关屏软件为例~ 1.首先解压你要更改图标的APK文件(用WINRAR打开APK文件)。

图例:2.解压后找到你要更改的图标在哪里。

进入RES文件夹。

3.更改图标。

注意:找到你要更改的图标之后,确定图标(图片)的名称,格式,及尺寸。

处理好你想要的图标(或元宝或美女)之后进行替换。

怎么处理图片我就不在这里具体了。

(PHOTOSHOP,CADsee都可以的)4.上一个步骤完成之后就完成了一大半了。

替换图标の后将解压的所有文件压缩。

更改压缩文件的格式。

将.rar文件格式改为.apk名称改为你想要的名称,例如:“锁屏”。

点击“是” 确定。

5.直接用上面的软件签名就OK了。

APKsingn.exe给大家一个很好用的锁屏软件。

图标被我改成了一筐子元宝。

天天摸着元宝来锁屏,是不是会感觉很爽啊~~给大家带来财运哦~新年祝大家财源滚滚啊~~多摸几下扎金花都会多赢点钱的。

试试, 哈哈APKSign.rar291.68 KB, 下载次数: 10809, 下载积分: 金币 -1 元签名软件简单关屏_signed.apk31.77 KB, 下载次数: 340, 下载积分: 金币 -1 元简单关屏—-元宝。

AndroidApk去掉签名以及重新签名的方法

AndroidApk去掉签名以及重新签名的方法

AndroidApk去掉签名以及重新签名的⽅法Android Apk去掉签名以及重新签名的⽅法Android开发中很重要的⼀部就是⽤⾃⼰的密钥给Apk⽂件签名,不经过签名的Apk⽂件⼀般是⽆法安装的,就算装了最后也是失败。

⽹上流传的“勾选允许安装未知来源的应⽤”其实跟签不签名没啥关系,说⽩了就是允许安装不从电⼦市场上下载的应⽤⽽已。

近⼏⽇需要修改⼀个Apk中JNI调⽤的.so⽂件,苦于没有apk源代码,只好研究了⼀下签名相关的问题。

当然有很多第三⽅⼯具可以做到,但其实JDK中已经提供了强⼤的签名⼯具jarsigner。

1.去除签名其实很简单,⽤WinRAR打开apk,找到META-INF⽂件夹,删除MANIFEST.MF之外的所有其他⽂件即可。

2.签名运⾏jarsigner,如果没有设置PATH环境变量,那可以从JDK安装路径下的bin⽬录中找到,⽐如我本机的就是C:\Program Files\Java\jdk1.8.0_31\bin\jarsigner.exejarsigner⽤法如下:⽤法: jarsigner [选项] jar-file 别名jarsigner -verify [选项] jar-file [别名...][-keystore <url>] 密钥库位置[-storepass <⼝令>] ⽤于密钥库完整性的⼝令[-storetype <类型>] 密钥库类型[-keypass <⼝令>] 私有密钥的⼝令 (如果不同)[-certchain <⽂件>] 替代证书链⽂件的名称[-sigfile <⽂件>] .SF/.DSA ⽂件的名称[-signedjar <⽂件>] 已签名的 JAR ⽂件的名称[-digestalg <算法>] 摘要算法的名称[-sigalg <算法>] 签名算法的名称[-verify] 验证已签名的 JAR ⽂件[-verbose[:suboptions]] 签名/验证时输出详细信息。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

b) 为apk文件签名
$ jarsigner -verbose -keystore keyfile -signedjar signed.apk base.apk yan
注:keyfile为生成key存放的文件,signed.apk为签名后的apk,base.apk 为未签名的apk,yan为私钥
c) 看某个apk是否经过了签名
build/target/product/security目录中有四组默认签名可选:testkey platform shared media(具体见README.txt),应用程序中Android.mk中有一个LOCAL_CERTIFICATE字段,由它指定用哪个key签名,未指定的默认用testkey.
$ jarsigner -verify my_application.apk
d) 优化(签名后需要做对齐优化处理)
$ zipalign -v 4 your_project_name-unaligned.apk your_project_name.apk
3) 在源码中编译的签名
a) 使用源码中的gn优化程序
6) Android将数字证书用来标识应用程序的作者和在应用程序之间建立信任关系,而不是用来决定最终用户可以安装哪些应用程序
3. 签名的方法
1) 用eclipse插件方式签名
a) 调试签名
eclipse插件默认赋予程序一个DEBUG权限的签名,此签名的程序不能发布到market上,此签名有效期为一年,如果过期则导致你无法生成apk文件,此时你只要删除debug keystore即可,系统又会为你生成有效期为一年的新签名
b) 在源码中自签名
Android提供了一个脚本mkkey.sh(build/target/product/security/mkkey.sh),用于生成密钥,生成后在应用程序中通过Android.mk中的LOCAL_CERTIFICATE字段指名用哪个签名
c) mkkey.sh介绍
i. 生成公钥
openssl genrsa -3 -out testkey.pem 2048
2. APK如果使用一个key签名,发布时另一个key签名的文件将无法安装或覆盖老的版本,这样可以防止你已安装的应用被恶意的第三方覆盖或替换掉。
目前google在Android系统方面的态度和策略也都是非盈利性质的,和Symbian的签名有本质的区别,而我们使用Eclipse+ADT插件从开发环境安装到手机中的APK文件已经包含了ADT插件的Debug签名文件,所以没有安装,但是最终发行的版本需要自己的key去签名。
1) 两个应用,名字相同,签名不同
2) 升级时前一版本签名,后一版本没签名
3) 升级时前一版本为DEBUG签名,后一个为自定义签名
4) 升级时前一版本为Android源码中的签
很多Android开发者不明白APK签名有什么作用。其实APK签名用处主要有两种:
1. 使用特殊的key签名可以获取到一些不同的权限。
在源码中编译一般都使用默认签名的,在某源码目录中用运行
$ mm showcommands能看到签名命令
Android提供了签名的程序signapk.jar,用法如下:
$ signapk publickey.x509[.pem] privatekey.pk8 input.jar output.jar
*.x509.pem为x509格式公钥,pk8为私钥
iii. 生成私钥
openssl pkcs8 -in testkey.pem -topk8 -outform DER -out testkey.pk8 -nocrypt
把的格式转换成PKCS #8,这里指定了-nocryp,表示不加密,所以签名时不用输入密码
4. 签名的相关文件
1) apk包中签名相关的文件在meta_INF目录下
2) 用命令行方式签名
使用标准的java工具keytool和jarsigner来生成证书和给程序签名
a) 生成签名
$ keytool -genkey -keystore keyfile -keyalg RSA -validity 10000 -alias yan
注:validity为天数,keyfile为生成key存放的文件,yan为私钥,RSA为指定的加密算法(可用RSA或DSA)
2) Android程序包使用的数字证书可以是自签名的,不需要一个权威的数字证书机构签名认证
3) 如果要正式发布一个Android应用,必须使用一个合适的私钥生成的数字证书来给程序签名,而不能使用adt插件或者ant工具生成的调试证书来发布
4) 数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能
CERT.SF:生成每个文件相对的密钥
MANIFEST.MF:数字签名信息
xxx.SF:这是JAR文件的签名文件,占位符xxx标识了签名者
xxx.DSA:对输出文件的签名和公钥
2) 相关源码
development/tools/jarutils/src/com.anroid.jarutils/SignedJarBuilder.java
1. 为什么要签名
1) 发送者的身份认证
由于开发商可能通过使用相同的Package Name来混淆替换已经安装的程序,以此保证签名不同的包不被替换
2) 保证信息传输的完整性
签名对于包中的每个文件进行处理,以此确保包中内容不被替换
3) 防止交易中的抵赖发生,Market对软件的要求
2. 签名的说明
1) 所有的应用程序都必须有数字证书,Android系统不会安装一个没有数字证书的应用程序
frameworks/base/services/java/com/android/server/PackageManagerService.java
frameworks/base/core/java/android/content/pm/PackageManager.java
frameworks/base/cmds/pm/src/com/android/commands/pm/Pm.java
dalvik/libcore/security/src/main/java/java/security/Sign*
build/target/product/security/platform.*
build/tools/signapk/*
5. 签名的相关问题
一般在安装时提示出错:INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES
其中-3是算法的参数,2048是密钥长度,testkey.pem是输出的文件
ii. 转成x509格式(含作者有效期等)
openssl req -new -x509 -key testkey.pem -out testkey.x509.pem -days 10000 -subj ‘/C=US/ST=California/L=MountainView/O=Android/OU=Android/CN=Android/emailAddress=android@’
b) 开发者生成密钥并签名
右键点击项目名,在菜单中选择Android Tools,然后选择Export Signed Application Package…,即可通过eclipse自定义证书并签名
c) 开发者导出未签名的包
右键点击项目名,在菜单中选择Android Tools,然后选择Export Signed Application Package…,即可导出未签名的包,之后可通过命令行方式签名
相关文档
最新文档