Android證書生成,籤名,驗證,雖然難,但學一次就夠了!

2020-12-17 程式設計師小助手

引言

從Android演進開始,APK籤名就已經成為Android的一部分,並且android要求所有Apks都必須先籤名,然後才能將其安裝在設備上。關於如何生成密鑰以及如何籤名的文章很多。一個Apk,但我們將從安全角度進行研究。在對Apk文件進行反編譯或反向工程之後,應查看哪個文件,以獲取有關最初對應用進行籤名的開發人員的更多信息。

反編譯APK文件

解壓縮文件或使用apktool後,取決於如何對文件進行反編譯,如果解壓縮文件,則文件結構將如下所示。

我們正在查看META-INF文件夾,

正在查看使用Apktool進行的反編譯Apk,它在原始文件夾中包括有關開發人員的證書詳細信息以及所使用的哈希算法的類型等,並檢查META-INF文件夾。

當您當前仍位於META-INF文件夾中時,使用keytool檢查證書。

keytool -printcert -file DROIDRDR.RSA

根據證書別名的名稱,從證書頒發之日和證書設置為過期起,您將看到所有者,國家/地區,頒發者,證書有效性的不同信息。

MD5,SHA1和SHA256中的證書指紋以及所使用的籤名算法。

之前,我們談論了生成證書,讓我們從安全角度來看它,在分析您從第三方網站下載的Android應用程式時,您可以反編譯該應用程式並查看該證書並將其與原始應用程式進行比較,在使用的哈希算法上,如果應用程式可能已被修改或篡改,則將其進行比較驗證。

生成Android證書

如果您反編譯並重新編譯android應用程式,則需要對應用程式進行籤名,如果不籤名,則該應用程式將不會安裝在用戶設備上。有多種生成證書的方法,但是,我們將介紹使用keytool生成證書的三種方法。

方法1:

打開您的終端:

keytool -genkey -v -keystore awwal -alias hafsa -keyalg RSA -keysize 2048 -validity 365

其中 awwal —是密鑰庫名稱,hafsa是證書別名,使用後將被添加到META-INF文件夾-keysize 2048中,但是您可以使用4096大小,但是設備存在與此有關的問題或者。但僅使用2048,有效期為幾天。

方法2:

使用可在此處下載的apk-signer.jar。這是用Java編寫的GUI,可生成證書並進行籤名一個APK文件。儘管Playstore中也有一個Android應用程式。

籤署Android應用程式

在您已經生成了Android應用程式之後,我們將研究如何對應用程式進行籤名,運行您的終端:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore awwal medium.apk hafsa

其中-sigalg是使用的籤名算法,您可以使用MD5找到一些應用程式,但是在驗證應用程式時使用SHA1,因為它將告訴您使用的哈希算法以及使用的算法的弱度。

密鑰庫— awwal是生成證書時使用的密鑰庫名稱的名稱,hafsa是證書的別名,而medium.apk是要籤名的應用程式的名稱。

注意:如果您使用MD5,則該應用程式將被視為未籤名應用程式,因為用於籤署應用程式的算法很弱。

驗證Android應用程式

使用jarsigner驗證應用程式,以查看資源籤名列表以及具有keysize的哈希算法。

打開您的終端:

jarsigner -verify -verbose medium.apk

其中僅驗證將顯示它是籤名還是未籤名,並使用詳細選項查看證書的完整詳細信息。

或者,您可以使用Apk籤名者來自動完成文件名驗證應用。

寫在最後

雖然上面我們使用的都是 java 工具鏈的東西,其實生成的 CERT.RSA 文件內,包含了公鑰鏈,也完全可以使用 openssl 工具列印出 pubkey 證書文件,並可做進一步的指紋校驗。

關鍵是生成籤名的方法,這個對於使用不同的工具復現過程很關鍵。

Happy coding :_)

我是 @程式設計師小助手 ,持續分享編程知識,歡迎關注。

