Skip to content

bruce30262/Python_editor

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Enhancement from bruce30262

  • 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

Light theme :

light

Dark theme :

dark

  • 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
  • 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
  • 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 )


Ida Pro python Editor Python version Python version PyQ5t PyQ5t

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

Pyqt4

Pyqt5 installer

Pyqt5

Pyqt5 ida pro 7.0

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              #
 ###################################################

d

autocomplete

ida

Plugin Manager

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}```