Files
workphone-sdk/sdk/scripts/anti_detect/setup_phantom_frida.sh

117 lines
3.7 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# ==================================================================
# AF9 — Phantom-Frida / StrongR-Frida 自动部署脚本
#
# 功能:
# 1. 检测设备 CPU 架构
# 2. 下载对应的反检测 Frida Server 二进制
# 3. 推送到设备 /data/local/tmp/,随机命名(反扫描)
# 4. 启动时使用随机端口(避免 27042 默认端口检测)
#
# 用法:
# bash setup_phantom_frida.sh [device_serial]
#
# 依赖adb, curl/wget, unxz
# ==================================================================
set -euo pipefail
DEVICE_SERIAL="${1:-}"
ADB_CMD="adb"
[ -n "$DEVICE_SERIAL" ] && ADB_CMD="adb -s $DEVICE_SERIAL"
FRIDA_VERSION="${FRIDA_VERSION:-16.6.6}"
PHANTOM_REPO="https://github.com/aspect-dev/phantom-frida/releases/download"
STRONGR_REPO="https://github.com/aspect-dev/strongr-frida/releases/download"
if command -v shuf >/dev/null 2>&1; then
RAND_PORT=$(shuf -i 10000-60000 -n 1)
else
RAND_PORT=$((10000 + RANDOM % 50001))
fi
RAND_NAME="fs_$(head -c 6 /dev/urandom | xxd -p)"
echo "=== Phantom-Frida 部署脚本 ==="
echo "Frida版本: $FRIDA_VERSION"
echo "随机端口: $RAND_PORT"
echo "服务名称: $RAND_NAME"
# Step 1: 检测 CPU 架构
ARCH=$($ADB_CMD shell getprop ro.product.cpu.abi | tr -d '\r')
echo "设备架构: $ARCH"
case "$ARCH" in
arm64-v8a) FRIDA_ARCH="arm64" ;;
armeabi-v7a) FRIDA_ARCH="arm" ;;
x86_64) FRIDA_ARCH="x86_64" ;;
x86) FRIDA_ARCH="x86" ;;
*)
echo "不支持的架构: $ARCH"
exit 1
;;
esac
BINARY_NAME="frida-server-${FRIDA_VERSION}-android-${FRIDA_ARCH}"
DOWNLOAD_URL="${PHANTOM_REPO}/${FRIDA_VERSION}/${BINARY_NAME}.xz"
FALLBACK_URL="${STRONGR_REPO}/${FRIDA_VERSION}/${BINARY_NAME}.xz"
TMPDIR=$(mktemp -d)
trap "rm -rf $TMPDIR" EXIT
echo "下载 Phantom-Frida..."
if ! curl -L -f -o "$TMPDIR/${BINARY_NAME}.xz" "$DOWNLOAD_URL" 2>/dev/null; then
echo "Phantom-Frida 下载失败,尝试 StrongR-Frida..."
if ! curl -L -f -o "$TMPDIR/${BINARY_NAME}.xz" "$FALLBACK_URL" 2>/dev/null; then
echo "=== 自动下载失败 ==="
echo "请手动下载以下任一版本:"
echo " Phantom-Frida: https://github.com/aspect-dev/phantom-frida/releases"
echo " StrongR-Frida: https://github.com/aspect-dev/strongr-frida/releases"
echo "下载后放到 $TMPDIR/${BINARY_NAME}.xz 再重新执行"
exit 1
fi
fi
echo "解压..."
unxz "$TMPDIR/${BINARY_NAME}.xz"
echo "推送到设备..."
$ADB_CMD push "$TMPDIR/${BINARY_NAME}" "/data/local/tmp/${RAND_NAME}"
$ADB_CMD shell "chmod 755 /data/local/tmp/${RAND_NAME}"
echo "停止旧 Frida 进程..."
$ADB_CMD shell "su -c 'pkill -f frida-server'" 2>/dev/null || true
$ADB_CMD shell "su -c 'pkill -f hluda-server'" 2>/dev/null || true
sleep 1
echo "启动 Phantom-Frida端口=$RAND_PORT..."
$ADB_CMD shell "su -c 'nohup /data/local/tmp/${RAND_NAME} -l 0.0.0.0:${RAND_PORT} &'" &
sleep 2
RUNNING=$($ADB_CMD shell "ps | grep ${RAND_NAME}" | wc -l || echo "0")
if [ "$RUNNING" -gt 0 ]; then
echo "=== 部署成功 ==="
echo "名称: $RAND_NAME"
echo "端口: $RAND_PORT"
echo "路径: /data/local/tmp/${RAND_NAME}"
echo ""
echo "连接方式: frida -H 127.0.0.1:${RAND_PORT} -n com.tencent.mm"
echo "ADB转发: adb forward tcp:${RAND_PORT} tcp:${RAND_PORT}"
CONFIG_FILE="$(dirname "$0")/phantom_frida_config.json"
cat > "$CONFIG_FILE" <<EOJSON
{
"device_serial": "${DEVICE_SERIAL:-auto}",
"frida_version": "${FRIDA_VERSION}",
"binary_name": "${RAND_NAME}",
"binary_path": "/data/local/tmp/${RAND_NAME}",
"listen_port": ${RAND_PORT},
"arch": "${FRIDA_ARCH}",
"deployed_at": "$(date -u +%Y-%m-%dT%H:%M:%SZ)"
}
EOJSON
echo "配置已保存: $CONFIG_FILE"
else
echo "=== 启动失败,请检查 Root 权限 ==="
exit 1
fi