主頁 > 移動端開發 > APK簽名替換檢測

APK簽名替換檢測

2020-09-15 06:57:49 移動端開發

APK二次打包的危害

APK二次打包是Android應用安全風險中的一部分, 一般是通過反編譯工具向應用中插入廣告代碼與相關配置,再在第三方應用市場、論壇發布,打包黨對移動App帶來的危害有以下幾種:

  1. 插入自己廣告或者洗掉原來廣告;
  2. 惡意代碼, 惡意扣費、木馬等;
  3. 修改原來支付邏輯;

上述惡意行為危害了APK出品方和用戶的利益,同時也影響企業口碑,


APK的簽名機制

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

  • 不讓別人修改APK包,防止反編譯后二次打包;
    怎么做到不讓別人二次打包呢?Android系統在安裝APK時,會先去確認是否有簽名、簽名是否能對上;
  • Android系統在安裝APK包時,不允許安裝同一個包名但是簽名不一樣的APK;

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

需要了解的背景知識

自行去百度,了解概念即可;

  • 資料摘要(資料指紋)、MD5\SHA-1對稱加密演算法
  • 非對稱加密演算法
  • 數字簽名、數字證書
  • 手動簽名APK包

1.查看META-INF檔案

將.apk包修改后綴成.zip,解壓之后打開該檔案夾,找到META-INF目錄,

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

2.先看第一個檔案MANIFEST.MF

這個檔案里面包括了APK檔案中所有檔案的資料摘要值,相當于對每個單獨(除了這三個)的檔案都做了資料指紋,

3.在看第二個檔案CERT.SF

和MANIFEST.MF檔案差不多,唯一的差別在于,多了一行SHA1-Digest-Manifest: KDerPmANkkB5mxceo/t5oXRGApg=,這行就是MANIFEST.MF的資料摘要,

4.最后看第三個檔案CERT.SF

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

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

D:\ProgramFiles\cmder>openssl pkcs7 -inform DER -in "C:\app-debug - 副本\META-INF\CERT.RSA" -noout -print_certs -text
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

證書內容概況:

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

D:\ProgramFiles\cmder>keytool -printcert -file "C:\app-debug - 副本\META-INF\CERT.RSA"
所有者: 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沒做簽名校驗,而簽名驗證的方式有三種:

  • APK包沒有做簽名校驗
    直接替換簽名即可,下面將介紹替換簽名的步驟;

  • APK包做了簽名校驗

    • java代碼校驗
      難點在于找到校驗的JAVA代碼,注釋掉即可;
    • .so檔案校驗
      難點在于看懂匯編,找到校驗的C代碼,注釋掉即可;
    • 加殼
      難點在于得先脫殼;

替換簽名步驟

