mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-09-19 16:40:38 -09:00
Merge remote-tracking branch 'origin/GP-6840_d-millar_remote_dbgeng_from_linux--SQUASHED'
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
105
Ghidra/Debug/Debugger-agent-dbgeng/data/debugger-launchers/ssh-dbgeng-attach.sh
Executable file
105
Ghidra/Debug/Debugger-agent-dbgeng/data/debugger-launchers/ssh-dbgeng-attach.sh
Executable file
@@ -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 <html><body width="300px">
|
||||
#@desc <h3>Launch with <tt>dbgeng</tt> via <tt>ssh</tt></h3>
|
||||
#@desc <p>
|
||||
#@desc This will start <tt>dbgeng</tt> on the remote system via a Python interpreter.
|
||||
#@desc For setup instructions, press <b>F1</b>.
|
||||
#@desc </p>
|
||||
#@desc </body></html>
|
||||
#@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" "<SELF>"
|
||||
|
||||
echo "Installing Wheels into Python"
|
||||
do-installation
|
||||
fi
|
||||
@@ -42,6 +42,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)
|
||||
}
|
||||
|
||||
105
Ghidra/Debug/Debugger-agent-dbgeng/data/debugger-launchers/ssh-dbgeng.sh
Executable file
105
Ghidra/Debug/Debugger-agent-dbgeng/data/debugger-launchers/ssh-dbgeng.sh
Executable file
@@ -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 via ssh (shell)
|
||||
#@image-opt arg:1
|
||||
#@desc <html><body width="300px">
|
||||
#@desc <h3>Launch with <tt>dbgeng</tt> via <tt>ssh</tt></h3>
|
||||
#@desc <p>
|
||||
#@desc This will start <tt>dbgeng</tt> on the remote system via a Python interpreter.
|
||||
#@desc For setup instructions, press <b>F1</b>.
|
||||
#@desc </p>
|
||||
#@desc </body></html>
|
||||
#@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" "<SELF>"
|
||||
|
||||
echo "Installing Wheels into Python"
|
||||
do-installation
|
||||
fi
|
||||
@@ -0,0 +1,24 @@
|
||||
## ###
|
||||
# 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.
|
||||
##
|
||||
. $MODULE_Debugger_rmi_trace_HOME/data/support/setuputils.sh
|
||||
|
||||
compute-dbg-pipinstall-args() {
|
||||
local argvpart
|
||||
printf -v argvpart ", %s" "$@"
|
||||
pipargs=("$OPT_PYTHON_EXE")
|
||||
pipargs+=(-c)
|
||||
pipargs+=("import os, sys, runpy; sys.argv=['pip', 'install', '--force-reinstall'$argvpart]; os.environ['PIP_BREAK_SYSTEM_PACKAGE']='1'; runpy.run_module('pip', run_name='__main__')")
|
||||
}
|
||||
@@ -51,7 +51,11 @@ def append_paths():
|
||||
|
||||
|
||||
def main():
|
||||
global cxn, target, args
|
||||
append_paths()
|
||||
if not parse_parameters():
|
||||
return
|
||||
|
||||
# Delay these imports until sys.path is patched
|
||||
try:
|
||||
import ghidradbg
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
106
Ghidra/Debug/Debugger-agent-x64dbg/data/debugger-launchers/ssh-x64dbg-attach.sh
Executable file
106
Ghidra/Debug/Debugger-agent-x64dbg/data/debugger-launchers/ssh-x64dbg-attach.sh
Executable file
@@ -0,0 +1,106 @@
|
||||
#!/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 x64dbg attach via ssh (shell)
|
||||
#@image-opt arg:1
|
||||
#@desc <html><body width="300px">
|
||||
#@desc <h3>Launch with <tt>x64dbg</tt> via <tt>ssh</tt></h3>
|
||||
#@desc <p>
|
||||
#@desc This will start <tt>x64dbg</tt> on the remote system via a Python interpreter.
|
||||
#@desc For setup instructions, press <b>F1</b>.
|
||||
#@desc </p>
|
||||
#@desc </body></html>
|
||||
#@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" "<SELF>"
|
||||
|
||||
echo "Installing Wheels into python"
|
||||
do-installation
|
||||
fi
|
||||
@@ -43,6 +43,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)
|
||||
}
|
||||
|
||||
107
Ghidra/Debug/Debugger-agent-x64dbg/data/debugger-launchers/ssh-x64dbg.sh
Executable file
107
Ghidra/Debug/Debugger-agent-x64dbg/data/debugger-launchers/ssh-x64dbg.sh
Executable file
@@ -0,0 +1,107 @@
|
||||
#!/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 x64dbg via ssh (shell)
|
||||
#@image-opt arg:1
|
||||
#@desc <html><body width="300px">
|
||||
#@desc <h3>Launch with <tt>x64dbg</tt> via <tt>ssh</tt></h3>
|
||||
#@desc <p>
|
||||
#@desc This will start <tt>x64dbg</tt> on the remote system via a Python interpreter.
|
||||
#@desc For setup instructions, press <b>F1</b>.
|
||||
#@desc </p>
|
||||
#@desc </body></html>
|
||||
#@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" "<SELF>"
|
||||
|
||||
echo "Installing Wheels into python"
|
||||
do-installation
|
||||
fi
|
||||
@@ -47,13 +47,16 @@ def append_paths():
|
||||
|
||||
|
||||
def main():
|
||||
global cxn, target, args, initdir
|
||||
append_paths()
|
||||
if not parse_parameters():
|
||||
return
|
||||
|
||||
# Delay these imports until sys.path is patched
|
||||
try:
|
||||
import ghidraxdbg
|
||||
except:
|
||||
print(e)
|
||||
exit(253)
|
||||
exit(253)
|
||||
from ghidraxdbg import commands as cmd
|
||||
from ghidraxdbg.hooks import on_state_changed
|
||||
from ghidraxdbg.util import dbg
|
||||
|
||||
@@ -66,7 +66,6 @@ def main():
|
||||
try:
|
||||
import ghidraxdbg
|
||||
except Exception as e:
|
||||
print(e)
|
||||
exit(253)
|
||||
from ghidraxdbg import commands as cmd
|
||||
from ghidraxdbg.hooks import on_state_changed
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
## ###
|
||||
# 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.
|
||||
##
|
||||
. $MODULE_Debugger_rmi_trace_HOME/data/support/setuputils.sh
|
||||
|
||||
compute-x64dbg-pipinstall-args() {
|
||||
local argvpart
|
||||
printf -v argvpart ", %s" "$@"
|
||||
pipargs=("$OPT_PYTHON_EXE")
|
||||
pipargs+=(-c)
|
||||
pipargs+=("import os, sys, runpy; sys.argv=['pip', 'install', '--force-reinstall'$argvpart]; os.environ['PIP_BREAK_SYSTEM_PACKAGE']='1'; runpy.run_module('pip', run_name='__main__')")
|
||||
}
|
||||
@@ -90,7 +90,9 @@ compute-ssh-args() {
|
||||
printf -v qargs '%q ' "$@"
|
||||
|
||||
sshargs+=("$OPT_SSH_PATH")
|
||||
sshargs+=(-t)
|
||||
if [ -n "$OPT_OS_WINDOWS" ]; then
|
||||
sshargs+=(-t)
|
||||
fi
|
||||
if [ "$forward" == "true" ]; then
|
||||
sshargs+=("-R$OPT_REMOTE_PORT:$GHIDRA_TRACE_RMI_ADDR")
|
||||
fi
|
||||
@@ -105,6 +107,14 @@ compute-ssh-args() {
|
||||
fi
|
||||
}
|
||||
|
||||
compute-scp-args() {
|
||||
tmpfile=$1
|
||||
|
||||
scpargs+=$(echo $OPT_SSH_PATH | sed 's/ssh/scp/g')
|
||||
scpargs+=("$tmpfile")
|
||||
scpargs+=("$OPT_HOST:~/")
|
||||
}
|
||||
|
||||
check-result-and-prompt-mitigation() {
|
||||
exitcode=$1
|
||||
msg=$2
|
||||
|
||||
Reference in New Issue
Block a user