Frida Hook
聲明: 謝絕一切形式的轉載。 @[toc]
Hook
Hook 技術又叫做鉤子函數(shù),在系統(tǒng)沒有調用該函數(shù)之前,鉤子程序就先捕獲該消息,鉤子函數(shù)先得到控制權,這時鉤子函數(shù)既可以加工處理(改變)該函數(shù)的執(zhí)行行為,還可以強制結束消息的傳遞。簡單來說,就是把系統(tǒng)的程序拉出來變成我們自己執(zhí)行代碼片段。
非常類似于中間人攻擊,只不過中間人是鉤子,操控的是程序的執(zhí)行流程。
在不同平臺下編寫hook代碼是一件很痛苦的事情,Windows下,必須要熟悉窗口、消息傳遞機制的,而在Linux下hook底層的消息還需要重新編寫內核模塊,在Android平臺要Hook動態(tài)庫文件,要懂得arm匯編。
而Frida的出現(xiàn),讓一切變得簡單了,只需要會Python,會JavaScript就能夠hook任何想hook的內容。
Frida is so great!
Frida
Frida是一個動態(tài)代碼檢測工具。它允許你將JavaScript代碼片段或者你自己的庫注入到到Windows、 macOS、GNU/Linux、iOS、Android,、and QNX的本機應用中。Frida還為您提供了一些基于Frida API的簡單工具。這些可以按原樣使用,也根據(jù)您的需要進行調整,或者用作有關如何使用API的示例。
安裝
僅需呀一行命令就可以完成安裝,當然前提條件是已經(jīng)已經(jīng)安裝了Python,版本最好是3.x。
pip install frida-tools
網(wǎng)上狠毒文章說使用 pip install frida
和 pip install frida-tools
進行安裝,但是現(xiàn)在一條命名就夠了。如果不嫌麻煩,也可以通過源碼進行安裝。
具體可參見https://blog.csdn.net/helloworlddm/article/details/105068941。
Frida架構

Windows
開啟一個可以注入的進程
本文使用的是記事本notepad.exe,打開記事本。
編寫代碼
編寫example.py,枚舉進程使用的模塊。
import frida
def on_message(message, data):
? ?print("[on_message] message:", message, "data:", data)
session = frida.attach("notepad.exe")
script = session.create_script("""
rpc.exports.enumerateModules = function () {
?return Process.enumerateModules();
};
""")
script.on("message", on_message)
script.load()
print([m["name"] for m in script.exports.enumerate_modules()])
運行,可以看出notepad.exe使用了什么模塊。

Linux
前提
首先需要使用下面的命令 "to enable ptracing non-child processes"
sudo sysctl kernel.yama.ptrace_scope=0
開啟一個可以注入的進程
本文開啟crackerMe00,如下所示:

編寫代碼
另外開啟一個終端, 編寫example.py,枚舉進程使用的模塊。
import frida
def on_message(message, data):
? ?print("[on_message] message:", message, "data:", data)
session = frida.attach("crackerMe00")
script = session.create_script("""
rpc.exports.enumerateModules = function () {
?return Process.enumerateModules();
};
""")
script.on("message", on_message)
script.load()
print([m["name"] for m in script.exports.enumerate_modules()])
運行,可以看出crackerMe00使用了哪些模塊。

Android
前提
手機需要ROOT,不ROOT也是可以的,需要該一些配置文件。后續(xù)文章會說。將frida-server推送到手機中。運行./frida-server

查看進程信息 frida-ps-U

編寫代碼
編寫example.py,枚舉進程使用的模塊。
import frida
def on_message(message, data):
? ?print("[on_message] message:", message, "data:", data)
session = frida.get_usb_device().attach("com.android.chrome")
script = session.create_script("""
rpc.exports.enumerateModules = function () {
?return Process.enumerateModules();
};
""")
script.on("message", on_message)
script.load()
print([m["name"] for m in script.exports.enumerate_modules()])
運行,結果如下:

公眾號
關于Frida有一句很流行的話:沒有做不到,只有想不到。打算開一個frida專題,歡迎多多支持。更多內容歡迎關注我的公眾號。
