GP-1057: Preventing Ghidra from launching when path contains !. Also

updating Installation Guide's "Known Issues" section.
This commit is contained in:
Ryan Kurtz 2021-06-17 14:43:18 -04:00
parent 11149b9ef2
commit 38edc05f81
10 changed files with 73 additions and 39 deletions

View file

@ -64,6 +64,12 @@ SERVICE_NAME=org.rzo.yajsw.$APP_NAME
SCRIPT_FILE="$(readlink -f "$0" 2>/dev/null || readlink "$0" 2>/dev/null || echo "$0")" SCRIPT_FILE="$(readlink -f "$0" 2>/dev/null || readlink "$0" 2>/dev/null || echo "$0")"
SCRIPT_DIR="${SCRIPT_FILE%/*}" SCRIPT_DIR="${SCRIPT_FILE%/*}"
# Ensure Ghidra path doesn't contain illegal characters
if [[ "$SCRIPT_DIR" = *"!"* ]]; then
echo "Ghidra path cannot contain a \"!\" character."
exit 1
fi
# YAJSW likes absolute paths # YAJSW likes absolute paths
cd "${SCRIPT_DIR}" cd "${SCRIPT_DIR}"
SCRIPT_DIR="$(pwd)" SCRIPT_DIR="$(pwd)"

View file

@ -86,7 +86,15 @@ if [[ ${INDEX} -lt 5 ]]; then
exit 1 exit 1
fi fi
# Sets SUPPORT_DIR to the directory that contains this file (launch.sh)
SUPPORT_DIR="${0%/*}" SUPPORT_DIR="${0%/*}"
# Ensure Ghidra path doesn't contain illegal characters
if [[ "$SUPPORT_DIR" = *"!"* ]]; then
echo "Ghidra path cannot contain a \"!\" character."
exit 1
fi
if [ -f "${SUPPORT_DIR}/launch.properties" ]; then if [ -f "${SUPPORT_DIR}/launch.properties" ]; then
# Production Environment # Production Environment

View file

@ -13,6 +13,22 @@ rem below:
rem set "JAVA_HOME=" rem set "JAVA_HOME="
:: Sets SERVER_DIR to the directory that contains this file (ghidraSvr.bat).
:: SERVER_DIR will not contain a trailing slash.
::
:: '% ~' dereferences the value in param 0
:: 'd' - drive
:: 'p' - path (without filename)
:: '~0,-1' - removes trailing \
set "SERVER_DIR=%~dp0"
set "SERVER_DIR=%SERVER_DIR:~0,-1%"
rem Ensure Ghidra path doesn't contain illegal characters
if not %SERVER_DIR:!=%==%SERVER_DIR% (
echo Ghidra path cannot contain a "!" character.
exit /B 1
)
setlocal enabledelayedexpansion setlocal enabledelayedexpansion
set OPTION=%1 set OPTION=%1
@ -48,10 +64,6 @@ if "%IS_ADMIN%"=="NO" (
if "%OPTION%"=="restart" goto adminFail if "%OPTION%"=="restart" goto adminFail
) )
rem Find the script directory
rem %~dsp0 is location of current script under NT
set "_REALPATH=%~dp0"
set APP_NAME=ghidraSvr set APP_NAME=ghidraSvr
set APP_LONG_NAME=Ghidra Server set APP_LONG_NAME=Ghidra Server
@ -59,13 +71,13 @@ set MODULE_DIR=Ghidra\Features\GhidraServer
set WRAPPER_NAME_PREFIX=yajsw set WRAPPER_NAME_PREFIX=yajsw
if exist "%_REALPATH%..\Ghidra\" goto normal if exist "%SERVER_DIR%\..\Ghidra\" goto normal
rem NOTE: If adjusting JAVA command assignment - do not attempt to add parameters (e.g., -d64, -version:1.7, etc.) rem NOTE: If adjusting JAVA command assignment - do not attempt to add parameters (e.g., -d64, -version:1.7, etc.)
rem Development Environment rem Development Environment
set "GHIDRA_HOME=%_REALPATH%..\..\..\.." set "GHIDRA_HOME=%SERVER_DIR%\..\..\..\.."
set "WRAPPER_CONF=%_REALPATH%..\..\Common\server\server.conf" set "WRAPPER_CONF=%SERVER_DIR%\..\..\Common\server\server.conf"
set "DATA_DIR=%GHIDRA_HOME%\%MODULE_DIR%\build\data" set "DATA_DIR=%GHIDRA_HOME%\%MODULE_DIR%\build\data"
set "CLASSPATH_FRAG=%GHIDRA_HOME%\%MODULE_DIR%\build\dev-meta\classpath.frag" set "CLASSPATH_FRAG=%GHIDRA_HOME%\%MODULE_DIR%\build\dev-meta\classpath.frag"
set "LS_CPATH=%GHIDRA_HOME%\GhidraBuild\LaunchSupport\bin\main" set "LS_CPATH=%GHIDRA_HOME%\GhidraBuild\LaunchSupport\bin\main"
@ -73,8 +85,8 @@ set "LS_CPATH=%GHIDRA_HOME%\GhidraBuild\LaunchSupport\bin\main"
goto lab1 goto lab1
:normal :normal
set "GHIDRA_HOME=%_REALPATH%.." set "GHIDRA_HOME=%SERVER_DIR%\.."
set "WRAPPER_CONF=%_REALPATH%server.conf" set "WRAPPER_CONF=%SERVER_DIR%\server.conf"
set "DATA_DIR=%GHIDRA_HOME%\%MODULE_DIR%\data" set "DATA_DIR=%GHIDRA_HOME%\%MODULE_DIR%\data"
set "CLASSPATH_FRAG=%GHIDRA_HOME%\%MODULE_DIR%\data\classpath.frag" set "CLASSPATH_FRAG=%GHIDRA_HOME%\%MODULE_DIR%\data\classpath.frag"
set "LS_CPATH=%GHIDRA_HOME%\support\LaunchSupport.jar" set "LS_CPATH=%GHIDRA_HOME%\support\LaunchSupport.jar"

