behindeye 发表于 2021-9-26 00:32

Frida使用教程

## 一、安装 frida

命令

```python
pip install frida
```

!(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/fd61dd465b11407595c426132cbf5df9~tplv-k3u1fbpfcp-zoom-1.image)

```
pip install frida-tools
```

!(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/edab2e641b394516949e32791b118e50~tplv-k3u1fbpfcp-zoom-1.image)

安装过程出现以下错误:

```
ValueError: check_hostname requires server_hostname
```

解决方法:

1.关闭抓包工具



## 二、安装 frida-server

### 2.1 下载

> 下载地址:https://github.com/frida/frida/releases

> Android Tutorials地址:https://frida.re/docs/android/

查看cpu架构

```
adb shell getprop ro.product.cpu.abi
```



选择对应架构的server下载

!(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c689090e321e43758a7b5ee9ec27b277~tplv-k3u1fbpfcp-zoom-1.image)

gadget适用于当无法获取root权限时可以将gadget.so植入目标apk中重打包,通过修改应用,使得server以应用的权限启动;还有frida-gum、frida-gumjs、frida-inject、frida-devkit等

### 2.2启动 firida-server

操作步骤:解压上面下载的文件,然后 push 到手机 /data/local/tmp,接着启动 firda-server 服务

```
$ adb root
$ adb pushfrida-server-14.2.18-android-arm /data/local/tmp

$ adb shell
$ su
$ cd /data/local/tmp
$ chmod 777 /data/local/tmp/frida-server-14.2.18-android-arm
$ ./frida-server-14.2.18-android-arm
```

端口映射

```
adb forward tcp:27042 tcp:27042
adb forward tcp:27043 tcp:27043
```

查看进程

```
frida-ps -U
```

!(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/666d779c0af54092a7e02820bb785519~tplv-k3u1fbpfcp-zoom-1.image)

## 三、hook进程

```
import frida
import sys

def on_message(message, data):
    if message['type'] == 'send':
      print("[*]{0}".format(message['payload']))
    else:
      print(message)

jsHook = """
    Java.perform(function () {
            // hook Log.w(tag,msg) 方法
      var log = Java.use('android.util.Log');
      log.w.overload("java.lang.String","java.lang.String").implementation = function(tag,msg){
            console.log("tag",tag)
            console.log("msg",msg)
            return this.w(tag,msg+"?") // msg 后面添加 ?
      };

    });
"""
process = frida.get_usb_device().attach("com.xxx.tool") // 目标包名
script = process.create_script(jsHook)
script.on('message', on_message)
print('[*] Running CTF')
script.load()
sys.stdin.read()

```

如果 logcat 打印日志包含 ?号,则操作成功

!(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d204649c27044478b79a4bc6cf660f95~tplv-k3u1fbpfcp-zoom-1.image)



## 四、参考资料

>frida - android : https://frida.re/docs/examples/android/
>
>hook工具frida原理及使用 : https://www.jianshu.com/p/51e6aef175a2
>
>Hook神器家族的Frida工具使用详解:http://www.520monkey.com/archives/1256

IBinary 发表于 2021-9-26 09:57

谢谢分享.看雪有个 fridaxxx.chm 不过里面很多东西感觉过时了. 但也有参考价值. 可以学学.
frida跟windows下的 easyhook detours minhook 一样都是个hook库. 但是frida比他们都强大.
windows下的逆向工程师也应该学学frida. 特别是怎么应用于windows.

GuiXiaoQi 发表于 2021-9-26 08:13

今天又学到了

小马奔腾2 发表于 2021-9-26 08:32

感谢分享

dllrose 发表于 2021-9-26 09:29

不错 很久没学了 看看

csp3949160 发表于 2021-9-26 09:34

学习了,谢谢楼主

stilllove88 发表于 2021-9-26 10:36

留个记号 谢谢分享

warner 发表于 2021-9-26 14:13

可以,很强

blindcat 发表于 2021-9-26 17:06

感谢分享

AIA 发表于 2021-9-26 23:44

这个真的很强,可以学习好一阵子了
页: [1] 2 3
查看完整版本: Frida使用教程