- Notifications
You must be signed in to change notification settings - Fork79
ioncodes/idacode
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
IDACode makes it easy to execute and debug Python scripts in your IDA environment without leaving Visual Studio Code. The VS Code extension can be found on themarketplace.
IDACode is still in a very early state and bugs are to be expected. Please open a new issue if you encounter any issues.
- Speed: Quickly create and execute scripts.
- Debugging: Attach a Python debugger at any time.
- Compatibility: IDACode does not require you to modify your scripts in a specific way. All scripts can be executed from within IDA without changes.
- Modularity: IDACode does not make extensive use of safe wrappers for thread synchronization, this allows you to import any module from any path at any given time. Instead IDACode synchronizes the script execution thread with IDAs main thread to avoid performance and unexpected issues.
- Syncing: As IDACode uses
debugpy
for communication, it syncs the output window naturally with VS Code's output panel.
IDACode has been tested on Windows and macos with IDA 8.4/9.0 and Python 3.12 (older python versions have issues with debugging).
To set up the dependencies for the IDA plugin run:
# make sure to use the correct Python version# IDACode supports the latest debugpy as of version 3.0.0, make sure to upgrade!python -m pip install --user debugpy tornado
Either clone this repository or download a release package fromhere.ida.zip
reflects the contents of theida
folder in this repository. Copy all files into IDAs plugin directory.
The next step is to configure your settings to match your environment (optional). Editidacode_utils/settings.py
accordingly:
HOST
: This is the host address. This is always127.0.0.1
unless you want it to be accessible from a remote location.Keep in mind that this plugin does not make use of authentication.PORT
: This is the port you want IDA to listen to. This is used for websocket communication between IDA and VS Code.DEBUG_PORT
: This is the port you want to listen on for incoming debug sessions.LOGGING
: Determines whether the debugger should log into files. This is especially useful when you are running into issues with IDACode. Please submit a new issue if you find anything. The files are always located in your temp directory (e.g. Windows:%TEMP%
). The files are calleddebugpy.*.log
.
You can now start the plugin by clicking onIDACode
in the plugins menu.
The VS Code extension is available on themarketplace. To configure the extension please refer to the extension'sREADME.
HitIDACode
in the plugin menu. You should be greeted with the following text:
IDACode listening on 127.0.0.1:7065
As of version 0.2.0 IDACode supports "Execute on save" which is enabled by default. VS Code will automatically execute your script in IDA as soon as you save the current document (for example with CTRL+S). This behavior can be disabled in the settings. Open the VS Code Extension Development Console using Ctrl-Shift-P and enter "idacode" to see the list of commands below. Don't use the "Run" or "Debug" Functionality of VS Code, as you will get an "HTTP misformed" message in IDA instead.
There are 4 commands at your disposal:
Once you have a folder open that you want to put your scripts in (youmust specify the folder when VS Code asks you to!) you are ready to connect to IDA. You can do so by either executingConnect to IDA
orConnect and attach a debugger to IDA
. Please keep in mind that a debug session is permanent until you restart IDA. You can not change the workspace folder once the debugger has started.
Ensure that the workspace folder is the folder that your main scripts are located in.
Once you are connected you are able to selectExecute script in IDA
.
IDACode uses VS Code's remote debugger to connect to IDA. All VS Code features are supported. However, you have to specify the scripts entrypoint by using Python builtin functionality:breakpoint
. This instruction tells the debugger to pause execution, if there's no debugger present it will just ignore the function. IDACode imports a helper package calleddbg
which implements an overload ofbreakpoint
calledbp
. This function supports logging and conditionals:
name=idc.get_segm_name(segment)dbg.bp(name==".text",f"found{name} at{segment}")
Please also note that abreakpoint()
call should never occur at the end of a file, it must always be before any other line of code as it breaks on thenext instruction in your code. Also note that if you decide to use thedbg
package you must either remove all references or use the variable__idacode__
as conditional before executing it as a normal IDA script.
It is also important that attaching a debugger will create a new debugger instance. In most cases this is not what you want. If you disconnect from the debugger use VS Code's remote debugger to connect back.
- Imported module doesn't reload after changes, refer tothis for a work around.
About
An integration for IDA and VS Code which connects both to easily execute and debug IDAPython scripts.