關於在安卓apk中增加官方簽名校驗的說明

2021-07-16 03:11:57 字數 1164 閱讀 8663

眾所周知,安卓apk的發布,是需要經過簽名這一道程式的。

另外,要破解乙個apk,必然需要重新對apk進行簽名。而這個簽名,一般情況無法再與apk原先的簽名保持一致。(除非apk原作者的私鑰洩漏,那已經是另乙個層次的軟體安全問題了。)簽名機制標明了apk的發行機構。因此,站在軟體安全的角度,我們就可以通過比對apk的簽名情況,判斷此apk是否由「官方」發行,而不是被破解篡改過重新簽名打包的「盜版軟體」。

apk簽名比對的應用場景

經過以上的

論述,想必大家已經明白簽名

比對的原理和我的實現方式了。那麼什麼時候什麼情況適合使用簽名對比來保障android apk的軟體安全呢?

個人認為主要有以下三種場景:

1、 程式自檢測。在程式執行時,自我進行簽名比對。比對樣本可以存放在apk包內,也可存放於雲端。缺點是程式被破解時,自檢測功能同樣可能遭到破壞,使其失效。

2、 3、 

系統限定安裝。這就涉及到改android系統了。限定僅能安裝某些證書的apk。軟體發布商需要向系統發布上申請證書。如果發現問題,能追蹤到是哪個軟體發布商的責任。

適用於系統提供商或者終端產品生產商。

缺點是過於封閉,不利於系統的開放性。

以上三種場景,雖然各有缺點,但缺點並不是不能克服的。例如,我們可以考慮程式自檢測的功能用native method的方法實現等等。軟體安全是乙個複雜的課題,往往需要多種技術聯合使用,才能更好的保障軟體不被惡意破壞。

校驗的具體實現:

1、獲取apk中的資訊。

x509certificate certificate = getcertificate();
string pubkey = certificate.getpublickey().tostring();

string signnumber = certificate.getserialnumber().tostring();

string subjectdn = certificate.getsubjectdn().tostring();

2、使用jni本地庫校驗,防止關鍵資訊洩漏
native.issignvalid(modulus, signnumber, subjectdn);
3、構建so庫與遠端aar依賴

快速在安卓機器上部署apk

1.本地安裝adb,本地沒有brew的需要先安裝。brew cask install android platform tools2.安裝完後使用 3.在機頂盒設定裡面開啟開發者許可權,檢視機頂盒ip,電腦adb連線機頂盒 4.檢視已連線裝置 這樣就屬於連線上了。5.直接部署apk adb inst...

在android系統中增加預編譯apk

將一些apk檔案預編譯到系統中,從而不用每次跟新系統後在安裝應用。mydroid gedit device ti nexttab device.mk 增加檔案 增加google play應用,需要如下apk檔案才能使用google play。product copy files 編譯錯誤 解決 ge...

安卓中關於spinner的使用

spinner也算是安卓開發中乙個不太常用的控制項,今天專案需求要用到這個小控制項,索性拿出來點時間整理下它吧,跟其他控制項大同小異,使用起來也算簡單吧 先是布局檔案 接著是在 裡設定監聽事件 public class mainactivity extends activity override p...