前言

因为模拟器发生了一些奇怪的事情(关不掉代理了),所以重新来一遍。

CA证书

http://burp
不多说

der转.0证书

# 步骤1: 将DER格式转换为PEM格式
openssl x509 -inform DER -in cacert.der -out cacert.pem

# 步骤2: 计算证书的旧版subject hash(Android系统使用)
openssl x509 -inform PEM -subject_hash_old -in cacert.pem | head -1
# 输出示例: 9a5ba575

# 步骤3: 将PEM证书重命名为 <hash>.0 格式
mv cacert.pem 9a5ba575.0

安装证书

adb root
adb shell mount -o rw,remount /system
adb push 9a5ba575.0 /system/etc/security/cacerts/
adb shell chmod 644 /system/etc/security/cacerts/9a5ba575.0

如果你也和我一样push了以后找不到,那就在shell里面

mount -o rw,remount /system
cp /storage/emulated/0/9a5ba575.0 /etc/security/cacerts/
ls /etc/security/cacerts/9a5ba575.0
chmod 644 /etc/security/cacerts/9a5ba575.0

记得root权限

设置代理

adb.exe shell settings put global http_proxy 10.0.2.2:8080

清除代理:

adb.exe shell settings delete global http_proxy

顺手的小工具:ceserver

抓包只是看流量。想在模拟器里改点东西(内存扫描、改数值),Cheat Engine 那边有个安卓服务端叫 ceserver,MuMu 是少数"adb 开着、root 还合法"的环境,装起来比真机省事得多。

先连上,顺便确认架构——版本装错立刻崩:

adb connect 127.0.0.1:16384
adb devices
adb shell getprop ro.product.cpu.abi

16384 是这个实例的 adb 端口,不是我编的固定值:多开器里每个实例的端口都不同,按自己那个填。架构输出 arm64-v8a 就用 ceserver_arm64,x86_64 就用 ceserver_x86_64,拿错了跑起来是 illegal instruction 或者直接闪退。

把对应版本推上去:

adb push ceserver_arm64 /data/local/tmp/
adb shell chmod 755 /data/local/tmp/ceserver_arm64

/data/local/tmp 是安卓上少数不需要额外授权就能执行二进制的目录,而且重启不清(除非重置模拟器/清数据)。

跑起来,并把端口转到 PC:

adb root
adb shell "cd /data/local/tmp && ./ceserver_arm64 &"
adb forward tcp:52736 tcp:52736

127.0.0.1:52736 是 ceserver 的默认监听端口。PC 端 Cheat Engine 里选 Network 连接,地址就填这个。

不放心 & 拉起的后台进程会被 shell 退出带走,就别加 &,单开一个 adb shell 窗口让它前台跑着,看日志也方便。

每次重开模拟器都要重来一遍——端口转发、root 状态、那个后台进程全都是临时的。四行,记住就行:

adb connect 127.0.0.1:16384
adb root
adb forward tcp:52736 tcp:52736
adb shell /data/local/tmp/ceserver_arm64

两个和真机不同的地方,值得单独记一下:

  • adb root 在 MuMu 里能成。真机上是 production build,会直接告诉你 adbd cannot run as root in production builds;模拟器镜像一般是 userdebug,这行就是正常的。
  • 重启模拟器后 adb connect 可能连不上,先 adb kill-server 再连,比反复试端口快。