如何查看android签名
Ⅰ android 系统签名
也有提到怎么单独给一个apk签名,这里补充一下android的签名权限控制机制。
android的标准签名key有:
testkey
media
latform
hared
以上的四种,可以在源码的/build/target/proct/security里面看到对应的密钥,其中shared.pk8代表私钥,shared.x509.pem公钥,一定是成对出现的。
其中testkey是作为android编译的时候默认的签名key,如果系统中的apk的android.mk中没有设置LOCAL_CERTIFICATE的值,就默认使用testkey。
而如果设置成:
LOCAL_CERTIFICATE := platform
就代表使用platform来签名,这样的话这个apk就拥有了和system相同的签名,因为系统级别的签名也是使用的platform来签名,此时使用android:sharedUserId="android.uid.system"才有用!
在/build/target/proct/security目录下有个README,里面有说怎么制作这些key以及使用问题(android4.2):
从上面可以看出来在源码下的/development/tools目录下有个make_key的脚本,通过传入两个参数就可以生成一对签名用的key。
其中第一个为key的名字,一般都默认成android本身有的,因为很多地方都默认使用了这些名字,我们自定义的话只需要对第二个参数动手脚,定义如下:
C ---> Country Name (2 letter code) ST ---> State or Province Name (full name) L ---> Locality Name (eg, city) O ---> Organization Name (eg, company) OU ---> Organizational Unit Name (eg, section) CN ---> Common Name (eg, your name or your server’s hostname) emailAddress ---> Contact email addre
另外在使用上面的make_key脚本生成key的过程中会提示输入password,我的处理是不输入,直接enter,不要密码!后面解释,用自定义的key替换/security下面的。
可以看到android源码里面的key使用的第二个参数就是上面README里面的,是公开的,所以要release版本的系统的话,肯定要有自己的签名key才能起到一个安全控制作用。
在上面提到如果apk中的编译选项LOCAL_CERTIFICATE没有设置的话,就会使用默认的testkey作为签名key,我们可以修改成自己想要的key,按照上面的步骤制作一个releasekey,修改android配置在/build/core/config.mk中定义变量:
在主makefile文件里面:
ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/target/proct/security/releasekey)
BUILD_VERSION_TAGS += release-key
这样的话默认的所有签名将会使用releasekey。
修改完之后就要编译了,如果上面的这些key在制作的时候输入了password就会出现如下错误:
我在网上找到了合理的解释:
其实会出现这个错误的最根本的原因是多线程的问题。在编译的时候为了加速一般都会执行make -jxxx,这样本来需要手动输入密码的时候,由于其它线程的运行,就会导致影响当前的输入终端,所以就会导致密码无法输入的情况!
再编译完成之后也可以在build.prop中查看到变量:
这样处理了之后编译出来的都是签名过的了,系统才算是release版本
我发现我这样处理之后,整个系统的算是全部按照我的要求签名了。
网上看到还有另外的签名release办法,但是应该是针对另外的版本的,借用学习一下:
make -j4 PRODUCT-proct_mol-user dist
这个怎么跟平时的编译不一样,后面多了两个参数PRODUCT-proct_mol-user 和 dist. 编译完成之后回在源码/out/dist/目录内生成个proct_mol-target_files开头的zip文件.这就是我们需要进行签名的文件系统.
我的proct_mol 是full_gotechcn,后面加“-user”代表的是最终用户版本,关于这个命名以及proct_mol等可参考http://blog.csdn.net/jscese/article/details/23931159
编译出需要签名的zip压缩包之后,就是利用/security下面的准备的key进行签名了:
./build/tools/releasetools/sign_target_files_apks -d /build/target/proct/security out/dist/full_gotechcn-target_files.zip out/dist/signed_target_files.zi
签名目标文件 输出成signed_target_files.zi
如果出现某些apk出错,可以通过在full_gotechcn-target_files.zip前面加参数"-e =" 来过滤这些apk.
然后再通过image的脚本生成imag的zip文件,这种方式不适用与我目前的工程源码,没有做过多验证!
Android签名机制可划分为两部分:(1)ROM签名机制;(2)第三方APK签名机制。
Android APK实际上是一个jar包,而jar包又是一个zip包。APK包的签名实际上使用的是jar包的签名机制:在zip中添加一个META的子目录,其中存放签名信息;而签名方法是为zip包中的每个文件计算其HASH值,得到签名文件(*.sf),然后对签名文件(.sf)进行签名并把签名保存在签名块文件(*.dsa)中。
在编译Android源码生成ROM的过程中,会使用build/target/proct/security目录中的4个key(media, platform, shared, testkey)来对apk进行签名。其中,*.pk8是二进制形式(DER)的私钥,*.x509.pem是对应的X509公钥证书(BASE64编码)。build/target/proct/security目录中的这几个默认key是没有密码保护的,只能用于debug版本的ROM。
要生成Release版本的ROM,可先生成TargetFiles,再使用带密码的key对TargetFiles重新签名,最后由重签名的TargetFiles来生成最终的ROM。
可以使用Android源码树中自带的工具“development/tools/make_key”来生成带密码的RSA公私钥对(实际上是通过openssl来生成的): $ development/tools/make_key media ‘/C=CN/ST=Sichuan/L=Cheng/O=MyOrg/OU=MyDepartment/CN=MyName’ 上面的命令将生成一个二进制形式(DER)的私钥文件“media.pk8”和一个对应的X509公钥证书文件“media.x509.pem”。其中,/C表示“Country Code”,/ST表示“State or Province”,/L表示“City or Locality”,/O表示“Organization”,/OU表示“Organizational Unit”,/CN表示“Name”。前面的命令生成的RSA公钥的e值为3,可以修改development/tools/make_key脚本来使用F4 (0×10001)作为e值(openssl genrsa的-3参数改为-f4)。
也可以使用JDK中的keytool来生成公私钥对,第三方APK签名一般都是通过keytool来生成公私钥对的。
可以使用openssl x509命令来查看公钥证书的详细信息: $ openssl x509 -in media.x509.pem -text -noout or, $ openssl x509 -in media.x509.pem -inform PEM -text -noout
还可以使用JDK中的keytool来查看公钥证书内容,但其输出内容没有openssl x509全面: $ keytool -printcert -v -file media.x509.pem
有了key之后,可以使用工具“build/tools/releasetools/sign_target_files”来对TargetFiles重新签名: $ build/tools/releasetools/sign_target_files_apks -d new_keys_dir -o target_files.zip target_files_resigned.zip 其中,new_keys_dir目录中需要有四个key(media, platform, shared, releasekey)。注意:这里的releasekey将代替默认的testkey(请参考build/tools/releasetools/sign_target_files脚本实现),也就是说,如果某个apk的Android.mk文件中的LOCAL_CERTIFICATE为testkey,那么在生成TargetFiles时是使用的build/target/proct/security/testkey来签名的,这里重新签名时将使用new_keys_dir/releasekey来签名。
uild/tools/releasetools/sign_target_files_apks是通过host/linux-x86/framework/signapk.jar来完成签名的。也可以直接使用host/linux-x86/framework/signapk.jar来对某个apk进行签名: $ java -jar signapk [-w] publickey.x509[.pem] privatekey.pk8 input.jar output.jar 其中,”-w”表示还对整个apk包(zip包)进行签名,并把签名放在zip包的comment中。
对于第三方应用开发者而言,对APK签名相对要简单得多。第三方应用开发一般采用JDK中的keytool和jarsigner来完成签名密钥的管理和APK的签名。
使用keytool来生成存储有公私钥对的keystore: $ keytool -genkey -v -keystore my-release-key.keystore -alias mykey -keyalg RSA -keysize 2048 -validity 10000
查看生成的密钥信息: $ keytool -list -keystore my-release-key.keystore -alias mykey -v or, $ keytool -list -keystore my-release-key.keystore -alias mykey -rfc (注:获取Base64格式的公钥证书,RFC 1421)
导出公钥证书: $ keytool -export -keystore mystore -alias mykey -file my.der (注:二进制格式公钥证书,DER) $ keytool -export -keystore mystore -alias mykey -file my.pem -rfc (注:Base64格式公钥证书,PEM)
对APK进行签名: $ jarsigner -verbose -keystore my-release-key.keystore my_application.apk mykey
验证签名: $ jarsigner -verify -verbose -certs my_application.apk
在进行Android二次开发时,有时需要把build/target/proct/security下面的公私钥对转换为keystore的形式,可以参考这篇文章:把Android源码中的密码对转换为keystore的方法。
Ⅱ 如何查看android 应用签名
1、查看自己的应用签名可以通过两种方式查看(1) debug的apk通过Eclipse查看,:
(2) 某个keystore签名的应用,通过
Java
keytool -list -keystore E:\Trinea\keystore\appsearch.keystore
查看,会要求输入签名密码,默认为android,:
2、查看三方应用或是系统应用签名用winrar打开待查看的apk,将其中META-INF文件夹解压出来,得到其中的CERT.RSA文件,通过
Java
keytool -printcert -file META-INF/CERT.RSA
命令打印证书信息,如微信证书信息:
可以查看签名的MD5、SHA1、SHA256值及签名算法
Ⅲ 如何查看系统签名 android
打开CMD命令行进入本机安装的jdk或jre下的bin目录
命令行输入:
keytool -list -v -keystore C:\Users\Desktop\browser\debug.keystore -storepass android
这里查看的是android adt 默认带的debug版keystore,密码是:android
Ⅳ android 应用签名怎么获取
方法/步骤
1
1 win7,开始菜单,搜索cmd
2
2 打开cmd
3
3 进入.android
4
4 使用命令keytool -list -v -keystore debug.keystore
5
5 需要安装keytool,办法是安装jdk,网络搜索jdk并下载安装;具体平台按实际情况选择
6 安装完毕,进入到jdk安装bin目录,并复制地址
7 回到cmd命令窗口,输入cd + 空格,并在标题栏右侧点击粘贴
8 回车,进入到这个目录
9 再次输入keytool -list -v -keystore debug.keystore命令并回车,出现错误
10 先执行以下命令keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -keyalg RSA -validity 10000
11 按提示输入密码(自己定),密保答案等;到后来需要重新再输入密码,生成完成
12 到keytool目录下,看到debug.keystore已经生成成功
13 将这个文件复制到.android文件夹下
14 现在再次键入生成android签名的命令:keytool -list -v -keystore debug.keystore,按提示输入密码,即可成功生成签名
15 在标题栏右键选择标记复制其中的SHA1的值,即为android的签名
Ⅳ 如何获取android 签名信息
android中有时候需要获取应用的签名信息,签名信息一般有:公钥,算法名,MD5值,序列号。要想获取这些信息首先该APK应用要有系统权限。
1. 在配置文件里添加系统权限:android:sharedUserId="android.uid.system"
2. 获取签名信息的字符信息:
String signature_key = "";
try{
PackageInfo packageInfo = context.getPackageManager().getPackageInfo(pkgName,
PackageManager.GET_SIGNATURES);
Signature[] signatures =
packageInfo.signatures;
SignatureKey.parseSignature(signatures[0].toByteArray());
} catch (NameNotFoundException e) {
e.printStackTrace();
} catch (NullPointerException e) {
e.printStackTrace();
}
(1).其中packageInfo 得到的是指定包名的签名信息的字符串。另提及多说一句:在程序中我们一般使用
List list =
mPackageManager.getInstalledPackages(0);来得到所有的安装包的信息,这其中包括应用名,包名,大小....
(2).
其中[]signatures里是存放的签名的字符串数组。我们一般取用第一个signatures[0]来做为该应用的签名信息。这里有一个疑惑就是为什么得到的是一个字符串的数组列表,而不是一个字符串,也有的开发者采用:
StringBuilder builder = new StringBuilder();
for(Signature sign: signatures
){
builder.append(sign.toCharsString());
builder.append("/n");
}来得到所有的签名信息。在这里我验证过,signatures
的长度为1,所以指定apk的签名信息就为signatures[0]。
至于第二种方法有待发现。
3 .获取签名的MD5值
public static final String getMD5String(byte[] paramArrayOfByte)
{
char[] asciiTable = { 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
97, 98, 99, 100, 101, 102 }; // ascii表对应的数字和字符的编码
try
{
MessageDigest md5MessageDigest =
MessageDigest.getInstance("MD5");
md5MessageDigest.update(paramArrayOfByte);//
byte[]
tempByte = md5MessageDigest.digest();
int i =
tempByte.length;
char[] tempChar = new char[i *
2];
int j = 0;
int k =
0;
while (true) { //
将二进制数组转换成字符串
if (j >= i)
{
return new
String(tempChar);
}
int m
= tempByte[j];
int n = k +
1;
tempChar[k] = asciiTable[(0xF & m >>>
4)];
k = n +
1;
tempChar[n] = asciiTable[(m &
0xF)];
j++;
}
}
catch (Exception e)
{
e.printStackTrace();
}
return
null;
}
(1). 其中参数就是上一步得到的签名的byte数组。
4. 获取公钥,签名算法,签名序列号
public static void parseSignature(byte[] signature)
{
try
{
CertificateFactory
certFactory =
CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate) certFactory.generateCertificate(new
ByteArrayInputStream(signature));
String pubKey =
cert.getPublicKey().toString(); //公钥
String signNumber =
cert.getSerialNumber().toString();
System.out.println("signName:" +
cert.getSigAlgName());//算法名
System.out.println("pubKey:" +
pubKey);
System.out.println("signNumber:" +
signNumber);//证书序列编号
System.out.println("subjectDN:"+cert.getSubjectDN().toString());
} catch (CertificateException e)
{
e.printStackTrace();
}
}
5. 电脑查看APK签名信息
查看三方应用或是系统应用签名
用winrar打开待查看的apk,将其中META-INF文件夹解压出来,得到其中的CERT.RSA文件
1.keytool
-printcert -file META-INF/CERT.RSA
命令是:keytool -printcert -file
<签名文件RSA的路径>
2.jarsigner -verify -verbose -certs Superuser.apk
此条未验证成功
Ⅵ android中怎么看应用签名
1、查看自己的应用签名
可以通过两种方式查看
(1) debug的apk通过Eclipse查看,如下图:
(2) 某个keystore签名的应用,通过
Java
1
keytool -list -keystore E:\Trinea\keystore\appsearch.keystore
查看,会要求输入签名密码,默认为android,如下图:
2、查看三方应用或是系统应用签名
用winrar打开待查看的apk,将其中META-INF文件夹解压出来,得到其中的CERT.RSA文件,通过
Ⅶ 如何查看android应用签名文件的信息
以下介绍查看自己的应用签名及三方APK或系统APK签名信息,包含其中的MD5、SHA1、SHA256值和签名算法等信息。
1、查看自己的应用签名可以通过两种方式查看(1) debug的apk通过Eclipse查看,如下图:
可以查看签名的MD5、SHA1、SHA256值及签名算法
Ⅷ android studio怎么查看apk 签名
1、查看自己的应用签名
可以通过两种方式查看
(1) debug的apk通过Eclipse查看,
eclipse-view-signatures
(2) 某个keystore签名的应用,通过
Java
keytool -list -keystore E:\Trinea\keystore\appsearch.keystore
1
keytool -list -keystore E:\Trinea\keystore\appsearch.keystore
查看,会要求输入签名密码,默认为android,
keytool-list-view-signatures
2、查看三方应用或是系统应用签名
用winrar打开待查看的apk,将其中META-INF文件夹解压出来,得到其中的CERT.RSA文件,通过
Java
keytool -printcert -file META-INF/CERT.RSA
keytool -printcert -file META-INF/CERT.RSA
命令打印证书信息,如微信证书信息
keytool-printcert-view-signatures
可以查看签名的MD5、SHA1、SHA256值及签名算法
PS:网络地图API需要签名做为安全码一部分实在有点不能理解,太麻烦了。
Ⅸ 怎样查看android的apk文件的签名
操作如下:
1,通过apktool工具解压当前apk(比如:demo.apk),解压后,会生成CERT.RSA文件
**** apktool d demo.apk。备注:通过这种方式解压出来的Androidmenifest.xml文件可以通过文件编辑器打开查看
2,通过keytool命令获取签名信息
keytool -printcert -file C:-INFCERT.RSA所有者: CN=ryt, OU=ryt, O=ryt, L=nanjing, ST=china, C=cn发布者: CN=ryt, OU=ryt,O=ryt, L=nanjing, ST=china, C=cn
Ⅹ 如何查看 android 数字签名
用java命令查看,如下:
C:\jdk1.6.0_10\bin>jarsigner.exe -verify f:\ICBCAndroidBank.apk
jar 已验证
什么是数字签名?
数字签名就是为你的程序打上一种标记,来作为你自己的标识,当别人看到签名的时候会知道它是与你相关的。
为什么要数字签名?
Android系统要求每一个Android应用程序必须要经过数字签名才能够安装到系统中,也就是说如果一个Android应用程序没有经过数字签名,是没有办法安装到系统中的!
Android通过数字签名来标识应用程序的作者和在应用程序之间建立信任关系,不是用来决定最终用户可以安装哪些应用程序。
这个数字签名由应用程序的作者完成,并不需要权威的数字证书签名机构认证,它只是用来让应用程序包自我认证的。