Android讀書會

Java、python、hook、Android

yes哥

工程獅

2022/11/24

Android逆向之旅---Hook神器家族的Frida工具

一、前言
在逆向過程中有一個Hook神器是必不可少的工具,之前已經介紹了Xposed和Substrate了,不了解的同學可以看這兩篇文章:Android中Hook神器Xposed工具介紹 和 Android中Hook神器SubstrateCydia工具介紹 這兩篇文章非常重要一個是Hook Java層的時候最常用的Xposed和Hook Native層的SubstrateCydia,可以看我之前的文章比如寫微信插件等都採用了Xposed工具,因為個人覺得Xposed用起來比較爽,寫代碼比較方便。而對於SubstrateCydia工具可以Hook Native層的,本文會介紹一下如何使用。那麼有了這兩個神器為啥還要介紹Frida工具呢?而且這個工具網上已經有介紹了,為什麼還有介紹了,因為這個Frida工具對於逆向者操作破解來說非常方便,所謂方便是他的安裝環境和配置要求都非常簡單兼容性也非常好,因為最近在弄一個協議解密,無奈手機上安裝Cydia之後不兼容導致死機所以就轉向用了這個工具實現了hook,所以覺得這個工具非常好用就單獨介紹一下。
二、環境安裝配置
第一、如何修改Java層的函數參數和返回值
第二、如何打印Java層的方法堆棧信息
第三、如何攔截native層的函數參數和返回值
對於Java層會注重介紹,因為我們用過Xposed工具之後都知道,比如參數是自定義類型怎麼Hook等。不多說了直接用一個案例作為樣本進行操作,為了能夠覆蓋所有的操作可能性案例需要寫的複雜點:
參數和返回值有基本類型,也有自定義類型,接下來我們就開始我們的Frida之旅吧。
這個網上都已經有教程了,因為Frida大致原理是手機端安裝一個server程序,然後把手機端的端口轉到PC端,PC端寫python腳本進行通信,而python腳本中需要hook的代碼採用javascript語言。所以這麼看來我們首先需要安裝PC端的python環境,這個沒難度直接安裝python即可,然後開始安裝frida了,直接運行命令:pip install frida
前提是你需要配置好python環境變量,不然提示pip命令找不到。安裝完成之後,我們再去官網下載對應版本的手機端程序frida-server:https://github.com/frida/frida/releases 注意這裡一定要把frida-server版本和上面PC端安裝的frida版本一致,不然運行報錯的。其實這裡看到真的實現hook功能的是手機端的frida-server,這個也是開源的大家可以研究他的原理。我們也看到這個工具和IDA是不是很類似,也是把手機端的端口轉發到PC端進行通信而已。有了frida-server之後就好辦了,直接push到手機目錄下,然後修改一下文件的屬性即可:
adb push /data/local/tmp frida-server
root# chmod 777 /data/local/tmp/frida-server
然後直接運行這個程序:
/data/local/tmp# ./frida-server
然後把端口轉發到PC端:
adb forward tcp:27042 tcp:27042
adb forward tcp:27043 tcp:27043
到這裡我們就把通信的手機端工作做完了,是不是感覺和Xposed相比非常方便,兼容性非常好,不需要安裝Xposed等工具考慮系統手機等適配問題了。接下來就開始在PC端開始編寫hook程序進行操作了:
這裡代碼也非常簡單,因為安裝好了frida模塊,直接導入模塊,然後調用api獲取設備的session然後hook程序包名,接著就可以執行js腳本代碼進行hook操作,然後打印消息:
這裡用了python的print函數打印,其實如果想要打印可以在上面的js腳本中使用console.log也是可以的,看自己的習慣了。所以這裡我們看到腳本的大致流程就是最外面用python引用frida庫進行和設備通信,然後編寫js腳本執行hook操作。所以這裡最主要的還是js腳本也就是需要理解js語法了。不過這個沒啥難度的。好了以上的準備條件都弄完了,下面就開始分部拆解操作看看如何涵蓋我們平常使用的hook案例。
0 0 621 0