Android签名相关

2017-04-10  本文已影响147人  MarcoHorse

检查app的证书和签名
对Android签名
验证app的签名

命令行代码:
<pre>
[进入文件目录]
cd [文件目录]
[复制文件并重命名]
cp [apk文件名] [zip文件名]
[解压文件]
upzip [zip文件名]
[查看文件]
cat [文件名]
[查看证书内容]
keytool -printcert -file META-INF/CERT.RSA
[生成签名文件]
keytool -genkey -v -keystore storename -alias keyname -keyalg RSA -keysize 2048 -validity [有效天数]
[apk重签名]
jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore storename [.apk文件] [密钥别名alias]
[验证apk]
jarsigner -verify -verbose [apk路径]
</pre>

<h3>1. 检查app的证书和签名</h3>
app的证书是在呗推送到app市场的app中,表示开发者身份的。它是以把开发者的id和他们的app以密码学的方式关联起来的方式实现的。通过提供一个简单又有效的确认和强制保证Android app完整性的机制,app的签名确保了没有哪个app会被其它app所冒充。所有的app在被安装之前,都必须通过签名。

Andorid app的签名实际上是对JAR签名的重新利用,它的工作原理是用一个密码学意义上的hash的。这个hash随后会与一张表示开发者身份的证书绑定在一起并发布出来,即把它与开发者的公钥,实际上也就是和他的私钥(因为他们语意上是相关的)联系在一起。证书通常是由开发者私钥加密的,这也就意味着,他是自签名的证书,没有可信的第三方(例如数字证书认证机构,简称CA)开发者确实拥有给定的公钥这一事实,这一个过程产生了一个签名,并随着这个公钥一起被发布或公开出来。

每一个app的签名都是唯一的,找出app的证书和签名是一个重要的技能,你可能会需要在一个设备上找出恶意app的签名,或者你也有可能需要把使用同一个公钥签名的app全部列出来。

下面就是检查app证书和签名的步骤和命令
我们需要的工具:jdk,adk,winzip
首先进入命令行,进入到我们需要处理的apk文件目录,将apk转成zip并解压缩出来
cd [文件目录]
cp [apk文件名] [zip文件名]
upzip [zip文件名]

找到META-INF文件夹,你会发现里面有一个CERT.RSA文件,这个就是证书的自签名,我们可以使用jdk 自带的keytool工具来查看其中的内容
keytool -printcert -file META-INF/CERT.RSA

CERT.SF文件存储着资源文件的hash值

在使用jarsigner工具验证app的内容时,它会计算CERT.SF文件中列出来的hash,并将其与列在每个资源文件的数字进行比较。

META-INF文件夹分析
MANIFEST.ME:这个文件声明了资源,与CERT.SF文件相似
CERT.SF:包含app中所有资源文件的签名,负责对app进行签名,其中含有JAR指定密码学意义的签名
CERT.RSA:这个文件是公钥证书,内容包括五个区域:owner(拥有者),issuer(颁发者),Serial number(序列号), Valid fromm ...util(有效期),Certificate fingerprints(证书校验)

数字签名的计算方法是用可信第三方的私钥加密证书,在大多数Android app中,这个"可信第三方"就是开发者,这也就意味着这个签名是用它的私钥加密证书而生成的,这样使用数字签名可能从功能上是正确的,但并不像依赖于数字证书认证机构那样的强壮。

<h3>2. 对App签名</h3>
所有的Android app在呗安装到Android设备上之前,都必须通过签名。我们可以利用android的IDE很方便地进行签名。有时候我们也可以装逼一下,用命令行来实现应用签名。
Android app中的签名,使用的实际上是JAR的签名机制,主要用于验证java class文件的开发者。Android项目相对与Java项目来说,还用很多的元数据和资源,所以Android把这些额外的内容也添加到了签名和验证的过程。

对APP的签名步骤

  1. 获取一个还没签名版本的apk(如果已经签名了,那么就删除该签名)
    1.1 解压apk解压出来后删除META-INF文件夹
    1.2 重新压缩生成apk文件
  2. 使用命令行创建一个自己的签名文件
    keytool -genkey -v -keystore storename -alias keyname -keyalg RSA -keysize 2048 -validity [有效天数]
![Paste_Image.png](https://img.haomeiwen.com/i2427213/a85e2b999029fa4a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)   
  1. 对应用通过jarsign进行重签名
    jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore storename [.apk文件] [密钥别名alias]

<h3>3. 验证app签名</h3>
jd里面有一个jarsigner的工具,我们需要做的就是执行一下的命令
jarsigner -verify -verbose [apk路径]

验证已签名apk文件 未签名文件
上一篇下一篇

猜你喜欢

热点阅读