【Android 插件化】使用 PluginKiller 帮助应用开发者规避发布的 APK 安装包被作为插件的风险 ( 验证应用是否运行在插件化引擎中 )
文章目錄
- 前言
- 一、應(yīng)用開(kāi)發(fā)者規(guī)避 APK 安裝包被作為插件
- 二、檢測(cè)插件化環(huán)境
- 1、檢查 AndroidManifest.xml 清單文件
- 2、檢查 運(yùn)行時(shí) 信息
- 3、檢查生成的目錄
- 4、檢查組件
前言
在上一篇博客 【Android 插件化】插件化技術(shù)弊端 ( 惡意插件化程序的解決方向 | 常用的插件化虛擬引擎 ) 中 , 介紹了插件化的弊端 , DroidPlugin 和 VirtualApp 被用于制作惡意軟件 , 黑客利用這兩個(gè)插件化框架將 APK 文件封裝到虛擬機(jī)引擎中 , 冒充被封裝的 APK ;
一、應(yīng)用開(kāi)發(fā)者規(guī)避 APK 安裝包被作為插件
如果被封裝的 APK 應(yīng)用涉及到用戶注冊(cè) , 登錄 , 付費(fèi)等信息 ;
用戶在使用黑客制作的 在插件化引擎 作為宿主軟件 , 封裝 APK 應(yīng)用 , 并插入惡意代碼 , 導(dǎo)致用戶信息泄露 , 嚴(yán)重的還會(huì)導(dǎo)致用戶金錢損失 ;
作為 APK 開(kāi)發(fā)者的我們 , 必須采取一定的措施 , 避免我們開(kāi)發(fā)的應(yīng)用被惡意開(kāi)發(fā)者使用 ;
在 ANTI-PLUGIN: DON’T LET YOUR APP PLAY AS AN ANDROID PLUGIN 論文中 , 使用了 PluginKiller , 用于避免自己的應(yīng)用運(yùn)行在虛擬化引擎上 , 就是避免自己開(kāi)發(fā)的應(yīng)用被當(dāng)做插件 APK 使用 ;
二、檢測(cè)插件化環(huán)境
PluginKiller 這個(gè)庫(kù)在 GitHub 上沒(méi)有找到 , 這里簡(jiǎn)單介紹下 PluginKiller 運(yùn)行機(jī)制 , 自己也可以開(kāi)發(fā)這個(gè)依賴庫(kù) ;
1、檢查 AndroidManifest.xml 清單文件
檢查 權(quán)限 詳情 , 插件化引擎 如 DroidPlugin 會(huì)聲明盡可能多的權(quán)限 125125125 個(gè) , 一般插件化引擎宿主應(yīng)用的權(quán)限范圍會(huì)大于插件應(yīng)用的權(quán)限 ; 使用 PackageManager 獲取應(yīng)用權(quán)限 , 然后訪問(wèn)這些權(quán)限 , 如果訪問(wèn)插件應(yīng)用沒(méi)有的權(quán)限可以訪問(wèn) , 說(shuō)明當(dāng)前運(yùn)行在插件化引擎中 ;
檢查 包名 是否注冊(cè)到系統(tǒng)中 , 應(yīng)用安裝后 , 會(huì)自動(dòng)在 /data/data 創(chuàng)建對(duì)應(yīng)包名的目錄 , 如果沒(méi)有 , 說(shuō)明當(dāng)前運(yùn)行在插件化引擎中 ;
檢查 組件 名稱 , 宿主應(yīng)用中 , 如果要啟動(dòng) Activity , 涉及到 AMS 調(diào)用 , AMS 接收的 Activity 必須是在清單文件中注冊(cè)過(guò)得組件 ; AMS 切換到主線程 ActivityThread 后會(huì)使用 hook 技術(shù)將 在清單文件中注冊(cè)過(guò)得 " 樁 " Activity 替換為 插件 Activity ; 調(diào)用 ActivityManager.getRunningServices 獲取的組件是 " 樁 " 組件 , 不是插件中的組件 , 二者有區(qū)別的 ;
2、檢查 運(yùn)行時(shí) 信息
應(yīng)用運(yùn)行時(shí)會(huì)有一個(gè) PID 和 UID ;
- PID 是 Process ID , 進(jìn)程 ID ;
- UID 是 User ID , 用戶 ID , 應(yīng)用安裝時(shí)自動(dòng)分配的 , 如果應(yīng)用不卸載 , 會(huì)一直保持該 UID ;
插件化引擎中運(yùn)行的 APK 插件 , 其 UID 都是宿主應(yīng)用的 UID ;
插件化引擎創(chuàng)建一個(gè)進(jìn)程 , 運(yùn)行 APK 插件 , 此時(shí)就會(huì)有兩個(gè)進(jìn)程 , 宿主進(jìn)程 和 插件進(jìn)程 , 兩個(gè)進(jìn)程 PID 不同 , 但是 UID 相同 ; 如果出現(xiàn)該特征 , 就可以確定該應(yīng)用運(yùn)行在插件化引擎中 ;
3、檢查生成的目錄
檢查生成的文件 : 應(yīng)用安裝后 , 會(huì)在 /data/data/ 目錄下生成對(duì)應(yīng)包名的目錄 , 檢查該目錄是否存在 ;
4、檢查組件
在 AndroidManifest.xml 定義一個(gè)靜態(tài)廣播 , 靜態(tài)廣播是在應(yīng)用安裝時(shí)進(jìn)行注冊(cè)的 , 插件應(yīng)用沒(méi)有安裝 , 因此想靜態(tài)廣播發(fā)送數(shù)據(jù) , 肯定無(wú)法接收到 ;
運(yùn)行時(shí)修改組件的 enable 屬性 , DroidPlugin 無(wú)法在運(yùn)行時(shí)實(shí)例化 enable = false 的組件 , 在組件注冊(cè)時(shí)設(shè)置 false , 然后運(yùn)行時(shí)修改成 true ;
參考博客 : 反插件化:你的應(yīng)用不是一個(gè)插件
參考文獻(xiàn) : ANTI-PLUGIN: DON’T LET YOUR APP PLAY AS AN ANDROID PLUGIN
總結(jié)
以上是生活随笔為你收集整理的【Android 插件化】使用 PluginKiller 帮助应用开发者规避发布的 APK 安装包被作为插件的风险 ( 验证应用是否运行在插件化引擎中 )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【错误记录】MAC 存储空间 “其它“
- 下一篇: 【错误记录】无法打开 “xxx“ , 因