View file

@ -1,10 +1,6 @@
@echo off @echo off
setlocal setlocal
rem Find the script directory call "%~dp0ghidraSvr" install
rem %~dsp0 is location of current script under NT
set "_REALPATH=%~dp0"
call "%_REALPATH%\ghidraSvr" install
pause pause

View file

@ -1,11 +1,7 @@
@echo off @echo off
setlocal setlocal
rem Find the script directory call "%~dp0ghidraSvr" uninstall
rem %~dsp0 is location of current script under NT
set "_REALPATH=%~dp0"
call "%_REALPATH%\ghidraSvr" uninstall
pause pause

View file

@ -1,8 +1,7 @@
:: Ghidra Headless Analyzer launch (see analyzeHeadlessREADME.html) :: Ghidra Headless Analyzer launch (see analyzeHeadlessREADME.html)
@echo off @echo off
setlocal
setlocal EnableDelayedExpansion
:: Maximum heap memory size. For headless, it is recommended to not use the default value :: Maximum heap memory size. For headless, it is recommended to not use the default value
:: because garbage collection could take too long on systems with a large amount of physical :: because garbage collection could take too long on systems with a large amount of physical
@ -23,9 +22,6 @@ set DEBUG_ADDRESS=127.0.0.1:13002
set VMARG_LIST=-XX:ParallelGCThreads=2 set VMARG_LIST=-XX:ParallelGCThreads=2
set VMARG_LIST=%VMARG_LIST% -XX:CICompilerCount=2 set VMARG_LIST=%VMARG_LIST% -XX:CICompilerCount=2
:: store current path
set "filepath=%~dp0"
:: Loop through parameters (if there aren't any, just continue) and store :: Loop through parameters (if there aren't any, just continue) and store
:: in params variable. :: in params variable.
@ -36,6 +32,7 @@ if "%~1" == "" goto cont
:: If -import is found and Windows has not done proper wildcard expansion, force :: If -import is found and Windows has not done proper wildcard expansion, force
:: this to happen and save expansion to params variable. :: this to happen and save expansion to params variable.
setlocal EnableDelayedExpansion
if "%~1" == "-import" ( if "%~1" == "-import" (
set params=!params! -import set params=!params! -import
for %%f in ("%~2") DO ( for %%f in ("%~2") DO (
@ -45,10 +42,11 @@ if "%~1" == "-import" (
) else ( ) else (
set params=!params! "%~1" set params=!params! "%~1"
) )
setlocal DisableDelayedExpansion
shift shift
goto Loop goto Loop
:cont :cont
call "%filepath%launch.bat" %LAUNCH_MODE% Ghidra-Headless "%MAXMEM%" "%VMARG_LIST%" ghidra.app.util.headless.AnalyzeHeadless %params% call "%~dp0launch.bat" %LAUNCH_MODE% Ghidra-Headless "%MAXMEM%" "%VMARG_LIST%" ghidra.app.util.headless.AnalyzeHeadless %params%

View file

@ -7,10 +7,17 @@ setlocal
:: fg, debug, debug-suspend :: fg, debug, debug-suspend
set LAUNCH_MODE=fg set LAUNCH_MODE=fg
:: Sets SCRIPT_DIR to the directory that contains this file (ends with '\') :: Sets SUPPORT_DIR to the directory that contains this file (buildGhidraJar.bat).
set "SCRIPT_DIR=%~dp0" :: SUPPORT_DIR will not contain a trailing slash.
::
:: '% ~' dereferences the value in param 0
:: 'd' - drive
:: 'p' - path (without filename)
:: '~0,-1' - removes trailing \
set "SUPPORT_DIR=%~dp0"
set "SUPPORT_DIR=%SUPPORT_DIR:~0,-1%"
set "GHIDRA_ROOT_DIR=%SCRIPT_DIR%..\Ghidra" set "GHIDRA_ROOT_DIR=%SUPPORT_DIR%\..\Ghidra"
if exist "%GHIDRA_ROOT_DIR%" goto continue if exist "%GHIDRA_ROOT_DIR%" goto continue
echo This script does not support development mode use echo This script does not support development mode use
@ -20,4 +27,4 @@ exit /B 1
set APP_VMARGS=-DGhidraJarBuilder.Name=%~n0 set APP_VMARGS=-DGhidraJarBuilder.Name=%~n0
call "%~dp0launch.bat" %LAUNCH_MODE% Ghidra "" "%APP_VMARGS%" ghidra.util.GhidraJarBuilder -main ghidra.JarRun %* call "%SUPPORT_DIR%\launch.bat" %LAUNCH_MODE% Ghidra "" "%APP_VMARGS%" ghidra.util.GhidraJarBuilder -main ghidra.JarRun %*

View file

@ -24,9 +24,6 @@ exit /B 1
:continue :continue
:: Delay the expansion of our loop items below since the value is being updated as the loop works
setlocal enabledelayedexpansion
:: See if we were doubled clicked or run from a command prompt :: See if we were doubled clicked or run from a command prompt
set DOUBLE_CLICKED=n set DOUBLE_CLICKED=n
for /f "tokens=2" %%# in ("%cmdcmdline%") do if /i "%%#" equ "/c" set DOUBLE_CLICKED=y for /f "tokens=2" %%# in ("%cmdcmdline%") do if /i "%%#" equ "/c" set DOUBLE_CLICKED=y
@ -40,6 +37,17 @@ for /f "tokens=2" %%# in ("%cmdcmdline%") do if /i "%%#" equ "/c" set DOUBLE_CLI
:: '~0,-1' - removes trailing \ :: '~0,-1' - removes trailing \
set "SUPPORT_DIR=%~dp0" set "SUPPORT_DIR=%~dp0"
set "SUPPORT_DIR=%SUPPORT_DIR:~0,-1%" set "SUPPORT_DIR=%SUPPORT_DIR:~0,-1%"
:: Ensure Ghidra path doesn't contain illegal characters
if not %SUPPORT_DIR:!=%==%SUPPORT_DIR% (
echo Ghidra path cannot contain a "!" character.
set ERRORLEVEL=1
goto exit1
)
:: Delay the expansion of our loop items below since the value is being updated as the loop works
setlocal enabledelayedexpansion
:: ::
:: Parse arguments :: Parse arguments
:: ::

View file

@ -1,8 +1,7 @@
:: Ghidra python launch :: Ghidra python launch
@echo off @echo off
setlocal
setlocal EnableDelayedExpansion
:: Maximum heap memory size :: Maximum heap memory size
:: Default for Windows 32-bit is 768M and 64-bit is 1024M :: Default for Windows 32-bit is 768M and 64-bit is 1024M
@ -25,7 +24,4 @@ set DEBUG_ADDRESS=127.0.0.1:13002
set VMARG_LIST=-XX:ParallelGCThreads=2 set VMARG_LIST=-XX:ParallelGCThreads=2
set VMARG_LIST=%VMARG_LIST% -XX:CICompilerCount=2 set VMARG_LIST=%VMARG_LIST% -XX:CICompilerCount=2
:: store current path call "%~dp0launch.bat" %LAUNCH_MODE% Ghidra-Python "%MAXMEM%" "%VMARG_LIST%" ghidra.python.PythonRun %params%
set "filepath=%~dp0"
call "%filepath%launch.bat" %LAUNCH_MODE% Ghidra-Python "%MAXMEM%" "%VMARG_LIST%" ghidra.python.PythonRun %params%

View file

@ -18,7 +18,7 @@
<h1>Ghidra Installation Guide</h1> <h1>Ghidra Installation Guide</h1>
<p> <p>
The installation information provided is effective as of Ghidra 9.2 and is subject to change with The installation information provided is effective as of Ghidra 10.0.1 and is subject to change with
future releases. future releases.
</p> </p>
@ -537,6 +537,10 @@ be installed in a pre-existing Eclipse installation.</p>
new files. Future versions of Ghidra will address this in order to ensure compatibility with new files. Future versions of Ghidra will address this in order to ensure compatibility with
the newest versions of Java. the newest versions of Java.
</li> </li>
<li>
Ghidra will not launch when its path contains a "!" character. This is to avoid issues that
Java's internal libraries have parsing these paths ("!" is used as a jar-separator by Java).
</li>
</ul> </ul>
<h3><a name="WindowsIssues"></a>Windows</h3> <h3><a name="WindowsIssues"></a>Windows</h3>
<ul> <ul>
@ -544,6 +548,9 @@ be installed in a pre-existing Eclipse installation.</p>
Older versions of 7-Zip may not be able to unpack the Ghidra distribution file if it contains Older versions of 7-Zip may not be able to unpack the Ghidra distribution file if it contains
any files with a 0-byte length. Upgrade to a newer version of 7-Zip to fix this problem. any files with a 0-byte length. Upgrade to a newer version of 7-Zip to fix this problem.
</li> </li>
<li>
Ghidra will fail to launch when its path contains a "^" character.
</li>
</ul> </ul>
<h3><a name="LinuxIssues"></a>Linux</h3> <h3><a name="LinuxIssues"></a>Linux</h3>
<ul> <ul>