Go bindings for frida.
For the documentation, visit https://pkg.go.dev/github.com/frida/frida-go/frida.
GO111MODULE
needs to be set toon
orauto
.- Download the frida-core-devkit from the Frida releases page for you operating system and architecture.
- Extract the downloaded archive
- Copy frida-core.h inside your systems include directory(inside /usr/local/include/) and libfrida-core.a inside your lib directory (usually /usr/local/lib).
To use in your project, just execute:
$ go get github.com/frida/frida-go/frida@latest
Supported OS:
- MacOS
- Linux
- Android
- Windows
package main
import (
"bufio"
"fmt"
"github.com/frida/frida-go/frida"
"os"
)
var script = `
Interceptor.attach(Module.getExportByName(null, 'open'), {
onEnter(args) {
const what = args[0].readUtf8String();
console.log("[*] open(" + what + ")");
}
});
Interceptor.attach(Module.getExportByName(null, 'close'), {
onEnter(args) {
console.log("close called");
}
});
`
func main() {
mgr := frida.NewDeviceManager()
devices, err := mgr.EnumerateDevices()
if err != nil {
panic(err)
}
for _, d := range devices {
fmt.Println("[*] Found device with id:", d.ID())
}
localDev, err := mgr.LocalDevice()
if err != nil {
fmt.Println("Could not get local device: ", err)
// Let's exit here because there is no point to do anything with nonexistent device
os.Exit(1)
}
fmt.Println("[*] Chosen device: ", localDev.Name())
fmt.Println("[*] Attaching to Telegram")
session, err := localDev.Attach("Telegram", nil)
if err != nil {
fmt.Println("Error occurred attaching:", err)
os.Exit(1)
}
script, err := session.CreateScript(script)
if err != nil {
fmt.Println("Error occurred creating script:", err)
os.Exit(1)
}
script.On("message", func(msg string) {
fmt.Println("[*] Received", msg)
})
if err := script.Load(); err != nil {
fmt.Println("Error loading script:", err)
os.Exit(1)
}
r := bufio.NewReader(os.Stdin)
r.ReadLine()
}
Build and run it, output will look something like this:
$ go build example.go && ./example
[*] Found device with id: local
[*] Found device with id: socket
[*] Chosen device: Local System
[*] Attaching to Telegram
[*] Received {"type":"log","level":"info","payload":"[*] open(/Users/daemon1/Library/Application Support/Telegram Desktop/tdata/user_data/cache/0/25/0FDE3ED70BCA)"}
[*] Received {"type":"log","level":"info","payload":"[*] open(/Users/daemon1/Library/Application Support/Telegram Desktop/tdata/user_data/cache/0/8E/FD728183E115)"}