安装使用Frida在Android上进行hook
前言
我們對Android應(yīng)用進行hook最常用的就是Xposed,它相對來說更加完善,而且有強大的社區(qū)和豐富的插件。而Frida則于Xposed不同,它是一款輕量級的Hook框架,可用于多平臺,相同的是它依然需要root環(huán)境。本文就以Android為例來詳細說說如何安裝并使用它。
PC端
首選要在電腦上安裝Frida,官方的安裝步驟是
pip install frida-tools # CLI tools pip install frida # Python bindings npm install frida # Node.js bindings很簡單,但是在安裝時回遇到很多問題,下面一一說一下
mac
在mac上安裝失敗,報錯如下:
“python setup.py egg_info” failed with error code 1 in /private/tmp/pip-req-build-6pqu9pg1/
仔細觀察安裝的信息,發(fā)現(xiàn)其中有一條說需要/Users/bennu/frida-12.0.3-py3.6-macosx-10.6-intel.egg
這應(yīng)該是墻的問題,導(dǎo)致必要的文件沒有下載下來,到阿里的鏡像庫中下載對應(yīng)文件:
http://mirrors.aliyun.com/pypi/simple/frida/
然后放到/Users/bennu/下,然后在運行:
pip install frida pip install frida-tools即可。
注意如果無法使用frida命令,則一定是frida-tools沒有安裝成功
windows
有了mac上的經(jīng)驗,我們在windows上安裝前就可以先為pip設(shè)置阿里鏡像。步驟如下:
(1):在windows文件管理器中,輸入%APPDATA%
(2):會定位到一個新的目錄下,在該目錄下新建pip文件夾,然后到pip文件夾里面去新建個pip.ini文件
(3):在新建的pip.ini文件中輸入以下內(nèi)容
[global] index-url = http://mirrors.aliyun.com/pypi/simple/ [install] trusted-host = mirrors.aliyun.com然后再進行安裝即可。
我在安裝過程中使用pip install命令報錯
Fatal error in launcher: Unable to create process using ‘"’
使用python -m pip install xxx代替即可,如:
python -m pip install frida-tools python -m pip install frida檢查
安裝成功后使用frida --version查看是否安裝成功
如果報錯
ImportError: DLL load failed: 找不到指定的模塊
說明python的版本不對,卸載frida等,卸載python安裝正確的python版本。
可以根據(jù)http://mirrors.aliyun.com/pypi/simple/frida/ 這里來判斷版本.
重新安裝python后在重新安裝frida即可。
Android端
手機上需要下載安裝frida-service,并啟動起來。
下載
首先下載frida-service
https://github.com/frida/frida/releases
注意要與安裝的frida版本一致,同時注意android是32為還是64位,如frida-server-12.0.3-android-arm64.xz
如何查看cpu是32位還64位?
在adb shell中用命令getprop ro.product.cpu.abi獲取設(shè)備cpu信息
安裝啟動
下載完成后解壓,將名字改為frida,使用adb放入手機中
$ adb push /Users/bennu/Downloads/frida /data/local/tmp然后啟動frida-service,步驟如下:
$ adb shell //進入手機終端 #cd /data/local/tmp # su # ps | grep 'frida' //查看服務(wù)是否啟動 root 4743 1 52064 15456 poll_sched b5eaaa5c S ./frida-11.0.13 # ./frida & //啟動服務(wù)如果想停止frida服務(wù),則
# kill -s 9 4743 //殺死服務(wù)(4743是進程id)Hook
啟動服務(wù)后就可以通過frida hook了,命令如下:
$ frida -U -l /Users/bennu/xxx.js com.xxx.xxx其中xxx.js是我們注入的腳本,com.xxx.xxx是要hook的程序的包名。
可以看到Frida注入腳本是js的,這是與Xposed不同的,腳本示例如下:
Java.perform(function () {var Activity = Java.use("android.app.Activity");//如果沒有同名函數(shù),hook這個函數(shù)Activity.onResume.implementation = function () {send("activity: "+ this + ", onResume!!!");this.onResume();};//如果有同名函數(shù),需要用overload和所有參數(shù)類型來確定到底是哪個函數(shù)Activity.startActivity.overload('android.content.Intent').implementation = function(intent){send("activity: "+ this + ", startActivity!!!");this.startActivity(intent);};Activity.startActivity.overload('android.content.Intent', 'android.os.Bundle').implementation = function(intent, bundle){send("activity: "+ this + ", startActivity!!!");this.startActivity(intent, bundle);};//hook構(gòu)造函數(shù)var aa = Java.use("com.tencent.mm.plugin.chatroom.d.n");aa.$init.implementation = function (str, str1){send("n:" + str + "," + str1);this.$init(str, str1)} });示例中是hook了activity的onResume等方法,這樣當hook的應(yīng)用執(zhí)行這些方法時就會觸發(fā),示例中是打印一條記錄。
可以看到Frida在腳本編寫上比Xposed簡單了很多,也不需要創(chuàng)建一個項目,所以它更輕量更快捷。
語法
最后整理一些比較常用的語法
總結(jié)
以上是生活随笔為你收集整理的安装使用Frida在Android上进行hook的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何发布Android Library到
- 下一篇: mongo占用内存过大解决方案