Permalink
Switch branches/tags
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
executable file 130 lines (107 sloc) 3.55 KB
if idaapi.IDA_SDK_VERSION <= 695:
import idc
import idaapi
import binwalk
if idaapi.IDA_SDK_VERSION >= 700:
import ida_idc
import ida_idaapi
import binwalk
from idaapi import *
else:
pass
# use 'try' here for compatibility with older API
# use Actions API for handlers
try:
class OpHandler(idaapi.action_handler_t):
def __init__(self):
idaapi.action_handler_t.__init__(self)
def activate(self, ctx):
arg = None
a = binwalk_t()
a.opcode_scan(arg)
return 1
def update(self, ctx):
return idaapi.AST_ENABLE_ALWAYS
except AttributeError:
pass
# use 'try' here for compatibility with older API
# use Actions API for handlers
try:
class SigHandler(idaapi.action_handler_t):
def __init__(self):
idaapi.action_handler_t.__init__(self)
def activate(self, ctx):
arg = None
b = binwalk_t()
b.signature_scan(arg)
return 1
def update(self, ctx):
return idaapi.AST_ENABLE_ALWAYS
except AttributeError:
pass
class binwalk_t(idaapi.plugin_t):
flags = 0
comment = "Scan the current IDB for file signatures"
help = ""
wanted_name = "Binwalk IDA Plugin"
wanted_hotkey = ""
def init(self):
if idaapi.IDA_SDK_VERSION <= 695:
self.menu_context_1 = idaapi.add_menu_item(
"Search/", "binwalk opcodes", "", 0, self.opcode_scan, (None,))
self.menu_context_2 = idaapi.add_menu_item(
"Search/", "binwalk signatures", "", 0, self.signature_scan, (None,))
if idaapi.IDA_SDK_VERSION >= 700:
# populate action menus
action_desc = idaapi.action_desc_t(
'my:opaction', # action name. This acts like an ID and must be unique
'Binwalk opcodes', # text for this action
OpHandler(), # the action handler
'', # optional shortcut key
'Binwalk opcodes', # optional action tooltip for menus/toolbar
)
# Register the action
idaapi.register_action(action_desc)
idaapi.attach_action_to_menu(
'Search/',
'my:opaction',
idaapi.SETMENU_APP)
# populate action menus
action_desc = idaapi.action_desc_t(
'my:sigaction',
'Binwalk signatures',
SigHandler(),
'',
'Binwalk signatures',
)
# Register the action
idaapi.register_action(action_desc)
idaapi.attach_action_to_menu(
'Search/',
'my:sigaction',
idaapi.SETMENU_APP)
else:
pass
return idaapi.PLUGIN_KEEP
def term(self):
if idaapi.IDA_SDK_VERSION <= 695:
idaapi.del_menu_item(self.menu_context_1)
idaapi.del_menu_item(self.menu_context_2)
if idaapi.IDA_SDK_VERSION >= 700:
idaapi.detach_action_from_menu(
'Search/',
'my:opaction')
idaapi.detach_action_from_menu(
'Search/',
'my:sigaction')
else:
pass
return None
def run(self, arg):
return None
def signature_scan(self, arg):
binwalk.scan(idc.GetIdbPath(), signature=True)
def opcode_scan(self, arg):
binwalk.scan(idc.GetIdbPath(), opcode=True)
def PLUGIN_ENTRY():
return binwalk_t()