Python源码示例:idaapi.SETMENU_APP
示例1
def _inject_ctx_actions(self, view, popup, view_type):
"""
Inject context menu entries into IDA's right click menus.
NOTE: This is only being used for coverage xref at this time, but
may host additional actions in the future.
"""
if view_type == idaapi.BWN_DISASMS:
idaapi.attach_action_to_popup(
view,
popup,
self.ACTION_COVERAGE_XREF, # The action ID (see above)
"Xrefs graph from...", # Relative path of where to add the action
idaapi.SETMENU_APP # We want to append the action after ^
)
示例2
def register_munu_actions():
act_registers = '%s:registers' % PLUGIN_NAME
act1 = idaapi.action_desc_t(
act_registers,
REGS_WIDGET_TITLE,
StartHandler(REGS_WIDGET_TITLE),
'Alt-Shift-D',
'Start plugin',
122
)
idaapi.register_action(act1)
idaapi.attach_action_to_menu(DBG_MENU_PATH, act_registers, idaapi.SETMENU_APP)
act_stack = '%s:stack' % PLUGIN_NAME
act2 = idaapi.action_desc_t(act_stack,
STACK_WIDGET_TITLE,
StartHandler(STACK_WIDGET_TITLE),
'Alt-Shift-E',
'Start plugin',
122
)
idaapi.register_action(act2)
idaapi.attach_action_to_menu(DBG_MENU_PATH, act_stack, idaapi.SETMENU_APP)
示例3
def add_menus(self):
# To avoid creating multiple plugin_t instances
this = self
class StartHandler(idaapi.action_handler_t):
def __init__(self):
idaapi.action_handler_t.__init__(self)
def activate(self, ctx):
this.run()
return 1
def update(self, ctx):
return idaapi.AST_ENABLE_ALWAYS
act_name = '%s:start' % PLUGNAME
act_desc = idaapi.action_desc_t(
act_name, # The action name. Must be unique
PLUGNAME, # Action Text
StartHandler(), # Action handler
None, # Optional shortcut
'Start plugin', # Action tooltip
122 # Icon
)
idaapi.register_action(act_desc)
idaapi.attach_action_to_menu(
'Debugger/Debugger windows/',
act_name,
idaapi.SETMENU_APP
)
示例4
def add_menu_item_helper(self, name, text, tooltip, handler, icon, shortcut):
description = idaapi.action_desc_t(name, text, handler, shortcut, tooltip, icon)
idaapi.register_action(description)
idaapi.attach_action_to_menu("DIE/" + text, name, idaapi.SETMENU_APP)
self._menus_names.append(name)
示例5
def init(self):
self._lca_viewer = None
self._lca_starter = lca_viewer_starter(self)
self._lca_starter.register()
idaapi.attach_action_to_menu("View/Graph Overview", self._lca_starter.get_name(), idaapi.SETMENU_APP)
self._idaview_handler = idaview_add_target_handler(self)
self._idaview_handler.register()
self._hooks = idaview_hooks(self._idaview_handler)()
self._hooks.hook()
return idaapi.PLUGIN_KEEP
示例6
def init(self):
self.lines = set()
self.settings = IDASettings('HighlightCalls')
try:
self.set_color(self.settings['color'])
except KeyError:
self.settings.user['color'] = HIGHLIGHT_COLOR
self.set_color(HIGHLIGHT_COLOR)
self.ui_hooks = UiHooks(self.lines)
self.toggle_action_desc = idaapi.action_desc_t('HighlightCalls:Toggle',
'Toggle call highlighting',
ToggleHighlightHandler(self.enable_highlights,
self.disable_highlights),
'',
'Toggle call highlighting',
-1)
idaapi.register_action(self.toggle_action_desc)
self.color_selector = idaapi.action_desc_t('HighlightCalls:SelectColor',
'Select highlight color',
SelectColorHandler(set_color=self.set_color),
'',
'Select highlight color',
-1)
idaapi.register_action(self.color_selector)
idaapi.attach_action_to_menu('View/', self.toggle_action_desc.name, idaapi.SETMENU_APP)
idaapi.attach_action_to_menu('View/', self.color_selector.name, idaapi.SETMENU_APP)
return idaapi.PLUGIN_KEEP
示例7
def _install_load_file(self):
"""
Install the 'File->Load->Code coverage file...' menu entry.
"""
# create a custom IDA icon
icon_path = plugin_resource(os.path.join("icons", "load.png"))
icon_data = open(icon_path, "rb").read()
self._icon_id_file = idaapi.load_custom_icon(data=icon_data)
# describe a custom IDA UI action
action_desc = idaapi.action_desc_t(
self.ACTION_LOAD_FILE, # The action name
"~C~ode coverage file...", # The action text
IDACtxEntry(self.interactive_load_file), # The action handler
None, # Optional: action shortcut
"Load individual code coverage file(s)", # Optional: tooltip
self._icon_id_file # Optional: the action icon
)
# register the action with IDA
result = idaapi.register_action(action_desc)
if not result:
RuntimeError("Failed to register load_file action with IDA")
# attach the action to the File-> dropdown menu
result = idaapi.attach_action_to_menu(
"File/Load file/", # Relative path of where to add the action
self.ACTION_LOAD_FILE, # The action ID (see above)
idaapi.SETMENU_APP # We want to append the action after ^
)
if not result:
RuntimeError("Failed action attach load_file")
logger.info("Installed the 'Code coverage file' menu entry")
示例8
def _install_load_batch(self):
"""
Install the 'File->Load->Code coverage batch...' menu entry.
"""
# create a custom IDA icon
icon_path = plugin_resource(os.path.join("icons", "batch.png"))
icon_data = open(icon_path, "rb").read()
self._icon_id_batch = idaapi.load_custom_icon(data=icon_data)
# describe a custom IDA UI action
action_desc = idaapi.action_desc_t(
self.ACTION_LOAD_BATCH, # The action name
"~C~ode coverage batch...", # The action text
IDACtxEntry(self.interactive_load_batch), # The action handler
None, # Optional: action shortcut
"Load and aggregate code coverage files", # Optional: tooltip
self._icon_id_batch # Optional: the action icon
)
# register the action with IDA
result = idaapi.register_action(action_desc)
if not result:
RuntimeError("Failed to register load_batch action with IDA")
# attach the action to the File-> dropdown menu
result = idaapi.attach_action_to_menu(
"File/Load file/", # Relative path of where to add the action
self.ACTION_LOAD_BATCH, # The action ID (see above)
idaapi.SETMENU_APP # We want to append the action after ^
)
if not result:
RuntimeError("Failed action attach load_batch")
logger.info("Installed the 'Code coverage batch' menu entry")
示例9
def attach_to_menu(self, menu):
assert hasattr(self, "name")
idaapi.attach_action_to_menu(menu, self.name, idaapi.SETMENU_APP)
示例10
def _attach_to_menu_items(self):
self.search_magic_desc = idaapi.action_desc_t(
'idamagnum:searchmagic',
'search magic number ...',
SearchMagicNumber(self),
"Shift+M",
'Search this value on MagnumDB',
)
self.configure_plugin_desc = idaapi.action_desc_t(
'idamagnum:configure',
'Configure',
ConfigureIdaMagnum(self),
"",
'Configure plugin',
)
idaapi.register_action(self.search_magic_desc)
idaapi.register_action(self.configure_plugin_desc)
idaapi.attach_action_to_menu(
'Edit/Plugins/IdaMagnum/',
'idamagnum:searchmagic',
idaapi.SETMENU_APP
)
idaapi.attach_action_to_menu(
'Edit/Plugins/IdaMagnum/',
'idamagnum:configure',
idaapi.SETMENU_APP
)
return 0
示例11
def init(self):
NO_HOTKEY = ""
SETMENU_INS = 0
NO_ARGS = tuple()
logger.debug("[+] %s.init()" % self.__class__.__name__)
self.menuitems = []
logger.debug("[+] setting up menus for ida version %s" % idaapi.IDA_SDK_VERSION)
if idaapi.IDA_SDK_VERSION >= 700:
# >= 700
action_desc = idaapi.action_desc_t("tintinweb:batchdecompile:load", self.wanted_name, IdaDecompileUiActionHandler(self))
idaapi.register_action(action_desc)
idaapi.attach_action_to_menu(''.join(self.wanted_menu), "tintinweb:batchdecompile:load", idaapi.SETMENU_APP)
else:
menu = idaapi.add_menu_item(self.wanted_menu[0],
self.wanted_menu[1],
NO_HOTKEY,
SETMENU_INS,
self.menu_config,
NO_ARGS)
self.menuitems.append(menu)
return idaapi.PLUGIN_KEEP
示例12
def init_menu(action_handler):
action = '{}:loadfile'.format(NAME)
action_desc = idaapi.action_desc_t(
action,
'{}...'.format(NAME),
action_handler,
'Ctrl+Alt+J',
'{} dependency browser'.format(NAME),
)
idaapi.register_action(action_desc)
idaapi.attach_action_to_menu('File', action, idaapi.SETMENU_APP)
示例13
def init(self):
self.view = None
# create watcher
self.watch = Watcher()
# setup actions
self.actions = ActionManager()
self.actions.register("addmenuwindow", "Add Watch", self.addWatchWindow, -1, "Shift-A")
self.actions.register("showview", "Show WatchDbg List", self.showWatchWindow, -1, "Shift-W")
# setup menus
idaapi.attach_action_to_menu('Debugger/WatchDbg', self.actions.get("showview"), idaapi.SETMENU_APP)
self.uihook = UIHook()
self.uihook.hook()
self.dbghook = WatchDbgHook()
self.dbghook.dbg_suspend_process = self.updateWatchWindow
self.dbghook.hook()
writeline("Successfully loaded! [v.%s]" % '.'.join(map(str,PLUGIN_VERSION)))
return idaapi.PLUGIN_KEEP
示例14
def init():
NO_HOTKEY = ""
SETMENU_INS = 0
NO_ARGS = tuple()
config_action_text = "{} Config".format(ConfigStingray.PLUGIN_NAME)
idaapi.register_action(idaapi.action_desc_t(ConfigStingray.ACTION_NAME, config_action_text, ConfigStingray()))
idaapi.attach_action_to_menu("Options/", ConfigStingray.ACTION_NAME, idaapi.SETMENU_APP)
ConfigStingray.load()
示例15
def init(self):
# register popup menu handlers
try:
# Register Auto Fix IDB handler
VxHunterMCFixIDB.register(self, "Auto Fix IDB With symbol table")
# Register Fix Code handler
VxHunterMCFixCode.register(self, "Fix Code from start address to end address")
# Register Fix Ascii handler
VxHunterMCFixAscii.register(self, "Fix Ascii string table with giving address")
# Register Load symbol file handler
VxHunterMCLoadSymbolFile.register(self, "Load VxWorks symbol file")
except Exception as err:
print("Got Error!!!: %s" % err)
# setup popup menu
if idaapi.IDA_SDK_VERSION >= 700:
# Add menu IDA >= 7.0
idaapi.attach_action_to_menu("Edit/VxHunter/", VxHunterMCFixIDB.get_name(), idaapi.SETMENU_APP)
idaapi.attach_action_to_menu("Edit/VxHunter/", VxHunterMCFixCode.get_name(), idaapi.SETMENU_APP)
idaapi.attach_action_to_menu("Edit/VxHunter/", VxHunterMCFixAscii.get_name(), idaapi.SETMENU_APP)
idaapi.attach_action_to_menu("Edit/VxHunter/", VxHunterMCLoadSymbolFile.get_name(), idaapi.SETMENU_APP)
else:
# add Vxhunter menu
menu = idaapi.add_menu_item("Edit/VxHunter/", "Auto Fix IDB1", "", 1, self.handler_auto_fix_idb, None)
if menu is not None:
pass
print("=" * 80)
return idaapi.PLUGIN_KEEP
示例16
def init(self):
global p_initialized
# register popup menu handlers
try:
Searcher.register(self, "Findcrypt")
except:
pass
if p_initialized is False:
p_initialized = True
self.user_directory = self.get_user_directory()
idaapi.register_action(idaapi.action_desc_t(
"Findcrypt",
"Find crypto constants",
Searcher(),
None,
None,
0))
idaapi.attach_action_to_menu("Search", "Findcrypt", idaapi.SETMENU_APP)
print("=" * 80)
print("Findcrypt v{0} by David BERARD, 2017".format(VERSION))
print("Findcrypt search shortcut key is Ctrl-Alt-F")
print("Global rules in %s" % YARARULES_CFGFILE)
print("User-defined rules in %s/*.rules" % self.user_directory)
print("=" * 80)
return idaapi.PLUGIN_KEEP
示例17
def installMenuIda7():
class ApplyCalleeHandler(idaapi.action_handler_t):
def activate(self, ctx):
doApplyCallee()
return 1
def update(self, ctx):
return idaapi.AST_ENABLE_FOR_WIDGET if ctx.widget_type == idaapi.BWN_DISASM else idaapi.AST_DISABLE_FOR_WIDGET
ret = idaapi.register_action(idaapi.action_desc_t(
ACTION_NAME, # Name. Acts as an ID. Must be unique.
PLUGIN_NAME, # Label. That's what users see.
ApplyCalleeHandler(), # Handler. Called when activated, and for updating
PREFERRED_SHORTCUT, # Shortcut (optional)
PLUGIN_COMMENT # Tooltip (optional)
))
if not ret:
print('Failed to register action. Bailing out')
return
# Insert the action in the menu
if idaapi.attach_action_to_menu(MENU_PATH, ACTION_NAME, idaapi.SETMENU_APP):
print("Attached to menu.")
else:
print("Failed attaching to menu.")
setattr(sys.modules['idaapi'], '_apply_callee_type_plugin_installFlag', True)
示例18
def init(self):
global initialized
if initialized is False:
initialized = True
if idaapi.IDA_SDK_VERSION >= 700:
# populating action menus
action_desc = idaapi.action_desc_t(
'my:aboutaction', # The action name. This acts like an ID and must be unique
'About!', # The action text.
AboutHandler(), # The action handler.
'', # Optional: the action shortcut
'About X64dbg ida', # Optional: the action tooltip (available in menus/toolbar)
) # Optional: the action icon (shows when in menus/toolbars) use numbers 1-255
# Register the action
idaapi.register_action(action_desc)
idaapi.attach_action_to_menu(
'Edit/x64dbgida/',
'my:aboutaction',
idaapi.SETMENU_APP)
action_desc = idaapi.action_desc_t(
'my:eksportaction',
'Export x64dbg database',
EksportHandler(),
'',
'Export x64dbg database',
)
# Register the action
idaapi.register_action(action_desc)
idaapi.attach_action_to_menu(
'Edit/x64dbgida/',
'my:eksportaction',
idaapi.SETMENU_APP)
action_desc = idaapi.action_desc_t(
'my:importaction',
'Import (uncompressed) database',
ImportHandler(),
'',
'Import (uncompressed) database',
)
# Register the action
idaapi.register_action(action_desc)
idaapi.attach_action_to_menu(
'Edit/x64dbgida/',
'my:importaction',
idaapi.SETMENU_APP)
else:
print("Use version 1.0")
return idaapi.PLUGIN_KEEP
示例19
def hxe_callback(self, event, *args):
"""
HexRays event callback.
We lump this under the (UI) Hooks class for organizational reasons.
"""
#
# if the event callback indicates that this is a popup menu event
# (in the hexrays window), we may want to install our prefix menu
# actions depending on what the cursor right clicked.
#
if event == idaapi.hxe_populating_popup:
form, popup, vu = args
#
# if the user cursor isn't hovering over a function ref, there
# is nothing for us to do
#
if get_cursor_func_ref() == idaapi.BADADDR:
return 0
#
# the user cursor is hovering over a valid target for a recursive
# function prefix. insert the prefix action entry into the menu
#
idaapi.attach_action_to_popup(
form,
popup,
prefix_t.ACTION_RECURSIVE,
"Rename global item",
idaapi.SETMENU_APP
)
# done
return 0
#------------------------------------------------------------------------------
# Prefix Wrappers
#------------------------------------------------------------------------------