目录

Mac替换BurpSuite内置JRE

4

背景

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


使用原版模块列表生成新的 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.dylibInfo.plist 继续使用原版。

注意:Contents/MacOS/libjli.dylibContents/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,检查内置浏览器是否恢复正常。