Skip to content

Instantly share code, notes, and snippets.

@modeco80
Created March 21, 2023 01:29
Show Gist options
  • Save modeco80/d0de3acf34ea151b045da29b7459cfeb to your computer and use it in GitHub Desktop.
Save modeco80/d0de3acf34ea151b045da29b7459cfeb to your computer and use it in GitHub Desktop.
Ghidra Server without YAJSW (systemd)
#/etc/conf.d/ghidra
# Paths to Java and Ghidra
JAVA=/usr/lib/jvm/java-17-openjdk/bin/java
GHIDRA_HOME=/opt/ghidra
CLASSPATH_FRAG="/opt/ghidra/Ghidra/Features/GhidraServer/Data/classpath.frag"
# :( Update from $CLASSPATH_FRAG if need be
# also: this is stupid that I have to do it like this lol but oh well, systemd wants
# to play the apple game and Think Different. yeah, think different by sucking asshole.
# just like apple
CLASSPATH1="/opt/ghidra/Ghidra/Features/GhidraServer/lib/GhidraServer.jar"
CLASSPATH2="/opt/ghidra/Ghidra/Framework/FileSystem/lib/FileSystem.jar"
CLASSPATH3="/opt/ghidra/Ghidra/Framework/DB/lib/DB.jar"
CLASSPATH4="/opt/ghidra/Ghidra/Framework/Docking/lib/Docking.jar"
CLASSPATH5="/opt/ghidra/Ghidra/Framework/Generic/lib/Generic.jar"
CLASSPATH6="/opt/ghidra/Ghidra/Framework/FileSystem/lib/ganymed-ssh2-262.jar"
CLASSPATH7="/opt/ghidra/Ghidra/Framework/Utility/lib/Utility.jar"
CLASSPATH8="/opt/ghidra/Ghidra/Framework/Generic/lib/cglib-nodep-2.2.jar"
CLASSPATH9="/opt/ghidra/Ghidra/Framework/Generic/lib/guava-19.0.jar"
CLASSPATH10="/opt/ghidra/Ghidra/Framework/Generic/lib/jdom-legacy-1.1.3.jar"
CLASSPATH11="/opt/ghidra/Ghidra/Framework/Generic/lib/log4j-core-2.17.1.jar"
CLASSPATH12="/opt/ghidra/Ghidra/Framework/Generic/lib/log4j-api-2.17.1.jar"
CLASSPATH13="/opt/ghidra/Ghidra/Framework/Generic/lib/commons-collections4-4.1.jar"
CLASSPATH14="/opt/ghidra/Ghidra/Framework/Generic/lib/commons-lang3-3.12.0.jar"
CLASSPATH15="/opt/ghidra/Ghidra/Framework/Generic/lib/commons-text-1.10.0.jar"
CLASSPATH16="/opt/ghidra/Ghidra/Framework/Generic/lib/commons-io-2.11.0.jar"
CLASSPATH17="/opt/ghidra/Ghidra/Framework/Generic/lib/gson-2.9.0.jar"
CLASSPATH18="/opt/ghidra/Ghidra/Framework/Generic/lib/bcpkix-jdk15on-1.69.jar"
CLASSPATH19="/opt/ghidra/Ghidra/Framework/Generic/lib/bcprov-jdk15on-1.69.jar"
CLASSPATH20="/opt/ghidra/Ghidra/Framework/Generic/lib/bcutil-jdk15on-1.69.jar"
CLASSPATH21="/opt/ghidra/Ghidra/Framework/Docking/lib/timingframework-1.0.jar"
CLASSPATH22="/opt/ghidra/Ghidra/Framework/Docking/lib/javahelp-2.0.05.jar"
# these are extra Java arguments that can be provided
EXTRA_JAVA_ARGS="-Xms2G -Xmx8G -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+ParallelRefProcEnabled -XX:+PerfDisableSharedMem -XX:+UseCompressedOops -XX:-UsePerfData -XX:MaxGCPauseMillis=5 -XX:ParallelGCThreads=8 -XX:ConcGCThreads=8 -XX:ReservedCodeCacheSize=2048m -XX:+UseCodeCacheFlushing -XX:+UseShenandoahGC -Dlog4j.configurationFile=file:/srv/ghidra/log4jconfig/generic.log4j.xml"
# These are arguments to the Ghidra server itself.
GHIDRA_ARGS="-a0 -i 23.148.232.34 -anonymous /srv/ghidra/repositories"
[Unit]
Description=Ghidra Server
After=network.target
Wants=network.target
[Service]
Type=simple
User=ghidra
ProtectHome=yes
ProtectSystem=strict
ProtectHostname=yes
ProtectControlGroups=yes
ProtectKernelModules=yes
ProtectKernelLogs=yes
ProtectKernelTunables=yes
LockPersonality=yes
DevicePolicy=closed
#MountAPIVFS=yes
PrivateDevices=yes
PrivateTmp=yes
ReadWritePaths=/opt/ghidra /srv/ghidra
EnvironmentFile=/etc/conf.d/ghidra
# this is a certified mess. Thanks lennart :)
ExecStart=bash -c "${JAVA} -cp ${CLASSPATH1}:${CLASSPATH2}:${CLASSPATH3}:${CLASSPATH4}:${CLASSPATH5}:${CLASSPATH6}:${CLASSPATH7}:${CLASSPATH8}:${CLASSPATH9}:${CLASSPATH10}:${CLASSPATH11}:${CLASSPATH12}:${CLASSPATH13}:${CLASSPATH14}:${CLASSPATH15}:${CLASSPATH16}:${CLASSPATH17}:${CLASSPATH18}:${CLASSPATH19}:${CLASSPATH20}:${CLASSPATH21}:${CLASSPATH22} -Djava=${JAVA} -Dghidra_home=${GHIDRA_HOME} -Dclasspath_frag=${GHIDRA_HOME}/Ghidra/Features/GhidraServer/data/classpath.frag -Dos_dir=${GHIDRA_HOME}/Ghidra/Features/GhidraServer/os/linux64 ${EXTRA_JAVA_ARGS} ghidra.server.remote.GhidraServer ${GHIDRA_ARGS}"
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment