Android app的签名实际上是对JAR签名的重新利用。用一个密码学意义上的hash函数计算app的内容,这个hash会与一张表示开发者身份的证书绑定在一起并发布出来,将hash与开发者的公钥,也就是和私钥联系在一起,证书通常是由开发者的私钥加密的,是一种自签名证书
所有者: EMAILADDRESS=android@android.com, CN=Android, OU=Android, O=Android,
ountain View, ST=California, C=US
发布者: EMAILADDRESS=android@android.com, CN=Android, OU=Android, O=Android,
ountain View, ST=California, C=US
序列号: 936eacbe07f201df
有效期开始日期: Fri Feb 29 09:33:46 CST 2008, 截止日期: Tue Jul 17 09:33:46 C
2035
证书指纹:
MD5: E8:9B:15:8E:4B:CF:98:8E:BD:09:EB:83:F5:37:8E:87
SHA1: 61:ED:37:7E:85:D3:86:A8:DF:EE:6B:86:4B:D8:5B:0B:FA:A5:AF:81
SHA256: A4:0D:A8:0A:59:D1:70:CA:A9:50:CF:15:C1:8C:45:4D:47:A3:9B:26:
9D:8B:64:0E:CD:74:5B:A7:1B:F5:DC
签名算法名称: SHA1withRSA
版本: 3
扩展:
#1: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: 48 59 00 56 3D 27 2C 46 AE 11 86 05 A4 74 19 AC HY.V=',F.....t..
0010: 09 CA 8C 11 ....
]
[[email protected], CN=Android, OU=Android, O=Android, L=Mount
View, ST=California, C=US]
SerialNumber: [ 936eacbe 07f201df]
]
#2: ObjectId: 2.5.29.19 Criticality=false
BasicConstraints:[
CA:true
PathLen:2147483647
]
#3: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 48 59 00 56 3D 27 2C 46 AE 11 86 05 A4 74 19 AC HY.V=',F.....t..
0010: 09 CA 8C 11 ....
]
]
以上显示的是证书的内容,其中声明了公钥的持有者
而真正的与app相关的签名,在META-INF文件夹中找到CERT.SF的文件,该文件中包含了app中各个资源的密码学意义上的hash
1.Owner(拥有者)用来声明公钥的持有者。其中包含与该个体相关的国家和组织的基本信息
2.Issuer(颁发者) 这个域用于声明X.509证书的颁发者,用来把公钥和声明的持有者关联。
3.Serial number:用作颁发者证书的一个标示符
4.Valid from…util 这个域指定了证书的有效期
5.Certificate fingerprints:证书的数字校验和
keytool -genkey -v -keystore[keystore的名称] -alias[密钥的别名] -keyalgRSA -keysize 2048 -validity[有效天数]
jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore[keystore名字][.apk文件][密钥别名]
参数解释:
* -verbose 输出详细信息
* -sigalg 用来指定签名过程中使用的算法
* -digestalg 用来指定应该用什么算法来计算.apk文件中各个资源的hash
* -keystore 用来指定想要使用哪个密钥存储器
keytool对公钥和私钥的实际处理方式:把公钥放在X.509.v3证书中,该证书用来声明公钥持有者,并能验证相关公钥是否属于声明持有者的
jarsigner -verify -verbose [apk路径]
1. 将apktool运用在目标apk上
```
apktool d -f -s [apk文件] decoded-data/
```
2.查看提取出来的AndroidManifest.xml 文件
adb shell
运行包管理器,可以得到一张设备中已安装的activity的列表
pm list packages
启动activity
am start [包名]
am start <INTENT><--user UID|current>
* -a 指定要使用的action的标签字符串,指定intent的action
* -d 数据uri 这个参数指定了附加到intent的数据URI
* -t mime类型
* -c intent category
* -n 组件 指定了创建intent使用的组件名
ls -alR */
ls -alR */databases/
ls -alr */files/
ls -al */*/*.xml
ls -al */*/*.png
ls -al */*/*.mp3