日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

移动安全-Frida脱壳脚本与加固迭代

發布時間:2023/12/29 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 移动安全-Frida脱壳脚本与加固迭代 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 前言
  • 加固迭代
    • 代碼混淆保護
    • Dex整體加密
    • Dex函數抽取
    • Dex混合加密
    • VPM保護技術
  • Frida 脫殼
    • Dexdump腳本
    • 手機銀行APP
    • 航旅縱橫APP
    • 失敗案例APP
  • More

前言

隨著移動互聯網和智能手機的普及,加之移動應用體驗的不斷提升,各類 APP 迅速覆蓋了人們日常出行、購物娛樂、金融理財等各個領域,一邊是移動應用帶來的方便快捷的生活,一邊是系統漏洞、病毒木馬、山寨 APP 帶來的隱私侵犯,現如今 APP 安全備受爭議。

加固迭代

移動應用加固的主要從技術層面對 DEX 文件、SO 文件、資源文件等進行保護。為應對不斷出現的新型黑客攻擊手段,Android 加固技術也經歷了代碼混淆保護技術、Dex 整體加密保護技術、Dex 函數抽取加密保護技術、混合加密保護技術、虛擬機保護技術等五代技術更新與迭代。

代碼混淆保護

Android 平臺采用使用 Java 作為原生語言進行開發,Java 字節碼中包括了很多源代碼信息,如變量名、方法名,并且通過這些名稱來訪問變量和方法,這些符號帶有許多語義信息,很容易被反編譯成 Java 源代碼。為了防止這種現象,需要對 Java 字節碼進行混淆,比較常見的代碼混淆有 proguard 和 dexguard,其中包括了名稱混淆、字符串加密、反射替換、日志清除、花指令等。

