转载请注明出处
根据已知Google证书的序列号来识别APK使用哪种证书签名的
目前只列出google原生签名,其他私有签名均视为presigned
#!/bin/bash
# Grab cert. info from APKs# eric, 130628
CER_NAMES=(
# google key serial
google_platform
google_shared
google_media
google_testkey
# google devkeys
google_devkey
google_devkey_media
google_devkey_platform
google_devkey_shared
)
CER_SERIALS=(
# google key serial
B3998086D056CFFA
F2A73396BD38767A
F2B98E6123572C4E
936EACBE07F201DF
# google dev devkeys
BCDFE81405D5C69E
A1573D0F45BEA193
A3823FB27F6289B8
BE56E295629C3E3D
)
if [ -z $1 ]
then
echo "usage: $0 <apks_dir>"
exit 1
fi
echo "certificate, cert_serial, apk" >/dev/stderr
(
find $1 -name *.apk | while read apk
do
# echo "=== $apk ==="
apk_cert=$(unzip -p $apk META-INF/*.RSA | \
openssl pkcs7 -inform DER -print_certs | \
openssl x509 -noout -serial)
if [ $? != 0 ]
then
echo "*** err: Cannot grab certs of '$apk'"
continue
fi
rsa_ser=${apk_cert#*=}
i=0
cert="presigned"
for v in ${CER_SERIALS[@]}
do
if [ "$v" = "$rsa_ser" ]
then
cert=${CER_NAMES[$i]}
# echo "$i === $cert"
break
fi
i=$((i+1))
done
echo "$cert, $rsa_ser, $apk"
done
) | sort
exit 0