BurpSuite-collections 实战:在 Mac 下把 Burp Suite 封装成 Dock 一键启动的 App
BurpSuite-collections 实战:在 Mac 下把 Burp Suite 封装成 Dock 一键启动的 App
本文以 BurpSuite-collections 仓库中的 mac_app.md 为核心,完整讲解如何在 macOS 上将 Burp Suite 及其独立 JDK、Loader 封装成一个位于 Dock/启动台的应用程序:通过两个 Shell 启动脚本实现「激活」与「启动」分离,再用 macOS 自带的「自动操作(Automator)」将启动脚本包装成 .app,最后用 .icns 图标完成美化。读完本文,你将能独立复刻一套不依赖系统 Java 版本、双击即用的 Burp Suite 桌面应用,并理解其中 -Xmx、--add-opens 等 JVM 关键参数的作用。
一、为什么需要把 Burp Suite 封装成 Mac App
Burp Suite 的官方安装方式通常是命令行 java -jar burpsuite_pro_v*.jar 启动,这在 Mac 上有几个痛点:
- 依赖系统全局 Java 环境,版本一旦被其他软件(如 Homebrew 更新)改动,Burp 可能无法启动;
- 每次都要手动打开终端、敲命令,体验割裂;
- Dock 上没有图标入口,无法像普通 macOS 应用一样「一键启动」。
mac_app.md 给出的方案核心思路是:把 JDK、Burp 本体、Loader/Keygen 全部放到同一个目录中,用相对路径的 Shell 脚本启动,再用 Automator 把脚本包装成 .app。这样 Burp 变成「自带运行时」的独立应用,放 Dock 里一点即开,与仓库中 Windows 侧通过 创建桌面快捷方式.bat 生成桌面快捷方式的做法异曲同工,只是平台实现不同。
二、目录结构与文件职责
原文档给出的目录结构如下,所有文件放在同一个文件夹(下文称为「Burp 目录」):
├── BurpLoaderKeygen.jar
├── BurpSuite.icns
├── BurpSuiteLoader.jar
├── active_burp.sh
├── burpsuite_pro_v2021.12.1.jar
├── jdk-17.0.1.jdk
└── start_burp.sh
各文件作用:
| 文件 | 作用 |
|---|---|
BurpLoaderKeygen.jar、BurpSuiteLoader.jar |
激活与加载工具(Loader 通过 -javaagent 方式伴随 Burp 启动) |
BurpSuite.icns |
macOS 应用图标,制作成 App 后用于替换默认图标 |
jdk-17.0.1.jdk |
独立 JDK 目录。脚本用相对位置引用其中的 java,不依赖系统 Java 版本,实现独立运行 |
burpsuite_pro_v2021.12.1.jar |
Burp Suite 本体(实际 jar 文件名中版本号可泛匹配) |
active_burp.sh |
激活脚本,首次激活时运行 |
start_burp.sh |
启动脚本,也是制作成 App 后直接执行的部分 |
说明:本仓库 README 已声明不再提供破解/激活相关文件(相关内容仅作技术研究),本文只讲解脚本结构与应用封装方法;激活环节原文档明确「不做说明」,需读者自行处理授权。
三、激活脚本 active_burp.sh 详解
#!/usr/bin/env bash
# active burp first
SHELL_FOLDER=$(cd `dirname $0`; pwd)
jdk_path=${SHELL_FOLDER}"/jdk-*.jdk/Contents/Home/bin/java"
${jdk_path} -Xdock:icon=${SHELL_FOLDER}/BurpSuite.icns -jar ${SHELL_FOLDER}/BurpSuiteLoader.jar
关键点:
SHELL_FOLDER动态定位:$(cd dirname $0; pwd)让脚本无论从哪里被调用,都能找到自己所在目录,从而保证后续所有相对路径(jdk、jar、icns)都正确解析。这是整个方案「可移动、可复制」的根基。- JDK 路径泛匹配:
${SHELL_FOLDER}"/jdk-*.jdk/Contents/Home/bin/java"使用通配符匹配jdk-*,只要目录里只有一个 JDK 就能命中。原文档特别提醒:如果你有多个 jdk 目录,请自行修改为精确路径。 -Xdock:icon:macOS 专属 JVM 参数,指定启动时 Dock 上显示的图标文件(BurpSuite.icns)。- 激活动作:通过 Loader 完成授权后,正常启动走
start_burp.sh,激活脚本不需要反复执行。
四、启动脚本 start_burp.sh 与 JVM 参数全解析
#!/usr/bin/env bash
# start burp en after licensed
SHELL_FOLDER=$(cd `dirname $0`; pwd)
jdk_path=${SHELL_FOLDER}"/jdk-*.jdk/Contents/Home/bin/java"
${jdk_path} -Xdock:icon=${SHELL_FOLDER}/BurpSuite.icns -Dfile.encoding=utf-8 -noverify -javaagent:${SHELL_FOLDER}/BurpSuiteLoader.jar -jar -Xmx8G --add-opens=java.desktop/javax.swing=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED ${SHELL_FOLDER}/burpsuite_pro_v202*.jar
原文档列出的四点注意事项(务必逐条核对):
第一,jdk 目录与激活脚本相同,采用泛匹配,多 JDK 时自行修改。 第二,Burp 版本号同样泛匹配:
burpsuite_pro_v202*.jar,参考上面目录的实际文件名,有需要自行修改。 第三,-Xmx8G表示设置堆内存最大值为 8G,可按机器内存调整,参数含义见下方 JVM 内存参数表。 第四,--add-opens=java.desktop/javax.swing=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED是针对高版本(JDK 17+)必须增加的参数,用于放开模块强封装下的反射访问;低版本 JDK 可以去掉,否则启动 Burp 会报错。
4.1 各 JVM 参数作用说明
| 参数 | 作用 |
|---|---|
-Xdock:icon=... |
macOS 专用,指定 Dock 栏图标 |
-Dfile.encoding=utf-8 |
指定文件/默认字符编码为 UTF-8,避免中文路径或界面乱码(仓库 Windows 启动脚本 Burp_start.bat 中同样使用了该参数) |
-noverify |
关闭字节码验证,Loader 场景下配合使用 |
-javaagent:${SHELL_FOLDER}/BurpSuiteLoader.jar |
以 Java Agent 方式注入 Loader,实现授权加载 |
-jar ${SHELL_FOLDER}/burpsuite_pro_v202*.jar |
指定运行的主 jar(Burp 本体) |
-Xmx8G |
堆内存最大值 8G |
--add-opens=... |
JDK 17+ 必需,放开 java.desktop/javax.swing、java.base/java.lang 模块的封装限制 |
技术提示(基于 JVM 标准行为):-Xmx、--add-opens 等属于 VM 选项,严格来说应放在 -jar 之前才能被 JVM 正确解析;原文档脚本中 -Xmx8G 位于 -jar 之后,若在实际运行中发现堆大小未生效,可将参数调整到 -jar 前,例如:
${jdk_path} -Xdock:icon=... -Dfile.encoding=utf-8 -noverify -Xmx8G -javaagent:${SHELL_FOLDER}/BurpSuiteLoader.jar --add-opens=java.desktop/javax.swing=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED -jar ${SHELL_FOLDER}/burpsuite_pro_v202*.jar
4.2 JVM 内存分配参数速查表(原文档完整保留)
下表为 -Xmx 系列相关参数速查,便于按机器配置调整内存:
| 配置 | 说明 |
|---|---|
-Xms |
设置初始堆内存大小 |
-Xmx |
设置堆内存的最大值 |
-Xss |
设置栈内存的大小 |
-XX:MinHeapFreeRatio |
设置堆内存的最小空闲比例 |
-XX:MaxHeapFreeRatio |
设置堆内存的最大空闲比例 |
-XX:NewSize |
设置新生代的最小内存值 |
-XX:NewMaxSize |
设置新生代的最大内存值 |
-XX:NewRatio |
设置年轻代(包括 Eden 和两个 Survivor 区)与年老代的比值(除去持久代) |
-XX:SurviorRatio |
设置 Eden 区和 Survivor 区的比例 |
-XX:MaxPermSize |
设置持久代的最大值 |
-XX:PermSize |
设置持久代的最小值 |
-XX:TargetSurvivorRatio |
设置 survivor 区的可使用率 |
实际调优建议:-Xmx8G 适合内存充裕的机器(大项目扫描时避免频繁 Full GC);内存较小的机器可下调至 -Xmx4G。若同时显式设置 -Xms,建议与 -Xmx 相等以省去扩容开销。
五、用 Automator 制作 Dock 应用(核心步骤)
macOS 自带「自动操作(automator.app)」即可把启动脚本包装成 .app,无需任何第三方打包工具。完整步骤如下:
- 打开自动操作:
command + 空格搜索「自动操作 / Automator」打开; - 新建文稿:点击左下角的「新建文稿」;
- 选择模板类型:在文稿类型列表中选择「应用程序(Application)」;
- 拖入运行 Shell 脚本:在左侧资源库中找到「运行 Shell 脚本(Run Shell Script)」,拖到右侧流程区域;
- 填写启动命令:在脚本框中填写:
注意:将cd /path/to/your/burpsuite && bash start_burp.sh/path/to/your/burpsuite替换为你实际存放 Burp 目录的路径; - 测试运行:点击右上角「运行」按钮,确认 Burp Suite 能正常打开;
- 保存应用:测试通过后
command + s保存。建议命名BurpSuite,Automator 会自动生成BurpSuite.app。
完成之后,就可以在「启动台 LaunchPad」或「访达 → 应用程序」目录里找到你的 Burp Suite,直接点击即可启动,也可以把它拖到 Dock 上实现一键启动。
说明:
cd /path/to/your/burpsuite && bash start_burp.sh先切换到 Burp 目录再执行脚本,是为了配合脚本内SHELL_FOLDER的相对路径定位,保证 JDK、jar、icns 全部正确找到。
六、美化:替换 Burp 应用图标
Automator 生成的 App 默认是机器人图标,替换方法:
- 在「访达」的「应用程序」目录中找到刚做好的 Burp Suite App;
- 右键选择「显示简介」;
- 将
BurpSuite.icns文件拖到简介窗口左上角(应用名称左边)的图标位置; - 松开鼠标即生效,Dock 与启动台中的图标会同步更新。
这与仓库在 Windows 侧通过 创建桌面快捷方式.bat 中 set icon=%~dp0/img/Goescat-Macaron-Burp-suite.ico 指定快捷方式图标是同一思路,只是 Mac 走的是 .icns 拖放替换,Windows 走的是 .ico 路径引用。
七、跨平台对照:仓库中的 Windows 启动脚本
本项目仓库根目录同时提供了 Windows 侧的启动与快捷方式脚本,可与本文 Mac 方案互相印证同一套 JVM 启动参数的跨平台写法:
- Burp_start.bat(汉化版启动):
start javaw -Dfile.encoding=utf-8 -javaagent:%~dp0\BurpSuiteCn.jar -Xbootclasspath/p:%~dp0\burp-loader-keygen.jar -Xmx1024m -jar %~dp0\burpsuite_pro_v1.7.37.jar - Burp_start_en.bat(英文版启动):无汉化 javaagent,其余参数一致
- 创建桌面快捷方式.bat:通过 VBS 生成桌面
.lnk快捷方式,并指定工作目录与图标
对照可见三个共性设计:路径都用脚本自身所在目录动态定位(Mac 用 $(cd dirname $0; pwd),Windows 用 %~dp0);字符编码统一指定 -Dfile.encoding=utf-8;Loader/汉化包都通过 -javaagent 注入。在 Mac 上运行时,把 %~dp0 换成 SHELL_FOLDER、把 javaw 换成独立 JDK 的 java 即可移植同一套启动参数。这也是为什么 mac_app.md 强调使用「相对位置的 JDK」——与 Windows 脚本依赖 %~dp0 一样,都是为了保证整个 Burp 目录可以被整体移动或拷贝而不失效。
八、常见问题与注意事项
- JDK 目录多个导致泛匹配失败:
jdk-*.jdk通配到多个目录时,脚本会因路径歧义失败,此时应把泛匹配改为精确路径,如${SHELL_FOLDER}/jdk-17.0.1.jdk/Contents/Home/bin/java。 - JDK 版本过旧报错:
--add-opens=java.desktop/javax.swing=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED是为 JDK 17+ 准备的;如果你的 JDK 版本较低却添加了这两个参数,同样可能报错,应按版本增减。 - 内存不足:
-Xmx8G是上限,若 Mac 物理内存较小或同时运行多个容器/应用,建议下调,避免频繁触发 OOM。 - App 首次打开提示来源不明:Automator 生成的 App 属本地应用,若系统提示「无法验证开发者」,可在「系统设置 → 隐私与安全性」中允许打开,或右键应用选择「打开」。
- 激活与启动分离:
active_burp.sh只在授权阶段需要执行,日常使用直接运行start_burp.sh(或打包后的 App),不要每次都跑激活脚本。 - 编码问题:脚本路径或目录名含中文时,
-Dfile.encoding=utf-8能避免大部分乱码;若仍异常,可检查终端默认 locale。
通过以上方案,你将获得一个「自带 JDK、双击即启、带自定义图标」的 Burp Suite 独立应用。相关的启动脚本与 Windows 侧对照脚本均已收录在 BurpSuite-collections 仓库根目录(mac_app.md、Burp_start.bat、Burp_start_en.bat、创建桌面快捷方式.bat),可对照研读。