CLI Mode

ℹ️

If you do not know what a Command Line Interface is, you may want to look at the GUI Mode Guide instead.

CLIs are for power-users that either like to only use their keyboard or want to automate attacks. SoulFire has those types of advanced users covered with its powerful CLI. While the CLI does support many common uses, the GUI has more features. To get to know what you can and can’t do, read this page.

CLI mode automatically starts if no display to show the GUI is available. CLI mode is also started if CLI flags are passed to the java command. You can force CLI mode by telling AWT that no display is available by setting the java.awt.headless property to true. The commands on this page use this property to force CLI mode.

Setting up your connection

SoulFires CLI is part of the client distribution. So to run a CLI, you need to have the following: Make sure your machine is using Java 21. Next you can download the latest client .jar binary from the download page

The base command is this:

java -Djava.awt.headless=true -Xmx$RAM -XX:+EnableDynamicAgentLoading -XX:+UnlockExperimentalVMOptions -XX:+UseZGC -XX:+ZGenerational -XX:+AlwaysActAsServerClassMachine -XX:+UseNUMA -XX:+UseFastUnorderedTimeStamps -XX:+UseVectorCmov -XX:+UseCriticalJavaThreadPriority -Dsf.flags.v1=true -jar SoulFireClient.jar

Make sure to replace $RAM with the amount of ram you want to allocate to the CLI instance. If you omit the entire -Xmx$RAM part, the CLI will use 25% of your total ram. If your machine has 128GB of RAM and you want SF to use 120GB, you can use -Xmx120G. If you connect to a remote server, the RAM on your machine does not matter, and you can use -Xmx1G if you want.

Now you need to decide, are we running the attack locally on your machine, or are we using a remote dedicated server for the attack?

If locally, skip to the next section, if not, you need to configure how the CLI connects to the remote server. For that, configure the JVM properties:

PropertyDescription
sf.remoteAddressThe address to connect to
sf.remoteTokenThe token to login with

You can add these as JVM properties before the -jar like so:

java -Dsf.remoteAddress=domain.com -Dsf.remoteToken=abcdefg -Djava.awt.headless=true -Xmx$RAM -XX:+EnableDynamicAgentLoading -XX:+UnlockExperimentalVMOptions -XX:+UseZGC -XX:+ZGenerational -XX:+AlwaysActAsServerClassMachine -XX:+UseNUMA -XX:+UseFastUnorderedTimeStamps -XX:+UseVectorCmov -XX:+UseCriticalJavaThreadPriority -Dsf.flags.v1=true -jar SoulFireClient.jar

CLI flags

After connecting, the CLI gets all info from either the integrated or remote server and allows you to use CLI flags. For a full list, visit the CLI flags page

Here is an example of how to use them:

java -Xmx$RAM -XX:+EnableDynamicAgentLoading -XX:+UnlockExperimentalVMOptions -XX:+UseZGC -XX:+ZGenerational -XX:+AlwaysActAsServerClassMachine -XX:+UseNUMA -XX:+UseFastUnorderedTimeStamps -XX:+UseVectorCmov -XX:+UseCriticalJavaThreadPriority -Dsf.flags.v1=true -jar SoulFireClient.jar --address 127.0.0.1:25565 --amount 100 --protocol-version 1.20 --join-min-delay 1000 --join-max-delay 3000

Make sure to replace $RAM with the amount of ram you want to allocate to the CLI instance. The command above will connect to a local server on port 25565 and start 100 clients with a delay between 1 and 3 seconds.

Terminal flags

Additionally, you can explicitly enable/disable having an interactive CLI in the terminal where you can run SoulFire commands by setting -Dterminal.jline=false or -Dterminal.jline=true. JLine is the library that allows for interactive CLI in the terminal, it’s the same library Minecraft, Velocity and other applications use. You can also turn terminal colors explicitly on and off using -Dterminal.ansi=false or -Dterminal.ansi=true.

Importing data

You can import profiles, accounts, and proxies using their CLI flags. Importing accounts requires that you provide an account type. For proxies, the proxy type is not required, if no proxy type if provided for the proxy file, it’ll assume it’s a universal file.

Executing commands

You get a shell just like with a Minecraft server that allows you to run commands. Those are the same commands you get in GUI Mode. If you want to know more about commands, visit the GUI Mode Commands Info