一.什麼是Android介面劫持
介面劫持是指在Android系統中,惡意軟體透過監控目標軟體的運行,當偵測到目前執行介面為某個被監控應用程式的特定介面時(一般為登入或支付介面),彈出偽造的釣魚頁面,從而誘導用戶輸入信息,最終竊取用戶的隱私(惡意竊取用戶帳號、卡號、密碼等信息),或者利用假冒界面進行釣魚欺詐。
二.常見攻擊手段
1. 監聽系統Logocat日誌,一旦監聽到發生Activity介面切換行為,即進行攻擊,覆蓋上假冒Activity介面實施欺騙。
2. 監聽系統API,一旦惡意程式監聽到相關介面的API元件調用,即可發動攻擊。
3. 5.0以下機型枚舉取得堆疊頂部Activity,監控到目標Activity出現,即可發動攻擊。
4. 惡意啟動Service監聽目標應用,在切換到目標Activity時,彈出對話框劫持目前介面迷惑使用者
三.預防手段
● 針對使用者
幾乎所有的Android手機都配備了一個HOME鍵,如果長按它,就可以查看最近使用的任務。當使用者在要輸入密碼進行登入時,可以透過長按HOME鍵查看近期任務,比如說登入微信時長按發現近期任務出現了微信,那麼現在的這個登入介面就極有可能是個惡意偽裝的Activity,切換到另一個程序,再查看近期任務,就可以知道這個登入介面是來自哪個程序了。
● 針對開發人員
針對釣魚Activity類型劫持,在登入視窗或使用者隱私輸入等關鍵Activity的onPause方法中偵測最前端Activity應用程式是不是本身或是系統應用,如果發現惡意風險,則給使用者一些警示訊息,提示使用者其登陸介面以被覆蓋,並給出覆蓋正常Activity的類別名稱。
如果是針對彈出式對話方塊類型的劫持,接管Activity的生命週期,當發現當前介面onResume之後,判斷是否失去焦點;如果同時存在則有可能是對話方塊類別劫持,判斷此時執行的活動進程是否包含敏感權限(全域Alert權限、取得任務堆疊權限等),如果有的話則給使用者警告。
Android 的APK 中怎麼放置反編譯「炸彈」
上面文章裡提到的"炸彈", 其實就是反編譯器的bug,所以針對不同的反編譯器,需要設計不同的「炸彈」。先了解常用的 APK 反編譯工具:
● baksmali/smali: baksmali 能將二進位 dex 檔案轉換為 smali 文字檔案用於分析,smali 則能將 smali 檔案重新編譯為 dex 檔案。
● Apktool : 整合了 baksmali/smali 用於處理 dex 文件, 另外實作了 res 資源檔案(例如layout / strings等)的反編譯。
● AxmlPrinter : 用於將二進位形式的 AndroidManifest.xml 轉換為文字形式的 AndroidManifest.xml。
● dex2jar: 能將 dex 轉換為 jar 檔案。
● jd-gui: 能將 jar 檔案反編譯為 java 原始碼。
● Ida Pro: 主要用於反編譯 Apk 中的 So 文件,也支援將 dex 文件反編譯為類似smali 語法的文字形式指令。
從上面的反編譯工具可以看出,主要分為三種功能:
● 反編譯資源,如 AndroidManifest.xml、layout.xml
#可以對Dex文件進行反編譯,或將其轉換為Java代碼
● 反編譯So 文件
炸彈」的設定需要對特定的文件格式有相當的了解,而且可能只能針對某個反編譯工具的。
Android app如何加密?
An Android app comprises dex files, so files, res and assets resources.。這個內容可以重寫為:此加密技術可分為三個主要面向:DEX檔案的保護、SO檔案的加密以及資源檔案(如res和assets)的保護。
● dex保護
未加密的dex檔案來自於Java編譯和打包,因此破解成本較低且易受攻擊。從加殼最基礎的形式開始,到函數執行體抽取、動態加載,再到目前的vmp 虛擬機保護,該方案的安全性逐漸提升。特別是在vmp加固中,使用了自行研發的虛擬機來解釋函數體,如果指令加密替換運用得當,會讓破解者感到非常困難。
● so加密
so文件,由起初的段加密,發展到自訂elf結構的加密方式,能防止IDA查看函數名稱,增加破解成本和難度。
● 資源保護
#res資源文件,通常只採用混淆的方式增加逆向難度。 assets資源,一般不處理。由於H5應用數量的不斷增長,一些供應商(如易盾和娜迦)已提供了assets加密功能,但其實現原理並不清楚。
除了上述三點防護外,還有防反編譯、防二次打包、防調試、防模擬器、防xposed功能等。
b) 為了防止反編譯,通常會對市場上的反編譯工具(如apktool)進行反制,利用其漏洞使反編譯失敗
b) 防二次打包,一般常用的是在程式碼裡保存簽名訊息,啟動時在native層將目前apk的簽名資訊與已儲存的簽名進行比對。市面上已有破擊工具。可以在常用實作方式上做些升級。
c) 防調試,透過ptrace進程,阻止破解者再ptrace調試。
d) 防模擬器,偵測/system/bin/su和/system/xbin/su檔案。
偵測XposedHelpers的methodCache,以判斷是否被hook來防範xposed。
以上是Android app如何加密的詳細內容。更多資訊請關注PHP中文網其他相關文章!