#!/usr/bin/with-contenv bash # 设置 ptrace_scope=0,允许 bridge 进程读取微信进程内存 # 用于 SQLCipher 密钥自动提取(key_extractor.py 读 /proc//mem) PTRACE_SCOPE="/proc/sys/kernel/yama/ptrace_scope" # 检查容器是否拥有 SYS_PTRACE capability # 通过 /proc/self/status 中的 CapEff 判断 bit 12 (CAP_SYS_PTRACE) has_sys_ptrace() { local cap_eff cap_eff=$(awk '/^CapEff:/{print $2}' /proc/self/status 2>/dev/null) if [ -z "$cap_eff" ]; then return 1 fi # CAP_SYS_PTRACE = 12,掩码 0x1000 local mask mask=$((0x${cap_eff} & 0x1000)) [ "$mask" -ne 0 ] } if [ -e "$PTRACE_SCOPE" ]; then # 文件存在:尝试写入 0 if echo 0 > "$PTRACE_SCOPE" 2>/dev/null; then echo "woc-ptrace: ptrace_scope 已设置为 0" >&2 else echo "woc-ptrace: 无法写入 ptrace_scope(可能需要 --privileged 或 SYS_PTRACE capability)" >&2 fi else # 文件不存在:YAMA 模块未加载(常见于 Docker Desktop WSL2 精简内核) if has_sys_ptrace; then echo "woc-ptrace: 宿主机未启用 YAMA($PTRACE_SCOPE 不存在),但容器已持有 SYS_PTRACE,key 提取仍可尝试" >&2 else echo "woc-ptrace: 宿主机未启用 YAMA($PTRACE_SCOPE 不存在),且容器未持有 SYS_PTRACE;自动 key 提取可能不可用" >&2 fi fi