第一代加固保護技術的優缺點:

  • 優點:代碼混淆保護技術在保護效果上增加了逆向成本,一定程度上保護了程序的邏輯;
  • 缺點:保護強度有限,無法對抗靜態分析、動態調試,同時與反射調用沖突。
  • Dex整體加密

    DEX 整體加密保護技術是基于類加載的方式來實現的,整個加殼的過程涉及到三個程序:源程序,加殼程序,解殼程序。基本原理是對 Dex 文件進行整體加密后存放在 APK 的資源中,運行時將加密后的 Dex 文件在內存中解密,并讓 Dalvik 虛擬機動態加載執行。

    第二代加固保護技術的優缺點:

  • 優點:DEX 文件整體加固的目的是增加靜態分析的難度,可以有效對抗靜態分析、二次打包;
  • 缺點:無法完全對抗動態調試、內存 dump、自動化脫殼工具、定制化虛擬機等攻擊方式。
  • Dex函數抽取

    第三代保護技術——Dex 函數抽取加密保護技術

    針對 DEX 文件整體加固可以被內存 Dump 的弱點,第三代保護技術對代碼中的每個方法抽出并進行單獨加密,基本原理是利用 Java 虛擬機執行方法的機制來實現。利用這個機制將解密操作延遲到某個方法在執行之前才開始加載該方法的代碼,同時解密后的代碼在內存是不連續存放的。例如通過抽取 Dalvik 虛擬機運行一個 DEX 必不可缺少 DEXCode 中的部分,然后對字節碼指令添加 nop,這種方式極大的提高了代碼安全性。

    DEX 函數抽取加密保護技術的執行流程如下:

  • 打包時,將原 APK 中的所有方法的代碼提取出來,單獨加密到一個文件;
  • 運行時,加固引擎首先會動態修改當前進程 Dalvik 虛擬機,初始化動態解密的虛擬機適配層;
  • 當 Dalvik 虛擬機要執行某個方法時,加固引擎才解密該方法的代碼,并將解密后的代碼交給虛擬機執行引擎執行。
  • 第三代加固保護技術的優缺點:

  • 優點:加密粒度變小,加密技術從 Dex 文件級變為方法級;按需解密,解密操作延遲到某類方法被執行前,如果方法不被執行,則不被解密;解密后的代碼在內存不連續,克服了內存被 Dump 的缺點,有效保護了移動客戶端的 Java 代碼。
  • 缺點:DEX 函數抽取加密技術本質上也是一種代碼隱藏技術,最終代碼還是通過 Dalvik 或者 ART 虛擬機進行執行,因此破解者可以構建一個自己修改過的虛擬機來脫殼,且第三代保護技術無法保護所有方法,控制權獲取較晚,集成其他保護功能困難,這需要尋求更加強大、安全的防逆向技術來保證 APK 的安全。
  • Dex混合加密

    Dex 混淆加密主要是為了隱藏 dex 文件中關鍵的代碼,力度從輕到重包括:靜態變量的隱藏、函數的重復定義、函數的隱藏、以及整個類的隱藏。混淆后的 dex 文件依舊可以通過 dex2jar、jade 等工具反編譯成 Java 源碼,但是里面關鍵的代碼已經看不到了。

    第四代加固保護技術的優缺點:

  • 優點:相比于前幾代加固技術,第四代加固技術加密強度有了很大的提高,能夠對抗大部分定制化脫殼機,安全性和兼容性達到了比較好的平衡;
  • 缺點:無法完全對抗基于方法重組的脫殼機,存在被破解的風險。
  • VPM保護技術

    VMP(虛擬機) 保護技術是當下最前沿移動應用安全加固技術,虛擬機軟件保護技術是被動型軟件保護技術的分支,具體來說是添加有意義的混淆代碼的一種變型使用。根據應用層級不同,基本可分為硬件抽象層虛擬機、操作系統層虛擬機和軟件應用層虛擬機。用于保護軟件安全的虛擬機屬于軟件應用層虛擬機,是對被保護的目標程序的核心代碼進行“編譯”,這里被編譯的不是源文件,而是二進制文件,將由編譯器生成的本機代碼(Native code)轉換成效果等價的 byte-code,然后為軟件添加虛擬機解釋引擎。用戶最終使用軟件時,虛擬機解釋引擎會讀取 byte-code,并進行解釋執行,從而實現用戶體驗完全一致的執行效果。

    一套高質量的自定義指令集和解釋器是判斷 VMP 技術真偽的唯一標準。目前國內多數廠商都推出了移動應用 VMP 保護技術,經研究多采用的是代碼抽取和隱藏、代碼混淆等技術,大多數技術方案并不成熟,有的方案甚至和 VMP 的核心思想有本質上的區別。

    Frida 脫殼

    Android 應用開發完成后,為了防止反編譯和逆向分析,經常會使用一些第三方的安全軟件的加殼處理,比較出名的有騰訊樂固、360 加固、梆梆加固和愛加密等。經過加固后的 APK,通過 dex2jar 反編譯后是看不到 APP 源碼的,比如騰訊樂固加殼的 APP:

    再比如 360 加固的 APP:

    簡單的加殼程序演示:

  • Android APK加殼技術實戰詳解;
  • Android黑科技系列——APK的加固(加殼)原理解析和實現。
  • 殼的種類非常多,依據上面介紹的 Android 加固技術的演變,可以將 APK 加殼簡單劃分為以下三代:

    加殼技術技術特點脫殼難度
    第一代:DEX 整體加密型殼采用 Dex 整體加密,動態加載運行的機制較容易被還原,通過自動化脫殼工具或腳本即可從內存中 dump 出 dex 文件
    第二代:DEX 函數抽取型殼粒度更細,將方法單獨抽取出來,加密保存,解密執行可以從根本上進行還原的,dump 出所有的運行時的方法體,填充到 dump 下來的 dex 中去的,這也是 fart 的核心原理
    第三代:VMP、Dex2C 殼獨立虛擬機解釋執行、語義等價語法遷移,強度最高Dex2C 目前是沒有辦法還原的,只能跟蹤進行分析; VMP 虛擬機解釋執行保護的是映射表,只要心思細、功夫深,是可以將映射表還原的

    Dexdump腳本

    從上面可以看到,APP 加固發展到現在已經好幾代了,從整體加固到代碼抽取再到虛擬機保護,加固和脫殼的方案也逐漸趨于穩定。隨著保護越來越強,脫殼機們也變得越來越費勁,繁瑣。但是畢竟道高一尺,魔高一丈,市面上有很多手段可以進行脫殼操作,下文將介紹的是使用 Frida 的一個腳本來從內存中 Dump 已加殼 APK 的 Dex。

    Github 項目地址:FRIDA-DEXDump(作者:葫蘆娃)。

    腳本原理

    得益于 Frida,在 PC 上面進行內存搜索、轉儲都變得十分方便,再也不需要考慮什么 Xposed、什么 Android 開發、什么代碼注入,只需要關注如何去搜索想要的東西,于是依賴一個幾十行代碼的小腳本,就可以將大部分內存中的 dex 脫下來。對于完整的 dex,采用暴力搜索 dex035 即可找到。而對于抹頭的 dex,通過匹配一些特征來找到。

    【More】FRIDA-DEXDump 腳本的原理深入分析可以參考作者葫蘆娃的文章:深入 FRIDA-DEXDump 中的矛與盾 ;或者另一位大佬的源碼解讀:安卓逆向:某錄屏軟件脫殼重打包,附對幾種frida脫殼腳本的分析。

    手機銀行APP

    下面以某手機銀行 APP 為例進行腳本脫殼示范:

    1、首先使用 jadx-gui 反編譯查看該已加固的 APK,可以看到已經無法讀到 APP 源碼:

    2、運行模擬器 Frida 服務端并轉發端口,隨后即可執行腳本python main.py并打開目標 APP,程序將自動識別目標 APP 進程并從內存中 Dump 出其原始的 Dex 文件:
    3、此時再使用 jadx 反編譯查看 Dump 下來的 Dex 文件,就可以看到目標 APP 的源碼了:

    航旅縱橫APP

    1、使用查殼工具進行加殼情況的檢測:

    2、使用 jadx 反編譯已加固 APK:
    3、Frida DexDump 腳本一鍵脫殼:
    4、最后使用 jadx 反編譯并查看 dump 下來的 Dex 文件:
    【More案例】

    1、對抖音短視頻 APP 進行脫殼也成功了:
    2、對某騰訊加固的 APP 進行脫殼也成功了:

    脫殼前反編譯:

    一鍵脫殼:
    脫殼后查看源碼:

    失敗案例APP

    以上所演示的案例可以看到, Frida Dexdump 脫殼腳本對使用第一代殼(Dex 整體加密型)進行加固的 APP 來說,脫殼效果很好,但是對于第二代殼( Dex 函數抽取型殼)則效果不明顯,脫殼后的 dex 文件中函數體為空,下面找個實例演示下。

    1、查看一下已加固 APK 反編譯后的代碼:
    2、查殼工具檢測發現是梆梆企業版的殼:

    3、使用 Frida Dexdump 腳本嘗試一鍵脫殼:
    4、反編譯查看 Dump 下來的 dex 文件,發現函數均為空,無法讀到有效源碼:

    對于函數抽取型的殼,fart 可以解決,寒冰大佬也是寫出了 frida-fart,frida 版的 fart,安卓版本目前只適配于 Android 8.0,后續會持續學習到 fart 和 frida-fart 在安卓脫殼中的使用。

    More

    關于脫殼后的源碼實戰分析案例:

  • 百步穿楊-看我如何在APP中getshell;
  • 記一次frida實戰——對某視頻APP的脫殼、hook破解、模擬抓包、協議分析一條龍服務;
  • Python 逆向抓取 APP 數據;
  • 最后再附上兩篇進階資源文章:

  • 安卓 APP 三代加殼方案的研究報告 ;
  • 實用FRIDA進階:脫殼、自動化、高頻問題 ;
  • Frida 高級 APP 逆向技術系列文章地址。
  • 總結

    以上是生活随笔為你收集整理的移动安全-Frida脱壳脚本与加固迭代的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。