报错的翻译是:“要使用 Java 17+ 运行 Burp Suite,请提供以下 JVM 参数”。由于一些提问,本文某些信息需要加以冗长的说明,这样做的目的是为了更便于理解。
问题的产生的原因是Java版本不同造成的JDK内部类无法找到或变得非法,最终让Java 不能正常或者说按预期运行。这就需要通过输入命令的方式启动Burp Suite,而不是双击可执行文件,因为使用命令可以很容易地给java传递所需的参数。
使用下面的命令加以解决:
按照报错提示,可以尝试在命令行运行时后面加上这句代码(注:当然如果这样做没有仍有
同样报错或者出现其它错误,那么说明你的问题不属于本文可以解决的问题,以下命令同样
无法解决你所遇到的问题):
--add-opens=java.desktop/javax.swing=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED
即,在Windows终端*(终端:这里指的是Windows系统上的一个程序*(程序:software,翻
译成中文是“软件”。软件是一组用于操作计算机和执行特定任务的指令、数据或程序。)
Command Prompt 翻译成中文是“命令提示符”。命令提示符是在操作系统中,提示进行命令
输入的一种工作提示符。在不同的操作系统环境下,命令提示符各不相同。在windows环境
下,命令行程序为cmd.exe。请注意cmd.exe和powershell不相同。)上键入以下内容后回车:
javaw --add-opens=java.desktop/javax.swing=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED -jar burpsuite_pro_v2021.10.jar
或者
java -jar --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.desktop/javax.swing=ALL-UNNAMED burpsuite_pro_v2021.10.2.jar
其中的 "burpsuite_pro_v2021.10.jar" 即Burp Suite的JAR文件*。(JAR file (Java Archive):
Java档案或JAR文件包含所有各种组件,这些组件构成了一个自包含的、可执行的Java应用
程序、可部署的Java小程序,或者最常见的是,任何Java运行时环境都可以链接到的Java库。)
Java --add-opens是什么?
一些工具和库使用反射来访问JDK中仅供内部使用的部分。这种反射的使用对JDK的安全性和可维护性产生了负面影响。为了帮助迁移,JDK9到JDK16允许这种反射继续进行,但发出了关于非法反射访问的警告。但是,JDK17和更高版本是强封装的,因此默认情况下不再允许这种反射。访问java.*API的非公共字段和方法的代码将抛出InaccessibleObjectException。
[https://docs.oracle.com/en/java/javase/22/migrate/migrating-jdk-8-later-jdk-releases.html]
Java的标准选项
这些是JVM的所有实现所支持的最常用的选项。
注意:要为长选项指定参数,可以使用–name=value或–name-value。
-agentlib:libname[=选项]
加载指定的本机代理库。在库名称之后,可以使用以逗号分隔的库特定选项列表。见以下链接。
[https://docs.oracle.com/en/java/javase/11/tools/java.html]
了解运行时访问警告
某些工具和库使用反射来访问 JDK 中仅供内部使用的部分。这种非法的反射访问将在 JDK 的未来版本中被禁用。目前,默认情况下允许这种访问,并会发出警告。
默认情况下,在启动器启动的进程的生命周期中最多会发出一次有关反射访问的警告java。警告的确切时间取决于执行反射访问操作的工具和库的行为。警告可能在进程生命周期的早期出现,也可能在启动后很长时间出现。
您可以使用命令行标志逐个库禁用警告消息–add-opens。例如,您可以按以下方式启动 Jython:
>java --add-opens java.base/sun.nio.ch=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED -jar jython-standalone-2.7.0.jar
Jython 2.7.0 (default:9987c746f838, Apr 29 2015, 02:25:11)
这次,没有发出警告,因为 java 调用明确承认了反射访问。如您所见,您可能需要指定多个 --add-opens 标志来涵盖类路径上的库尝试的所有反射访问操作。
为了更好地理解工具和库的行为,您可以使用 --illegal-access=warn 命令行标志。此标志会导致针对每个非法反射访问操作发出警告消息。此外,您可以通过设置 --illegal-access=debug 获取有关非法反射访问操作的详细信息,包括堆栈跟踪。
如果您有更新的库,或者当您获得它们时,您可以尝试使用 --illegal-access=deny 命令行标志。它会禁用除其他命令行选项(例如 --add-opens)启用的操作之外的所有反射访问操作。这将是未来版本中的默认模式。
有两个选项允许您以特定方式打破封装。您可以将它们与 --illegal-access=deny 结合使用,或者如前所述,用于抑制警告。
如果您需要使用已设为不可访问的内部 API,请使用 --add-exports 运行时选项。您还可以在编译时使用 --add-exports 来访问内部 API。
如果您必须允许类路径上的代码进行深度反射以访问非公共成员,请使用 --add-opens 选项。
如果您想抑制所有反射访问警告,请在需要时使用 --add-exports 和 --add-opens 选项。
详见以下链接:
[https://docs.oracle.com/en/java/javase/11/migrate/index.html]
回到Burp Suite的报错。
报错原文是:
To run burp suite using java 17+,please supply the following JVM argument:
--add-opens=java.desktop/javax.swing=ALL-UNNAMED
--ass-opens=java.base/java.lang=ALL-UNNAMED
简单搜索你可以找到以下文章,来自PortSwigger的帮助:
https://forum.portswigger.net/thread/run-burp-on-openjdk-17-5611cb564e50e
Ben, PortSwigger Agent | Last updated: Nov 30, 2021 01:42PM UTC
Hi,
You should be able to launch Burp Professional version 2021.10.2, using Java 17, by executing the following command:
java -jar --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.desktop/javax.swing=ALL-UNNAMED burpsuite_pro_v2021.10.2.jar
If you want to keep the parameter to limit Burp's heap size to 4GB then you would need to execute the following command:
java -jar -Xmx4g --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.desktop/javax.swing=ALL-UNNAMED burpsuite_pro_v2021.10.2.jar
如果你仍无法理解或复现某些操作,请参见下面这个报错截图内容并自行处理该问题。