2026-07-07 19:04:13 +08:00
|
|
|
|
#!/usr/bin/with-contenv bash
|
|
|
|
|
|
# 设置 ptrace_scope=0,允许 bridge 进程读取微信进程内存
|
|
|
|
|
|
# 用于 SQLCipher 密钥自动提取(key_extractor.py 读 /proc/<pid>/mem)
|
2026-07-17 18:10:31 +08:00
|
|
|
|
|
|
|
|
|
|
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
|