Frida Hook(一) 基础介绍及环境搭建

admin 2024年4月10日09:50:55评论5 views字数 3688阅读12分17秒阅读模式

Frida 是一个动态二进制插桩工具,它允许你在运行时对程序进行分析和修改。它可以用来挂钩函数、重写函数、操纵数据等。Frida 特别擅长于对移动应用和桌面应用进行逆向工程和安全测试。在 Frida 中执行 JavaScript (JS) 代码通常是为了在目标应用的上下文中动态地修改或监控其行为。

Frida安装

https://frida.re/docs/installation/

Java                  
pip install frida-tool// 在自己的电脑上安装frida 工具

Frida Hook(一)  基础介绍及环境搭建

使用 frida --version 查看当前安装的版本

Frida Hook(一)  基础介绍及环境搭建

然后在https://github.com/frida/frida/releases,寻找对应的版本安装在自己的安卓手机或者模拟器上    

Frida Hook(一)  基础介绍及环境搭建

下载后,使用adb将frida服务端安装在安卓手机/模拟器中

Java                  
adb push frida-server-16.2.1-android-arm64 /data/local/tmp/

Frida Hook(一)  基础介绍及环境搭建

然后在adb shell进入安卓中,给frida-server执行权限,执行起来frida-server

Java                  
chmod 777 frida-server                  
./frida-server

如果没有报错就是执行成功了

此时使用frida客户端工具连接上,例如查看下当前的有哪些APP在运行

Java                  
frida-ps -Ua

Frida Hook(一)  基础介绍及环境搭建    

Frida工具介绍

Frida 提供了一组命令行工具,使得在终端中进行 Frida 相关操作更加方便。以下是一些常用的 Frida 命令行工具:

frida

Java                  
-U, --usb:指定使用 USB 连接到设备。如果未指定此选项,则使用本地连接。                 
-H, --host:指定要连接的远程主机。                 
-P, --pid:指定目标进程的 PID。如果您知道要 hook 的进程的 PID,则可以使用此选项指定。示例:frida -U -p-l script.js          
-f, --process:指定目标进程的名称或者应用包名。如果您只知道要 hook 的应用程序的名称或包名,则可以使用此选项指定。示例:frida -U -f com.example.app -l script.js          
-R, --attach-resume:在附加到目标进程后,恢复目标进程的执行。         
-i, --include:仅包含与给定条件匹配的导出函数或方法。您可以使用正则表达式或通配符来匹配导出的函数或方法。示例:frida -U -f com.example.app -i "sendMessage*" -l script.js          
-e, --exclude:排除与给定条件匹配的导出函数或方法。您可以使用正则表达式或通配符来匹配导出的函数或方法。示例:frida -U -f com.example.app -e "sendMessage*" -l script.js          
-m, --methods:仅包含或排除指定类中的方法。您可以使用正则表达式或通配符来匹配类名和方法名。示例:frida -U -f com.example.app -m "com.example.app.MainActivity" -l script.js          
-o, --output:将输出写入指定文件。         
-I, --interactive:以交互模式运行 Frida 工具,允许用户在运行时输入命令。         
-l, --listen:指定 Frida 服务器监听的端口号。用于建立与 Frida Server 的连接。         
-v, --verbose:增加输出详细级别,可以用来调试问题          
-h, --help:显示帮助信息,列出可用的选项和示例。
       

frida-ps:列出当前运行的进程及其 PID。

 frida-ps

frida-ls-devices:列出连接到计算机的所有设备及其信息。

Bash                  
bashCopy code                  
frida-ls-devices

frida-trace:追踪应用程序的函数调用、方法调用等。

Bash                  
bashCopy code                  
frida-trace -U -f 包名 方法名

frida-discover:自动发现设备上的应用程序、类和方法等信息。

Bash                  
bashCopy code                  
frida-discover -U
       

frida-compile:编译 JavaScript 脚本以供 Frida 使用。

Bash                  
bashCopy code                  
frida-compile script.js

frida-server:启动 Frida 服务器,用于与设备进行通信。

Bash                  
bashCopy code                  
frida-server

frida-install:安装 Frida 客户端到目标设备上。

Bash                  
bashCopy code                  
frida-install -U frida-server-<版本>-<平台>.apk

frida-uninstall:卸载 Frida 客户端。

Bash                  
bashCopy code                  
frida-uninstall -U frida-server

frida-kill:杀死指定进程。

Bash                  
bashCopy code                  
frida-kill -f 包名

以上是一些常用的 Frida 命令行工具,您可以根据需要选择合适的工具进行使用。您可以通过运行命令本身,或者通过添加 -h 参数来查看每个命令的帮助信息,了解更多用法和选项。

Firda Hook方式    

操作方式

  • CLI(命令行):通过命令行直接将JavaScript脚本注入进程中,对进程进行操作

  • RPC(远程过程调用):使用Python脚本间接完成JavaScript脚本的注入工作

Hook模式

spawn(调用)模式

当使用spawn模式时,即使目标App已经启动,在使用Frida对程序进行注入时,还是会由Frida将App重新启动并注入

Java                  
frida -U -f com.test.sec -l script.js

attach(附加)模式

建立在目标App已经启动的情况下,Frida直接利用ptrace原理注入程序进而完成Hook操作

Java                  
frida -U -n com.test.sec -l script.js

script.js通常格式为

Java                  
function hook(){                  
Java.perform(function() {                  
var test = Java.use("com.test.a.test");//声明hook的类test                  
var test1_func = test.test1; // 声明hook 对应类的test1函数                  
test1_func.implementation = function () {.//实现hook的逻辑                  
this.test1();                  
console.log('test1: hooking')                  
}                  
                 
})                  
}

实例

通过android studio 来基于basic模版创建一个新的app,包名为com.example.myapplication,对里边的MainActivity的OnPause函数进行hook;编写hook 脚本

Java                  
function hook(){                  
Java.perform(function() {                  
var main = Java.use ("com.example.myapplication.MainActivity");                  
var create_func = main.onPause;                  
create_func.implementation = function () {                  
var result = this.onPause();                  
console.log('tttttttttest hookinnnnng')                  
console.log("pause called",',result=>',result)                  
return result                  
}                  
})                  
}                  
                 
setImmediate(hook,300)

使用frida执行

Java                  
frida -U -f com.example.myapplication -l 2.js

Frida Hook(一)  基础介绍及环境搭建

原文始发于微信公众号(暴暴的皮卡丘):Frida Hook(一) 基础介绍及环境搭建

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年4月10日09:50:55
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Frida Hook(一) 基础介绍及环境搭建http://cn-sec.com/archives/2643190.html

发表评论

匿名网友 填写信息