Frida Hook
Frida是逆向工程常用的Hook工具,是一款非常方便且易用的跨平台工具包。Frida分客户端环境和服务端环境,客户端即控制端,而服务端则是被控制端。
客户端可以编写Python代码来连接服务端,注入脚本到服务端。在服务端可以编写Javascript代码注入到目标进程进行Hook操作。
本文指导新手如何使用Frida
一、Frida安装
- 安装
sudo pip3 uninstall frida
sudo pip3 uninstall frida-tools
- 安装完查看版本
frida --version
- 下载安装包
- 推送到手机系统目录,手机必须Root
adb push ./frida-server-15.1.17-android-arm64.xz /data/local/tmp/
- 授予权限
adb shell
su
chmod 777 /data/local/tmp/frida-server-15.1.17-android-arm64
- 关闭系统SELinux
在打开服务端之前,需要先关闭SELinux
setenforce 0
之后,运行getenforce命令,如果打印“Permissive”,说明关闭成功 - 运行服务
su
./data/local/tmp/frida-server-15.1.17-android-arm64
二、查看目标APP进程
查询所有进程ID
frida-ps -U
可以添加grep 应用名找到目标进程id
三、注入Hook脚本
参考 https://www.cnblogs.com/luoyesiqiu/p/10718997.html
frida -U -l myhook.js [进程ID]
参数解释:
- -U 指定对USB设备操作
- -l 指定加载一个Javascript脚本
- 最后指定一个进程名,如果想指定进程pid,用-p选项。正在运行的进程可以用frida-ps -U命令查看
这种注入脚本的方法,常用于hook在App就启动期就执行的函数。
frida运行过程中,执行%resume重新注入,执行%reload来重新加载脚本;执行exit结束脚本注入
hook目标方法,打印它的返回值:
if(Java.available) {
Java.perform(function() {
// 获取目标类
var targetClass = Java.use('d10');
// Hook 目标方法
targetClass.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww.implementation = function() {
// 调用原始方法并获取返回值
var returnValue = this.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww.apply(this, arguments);
// 打印返回值
console.log('xxxxxxxx Return value: ' + returnValue);
// 返回原始返回值
return returnValue;
};
});
}
注意:defpackage下的类不需要写包路径,直接写类名即可
Frida-dexDump脱壳
参考:https://blog.csdn.net/qq_37888591/article/details/124963201
- Windows环境安装Frida-Dexdump
pip3 install Frida-Dexdump
-
模拟器或者Root手机安装frida-sever
进入模拟器或者手机放置frida-sever的目录
cd /data/local/tmp
查看
ls ./frida-server-15.1.22-android-x86
可能有权限问题,可以先给权限 755
adb shell chmod 755 /data/local/tmp/frida-server
- 然后新开一个cmd窗口,执行:
frida-dexdump -FU
会在frida-dexdump安装目录下输出模拟器当前运行的APP的dex文件,
查看frida-dexdump安装目录:
F:\YY>where frida-dexdump
E:\Program Files\python36\Scripts\frida-dexdump.exe
部分脱壳命令:
- 指定App的应用名称:frida-dexdump -U -n 一点资讯
- 指定App的应用进程ID:frida-dexdump -U -p 3302
- 指定App的应用包名:frida-dexdump -U -f com.hipu.yidian