歡迎來到 黑吧安全網 聚焦網絡安全前沿資訊,精華內容,交流技術心得!

使用Frida對app進行hook分析的基本方法介紹

來源:本站整理 作者:佚名 時間:2020-01-19 TAG: 我要投稿

0x01  概述
我將對使用Frida進行程序檢測和在Windows上hook進行基本介紹。在整個帖子中,我將使用frida-trace,因為它提供了方便的實時流,我可以實時檢查對函數hook所做的更改。一旦掌握了JavaScript語法,就可以將該知識擴展到各種Frida綁定(Python / C / Node / Swift / .Net / QML)上。
為什么選擇Frida?它提供了一個簡單的界面,可以在其中快速開發復雜的hook邏輯,并隨著需求對其進行更改,與重新部署C ++函數hook的復雜過程比較就方便多了。將Frida用于什么用途?正如我的標題所述的那樣,是檢查(查看應用程序內部以分析其行為)和hook(更改應用程序的行為)。從安全角度看,Frida是一種研究工具,不適合用于武器部署。話雖如此,Frida可以用于制作攻擊性hook的原型,以后可以在其他框架如EasyHook中實施這些hook以進行部署。
https://easyhook.github.io/
0x02 注冊表檢查
在本節中,我將研究在任意Windows應用程序中被動監視注冊表活動。首先,我們將看看RegOpenKeyExW,它最常用于打開注冊表項的句柄。下面可以看到C ++函數原型。
 LONG WINAPI RegOpenKeyEx(
   _In_     HKEY    hKey,       // Handle to the open registry key (commonly the registry hive).
   _In_opt_ LPCTSTR lpSubKey,   // The name of the registry subkey to be opened.
   _In_     DWORD   ulOptions,  // REG_OPTION_OPEN_LINK/NULL.
   _In_     REGSAM  samDesired, // A mask that specifies the desired access rights to the key to be opened.
   _Out_    PHKEY   phkResult   // A pointer to a variable that receives a handle to the opened key.
 );
大多數API都有ANSI和Unicode版本。出于我的目的,我應該假定我hook的Windows應用程序將使用Unicode版本,將Frida附加到流程并定義/打印所有這些參數。

Frida使此過程極其容易。當使用trace時,Frida在當前目錄中創建一個“ handlers”文件夾,在其中使用onEnter / onLeave原型填充JS文件,以用于用戶指定的任何功能。取出函數參數就像在數組中打印參數一樣容易。上圖所示的JS處理程序如下所示。
 /*
  * Auto-generated by Frida. Please modify to match the signature of RegOpenKeyExW.
  * This stub is currently auto-generated from manpages when available.
  *
  * For full API reference, see: http://www.frida.re/docs/javascript-api/
  */
 
 {
   /**
    * Called synchronously when about to call RegOpenKeyExW.
    *
    * @this {object} - Object allowing you to store state for use in onLeave.
    * @param {function} log - Call this function with a string to be presented to the user.
    * @param {array} args - Function arguments represented as an array of NativePointer objects.
    * For example use Memory.readUtf8String(args[0]) if the first argument is a pointer to a C string encoded as UTF-8.
    * It is also possible to modify arguments by assigning a NativePointer object to an element of this array.
    * @param {object} state - Object allowing you to keep state across function calls.
    * Only one JavaScript function will execute at a time, so do not worry about race-conditions.
    * However, do not use this to store function arguments across onEnter/onLeave, but instead
    * use "this" which is an object for keeping state local to an invocation.
    */
   onEnter: function (log, args, state) {
     log("[+] RegOpenKeyExW");
     log("¦- hKey: " + args[0]);
     log("¦- lpSubKey: " + args[1]);
     log("¦- ulOptions: " + args[2]);
     log("¦- samDesired: " + args[3]);
     log("¦- PHKEY: " + args[4] + "\n");
   },
 
   /**
    * Called synchronously when about to return from RegOpenKeyExW.
    *
    * See onEnter for details.
    *
    * @this {object} - Object allowing you to access state stored in onEnter.
    * @param {function} log - Call this function with a string to be presented to the user.
    * @param {NativePointer} retval - Return value represented as a NativePointer object.
    * @param {object} state - Object allowing you to keep state across function calls.
    */
   onLeave: function (log, retval, state) {
   }

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13]  下一頁

【聲明】:黑吧安全網(http://www.zjtpzs.live)登載此文出于傳遞更多信息之目的,并不代表本站贊同其觀點和對其真實性負責,僅適于網絡安全技術愛好者學習研究使用,學習中請遵循國家相關法律法規。如有問題請聯系我們,聯系郵箱[email protected],我們會在最短的時間內進行處理。
  • 最新更新
    • 相關閱讀
      • 本類熱門
        • 最近下載
        神秘东方电子游艺 宁夏银川快3走势图 娱乐棋牌官方网站 山东山东十一选五走势图 双色球开奖走势图表 决策天机 股票分析软件 七乐彩500期走势 日本av情色电影中心 欧冠几年一次 沈阳娱网棋牌麻将下载中心 麻将来了礼包大全 广西十一选五怎么玩 福建31选7开奖结 银行理财平台排名 千炮捕鱼电玩城 永利棋牌游戏怎么样 哪个版本的豪利棋牌