相關焦點

  • 代碼籤名、文檔籤名、數字籤名、數字證書、SSL證書、代碼籤名證書...
    最近想跟童鞋們分享一期關於代碼籤名證書的內容,因為相對於SSL證書,代碼籤名證書顯得有些許陌生吧。但是講之前,為了避免給大部分童鞋帶來概念混亂的現象,我們先來講講代碼籤名、文檔籤名、數字籤名和數字證書、SSL證書、代碼籤名證書之間的關係。
  • 使用openssl生成https證書
    創建ssl證書1、創建密鑰使用openssl工具生成一個RSA私鑰openssl genrsa -des3 -out server.key 2048注意:生成私鑰,需要提供一個至少2、生成CSR(證書籤名請求)openssl req -new -key server.key -out server.csr說明:需要依次輸入國家,地區,城市,組織,組織單位,Common Name和Email。
  • 使用CryptoAPI進行數字籤名及驗證
    SigParams.rgpMsgCert = &pCertContext;//包含所有籤名證書的數組,必須將pSigningCert指向的證書上下文對象添加到這個數組裡SigParams.cAuthAttr = 0;//用戶認證屬性數組元素個數,也就是rgAuthAttr元素個數,沒有的話就傳0
  • Android籤名解析一
    什麼是籤名2.1 籤名流程那麼在傳輸過程中如何保證APK來源的真實性,以及傳輸過程中內容沒有被篡改呢?為了解決這些問題,Google官方提出對APK進行籤名。籤名流程如下:計算原始APK的摘要;對摘要進行加密,形成籤名;將籤名寫入APK,生成籤名APK;
  • 【專業技術】Android安全嘛?
    第二步:獲取 Package 中的證書,驗證,並將籤名信息保存在 Package 結構中。如果該 package 來自 system img (系統 app ),那麼只需要從該 Package 的AndroidManifest.xml 中獲取籤名信息,而無需驗證其完整性。
  • Android安全幾道入門題目
    市場上一些主流的app雖然多少都做了一些安全防範,但由於大部分app不涉及資金安全,所以對安全的重視程度不夠。本文通過幾個題目可以讓你基本了解android中簡單的但比較經典的漏洞、以及簡單的android註冊機開發的思路。閱讀本文,你可能需要了解android逆向的基本知識和常用工具、非常簡單的java語言、smali的語法知識。本文適合android入門初學者,最基本的東西。大佬請無視!
  • 這五點告訴你ios證書申請到籤名文件生成中間都經歷了什麼
    IOS開發需要加入開發計劃並給蘋果付費,這是大家都知道的,從IOS證書申請到籤名文件生成的步驟具體了解是有多少呢?一起跟隨小編來看一下吧。準備CSR文件和蘋果打交道,最好的就是要準備一臺Mac電腦,在這裡需要用到一個蘋果自帶的KeyAccess的軟體,用來生成證書的申請文件。點擊「從證書頒發機構請求證書」後,這裡就是輸入郵箱,名字,需要提醒一下的是,我們一般選擇「儲存到磁碟」,把申請文件存在硬碟上,後面需要上傳這個文件的蘋果後臺。
  • 數字證書是如何生成的?
    數字證書是如何生成的?數字證書是數字證書在一個身份和該身份的持有者所擁有的公/私鑰對之間建立了一種聯繫,由認證中心(CA)或者認證中心的下級認證中心頒發的。根證書是認證中心與用戶建立信任關係的基礎。例如,密鑰對是由軟體運營商代替客戶生成,證書也是由運營商代替客戶從CA下載,然後把私鑰和下載的證書一起儲存在軟盤裡,再交給用戶的。這樣做的好處是免去了用戶上網下載證書的麻煩。第二種途徑是帶內分發(In-band distribution),即用戶從網上下載數字證書到自己的電腦中。下載時,用戶要向CA出示「參考號」和「授權碼」,以向CA證明自己的身份。
  • 精選Android中高級面試題 -- 終結篇:高級乾貨
    插樁基本概念(https://blog.csdn.net/fei20121106/article/details/51879047)Android逆向之旅(http://www.520monkey.com/)參考回答:Android的籤名機制包含有消息摘要、數字籤名和數字證書消息摘要:在消息數據上,執行一個單向的 Hash
  • 【Android】一次面試總結
    公鑰 頒證機構 網址 失效日期等等3、客戶端收到了伺服器發來的數據包後,會做這麼幾件事情: 1)驗證一下證書是否合法。一般來說,證書是用來標示一個站點是否合法的標誌。如果說該證書由權威的第三方頒發和籤名的,則說明證書合法。 2)如果證書合法,或者客戶端接受和信任了不合法的證書,則客戶端就會隨機產生一串序列號,使用伺服器發來的公鑰進行加密。
  • HTTPS 證書生成原理和部署細節
    it)客戶端收到的東西原封不動,加上 premaster secret(通過 random-client、random-server 經過一定算法生成的東西),再一次送給伺服器端,這次傳過去的東西會使用公鑰加密伺服器端先使用私鑰解密,拿到 premaster secret,此時客戶端和伺服器端都擁有了三個要素:random-client、random-server 和
  • Android Studio打包apk,aar,jar包
    一片楓葉_劉超的博客地址:http://blog.csdn.net/qq_23547831作者編寫了github項目解析、android源碼分析以及產品研發多個專題,有興趣的可以關注下學習學習~文本我們將講解android studio打包apk,aar,jar包的相關知識。
  • Android5.1.1 - APK籤名校驗分析和修改源碼繞過籤名校驗
    找到PackageParser類,該類在文件「frameworks/base/core/java/android/content/pm/
  • 【移動安全】Android程序分析入門
    一、編寫Android程序使用Android studio編寫Android應用程式加載完成進入主界面後,點擊activity_main.xml進入工程布局界面,然後可以拖動左邊的palette內的各種各樣的控制項,系統就會自動幫我們生成xml代碼。
  • 數字證書是證書嗎?數字籤名是籤名嗎?看完這篇你就懂了
    提及電子合同這個詞,大家一定很好理解;但提及一些電子合同所涉及的專業名詞:數字證書、數字籤名、CA機構、CA證書...大家就開始一頭霧水。但這又是我們涉及第三方電子合同平臺這個行業領域裡不得不有所了解的詞彙,那麼怎樣才能快速理解這些東西呢?別著急,今天一一為你解析。
  • 兩大智能合約籤名驗證漏洞分析
    另一方面,在考慮智能合約的安全性時,你可能不會立即想到針對密碼籤名實現的攻擊方式。它們通常是與網絡協議相關聯的。例如,籤名重放攻擊(signature replay attacks),一個惡意用戶可竊聽包含有效籤名的協議序列,並針對目標進行重放攻擊,以期獲得益處。本文將解釋智能合約處理DAPP生成籤名時可能存在的兩種類型的漏洞。
  • 又又又攢了一個月的Android面試題奉上 | 1 月
    1)首先,客戶端會對發來的證書進行驗證,比如數字籤名、證書鏈、證書有效期、證書狀態。然後伺服器將這個證書在連接階段傳給客戶端,客戶端怎麼驗證呢?也就是客戶端自帶的那些,根證書都是自籤名,即用自己的公鑰和私鑰完成了籤名的製作和驗證。第二層:中級證書。一般根證書是不會直接頒發伺服器證書的,因為這種行為比較危險,如果發現錯誤頒發就很麻煩,需要涉及到跟證書的修改。所以一般會引用中間證書,根證書對中間證書進行籤名,然後中間證書再對伺服器證書進行籤名,一層套一層。第三層:伺服器證書。也就是跟我們伺服器相關的這個證書了。
  • 代碼籤名證書是什麼?有什麼用?
    為了維護安全,企業必須在開發軟體時使用代碼安全工具——代碼籤名證書。數安時代GDCA提供當今業界高效和經濟的代碼安全解決方案,保護應用程式安全。一、代碼籤名證書是什麼?代碼籤名證書一種數字證書,其中包含完全標識實體的信息,並由證書頒發機構(如數安時代GDCA)頒發,是放置在軟體和其他可執行文件和腳本上,證明軟體作者的身份,並驗證軟體未被篡改。
  • iOS 證書幕後原理
    在數字籤名技術中,有兩種行為:籤名生成籤名生成由通信中的發起方進行,其過程如下所示。首先對通信內容進行哈希,然後使用發送放的私鑰進行加密,最終得到籤名。籤名驗證籤名驗證由通信中的接收方進行,其過程如下所示。
  • 在Windows中識別自製文件格式並參與籤名驗證流程
    內置籤名驗證機制架構: a) 從哪⾥裡里找? i.模塊的類型:Provider:查找文件類型對應的模塊,加載文件對應模塊驗證文件籤名有效性,並進行額外的工作。SIP:Subject Interface Package,文件的籤名就是一種Subject,籤名的驗證方法被Windows封裝為接口,實現這個接口的模塊就是SIP。