Skip to content

۱. پیام‌رسانی آسنکرون: send ​

این روش مثل ارسال SMS است. اسکریپت تزریق شده (Agent) هر وقت بخواهد پیامی بفرستد، از send استفاده می‌کند. برنامه Go ما گوش‌به‌زنگ است تا پیام را دریافت کند.

این روش برای لاگ کردن، ارسال فایل‌های دامپ شده و اعلام وضعیت عالی است.

ساختار داده: پیام‌ها معمولا به صورت JSON رد و بدل می‌شوند.

  • Agent (JS): send({ type: 'loot', data: 'Secret123' })
  • Host (Go): پیام را دریافت کرده و فیلدها را پارس می‌کند.

کد جاوا اسکریپت (ارسال پیام):

javascript
Java.perform(function () {
    var Settings = Java.use("com.example.app.Settings")

    Settings.getApiToken.implementation = function () {
        var token = this.getApiToken()
        
        /* ارسال توکن به سمت گولنگ */        
        /* ما یک آبجکت JSON می‌سازیم */        
        send({
            "topic": "secure_token",
            "payload": token.toString()
        })

        return token
    }
})

کد گولنگ (دریافت پیام):

go
package main

import (
	"encoding/json"
	"fmt"
	"github.com/frida/frida-go/frida"
)

/* ساختار پیام دریافتی از JS */
type Message struct {
	Type    string          `json:"type"`
	Payload json.RawMessage `json:"payload"`
}

func main() {
    /* اتصال به دستگاه USB */    
	dev := frida.USBDevice()
	
    /* اتصال به اپلیکیشن (یا Spawn کردن) */    
    session, err := dev.Attach("com.example.app", nil)
	if err != nil {
		panic(err)
	}
    defer session.Detach()

    /* لود کردن سورس کد جاوا اسکریپت (از فایل یا استرینگ) */    
	script, _ := session.CreateScript(myJSSourceCode)

    /* تنظیم هندلر برای دریافت پیام‌ها (on_message) */    
	script.On("message", func(data string) {
        var msg Message
        json.Unmarshal([]byte(data), &msg)
        
        if msg.Type == "send" {
            fmt.Printf("[GO] Received from Android: %s\n", string(msg.Payload))
        }
	})

	script.Load()
    fmt.Println("[*] Frida Go Client Running... Press Enter to exit")
    fmt.Scanln()
}