- 2021/02/12 update : Now support Python 3 API and works in v7.4+ ( tested in v7.5 )
- 2019/05/29 update : Now support installation from idapkg.com !
- Update : For now only v2.3 ( python 2 API ) support installation from idapkg.com ( Issue 3 )
I've enhanced some features ( only tested in Windows though ), including:
- Adding a dark theme ( using QDarkStyleSheet )
- Now we have light/dark theme for the editor. Press the
Switch theme
button to switch the theme
- Now we have light/dark theme for the editor. Press the
Light theme :
Dark theme :
-
Improve save file feature
- Now able to Save/Save as a new/existing file
- Makes you able to save your changes directly to the existing file
- Save:
Ctrl + S
- Save as:
Ctrl + Shift + S
- Ask if you want to save before you quit or open a new/existing file
- Now able to Save/Save as a new/existing file
-
Enhance error messages
- Now able to display the line number of where the error exist
-
Save the custom settings
- Now able to save the following custom settings:
- font setting
- theme setting
- Now able to save the following custom settings:
-
Update the IDAPython APIs to the latest version
Download the latest release version from here
Check the release note for how to setup the editor.
( The following content were derived from the original README.md )
what it Does: I always hated the Old Run script command, so i set up making my own editor for ida pro. Just like the ida one but much nicer and better Python language. Run Scripts files and apps within ida.
prerequisites
ida pro or ida pro demo
PyQt4/or PyQt5 depends on ida pro version.
It needs Qscilla module(Qsci.pyd), not provided by hex-ray, but found in the links under.
Pyqt4 installer
Pyqt5 installer
IMPORTANT! you have to take Qt5Core.dll , Qt5Gui.dll, Qt5widgets.dll from PyQt5 package and overwrite the ones in ida pro 7.0 folder
build yourself
https://github.com/techbliss/Ida_Pro_Ultimate_Qt_Build_Guide
if you need help with this. Contact me here Techbliss
Running other Qt apps within the editor
you have to remember to remove usually in bottom of Qt file
app = QtGui.QApplication(sys.argv)
and
sys.exit(app.exec_())
Install
Download plugin. extract to Ida Pro plugins folder.So its idafolder\plugins\codeeditor or it wont work
Tip! Use hit hotkey Alt+E twize to load the editor.
Current Changelog 1.5
Added Plugin manager
Hotkeys
###################################################
# Author Storm Shadow #
# Hotkeys #
# NewFile: Ctrl+N #
# OpenFile: Ctrl+O #
# SaveFile: Ctrl+S #
# RunScript: Ctrl+E #
# Undo: Ctrl+Z #
# Redo: Ctrl+Y #
# SelectALL: Ctrl+A #
# Paste: Ctrl+V #
# Font: Ctrl+F #
# ResetFolding: Ctrl+R #
# CircleFolding: Ctrl+C #
# PlainFolding: Ctrl+P #
# HEX-ray Home: Ctrl+W #
# Ida Pro Python SDK Ctrl+I #
# IDAPROPythonGit: Ctrl+G #
# Author: Ctrl+B #
# Enable Reg: Alt+E #
# Disable Reg: Alt+D #
# Zoom in Ctrl+Shift+ + #
# Zoom Out Ctrl+Shift+ - #
# Profile Code Ctrl+Shift+ E #
###################################################
# IDA PRO python Editor #
###################################################
autocomplete
Plugin Manager
profile code for speed issues
177 function calls in 0.038 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 <string>:330(retranslateUi)
1 0.012 0.012 0.038 0.038 <string>:4(<module>)
1 0.000 0.000 0.000 0.000 <string>:458(MyWindow)
9 0.000 0.000 0.000 0.000 <string>:80(_fromUtf8)
2 0.000 0.000 0.000 0.000 <string>:91(_translate)
1 0.000 0.000 0.000 0.000 <string>:94(Ui_MainWindow)
1 0.005 0.005 0.013 0.013 <string>:96(setupUi)
2 0.000 0.000 0.000 0.000 {built-in method SendScintilla}
19 0.000 0.000 0.000 0.000 {built-in method addAction}
1 0.000 0.000 0.000 0.000 {built-in method addPixmap}
19 0.000 0.000 0.000 0.000 {built-in method addSeparator}
1 0.000 0.000 0.000 0.000 {built-in method addToolBar}
1 0.000 0.000 0.000 0.000 {built-in method addWidget}
1 0.000 0.000 0.000 0.000 {built-in method exec_}
3 0.006 0.002 0.006 0.002 {built-in method load}
1 0.000 0.000 0.000 0.000 {built-in method markerDefine}
1 0.000 0.000 0.000 0.000 {built-in method prepare}
2 0.000 0.000 0.000 0.000 {built-in method resize}
1 0.000 0.000 0.000 0.000 {built-in method setAutoCompletionSource}
3 0.000 0.000 0.000 0.000 {built-in method setAutoCompletionThreshold}
2 0.000 0.000 0.000 0.000 {built-in method setAutoFillBackground}
1 0.000 0.000 0.000 0.000 {built-in method setAutoIndent}
1 0.000 0.000 0.000 0.000 {built-in method setBraceMatching}
1 0.000 0.000 0.000 0.000 {built-in method setCentralWidget}
1 0.000 0.000 0.000 0.000 {built-in method setContentsMargins}
1 0.000 0.000 0.000 0.000 {built-in method setDefaultFont}
1 0.000 0.000 0.000 0.000 {built-in method setEolFill}
1 0.000 0.000 0.000 0.000 {built-in method setFamily}
1 0.000 0.000 0.000 0.000 {built-in method setFixedPitch}
1 0.000 0.000 0.000 0.000 {built-in method setFont}
1 0.000 0.000 0.000 0.000 {built-in method setFrameShape}
1 0.000 0.000 0.000 0.000 {built-in method setIconSize}
1 0.000 0.000 0.000 0.000 {built-in method setLexer}
1 0.000 0.000 0.000 0.000 {built-in method setMarginSensitivity}
1 0.000 0.000 0.000 0.000 {built-in method setMarginWidth}
1 0.000 0.000 0.000 0.000 {built-in method setMarginsFont}
1 0.000 0.000 0.000 0.000 {built-in method setMarkerBackgroundColor}
5 0.000 0.000 0.000 0.000 {built-in method setObjectName}
1 0.000 0.000 0.000 0.000 {built-in method setPointSize}
19 0.000 0.000 0.000 0.000 {built-in method setShortcut}
1 0.000 0.000 0.000 0.000 {built-in method setSpacing}
19 0.000 0.000 0.000 0.000 {built-in method setStatusTip}
1 0.000 0.000 0.000 0.000 {built-in method setStyleSheet}
1 0.000 0.000 0.000 0.000 {built-in method setTabWidth}
1 0.000 0.000 0.000 0.000 {built-in method setToolButtonStyle}
1 0.000 0.000 0.000 0.000 {built-in method setToolTip}
1 0.000 0.000 0.000 0.000 {built-in method setWhatsThis}
1 0.000 0.000 0.000 0.000 {built-in method setWindowIcon}
2 0.000 0.000 0.000 0.000 {built-in method setWindowTitle}
1 0.013 0.013 0.013 0.013 {built-in method show}
1 0.000 0.000 0.000 0.000 {built-in method width}
1 0.001 0.001 0.001 0.001 {connectSlotsByName}
2 0.000 0.000 0.000 0.000 {hasattr}
1 0.000 0.000 0.000 0.000 {instance}
20 0.000 0.000 0.000 0.000 {method 'connect' of 'PyQt5.QtCore.pyqtBoundSignal' objects}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
2 0.000 0.000 0.000 0.000 {method 'insert' of 'list' objects}
2 0.000 0.000 0.000 0.000 {nt.getcwd}
2 0.000 0.000 0.000 0.000 {setAttribute}
2 0.000 0.000 0.000 0.000 {translate}```