前言
因为模拟器发生了一些奇怪的事情(关不掉代理了),所以重新来一遍。
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再连,比反复试端口快。