Python源码示例:idaapi.action_desc_t()
示例1
def get_desc(cls):
"""Get a descriptor for this handler."""
name = cls.get_name()
text = cls.TEXT
handler = cls()
hotkey = cls.HOTKEY
tooltip = cls.TOOLTIP
icon = cls.ICON
action_desc = idaapi.action_desc_t(
name,
text,
handler,
hotkey,
tooltip,
icon,
)
return action_desc
示例2
def init(self):
self._last_enum = ""
self.rename_action_desc = idaapi.action_desc_t('AutoEnum:RenameImmediate',
'Rename immediate value',
RenameImmediateHandler(),
'Ctrl+Shift+M',
'Rename immediate value',
-1)
idaapi.register_action(self.rename_action_desc)
self.autoenum_action_desc = idaapi.action_desc_t('AutoEnum:AutoEnum',
'Automatically create enum',
AutoEnumHandler(),
'Shift+M',
'Automatically create enum',
-1)
idaapi.register_action(self.autoenum_action_desc)
return idaapi.PLUGIN_KEEP
示例3
def _init_action_bulk(self):
"""
Register the bulk prefix action with IDA.
"""
# load the icon for this action
self._bulk_icon_id = idaapi.load_custom_icon(plugin_resource("bulk.png"))
# describe the action
action_desc = idaapi.action_desc_t(
self.ACTION_BULK, # The action name.
"Prefix selected functions", # The action text.
IDACtxEntry(bulk_prefix), # The action handler.
None, # Optional: action shortcut
"Assign a user prefix to the selected functions", # Optional: tooltip
self._bulk_icon_id # Optional: the action icon
)
# register the action with IDA
assert idaapi.register_action(action_desc), "Action registration failed"
示例4
def _init_action_clear(self):
"""
Register the clear prefix action with IDA.
"""
# load the icon for this action
self._clear_icon_id = idaapi.load_custom_icon(plugin_resource("clear.png"))
# describe the action
action_desc = idaapi.action_desc_t(
self.ACTION_CLEAR, # The action name.
"Clear prefixes", # The action text.
IDACtxEntry(clear_prefix), # The action handler.
None, # Optional: action shortcut
"Clear user prefixes from the selected functions", # Optional: tooltip
self._clear_icon_id # Optional: the action icon
)
# register the action with IDA
assert idaapi.register_action(action_desc), "Action registration failed"
示例5
def _init_action_recursive(self):
"""
Register the recursive rename action with IDA.
"""
# load the icon for this action
self._recursive_icon_id = idaapi.load_custom_icon(plugin_resource("recursive.png"))
# describe the action
action_desc = idaapi.action_desc_t(
self.ACTION_RECURSIVE, # The action name.
"Recursive function prefix", # The action text.
IDACtxEntry(recursive_prefix_cursor), # The action handler.
None, # Optional: action shortcut
"Recursively prefix callees of this function", # Optional: tooltip
self._recursive_icon_id # Optional: the action icon
)
# register the action with IDA
assert idaapi.register_action(action_desc), "Action registration failed"
示例6
def registerAction(self):
action_desc = idaapi.action_desc_t(
self.id,
self.name,
self,
"",
self.tooltip,
self.icon
)
if not idaapi.register_action(action_desc):
return False
if not idaapi.attach_action_to_menu(self.menuPath, self.id, 0):
return False
if not idaapi.attach_action_to_toolbar("AnalysisToolBar", self.id):
return False
return True
示例7
def register_menu_actions(form):
widget = form.GetWidget()
for action in form.menu_actions:
act_name = action.name
if act_name != '-':
act_name = "%s:%s" % (PLUGIN_NAME, action.name)
idaapi.register_action(
idaapi.action_desc_t(
act_name,
action.title,
ActionHandler(form, action),
action.shortcut,
action.tooltip,
action.icon
)
)
if action.checkable is not None:
idaapi.update_action_checkable(act_name, True)
idaapi.update_action_checked(act_name, action.checkable)
idaapi.attach_action_to_popup(widget, None, act_name)
# -----------------------------------------------------------------------
示例8
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)
示例9
def registerAction(self):
action_desc = idaapi.action_desc_t(
self.id,
self.name,
self,
self.shortcut,
self.tooltip,
0
)
if not idaapi.register_action(action_desc):
return False
if not idaapi.attach_action_to_menu(self.menuPath, self.id, 0):
return False
return True
示例10
def register_dynamic_action(form, popup, description, handler):
"""Registers a new item in a popup which will trigger a function when selected"""
# Note the 'None' as action name (1st parameter).
# That's because the action will be deleted immediately
# after the context menu is hidden anyway, so there's
# really no need giving it a valid ID.
action = idaapi.action_desc_t(None, description, handler)
idaapi.attach_dynamic_action_to_popup(form, popup, action, 'Driver Plugin/')
示例11
def _createContextActions(self):
actions = [
("grap:pg:set_root", None, "[grap] Set root node", self._onSetRootNode),
("grap:pg:add_target", None, "[grap] Add target node", self._onAddTargetNode),
("grap:pg:match_default", config['icons_path'] + "icons8-asterisk-24.png", "[grap] Default match (apply options)", self._onSetMatchDefault),
("grap:pg:match_full", None, "[grap] Full match", self._onSetMatchFull),
("grap:pg:match_opcode_arg1", None, "[grap] Opcode+arg1", self._onSetMatchOpcodeArg1),
("grap:pg:match_opcode_arg2", None, "[grap] Opcode+arg2", self._onSetMatchOpcodeArg2),
("grap:pg:match_opcode_arg3", None, "[grap] Opcode+arg3", self._onSetMatchOpcodeArg3),
("grap:pg:match_opcode", None, "[grap] Opcode", self._onSetMatchOpcode),
("grap:pg:match_wildcard", None, "[grap] Wildcard: *", self._onSetMatchWildcard),
("grap:pg:remove_target", config['icons_path'] + "icons8-delete.png", "[grap] Remove target node", self._onRemoveTargetNode)
]
for actionId, icon_path, text, method in (a for a in actions):
if icon_path is not None and icon_path != "":
icon_number = idaapi.load_custom_icon(icon_path)
# Describe the action
action_desc = idaapi.action_desc_t(
actionId, # The action name. This acts like an ID and must be unique
text, # The action text.
PatternGenerationHandler(method), # The action handler.
None,
None,
icon_number)
else:
# Describe the action
action_desc = idaapi.action_desc_t(
actionId, # The action name. This acts like an ID and must be unique
text, # The action text.
PatternGenerationHandler(method)) # The action handler.
# Register the action
idaapi.register_action(action_desc)
self.actionsDefined = True
示例12
def init(brutal_self):
idaapi.unregister_action('Undo')
idaapi.unregister_action('Redo')
brutal_self.brutal_action_handler = BrutalActionHandler()
brutal_action_desc = idaapi.action_desc_t('BRUTAL', 'BRUTAL IDA', brutal_self.brutal_action_handler, '',
'IDA', BRUTAL6_ICON)
idaapi.register_action(brutal_action_desc)
idaapi.create_toolbar('BRUTAL IDA', 'BRUTAL IDA')
brutal_self.brutal_letter_handlers = []
for brutal_letter in 'BRUTAL':
brutal_letter_handler = BrutalLetterHandler()
brutal_self.brutal_letter_handlers.append(brutal_letter_handler)
brutal_label = 'BRUTAL {}'.format(brutal_letter)
brutal_letter_desc = idaapi.action_desc_t(brutal_label,
brutal_label,
brutal_letter_handler,
'',
brutal_letter,
BRUTAL_LETTERS[brutal_letter])
idaapi.register_action(brutal_letter_desc)
idaapi.attach_action_to_toolbar('BRUTAL IDA', brutal_label)
idaapi.attach_action_to_toolbar('BRUTAL IDA', 'BRUTAL')
brutal_self.brutal_hotkey = idaapi.add_hotkey('Ctrl+Z', brutal_self.dispatch_brutality)
return idaapi.PLUGIN_KEEP
示例13
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
)
示例14
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)
示例15
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
示例16
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")
示例17
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")
示例18
def _install_open_coverage_xref(self):
"""
Install the right click 'Coverage Xref' context 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_xref = idaapi.load_custom_icon(data=icon_data)
# describe a custom IDA UI action
action_desc = idaapi.action_desc_t(
self.ACTION_COVERAGE_XREF, # The action name
"Xrefs coverage sets...", # The action text
IDACtxEntry(self._pre_open_coverage_xref),# The action handler
None, # Optional: action shortcut
"List coverage sets containing this address", # Optional: tooltip
self._icon_id_xref # Optional: the action icon
)
# register the action with IDA
result = idaapi.register_action(action_desc)
if not result:
RuntimeError("Failed to register coverage_xref action with IDA")
self._ui_hooks.hook()
logger.info("Installed the 'Coverage Xref' menu entry")
示例19
def _install_open_coverage_overview(self):
"""
Install the 'View->Open subviews->Coverage Overview' menu entry.
"""
# create a custom IDA icon
icon_path = plugin_resource(os.path.join("icons", "overview.png"))
icon_data = open(icon_path, "rb").read()
self._icon_id_overview = idaapi.load_custom_icon(data=icon_data)
# describe a custom IDA UI action
action_desc = idaapi.action_desc_t(
self.ACTION_COVERAGE_OVERVIEW, # The action name
"~C~overage Overview", # The action text
IDACtxEntry(self.open_coverage_overview), # The action handler
None, # Optional: action shortcut
"Open database code coverage overview", # Optional: tooltip
self._icon_id_overview # Optional: the action icon
)
# register the action with IDA
result = idaapi.register_action(action_desc)
if not result:
RuntimeError("Failed to register open coverage overview action with IDA")
# attach the action to the View-> dropdown menu
result = idaapi.attach_action_to_menu(
"View/Open subviews/Hex dump", # Relative path of where to add the action
self.ACTION_COVERAGE_OVERVIEW, # The action ID (see above)
idaapi.SETMENU_INS # We want to insert the action before ^
)
if not result:
RuntimeError("Failed action attach to 'View/Open subviews' dropdown")
logger.info("Installed the 'Coverage Overview' menu entry")
示例20
def register(self, name, label, shortcut=None, tooltip=None, icon=-1):
action = idaapi.action_desc_t(
name, # The action name. This acts like an ID and must be unique
label, # The action text.
self, # The action handler.
shortcut,# Optional: the action shortcut
tooltip, # Optional: the action tooltip (available in menus/toolbar)
icon, # Optional: the action icon (shows when in menus/toolbars)
)
idaapi.register_action(action)
self.name = name
return action
示例21
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
示例22
def init(self):
print("Fuzzy Search Plugin loaded.")
idaapi.register_action(
idaapi.action_desc_t("fz:fuzzysearch", "Fuzzy Search", fuzzy_search_handler(), "Shift+SPACE", "", -1))
return idaapi.PLUGIN_KEEP
示例23
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
示例24
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)
示例25
def register(self, id, content, callback, icon=-1, shortcut=None):
nid = self._convert(id)
action = idaapi.action_desc_t(nid, content, ActionHandler(nid, callback), shortcut, None, icon)
self._actions[id] = action
idaapi.register_action(action)
示例26
def create_ioctl_tab(tracker, modal=False):
global ioctl_tracker
ioctl_tracker = tracker
items = get_all_defines()
idaapi.register_action(
idaapi.action_desc_t(
"choose2:remove_ioctl",
"Invalid IOCTL",
remove_ioctl(items)
)
)
action = "send_ioctl"
actname = "choose2:act%s" % action
idaapi.register_action(
idaapi.action_desc_t(
actname,
"Send IOCTL",
send_ioctl_handler_t(items)))
idaapi.register_action(
idaapi.action_desc_t(
"choose2:actcopy_defines",
"Copy All Defines",
copy_defines_handler_t(items)))
idaapi.register_action(
idaapi.action_desc_t(
"choose2:actstop_unload",
"Stop & Unload Driver",
stop_unload_handler_t()))
idaapi.register_action(
idaapi.action_desc_t(
"choose2:actstart_load",
"Load & Start Driver",
start_load_handler_t()))
global c
c = MyChoose2("IOCTL Code Viewer", items, modal=modal)
c.show()
form = idaapi.get_current_tform()
idaapi.attach_action_to_popup(form, None, "choose2:act%s" % action)
idaapi.attach_action_to_popup(form, None, "choose2:actcopy_defines")
idaapi.attach_action_to_popup(form, None, "choose2:actstop_unload")
idaapi.attach_action_to_popup(form, None, "choose2:actstart_load")
idaapi.attach_action_to_popup(form, None, "choose2:remove_ioctl")
示例27
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
示例28
def init(self):
loose_yara_action = idaapi.action_desc_t(
'mkYARA:generate_loose_yara', # The action name. This acts like an ID and must be unique
'Generate Loose Yara Rule ', # The action text.
generic_handler(lambda: self.generate_yara_rule("loose")), # The action handler.
None, # Optional: the action shortcut
'Generate loose yara rule', # Optional: the action tooltip (available in menus/toolbar)
199 # Optional: the action icon (shows when in menus/toolbars)
)
normal_yara_action = idaapi.action_desc_t(
'mkYARA:generate_normal_yara', # The action name. This acts like an ID and must be unique
'Generate Normal Yara Rule ', # The action text.
generic_handler(lambda: self.generate_yara_rule("normal")), # The action handler.
'Ctrl+Y', # Optional: the action shortcut
'Generate normal yara rule', # Optional: the action tooltip (available in menus/toolbar)
199 # Optional: the action icon (shows when in menus/toolbars)
)
strict_yara_action = idaapi.action_desc_t(
'mkYARA:generate_strict_yara', # The action name. This acts like an ID and must be unique
'Generate Strict Yara Rule ', # The action text.
generic_handler(lambda: self.generate_yara_rule("strict")), # The action handler.
None, # Optional: the action shortcut
'Generate strict yara rule', # Optional: the action tooltip (available in menus/toolbar)
199 # Optional: the action icon (shows when in menus/toolbars)
)
data_yara_action = idaapi.action_desc_t(
'mkYARA:generate_data_yara', # The action name. This acts like an ID and must be unique
'Generate Data Yara Rule ', # The action text.
generic_handler(lambda: self.generate_yara_rule("normal", is_data=True)), # The action handler.
None, # Optional: the action shortcut
'Generate data yara rule', # Optional: the action tooltip (available in menus/toolbar)
199 # Optional: the action icon (shows when in menus/toolbars)
)
idaapi.register_action(loose_yara_action)
idaapi.register_action(normal_yara_action)
idaapi.register_action(strict_yara_action)
idaapi.register_action(data_yara_action)
self.ui_hooks = mkYARAUIHooks()
self.ui_hooks.hook()
print('mkYARA :: Plugin Started')
return idaapi.PLUGIN_KEEP