工具:
AndroidKiller_v1.3.1 (下載地址:https://www.52pojie.cn/thread-319641-1-1.html)

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

執行步驟中有報錯,建議看我之前的文章:https://www.cnblogs.com/mysticbinary/p/11609825.html

我一般修改版本號來證明能二次打包:
反編譯后在AndroidManifest.xml 里直接修改版本號,如果在AndroidManifest.xml檔案中無法看到 versionCode和versionName欄位,則在apktool.yml檔案中打開找到,對應修改versionName欄位的數字大小即可,


修復方式

  1. SO層校驗簽名
  2. 網路校驗簽名
  3. APK加固

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/43782.html

標籤:Android

上一篇:Android 有關在ListView RecycleView 中使用EditText Checkbox的坑

下一篇:解決Fail to post notification on channel "null"的方法

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【從零開始擼一個App】Dagger2

    Dagger2是一個IOC框架,一般用于Android平臺,第一次接觸的朋友,一定會被搞得暈頭轉向。它延續了Java平臺Spring框架代碼碎片化,注解滿天飛的傳統。嘗試將各處代碼片段串聯起來,理清思緒,真不是件容易的事。更不用說還有各版本細微的差別。 與Spring不同的是,Spring是通過反射 ......

    uj5u.com 2020-09-10 06:57:59 more
  • Flutter Weekly Issue 66

    新聞 Flutter 季度調研結果分享 教程 Flutter+FaaS一體化任務編排的思考與設計 詳解Dart中如何通過注解生成代碼 GitHub 用對了嗎?Flutter 團隊分享如何管理大型開源專案 插件 flutter-bubble-tab-indicator A Flutter librar ......

    uj5u.com 2020-09-10 06:58:52 more
  • Proguard 常用規則

    介紹 Proguard 入口,如何查看輸出,如何使用 keep 設定入口以及使用實體,如何配置壓縮,混淆,校驗等規則。

    ......

    uj5u.com 2020-09-10 06:59:00 more
  • Android 開發技術周報 Issue#292

    新聞 Android即將獲得類AirDrop功能:可向附近設備快速分享檔案 谷歌為安卓檔案管理應用引入可安全隱藏資料的Safe Folder功能 Android TV新主界面將顯示電影、電視節目和應用推薦內容 泄露的Android檔案暗示了傳說中的谷歌Pixel 5a與折疊屏新機 谷歌發布Andro ......

    uj5u.com 2020-09-10 07:00:37 more
  • AutoFitTextureView Error inflating class

    報錯: Binary XML file line #0: Binary XML file line #0: Error inflating class xxx.AutoFitTextureView 解決: <com.example.testy2.AutoFitTextureView android: ......

    uj5u.com 2020-09-10 07:00:41 more
  • 根據Uri,Cursor沒有獲取到對應的屬性

    Android: 背景:呼叫攝像頭,拍攝視頻,指定保存的地址,但是回傳的Cursor檔案,只有名稱和大小的屬性,沒有其他諸如時長,連ID屬性都沒有 使用 cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATIO ......

    uj5u.com 2020-09-10 07:00:44 more
  • Android連載29-持久化技術

    一、持久化技術 我們平時所使用的APP產生的資料,在記憶體中都是瞬時的,會隨著斷電、關機等丟失資料,因此android系統采用了持久化技術,用于存盤這些“瞬時”資料 持久化技術包括:檔案存盤、SharedPreference存盤以及資料庫存盤,還有更復雜的SD卡記憶體儲。 二、檔案存盤 最基本存盤方式, ......

    uj5u.com 2020-09-10 07:00:47 more
  • Android Camera2Video整合到自己專案里

    背景: Android專案里呼叫攝像頭拍攝視頻,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后來因專案需要,改成了camera2 1.Camera2Video 官方demo有點問題,下載后,不能直接整合到專案 問題1.多次拍攝視頻崩潰 問題2.雙擊record按鈕, ......

    uj5u.com 2020-09-10 07:00:50 more
  • Android 開發技術周報 Issue#293

    新聞 谷歌為Android TV開發者提供多種新功能 Android 11將自動填表功能整合到鍵盤輸入建議中 谷歌宣布Android Auto即將支持更多的導航和數字停車應用 谷歌Pixel 5只有XL版本 搭載驍龍765G且將比Pixel 4更便宜 [圖]Wear OS將迎來重磅更新:應用啟動時間 ......

    uj5u.com 2020-09-10 07:01:38 more
  • 海豚星空掃碼投屏 Android 接收端 SDK 集成 六步驟

    掃碼投屏,開放網路,獨占設備,不需要額外下載軟體,微信掃碼,發現設備。支持標準DLNA協議,支持倍速播放。視頻,音頻,圖片投屏。好點意思。還支持自定義基于 DLNA 擴展的操作動作。好像要收費,沒體驗。 這里簡單記錄一下集成程序。 一 跟目錄的build.gradle添加私有mevan倉庫 mave ......

    uj5u.com 2020-09-10 07:01:43 more
最新发布
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:40:31 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:40:11 more
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:39:36 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:39:13 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:16:23 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:16:15 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:15:46 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:14:53 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:14:08 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:08:34 more