Frida Hook的使用方法
目录
一、 Frida支持的功能及作用1
二、 安装和搭建Python环境1
三、 安装和搭建Frida环境2
1. 安装pip2
2. 安装frida2
3. 验证frida是否安装成功3
4. 卸载frida3
5. 获取frida安装版本对应的frida-server版本3
6. 验证frida是否能正常使用3
7. Frida JavaScript API的官网4
8. Ubuntu环境修改系统默认python版本为3.8.2(并更新)4
四、 Frida的使用实例4
1. Hook Android Java层4
2. Hook Android Native层5
3. Hook Unity3d获取解密后的dll6
4. Hook Cocos获取解密后的lua源码6
五、 Frida js Hook6
一、Frida支持的功能及作用
支持Android/IOS等多平台Hook
二、安装和搭建Python环境
1. 安装Python版本(比如:Python 2.7.5),安装最新版本的Python容易导致安装Frida时报错
2. 把Python的默认安装路径配置到系统环境变量(默认安装路径配置好后可以直接使用pip命令)
C:\python27-x64
C:\python27-x64\Scripts
3. 验证Python是否安装成功(管理员权限执行如下命令)
python --version
三、安装和搭建Frida环境
1. 安装pip
1) 最新pip的下载地址
https://pypi.python.org/pypi/pip
2) 解压安装
python setup.py install
2. 安装frida
1) 最新frida源码或frida-server的下载地址
https://github.com/frida/frida/releases
2) 通过pip安装frida(Windows环境的首选安装方法,默认安装最新版本的frida)
pip install numpy matplotlib
pip install frida
pip install --user frida
pip install frida-tools
pip install frida-tools --user
npm config set unsafe-perm true
npm install frida-compile -g
npm install frida-compile
3) 编译frida源码安装(适合于Ubuntu环境的安装,Windows环境可能会导致编译出错)
make
make install
4) 安装frida过程pip会提示PermissionError的解决方法
pip install --user frida
3. 验证frida是否安装成功
frida --version
4. 卸载frida
pip uninstall frida
5. 获取frida安装版本对应的frida-server版本
1) frida和frida-server的版本号必须保持一致
2) 使用root过的Android手机或模拟器
3) frida-server与Android手机或模拟器的架构必须保持一致(arm 32或arm 64或x86)
4) 把frida-server拷贝到root过的Android设备中
adb push frida-server /data/local/tmp/
5) 修改frida-server的权限
chmod 777 frida-server
6. 验证frida是否能正常使用
1) 手机端(执行frida-server)
./frida-server
2) PC端(转发Android tcp端口到本地)
adb forward tcp:27042 tcp:27042
adb forward tcp:27043 tcp:27043
3) PC端(测试frida环境,如果出现Android设备的进程列表说明frida环境搭建成功)
frida-ps -R
7. Frida JavaScript API的官网
https://www.frida.re/docs/javascript-api/
8. Ubuntu环境修改系统默认python版本为3.8.2(并更新)
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python-pip
sudo apt-get install python3-pip
cd /usr/bin
rm python
ln -s python3.8.2 python
python pip install --upgrade pip
四、Frida的使用实例
1. Hook Android Java层
1) python3 Test.py命令时注意查看python版本
2) 枚举***游戏进程加载的所有模块以及模块中的导出函数
2. Hook Android Native层
1) 获取跟踪调试***游戏相关cocos lua源码
2) 获取跟踪调试***游戏相关unity3d mono引擎dll源码
import frida
import sys
rdev = frida.get_remote_device()
session = rdev.attach("cn.***.lof")
scr = """
Interceptor.attach(Module.findExportByName("libmono.so" , "mono_image_open_from_data_with_name"), {
onEnter: function(args) {
send("mono_image_open_from_data_with_name("+Memory.readCString(args[5])+","+Memory.readCString(args[0])+")");
},
onLeave:function(retval){
}
});
"""
script = session.create_script(scr)
def on_message(message ,data):
print(message)
script.on("message" , on_message)
script.load()
sys.stdin.read()
3. Hook Unity3d获取解密后的dll
4. Hook Cocos获取解密后的lua源码
五、Frida js Hook
frida -U -f 包名 --no-pause -l raptor_frida_android_trace_fixed.js -o 1.log
其中"-f"参数表示需要重启并且attach上app
frida -U 包名 --no-pause -l raptor_frida_android_trace_fixed.js -o 2.log
只想attach到正在运行的应用程序的某一个进程可以用"-p"参数
先启动app,然后执行命令,再按手机返回键,最后再点击app才可以hook成功
其中命令中加"-l"参数指定js hook代码,load到目标进程
如果忘了使用"-l"参数,可以在交互窗口中用"%load"命令来指定需要加载的js代码