Mac替换BurpSuite内置JRE
背景
Mac 版 Burp 内置的 JRE 带父进程限制(Has Parent Launch Constraints)。
App 包签名被破坏或修改后,内置浏览器可能无法启动。
这里通过重新构建一份 jlink JRE,并保持原有 bundle 布局来替换。
环境: macOS 27.0.0 (Darwin 27), Apple M5, arm64
目标: Burp Suite Professional 2026.8
先确认原版 JRE 的现象:
"/Applications/Burp Suite.app/Contents/Resources/jre.bundle/Contents/Home/bin/java" -version
# Killed: 9 ← 内核直接杀, exit 137模块清单
先从原版 JRE 的 release 文件获取模块列表,作为后续 jlink 的依据:
cp "/Applications/Burp Suite.app/Contents/Resources/jre.bundle/Contents/Home/release" release.env
source release.env
echo "${MODULES// /,}" # 空格换成逗号, 即 --add-modules 格式当前共 37 个模块,尽量与原版保持一致,避免运行时出现 NoClassDefFoundError。
JDK 版本可以从官方 release note 确认:
"We updated the bundled Java Runtime to OpenJDK 26.0.2."
下载 JDK
这里使用 Zulu 26 的 -ca-jdk 版本,不带 fx/crac;当前机器是 arm64,因此选择 aarch64:
curl -fL -o zulu26.tar.gz \
"https://cdn.azul.com/zulu/bin/zulu26.32.203-ca-jdk26.0.2.1-macosx_aarch64.tar.gz"解压
统一将 JDK 的 Contents/Home 链接到 jdk,方便后续命令使用:
rm -rf .extract && mkdir .extract && tar -xzf zulu26.tar.gz -C .extract
ln -sfn .extract/*/Contents/Home jdk
jdk/bin/java -version # Zulu26.32+203-CA (26.0.2.1)JDK 24 之后发行版可能不带
jmods/,正常。这里直接使用运行时镜像进行jlink。
jlink
使用原版模块列表生成新的 runtime。下面几个参数主要用于去掉调试信息、头文件和手册,并进一步压缩体积。
source release.env
rm -rf image
jdk/bin/jlink \
--add-modules "${MODULES// /,}" \
--strip-debug --no-header-files --no-man-pages \
--compress=zip-6 --output image生成后的 image/ 就是新的 Java runtime。
套回 install4j 布局
Burp 使用的是 install4j 的 jre.bundle 结构,因此这里只替换 Contents/Home/,外层的 libjli.dylib 和 Info.plist 继续使用原版。
注意:Contents/MacOS/libjli.dylib 与 Contents/Home/lib/libjli.dylib 不是同一个文件。
mkdir -p jre.bundle/Contents/Home jre.bundle/Contents/MacOS
cp -R image/. jre.bundle/Contents/Home/
cp "/Applications/Burp Suite.app/Contents/Resources/jre.bundle/Contents/MacOS/libjli.dylib" jre.bundle/Contents/MacOS/
cp "/Applications/Burp Suite.app/Contents/Resources/jre.bundle/Contents/Info.plist" jre.bundle/Contents/签名 + 自检
替换了 bundle 内容后需要重新签名。签名完成后顺便检查版本、模块数量和体积。
codesign --force --deep --sign - jre.bundle
codesign --verify --deep --strict jre.bundle
jre.bundle/Contents/Home/bin/java -version # 26.0.2.1
jre.bundle/Contents/Home/bin/java --list-modules | wc -l # 37
du -sh jre.bundle # 72M (原版 135M)替换
先备份原版 JRE,再进行替换。这样出现问题时可以直接回滚。
ditto "/Applications/Burp Suite.app/Contents/Resources/jre.bundle" jre.bundle.orig
rm -rf "/Applications/Burp Suite.app/Contents/Resources/jre.bundle"
ditto jre.bundle "/Applications/Burp Suite.app/Contents/Resources/jre.bundle"替换后重新启动 Burp,检查内置浏览器是否恢复正常。