3

有了所有适用于 android 的生根和自定义模块,让我感到紧张的是,一些声称它们是谷歌的 apk 实际上是恶意的。

因此,在尝试验证它们时,我提取了一个 ANDROID.RSA 公钥,并且我一直在尝试在线验证它.. 但是每个谷歌搜索都会出现在 android 上进行公钥加密的方法,而不是如何验证实际的谷歌 apk

所以我的基本问题是:

如何验证 google apk 实际上是 google apk?

我发现的一个特定的 RSA 公钥:

Owner: CN=Google NFC, OU=Android, O=Google Inc., L=Mountain View, ST=California, C=US
Issuer: CN=Google NFC, OU=Android, O=Google Inc., L=Mountain View, ST=California, C=US
Serial number: a8cd17c93da5d990
Valid from: Wed Mar 23 21:06:53 EDT 2011 until: Sun Aug 08 21:06:53 EDT 2038
Certificate fingerprints:
     MD5:  C9:E9:71:21:25:5D:E0:15:6F:3F:5B:24:B1:A8:47:6A
     SHA1: 82:75:9E:2D:B4:3F:9C:CB:AF:CE:31:3B:C6:74:F3:57:48:FA:BD:7A
     Signature algorithm name: SHA1withRSA
     Version: 3

Extensions: 

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 1C CE CE 0E EA 4D C1 12   1F C7 51 5F 0D 0A 0C 72  .....M....Q_...r
0010: E0 8C C9 6D                                        ...m
]
]

#2: ObjectId: 2.5.29.19 Criticality=false
BasicConstraints:[
  CA:true
  PathLen:2147483647
]

#3: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: 1C CE CE 0E EA 4D C1 12   1F C7 51 5F 0D 0A 0C 72  .....M....Q_...r
0010: E0 8C C9 6D                                        ...m
]

[CN=Google NFC, OU=Android, O=Google Inc., L=Mountain View, ST=California, C=US]
SerialNumber: [    a8cd17c9 3da5d990]
]
4

1 回答 1

4

我在尝试为我的 Verizon Galaxy Nexus 验证 Google Wallet APK 的下载时将这个解决方案放在一起。

要验证应用程序签名,您需要具有某个版本的 apk 的受信任源。Android 强制使用相同的包名称的应用程序更新由相同的证书签名,因此 Google 电子钱包无法更改其证书,除非创建新的包名称并要求每个用户重新安装应用程序。

  1. 从可信来源下载包含 Google 电子钱包的出厂映像

    https://developers.google.com/android/nexus/images#takju

  2. 下载系统映像提取器

    http://andwise.net/?attachment_id=406

  3. 提取工厂图像

    tar xzvf takju-jro03c-factory-bf087655.tgz  
    mv takju-jro03c/image-takju-jro03c.zip .
    
  4. 提取嵌入图像(zip 文件)

    unzip image-takju-jro03c.zip
    
  5. 提取系统映像提取器(我们在第 2 部分下载的文件)

    tar xzvf ext4_utils.tar.gz  
    chmod +x simg2img
    
  6. 从系统镜像中提取一个 ext4 可挂载镜像

    ./simg2img system.img system.image.ext4
    
  7. mkdir sys

  8. 以新创建的 sys/ 文件夹作为挂载点挂载解压后的 ext4 镜像

    sudo mount -t ext4 -o loop system.image.ext4 sys/
    
  9. 查看 Wallet.apk 证书

    unzip -p sys/app/Wallet.apk META-INF/CERT.RSA | keytool -printcert
    
  10. 比较指纹和序列号(我将它们复制到 python 字符串中并以这种方式进行比较)。查找 SHA-1 原像攻击需要大约 2^160 次猜测,因此如果指纹匹配,则下载的 APK 出错的可能性很小。

您还可以将提取的出厂映像 Wallet.apk 侧载到手机上adb install sys/app/Wallet.apk,然后在手机上下载新的 apk 并从文件管理器启动它以执行升级。Android 将为您进行证书验证。

于 2012-10-04T08:16:22.143 回答