APK簽名替換檢測

2021-10-01 18:31:44 字數 3530 閱讀 3700

插入自己廣告或者刪除原來廣告;

惡意**, 惡意扣費、木馬等;

修改原來支付邏輯;

上述惡意行為嚴重危害移動產品和使用者利益,同時也影響企業口碑。

google設計apk的簽名機制就是防止兩個問題:

下面開始分析apk打簽名的流程:

將.apk包修改字尾成.zip,解壓之後開啟該資料夾,找到meta-inf目錄。

簽名就是圍繞這三個檔案開始的。

這個檔案裡面包括了apk檔案中所有檔案的資料摘要值。相當於對每個單獨(除了這三個)的檔案都做了資料指紋。

和manifest.mf檔案差不多,唯一的差別在於,多了一行sha1-digest-manifest: kderpmankkb5mxceo/t5oxrgapg=,這行就是manifest.mf的資料摘要。

把之前的cert.sf檔案用私鑰計算出乙個加密值,這個加密值稱為簽名,所以這個檔案包含了簽名和公鑰;

如果是在windows系統下,推薦使用cmder.exe軟體使用如下命令。

warning: can't open config file: /usr/local/ssl/openssl.cnf

certificate:

data:

version: 1 (0x0)

serial number: 1 (0x1)

signature algorithm: sha1withrsaencryption

issuer: cn=android debug, o=android, c=us

validity

not before: dec 27 09:26:22 2018 gmt

not after : dec 19 09:26:22 2048 gmt

subject: cn=android debug, o=android, c=us

subject public key info:

public key algorithm: rsaencryption

public-key: (1024 bit)

modulus:

00:89:e0:b4:29:a9:62:b1:44:48:b8:35:f2:8a:06:

91:c7:36:44:1a:d2:b3:97:fd:58:b5:84:35:fc:83:

09:50:f5:85:83:d9:bc:12:a8:da:da:cf:f0:10:d0:

4d:9f:a5:9d:7f:de:b6:4e:1e:94:36:c4:f4:44:45:

4e:44:f5:97:9f:f3:62:3f:5f:9d:ce:a6:18:73:22:

62:28:79:f7:46:f8:d6:f7:ca:46:e3:3f:dd:a8:ac:

b7:aa:cb:77:7c:47:16:89:d1:d5:f8:47:e5:21:28:

87:f8:a6:dd:ee:ed:01:da:b5:06:49:04:19:49:46:

d8:0a:a6:bb:b4:b5:c9:56:79

exponent: 65537 (0x10001)

signature algorithm: sha1withrsaencryption

79:3c:29:c5:3c:e7:d8:28:e1:5c:2a:1d:ce:31:cb:e6:a5:09:

d0:10:d8:e5:74:e9:b5:80:4a:63:76:f4:67:ee:8c:f1:eb:04:

8f:23:f4:f6:c2:f7:a5:99:af:c5:be:8f:70:6d:dc:3e:b3:db:

ca:b2:64:e1:0c:ca:ce:fe:16:1f:3b:00:83:b5:f8:be:8a:b4:

7e:a9:94:fe:77:1f:67:ff:4f:54:87:66:f4:97:be:ce:38:54:

51:b4:ce:a8:23:60:92:e3:bf:5d:21:11:50:c9:c2:40:b4:69:

89:fe:4f:66:84:17:42:91:af:af:bd:e9:47:24:f8:db:74:70:

d0:87

證書內容概況:

用來管理私鑰倉庫的命令:

所有者: c=us, o=android, cn=android debug

發布者: c=us, o=android, cn=android debug

序列號: 1

有效期為 thu dec 27 17:26:22 cst 2018 至 sat dec 19 17:26:22 cst 2048

證書指紋:

md5: 41:41:89:25:4c:9b:91:6d:16:91:20:6c:1d:d7:61:2f

sha1: 73:fc:5a:9f:5d:7a:cc:93:14:8d:f1:13:37:e6:11:c2:86:a4:3d:34

sha256: 32:33:24:4f:1c:4e:6e:78:3f:f2:c4:59:cd:19:9f:43:bc:ac:1a:23:cb:78:72:9a:0e:61:c9:b3:5d:4c:b9:c1

簽名演算法名稱: sha1withrsa

主體公共金鑰演算法: 1024 位 rsa 金鑰

版本: 1

apk生成後簽名不能更改,因為沒有私鑰。但能替換簽名,因為android系統在安裝apk的時候只校驗簽名的正確性。

乙個apk檔案,通過使用androidkiller二次編譯,我對比了原apk和編譯後的apk的./meta-inf/cert.rsa檔案,發現確實是被替換了。

簽名的過程可以想象成發件人和收件人的處理流程,也是乙個雙向的動作,可以大致理解成下圖流程:

可以把上圖的客戶1替換成打包apk的過程,把伺服器替換成android手機安裝apk的過程,當系統拿著cert.rsa裡面的公鑰和apk原文解密出的hash值和cert.sf檔案裡面的hash值不一致時,就不會去安裝。

二次打包成功的前提是能替換簽名,並且apk沒做簽名校驗。而簽名驗證的方式有三種:

步驟:使用androidkiller_v1.3.1工具,裡面有個編譯功能,就能做到二次打包,原理就是替換簽名值。

我一般修改版本號來證明能二次打包:

反編譯後在androidmanifest.xml 裡直接修改版本號,如果在androidmanifest.xml檔案中無法看到 versioncode和versionname欄位,則在apktool.yml檔案中開啟找到,對應修改versionname欄位的數字大小即可。

so層校驗簽名

網路校驗簽名

apk加固

apk簽名 apk版本資訊

1.apk簽名 只支援v1簽名 jarsigner verbose keystore keystore signedjar signed.apk unsigned.apk keyalias別名 支援v1,v2簽名 apksigner對apk簽名的各個引數 apksigner sign 執行簽名操作 ...

apk簽名問題

1 為什麼要簽名?每個發布的應用都有自己的乙個唯一合法的id,這個就是應用自身的簽名,簽名可以保證你軟體公升級的一致性,使用相同簽名的應用可以實現覆蓋安裝,而不一致的簽名將無法共享使用資料,也即是無法覆蓋安裝,這樣可以防止別人篡改,盜用開發者的應用,造成對開發者利益的損害。2 怎麼去簽名?有以下兩種...

apk重新簽名

jarsigner jdk自帶工具,用於生成帶簽名的apk verbose引數表示 顯示出簽名詳細資訊 keystore表示使用當前目錄中的 android.keystore 簽名證書檔案。signedjar io.dcloud.h5935c1f2 legu.apk 表示簽名後生成的apk名稱,7f...