diff --git a/Ghidra/Debug/Debugger-agent-dbgeng/data/debugger-launchers/local-dbgeng.ps1 b/Ghidra/Debug/Debugger-agent-dbgeng/data/debugger-launchers/local-dbgeng.ps1 index df1110b240..c06d0bc0f5 100644 --- a/Ghidra/Debug/Debugger-agent-dbgeng/data/debugger-launchers/local-dbgeng.ps1 +++ b/Ghidra/Debug/Debugger-agent-dbgeng/data/debugger-launchers/local-dbgeng.ps1 @@ -39,6 +39,7 @@ function Compute-Python-Args { param($TempFile) $arglist = @("$Env:OPT_PYTHON_EXE") + $arglist+=@("-i") if ("$Env:OPT_PYTHON_ARGS" -ne "") { $arglist+=($Env:OPT_PYTHON_ARGS) } diff --git a/Ghidra/Debug/Debugger-agent-dbgeng/data/debugger-launchers/ssh-dbgeng-attach.ps1 b/Ghidra/Debug/Debugger-agent-dbgeng/data/debugger-launchers/ssh-dbgeng-attach.ps1 index 849d353aed..8f16c6aa0a 100644 --- a/Ghidra/Debug/Debugger-agent-dbgeng/data/debugger-launchers/ssh-dbgeng-attach.ps1 +++ b/Ghidra/Debug/Debugger-agent-dbgeng/data/debugger-launchers/ssh-dbgeng-attach.ps1 @@ -41,6 +41,7 @@ function Compute-Python-Args { param($TempFile) $arglist = @("$Env:OPT_PYTHON_EXE") + $arglist+=@("-i") if ("$Env:OPT_PYTHON_ARGS" -ne "") { $arglist+=($Env:OPT_PYTHON_ARGS) } diff --git a/Ghidra/Debug/Debugger-agent-dbgeng/data/debugger-launchers/ssh-dbgeng-attach.sh b/Ghidra/Debug/Debugger-agent-dbgeng/data/debugger-launchers/ssh-dbgeng-attach.sh new file mode 100755 index 0000000000..245bc51e58 --- /dev/null +++ b/Ghidra/Debug/Debugger-agent-dbgeng/data/debugger-launchers/ssh-dbgeng-attach.sh @@ -0,0 +1,105 @@ +#!/usr/bin/env bash +## ### +# IP: GHIDRA +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +## +#@title dbgeng attach via ssh (shell) +#@image-opt arg:1 +#@desc
+#@desc+#@desc This will start dbgeng on the remote system via a Python interpreter. +#@desc For setup instructions, press F1. +#@desc
+#@desc +#@menu-group dbgeng +#@icon icon.debugger +#@help dbgeng#ssh +#@depends Debugger-rmi-trace +#@env OPT_TARGET_PID:int=0 "Process id" "The target process id" +#@env OPT_ATTACH_FLAGS:int=0 "Attach flags" "Attach flags" +#@env OPT_SSH_PATH:file="ssh" "ssh command" "The path to ssh on the local system. Omit the full path to resolve using the system PATH." +#@env OPT_HOST:str="localhost" "[User@]Host" "The hostname or user@host" +#@env OPT_REMOTE_PORT:int=12345 "Remote Trace RMI Port" "A free port on the remote end to receive and forward the Trace RMI connection." +#@env OPT_EXTRA_SSH_ARGS:str="" "Extra ssh arguments" "Extra arguments to pass to ssh. Use with care." +#@env OPT_PYTHON_EXE:file!="python" "Python command" "The path to the Python 3 interpreter. Omit the full path to resolve using the system PATH." +#@env OPT_PYTHON_ARGS:str="" "python cmd args" "Arguments passed to python (versus the target)" +#@env OPT_USE_DBGMODEL:bool=true "Use dbgmodel" "Load and use dbgmodel.dll if it is available." + +. ../support/dbgsetuputils.sh + +target_image=$(echo $OPT_TARGET_IMG | sed 's/\\/\\\\/g') + +OPT_OS_WINDOWS=true + +function launch-dbg-scp() { + local -a scpargs + compute-scp-args "../support/local-dbgeng-attach.py" + + "${scpargs[@]}" +} + +function launch-dbg-ssh() { + local -a sshargs + compute-ssh-args true "$OPT_PYTHON_EXE -i $OPT_PYTHON_ARGS .\\local-dbgeng-attach.py localhost:$OPT_REMOTE_PORT $OPT_USE_DBGMODEL $OPT_TARGET_PID $OPT_ATTACH_FLAGS" + + "${sshargs[@]}" +} + +version=$(get-ghidra-version) + +function do-installation() { + local -a pipargs + compute-dbg-pipinstall-args "'-f'" "os.environ['HOME']" "'ghidradbg>=$version'" + local -a sshargs + compute-ssh-args false "${pipargs[@]}" + + "${sshargs[@]}" +} + +launch-dbg-scp +launch-dbg-ssh "$@" +if check-result-and-prompt-mitigation $? " +It appears ghidradbg is missing from the remote system. This can happen if you +forgot to install the required package. This can also happen if you installed +the packages to a different Python environment than is being used by the +remote's dbgeng. + +This script is about to offer automatic resolution. If you'd like to resolve +this manually, answer no to the next question and then see Ghidra's help by +pressing F1 in the dialog of launch parameters. + +WARNING: Answering yes to the next question will invoke pip to try to install +missing or incorrectly-versioned dependencies. It may attempt to find packages +from the PyPI mirror configured on the REMOTE system. If you have not configured +one, it will connect to the official one. + +WARNING: We invoke pip with the --break-system-packages flag, because some +debuggers that embed Python (gdb, lldb) may not support virtual environments, +and so the packages must be installed to your user environment. + +NOTE: This will copy Python wheels into the HOME directory of the user on the +remote system. You may be prompted to authenticate a few times while packages +are copied and installed. + +NOTE: Automatic resolution will cause this session to terminate. When it has +finished, try launching again. +" "Would you like to install 'ghidradbg>=$version'?"; then + + echo "Copying Wheels to $OPT_HOST" + mitigate-scp-pymodules "Debugger-rmi-trace" "+#@desc This will start dbgeng on the remote system via a Python interpreter. +#@desc For setup instructions, press F1. +#@desc
+#@desc +#@menu-group dbgeng +#@icon icon.debugger +#@help dbgeng#ssh +#@depends Debugger-rmi-trace +#@env OPT_TARGET_IMG:file="" "Image" "The target binary executable image" +#@env OPT_TARGET_ARGS:str="" "Arguments" "Command-line arguments to pass to the target" +#@env OPT_SSH_PATH:file="ssh" "ssh command" "The path to ssh on the local system. Omit the full path to resolve using the system PATH." +#@env OPT_HOST:str="localhost" "[User@]Host" "The hostname or user@host" +#@env OPT_REMOTE_PORT:int=12345 "Remote Trace RMI Port" "A free port on the remote end to receive and forward the Trace RMI connection." +#@env OPT_EXTRA_SSH_ARGS:str="" "Extra ssh arguments" "Extra arguments to pass to ssh. Use with care." +#@env OPT_PYTHON_EXE:file!="python" "Python command" "The path to the Python 3 interpreter. Omit the full path to resolve using the system PATH." +#@env OPT_PYTHON_ARGS:str="" "python cmd args" "Arguments passed to python (versus the target)" +#@env OPT_USE_DBGMODEL:bool=true "Use dbgmodel" "Load and use dbgmodel.dll if it is available." + +. ../support/dbgsetuputils.sh + +target_image=$(echo $OPT_TARGET_IMG | sed 's/\\/\\\\/g') + +OPT_OS_WINDOWS=true + +function launch-dbg-scp() { + local -a scpargs + compute-scp-args "../support/local-dbgeng.py" + + "${scpargs[@]}" +} + +function launch-dbg-ssh() { + local -a sshargs + compute-ssh-args true "$OPT_PYTHON_EXE -i $OPT_PYTHON_ARGS .\\local-dbgeng.py localhost:$OPT_REMOTE_PORT $OPT_USE_DBGMODEL $target_image $OPT_TARGET_ARGS" + + "${sshargs[@]}" +} + +version=$(get-ghidra-version) + +function do-installation() { + local -a pipargs + compute-dbg-pipinstall-args "'-f'" "os.environ['HOME']" "'ghidradbg>=$version'" + local -a sshargs + compute-ssh-args false "${pipargs[@]}" + + "${sshargs[@]}" +} + +launch-dbg-scp +launch-dbg-ssh "$@" +if check-result-and-prompt-mitigation $? " +It appears ghidradbg is missing from the remote system. This can happen if you +forgot to install the required package. This can also happen if you installed +the packages to a different Python environment than is being used by the +remote's dbgeng. + +This script is about to offer automatic resolution. If you'd like to resolve +this manually, answer no to the next question and then see Ghidra's help by +pressing F1 in the dialog of launch parameters. + +WARNING: Answering yes to the next question will invoke pip to try to install +missing or incorrectly-versioned dependencies. It may attempt to find packages +from the PyPI mirror configured on the REMOTE system. If you have not configured +one, it will connect to the official one. + +WARNING: We invoke pip with the --break-system-packages flag, because some +debuggers that embed Python (gdb, lldb) may not support virtual environments, +and so the packages must be installed to your user environment. + +NOTE: This will copy Python wheels into the HOME directory of the user on the +remote system. You may be prompted to authenticate a few times while packages +are copied and installed. + +NOTE: Automatic resolution will cause this session to terminate. When it has +finished, try launching again. +" "Would you like to install 'ghidradbg>=$version'?"; then + + echo "Copying Wheels to $OPT_HOST" + mitigate-scp-pymodules "Debugger-rmi-trace" "+#@desc This will start x64dbg on the remote system via a Python interpreter. +#@desc For setup instructions, press F1. +#@desc
+#@desc +#@menu-group x64dbg +#@icon icon.debugger +#@help x64dbg#ssh +#@depends Debugger-rmi-trace +#@env OPT_TARGET_PID:int=0 "Process id" "The target process id" +#@env OPT_TARGET_DIR:str="" "Dir" "Initial directory" +#@env OPT_SSH_PATH:file="ssh" "ssh command" "The path to ssh on the local system. Omit the full path to resolve using the system PATH." +#@env OPT_HOST:str="localhost" "[User@]Host" "The hostname or user@host" +#@env OPT_REMOTE_PORT:int=12345 "Remote Trace RMI Port" "A free port on the remote end to receive and forward the Trace RMI connection." +#@env OPT_EXTRA_SSH_ARGS:str="" "Extra ssh arguments" "Extra arguments to pass to ssh. Use with care." +#@env OPT_X64DBG_EXE:file="C:\\Software\\release\\x64\\x64dbg.exe" "Path to x64dbg.exe" "Path to x64dbg.exe (or equivalent)." +#@env OPT_PYTHON_EXE:file!="python" "Python command" "The path to the Python 3 interpreter. Omit the full path to resolve using the system PATH." +#@env OPT_PYTHON_ARGS:str="" "python cmd args" "Arguments passed to python (versus the target)" + +. ../support/x64dbgsetuputils.sh + +target_image=$(echo $OPT_TARGET_IMG | sed 's/\\/\\\\/g') +x64dbg_exe=$(echo $OPT_X64DBG_EXE | sed 's/\\/\\\\/g') + +OPT_OS_WINDOWS=true + +function launch-x64dbg-scp() { + local -a scpargs + compute-scp-args "../support/local-x64dbg-attach.py" + + "${scpargs[@]}" +} + +function launch-x64dbg-ssh() { + local -a sshargs + compute-ssh-args true "$OPT_PYTHON_EXE -i $OPT_PYTHON_ARGS .\\local-x64dbg-attach.py localhost:$OPT_REMOTE_PORT $OPT_TARGET_PID $x64dbg_exe" + + "${sshargs[@]}" +} + +version=$(get-ghidra-version) + +function do-installation() { + local -a pipargs + compute-dbg-pipinstall-args "'-f'" "os.environ['HOME']" "'ghidraxdbg>=$version'" + local -a sshargs + compute-ssh-args false "${pipargs[@]}" + + "${sshargs[@]}" +} + +launch-x64dbg-scp +launch-x64dbg-ssh "$@" +if check-result-and-prompt-mitigation $? " +It appears ghidraxdbg is missing from the remote system. This can happen if you +forgot to install the required package. This can also happen if you installed +the packages to a different Python environment than is being used by the +remote's x64dbg. + +This script is about to offer automatic resolution. If you'd like to resolve +this manually, answer no to the next question and then see Ghidra's help by +pressing F1 in the dialog of launch parameters. + +WARNING: Answering yes to the next question will invoke pip to try to install +missing or incorrectly-versioned dependencies. It may attempt to find packages +from the PyPI mirror configured on the REMOTE system. If you have not configured +one, it will connect to the official one. + +WARNING: We invoke pip with the --break-system-packages flag, because some +debuggers that embed Python (gdb, lldb) may not support virtual environments, +and so the packages must be installed to your user environment. + +NOTE: This will copy Python wheels into the HOME directory of the user on the +remote system. You may be prompted to authenticate a few times while packages +are copied and installed. + +NOTE: Automatic resolution will cause this session to terminate. When it has +finished, try launching again. +" "Would you like to install 'ghidradbg>=$version'?"; then + + echo "Copying Wheels to $OPT_HOST" + mitigate-scp-pymodules "Debugger-rmi-trace" "+#@desc This will start x64dbg on the remote system via a Python interpreter. +#@desc For setup instructions, press F1. +#@desc
+#@desc +#@menu-group x64dbg +#@icon icon.debugger +#@help x64dbg#ssh +#@depends Debugger-rmi-trace +#@env OPT_TARGET_IMG:file="" "Image" "The target binary executable image" +#@env OPT_TARGET_ARGS:str="" "Arguments" "Command-line arguments to pass to the target" +#@env OPT_TARGET_DIR:str="" "Dir" "Initial directory" +#@env OPT_SSH_PATH:file="ssh" "ssh command" "The path to ssh on the local system. Omit the full path to resolve using the system PATH." +#@env OPT_HOST:str="localhost" "[User@]Host" "The hostname or user@host" +#@env OPT_REMOTE_PORT:int=12345 "Remote Trace RMI Port" "A free port on the remote end to receive and forward the Trace RMI connection." +#@env OPT_EXTRA_SSH_ARGS:str="" "Extra ssh arguments" "Extra arguments to pass to ssh. Use with care." +#@env OPT_X64DBG_EXE:file="C:\\Software\\release\\x64\\x64dbg.exe" "Path to x64dbg.exe" "Path to x64dbg.exe (or equivalent)." +#@env OPT_PYTHON_EXE:file!="python" "Python command" "The path to the Python 3 interpreter. Omit the full path to resolve using the system PATH." +#@env OPT_PYTHON_ARGS:str="" "python cmd args" "Arguments passed to python (versus the target)" + +. ../support/x64dbgsetuputils.sh + +target_image=$(echo $OPT_TARGET_IMG | sed 's/\\/\\\\/g') +x64dbg_exe=$(echo $OPT_X64DBG_EXE | sed 's/\\/\\\\/g') + +OPT_OS_WINDOWS=true + +function launch-x64dbg-scp() { + local -a scpargs + compute-scp-args "../support/local-x64dbg.py" + + "${scpargs[@]}" +} + +function launch-x64dbg-ssh() { + local -a sshargs + compute-ssh-args true "$OPT_PYTHON_EXE -i $OPT_PYTHON_ARGS .\\local-x64dbg.py localhost:$OPT_REMOTE_PORT $target_image $x64dbg_exe $OPT_TARGET_DIR $OPT_TARGET_ARGS" + + "${sshargs[@]}" +} + +version=$(get-ghidra-version) + +function do-installation() { + local -a pipargs + compute-x64dbg-pipinstall-args "'-f'" "os.environ['HOME']" "'ghidradbg>=$version'" + local -a sshargs + compute-ssh-args false "${pipargs[@]}" + + "${sshargs[@]}" +} + +launch-x64dbg-scp +launch-x64dbg-ssh "$@" +if check-result-and-prompt-mitigation $? " +It appears ghidraxdbg is missing from the remote system. This can happen if you +forgot to install the required package. This can also happen if you installed +the packages to a different Python environment than is being used by the +remote's x64dbg. + +This script is about to offer automatic resolution. If you'd like to resolve +this manually, answer no to the next question and then see Ghidra's help by +pressing F1 in the dialog of launch parameters. + +WARNING: Answering yes to the next question will invoke pip to try to install +missing or incorrectly-versioned dependencies. It may attempt to find packages +from the PyPI mirror configured on the REMOTE system. If you have not configured +one, it will connect to the official one. + +WARNING: We invoke pip with the --break-system-packages flag, because some +debuggers that embed Python (gdb, lldb) may not support virtual environments, +and so the packages must be installed to your user environment. + +NOTE: This will copy Python wheels into the HOME directory of the user on the +remote system. You may be prompted to authenticate a few times while packages +are copied and installed. + +NOTE: Automatic resolution will cause this session to terminate. When it has +finished, try launching again. +" "Would you like to install 'ghidradbg>=$version'?"; then + + echo "Copying Wheels to $OPT_HOST" + mitigate-scp-pymodules "Debugger-rmi-trace" "