summaryrefslogtreecommitdiff
path: root/python/examples
diff options
context:
space:
mode:
authorAndrew Lamoureux <andrew@vector35.com>2019-03-21 17:49:02 -0400
committerAndrew Lamoureux <andrew@vector35.com>2019-03-21 17:49:02 -0400
commita6355074d451e9ba9b85f17bfcd7c273ec18ecfa (patch)
treeb5dae98e70afcb7a3c986851fb11d8a90391d018 /python/examples
parenta79cc606a332377f5923f085dee953871ef72a05 (diff)
kaitai: statusbar widget menu to select any format
also: stop assuming file size on startup, return priority 1 (not 0)
Diffstat (limited to 'python/examples')
-rw-r--r--python/examples/kaitai/kshelpers.py33
-rw-r--r--python/examples/kaitai/menu.py835
-rw-r--r--python/examples/kaitai/view.py38
3 files changed, 883 insertions, 23 deletions
diff --git a/python/examples/kaitai/kshelpers.py b/python/examples/kaitai/kshelpers.py
index 55ebd01e..d2e2f441 100644
--- a/python/examples/kaitai/kshelpers.py
+++ b/python/examples/kaitai/kshelpers.py
@@ -1,5 +1,7 @@
#!/usr/bin/env python
+import traceback
+
import io
import os
import sys
@@ -27,6 +29,7 @@ else:
# length: int total length of data
def idData(dataSample, length):
result = None
+ #print('idData() here with sample: %s' % repr(dataSample))
if len(dataSample) < 16:
return result
@@ -46,7 +49,7 @@ def idData(dataSample, length):
if dataSample[0:2] in [b'BM', b'BA', b'CI', b'CP', b'IC', b'PT'] and struct.unpack('<I', dataSample[2:6])[0]==length:
result = 'bmp'
- #print('ioData() returning \'%s\'' % result)
+ #print('idData() returning \'%s\'' % result)
return result
def idFile(fpath):
@@ -66,8 +69,9 @@ def ksImportClass(moduleName):
try:
#print('__package__: -%s-' % __package__) # 'kaitai'
#print('__name__: -%s-' % __name__) # 'kaitai.kshelpers'
-
#print('moduleName: -%s-' % moduleName)
+ #print('importlib.import_module(.%s, %s)' % (moduleName, __package__))
+ print('importing kaitai module "%s"' % moduleName)
module = importlib.import_module('.'+moduleName, __package__)
className = ksModuleToClass(moduleName)
#print('className: -%s-' % className)
@@ -78,28 +82,41 @@ def ksImportClass(moduleName):
return classThing
-def parseFpath(fpath):
- ksClass = ksImportClass(idFile(fpath))
+def parseFpath(fpath, ksModuleName=None):
+ if not ksModuleName:
+ ksModuleName = idFile(fpath)
+ #print('parseFpath() using kaitai format: %s' % ksModuleName)
+
+ ksClass = ksImportClass(ksModuleName)
if not ksClass: return None
parsed = ksClass.from_file(fpath)
parsed._read()
return parsed
-def parseData(data):
- ksClass = ksImportClass(idData(data), len(data))
+def parseData(data, ksModuleName=None):
+ if not ksModuleName:
+ ksModuleName = idData(data, len(data))
+ #print('parseData() using kaitai format: %s' % ksModuleName)
+
+ ksClass = ksImportClass(ksModuleName)
if not ksClass: return None
parsed = ksClass.from_bytes(data)
parsed._read()
return parsed
-def parseIo(ioObj):
+def parseIo(ioObj, ksModuleName=None):
ioObj.seek(0, io.SEEK_END)
length = ioObj.tell()
+ if not ksModuleName:
+ ioObj.seek(0, io.SEEK_SET)
+ ksModuleName = idData(ioObj.read(16), length)
+ #print('parseIo() using kaitai format: %s' % ksModuleName)
+
ioObj.seek(0, io.SEEK_SET)
- ksClass = ksImportClass(idData(ioObj.read(16), length))
+ ksClass = ksImportClass(ksModuleName)
if not ksClass: return None
ioObj.seek(0, io.SEEK_SET)
diff --git a/python/examples/kaitai/menu.py b/python/examples/kaitai/menu.py
new file mode 100644
index 00000000..e6f7454a
--- /dev/null
+++ b/python/examples/kaitai/menu.py
@@ -0,0 +1,835 @@
+# -*- coding: utf-8 -*-
+
+# binja stuff
+from binaryninjaui import StatusBarWidget, ContextMenuManager, Menu, UIActionHandler, UIAction
+
+# pyside stuff
+from PySide2.QtCore import Qt
+from PySide2.QtGui import QPalette
+from PySide2.QtWidgets import QScrollArea, QWidget, QVBoxLayout, QGroupBox, QTreeWidget, QTreeWidgetItem, QLineEdit, QHeaderView, QLabel, QMenu, QHBoxLayout
+
+class KaitaiOptionsWidget(QLabel):
+ def __init__(self, parent):
+ QLabel.__init__(self, parent)
+
+ self.statusBarWidget = parent
+
+ self.setBackgroundRole(QPalette.Highlight)
+ self.setForegroundRole(QPalette.WindowText)
+ self.setText(" Formats ▾ ")
+
+ # see api/ui/menus.h
+ self.contextMenuManager = ContextMenuManager(self)
+
+ self.menu = Menu()
+ self.actionHandler = UIActionHandler()
+ self.registerActions()
+ self.addActions()
+ self.bindActions()
+
+ def registerActions(self):
+ # add all action handlers
+ UIAction.registerAction("archive\\cpio_old_le")
+ UIAction.registerAction("archive\\gzip")
+ UIAction.registerAction("archive\\lzh")
+ UIAction.registerAction("archive\\rar")
+ UIAction.registerAction("archive\\zip")
+ UIAction.registerAction("cad\\monomakh_sapr_chg")
+ UIAction.registerAction("common\\bcd")
+ UIAction.registerAction("database\\dbf")
+ UIAction.registerAction("database\\gettext_mo")
+ UIAction.registerAction("database\\sqlite3")
+ UIAction.registerAction("database\\tsm")
+ UIAction.registerAction("executable\\dex")
+ UIAction.registerAction("executable\\dos_mz")
+ UIAction.registerAction("executable\\elf")
+ UIAction.registerAction("executable\\java_class")
+ UIAction.registerAction("executable\\mach_o")
+ UIAction.registerAction("executable\\microsoft_pe")
+ UIAction.registerAction("executable\\python_pyc_27")
+ UIAction.registerAction("executable\\swf")
+ UIAction.registerAction("filesystem\\apm_partition_table")
+ UIAction.registerAction("filesystem\\apple_single_double")
+ UIAction.registerAction("filesystem\\cramfs")
+ UIAction.registerAction("filesystem\\ext2")
+ UIAction.registerAction("filesystem\\gpt_partition_table")
+ UIAction.registerAction("filesystem\\iso9660")
+ UIAction.registerAction("filesystem\\luks")
+ UIAction.registerAction("filesystem\\lvm2")
+ UIAction.registerAction("filesystem\\mbr_partition_table")
+ UIAction.registerAction("filesystem\\tr_dos_image")
+ UIAction.registerAction("filesystem\\vdi")
+ UIAction.registerAction("filesystem\\vfat")
+ UIAction.registerAction("filesystem\\vmware_vmdk")
+ UIAction.registerAction("firmware\\andes_firmware")
+ UIAction.registerAction("firmware\\ines")
+ UIAction.registerAction("firmware\\uimage")
+ UIAction.registerAction("font\\ttf")
+ UIAction.registerAction("game\\allegro_dat")
+ UIAction.registerAction("game\\doom_wad")
+ UIAction.registerAction("game\\dune_2_pak")
+ UIAction.registerAction("game\\fallout2_dat")
+ UIAction.registerAction("game\\fallout_dat")
+ UIAction.registerAction("game\\ftl_dat")
+ UIAction.registerAction("game\\gran_turismo_vol")
+ UIAction.registerAction("game\\heaps_pak")
+ UIAction.registerAction("game\\heroes_of_might_and_magic_agg")
+ UIAction.registerAction("game\\heroes_of_might_and_magic_bmp")
+ UIAction.registerAction("game\\quake_mdl")
+ UIAction.registerAction("game\\quake_pak")
+ UIAction.registerAction("game\\renderware_binary_stream")
+ UIAction.registerAction("game\\saints_row_2_vpp_pc")
+ UIAction.registerAction("game\\warcraft_2_pud")
+ UIAction.registerAction("geospatial\\shapefile_index")
+ UIAction.registerAction("geospatial\\shapefile_main")
+ UIAction.registerAction("hardware\\edid")
+ UIAction.registerAction("hardware\\mifare\\mifare_classic")
+ UIAction.registerAction("image\\bmp")
+ UIAction.registerAction("image\\dicom")
+ UIAction.registerAction("image\\exif")
+ UIAction.registerAction("image\\exif_be")
+ UIAction.registerAction("image\\exif_le")
+ UIAction.registerAction("image\\gif")
+ UIAction.registerAction("image\\icc_4")
+ UIAction.registerAction("image\\ico")
+ UIAction.registerAction("image\\jpeg")
+ UIAction.registerAction("image\\pcx")
+ UIAction.registerAction("image\\pcx_dcx")
+ UIAction.registerAction("image\\png")
+ UIAction.registerAction("image\\psx_tim")
+ UIAction.registerAction("image\\tga")
+ UIAction.registerAction("image\\wmf")
+ UIAction.registerAction("image\\xwd")
+ UIAction.registerAction("log\\aix_utmp")
+ UIAction.registerAction("log\\glibc_utmp")
+ UIAction.registerAction("log\\systemd_journal")
+ UIAction.registerAction("log\\windows_evt_log")
+ UIAction.registerAction("machine_code\\code_6502")
+ UIAction.registerAction("media\\avi")
+ UIAction.registerAction("media\\blender_blend")
+ UIAction.registerAction("media\\creative_voice_file")
+ UIAction.registerAction("media\\genmidi_op2")
+ UIAction.registerAction("media\\id3v1_1")
+ UIAction.registerAction("media\\id3v2_3")
+ UIAction.registerAction("media\\id3v2_4")
+ UIAction.registerAction("media\\magicavoxel_vox")
+ UIAction.registerAction("media\\ogg")
+ UIAction.registerAction("media\\quicktime_mov")
+ UIAction.registerAction("media\\standard_midi_file")
+ UIAction.registerAction("media\\stl")
+ UIAction.registerAction("media\\tracker_modules\\fasttracker_xm_module")
+ UIAction.registerAction("media\\tracker_modules\\s3m")
+ UIAction.registerAction("media\\vp8_ivf")
+ UIAction.registerAction("media\\wav")
+ UIAction.registerAction("network\\bitcoin_transaction")
+ UIAction.registerAction("network\\dns_packet")
+ UIAction.registerAction("network\\ethernet_frame")
+ UIAction.registerAction("network\\hccap")
+ UIAction.registerAction("network\\hccapx")
+ UIAction.registerAction("network\\icmp_packet")
+ UIAction.registerAction("network\\ipv4_packet")
+ UIAction.registerAction("network\\ipv6_packet")
+ UIAction.registerAction("network\\microsoft_network_monitor_v2")
+ UIAction.registerAction("network\\packet_ppi")
+ UIAction.registerAction("network\\pcap")
+ UIAction.registerAction("network\\protocol_body")
+ UIAction.registerAction("network\\rtcp_payload")
+ UIAction.registerAction("network\\rtp_packet")
+ UIAction.registerAction("network\\tcp_segment")
+ UIAction.registerAction("network\\tls_client_hello")
+ UIAction.registerAction("network\\udp_datagram")
+ UIAction.registerAction("network\\windows_systemtime")
+ UIAction.registerAction("scientific\\nt_mdt\\nt_mdt")
+ UIAction.registerAction("scientific\\nt_mdt\\nt_mdt_pal")
+ UIAction.registerAction("scientific\\spectroscopy\\avantes_roh60")
+ UIAction.registerAction("scientific\\spectroscopy\\specpr")
+ UIAction.registerAction("security\\openpgp_message")
+ UIAction.registerAction("security\\ssh_public_key")
+ UIAction.registerAction("serialization\\asn1\\asn1_der")
+ UIAction.registerAction("serialization\\bson")
+ UIAction.registerAction("serialization\\google_protobuf")
+ UIAction.registerAction("serialization\\microsoft_cfb")
+ UIAction.registerAction("serialization\\msgpack")
+ UIAction.registerAction("serialization\\ruby_marshal")
+ UIAction.registerAction("windows\\regf")
+ UIAction.registerAction("windows\\windows_lnk_file")
+ UIAction.registerAction("windows\\windows_minidump")
+ UIAction.registerAction("windows\\windows_resource_file")
+ UIAction.registerAction("windows\\windows_shell_items")
+ UIAction.registerAction("windows\\windows_systemtime")
+
+ def addActions(self):
+ self.menu.addAction("archive\\cpio_old_le", "formats")
+ self.menu.addAction("archive\\gzip", "formats")
+ self.menu.addAction("archive\\lzh", "formats")
+ self.menu.addAction("archive\\rar", "formats")
+ self.menu.addAction("archive\\zip", "formats")
+ self.menu.addAction("cad\\monomakh_sapr_chg", "formats")
+ self.menu.addAction("common\\bcd", "formats")
+ self.menu.addAction("database\\dbf", "formats")
+ self.menu.addAction("database\\gettext_mo", "formats")
+ self.menu.addAction("database\\sqlite3", "formats")
+ self.menu.addAction("database\\tsm", "formats")
+ self.menu.addAction("executable\\dex", "formats")
+ self.menu.addAction("executable\\dos_mz", "formats")
+ self.menu.addAction("executable\\elf", "formats")
+ self.menu.addAction("executable\\java_class", "formats")
+ self.menu.addAction("executable\\mach_o", "formats")
+ self.menu.addAction("executable\\microsoft_pe", "formats")
+ self.menu.addAction("executable\\python_pyc_27", "formats")
+ self.menu.addAction("executable\\swf", "formats")
+ self.menu.addAction("filesystem\\apm_partition_table", "formats")
+ self.menu.addAction("filesystem\\apple_single_double", "formats")
+ self.menu.addAction("filesystem\\cramfs", "formats")
+ self.menu.addAction("filesystem\\ext2", "formats")
+ self.menu.addAction("filesystem\\gpt_partition_table", "formats")
+ self.menu.addAction("filesystem\\iso9660", "formats")
+ self.menu.addAction("filesystem\\luks", "formats")
+ self.menu.addAction("filesystem\\lvm2", "formats")
+ self.menu.addAction("filesystem\\mbr_partition_table", "formats")
+ self.menu.addAction("filesystem\\tr_dos_image", "formats")
+ self.menu.addAction("filesystem\\vdi", "formats")
+ self.menu.addAction("filesystem\\vfat", "formats")
+ self.menu.addAction("filesystem\\vmware_vmdk", "formats")
+ self.menu.addAction("firmware\\andes_firmware", "formats")
+ self.menu.addAction("firmware\\ines", "formats")
+ self.menu.addAction("firmware\\uimage", "formats")
+ self.menu.addAction("font\\ttf", "formats")
+ self.menu.addAction("game\\allegro_dat", "formats")
+ self.menu.addAction("game\\doom_wad", "formats")
+ self.menu.addAction("game\\dune_2_pak", "formats")
+ self.menu.addAction("game\\fallout2_dat", "formats")
+ self.menu.addAction("game\\fallout_dat", "formats")
+ self.menu.addAction("game\\ftl_dat", "formats")
+ self.menu.addAction("game\\gran_turismo_vol", "formats")
+ self.menu.addAction("game\\heaps_pak", "formats")
+ self.menu.addAction("game\\heroes_of_might_and_magic_agg", "formats")
+ self.menu.addAction("game\\heroes_of_might_and_magic_bmp", "formats")
+ self.menu.addAction("game\\quake_mdl", "formats")
+ self.menu.addAction("game\\quake_pak", "formats")
+ self.menu.addAction("game\\renderware_binary_stream", "formats")
+ self.menu.addAction("game\\saints_row_2_vpp_pc", "formats")
+ self.menu.addAction("game\\warcraft_2_pud", "formats")
+ self.menu.addAction("geospatial\\shapefile_index", "formats")
+ self.menu.addAction("geospatial\\shapefile_main", "formats")
+ self.menu.addAction("hardware\\edid", "formats")
+ self.menu.addAction("hardware\\mifare\\mifare_classic", "formats")
+ self.menu.addAction("image\\bmp", "formats")
+ self.menu.addAction("image\\dicom", "formats")
+ self.menu.addAction("image\\exif", "formats")
+ self.menu.addAction("image\\exif_be", "formats")
+ self.menu.addAction("image\\exif_le", "formats")
+ self.menu.addAction("image\\gif", "formats")
+ self.menu.addAction("image\\icc_4", "formats")
+ self.menu.addAction("image\\ico", "formats")
+ self.menu.addAction("image\\jpeg", "formats")
+ self.menu.addAction("image\\pcx", "formats")
+ self.menu.addAction("image\\pcx_dcx", "formats")
+ self.menu.addAction("image\\png", "formats")
+ self.menu.addAction("image\\psx_tim", "formats")
+ self.menu.addAction("image\\tga", "formats")
+ self.menu.addAction("image\\wmf", "formats")
+ self.menu.addAction("image\\xwd", "formats")
+ self.menu.addAction("log\\aix_utmp", "formats")
+ self.menu.addAction("log\\glibc_utmp", "formats")
+ self.menu.addAction("log\\systemd_journal", "formats")
+ self.menu.addAction("log\\windows_evt_log", "formats")
+ self.menu.addAction("machine_code\\code_6502", "formats")
+ self.menu.addAction("media\\avi", "formats")
+ self.menu.addAction("media\\blender_blend", "formats")
+ self.menu.addAction("media\\creative_voice_file", "formats")
+ self.menu.addAction("media\\genmidi_op2", "formats")
+ self.menu.addAction("media\\id3v1_1", "formats")
+ self.menu.addAction("media\\id3v2_3", "formats")
+ self.menu.addAction("media\\id3v2_4", "formats")
+ self.menu.addAction("media\\magicavoxel_vox", "formats")
+ self.menu.addAction("media\\ogg", "formats")
+ self.menu.addAction("media\\quicktime_mov", "formats")
+ self.menu.addAction("media\\standard_midi_file", "formats")
+ self.menu.addAction("media\\stl", "formats")
+ self.menu.addAction("media\\tracker_modules\\fasttracker_xm_module", "formats")
+ self.menu.addAction("media\\tracker_modules\\s3m", "formats")
+ self.menu.addAction("media\\vp8_ivf", "formats")
+ self.menu.addAction("media\\wav", "formats")
+ self.menu.addAction("network\\bitcoin_transaction", "formats")
+ self.menu.addAction("network\\dns_packet", "formats")
+ self.menu.addAction("network\\ethernet_frame", "formats")
+ self.menu.addAction("network\\hccap", "formats")
+ self.menu.addAction("network\\hccapx", "formats")
+ self.menu.addAction("network\\icmp_packet", "formats")
+ self.menu.addAction("network\\ipv4_packet", "formats")
+ self.menu.addAction("network\\ipv6_packet", "formats")
+ self.menu.addAction("network\\microsoft_network_monitor_v2", "formats")
+ self.menu.addAction("network\\packet_ppi", "formats")
+ self.menu.addAction("network\\pcap", "formats")
+ self.menu.addAction("network\\protocol_body", "formats")
+ self.menu.addAction("network\\rtcp_payload", "formats")
+ self.menu.addAction("network\\rtp_packet", "formats")
+ self.menu.addAction("network\\tcp_segment", "formats")
+ self.menu.addAction("network\\tls_client_hello", "formats")
+ self.menu.addAction("network\\udp_datagram", "formats")
+ self.menu.addAction("network\\windows_systemtime", "formats")
+ self.menu.addAction("scientific\\nt_mdt\\nt_mdt", "formats")
+ self.menu.addAction("scientific\\nt_mdt\\nt_mdt_pal", "formats")
+ self.menu.addAction("scientific\\spectroscopy\\avantes_roh60", "formats")
+ self.menu.addAction("scientific\\spectroscopy\\specpr", "formats")
+ self.menu.addAction("security\\openpgp_message", "formats")
+ self.menu.addAction("security\\ssh_public_key", "formats")
+ self.menu.addAction("serialization\\asn1\\asn1_der", "formats")
+ self.menu.addAction("serialization\\bson", "formats")
+ self.menu.addAction("serialization\\google_protobuf", "formats")
+ self.menu.addAction("serialization\\microsoft_cfb", "formats")
+ self.menu.addAction("serialization\\msgpack", "formats")
+ self.menu.addAction("serialization\\ruby_marshal", "formats")
+ self.menu.addAction("windows\\regf", "formats")
+ self.menu.addAction("windows\\windows_lnk_file", "formats")
+ self.menu.addAction("windows\\windows_minidump", "formats")
+ self.menu.addAction("windows\\windows_resource_file", "formats")
+ self.menu.addAction("windows\\windows_shell_items", "formats")
+ self.menu.addAction("windows\\windows_systemtime", "formats")
+
+ def bindActions(self):
+ self.actionHandler.bindAction("archive\\cpio_old_le", UIAction(self.on_cpio_old_le))
+ self.actionHandler.bindAction("archive\\gzip", UIAction(self.on_gzip))
+ self.actionHandler.bindAction("archive\\lzh", UIAction(self.on_lzh))
+ self.actionHandler.bindAction("archive\\rar", UIAction(self.on_rar))
+ self.actionHandler.bindAction("archive\\zip", UIAction(self.on_zip))
+ self.actionHandler.bindAction("cad\\monomakh_sapr_chg", UIAction(self.on_monomakh_sapr_chg))
+ self.actionHandler.bindAction("common\\bcd", UIAction(self.on_bcd))
+ self.actionHandler.bindAction("database\\dbf", UIAction(self.on_dbf))
+ self.actionHandler.bindAction("database\\gettext_mo", UIAction(self.on_gettext_mo))
+ self.actionHandler.bindAction("database\\sqlite3", UIAction(self.on_sqlite3))
+ self.actionHandler.bindAction("database\\tsm", UIAction(self.on_tsm))
+ self.actionHandler.bindAction("executable\\dex", UIAction(self.on_dex))
+ self.actionHandler.bindAction("executable\\dos_mz", UIAction(self.on_dos_mz))
+ self.actionHandler.bindAction("executable\\elf", UIAction(self.on_elf))
+ self.actionHandler.bindAction("executable\\java_class", UIAction(self.on_java_class))
+ self.actionHandler.bindAction("executable\\mach_o", UIAction(self.on_mach_o))
+ self.actionHandler.bindAction("executable\\microsoft_pe", UIAction(self.on_microsoft_pe))
+ self.actionHandler.bindAction("executable\\python_pyc_27", UIAction(self.on_python_pyc_27))
+ self.actionHandler.bindAction("executable\\swf", UIAction(self.on_swf))
+ self.actionHandler.bindAction("filesystem\\apm_partition_table", UIAction(self.on_apm_partition_table))
+ self.actionHandler.bindAction("filesystem\\apple_single_double", UIAction(self.on_apple_single_double))
+ self.actionHandler.bindAction("filesystem\\cramfs", UIAction(self.on_cramfs))
+ self.actionHandler.bindAction("filesystem\\ext2", UIAction(self.on_ext2))
+ self.actionHandler.bindAction("filesystem\\gpt_partition_table", UIAction(self.on_gpt_partition_table))
+ self.actionHandler.bindAction("filesystem\\iso9660", UIAction(self.on_iso9660))
+ self.actionHandler.bindAction("filesystem\\luks", UIAction(self.on_luks))
+ self.actionHandler.bindAction("filesystem\\lvm2", UIAction(self.on_lvm2))
+ self.actionHandler.bindAction("filesystem\\mbr_partition_table", UIAction(self.on_mbr_partition_table))
+ self.actionHandler.bindAction("filesystem\\tr_dos_image", UIAction(self.on_tr_dos_image))
+ self.actionHandler.bindAction("filesystem\\vdi", UIAction(self.on_vdi))
+ self.actionHandler.bindAction("filesystem\\vfat", UIAction(self.on_vfat))
+ self.actionHandler.bindAction("filesystem\\vmware_vmdk", UIAction(self.on_vmware_vmdk))
+ self.actionHandler.bindAction("firmware\\andes_firmware", UIAction(self.on_andes_firmware))
+ self.actionHandler.bindAction("firmware\\ines", UIAction(self.on_ines))
+ self.actionHandler.bindAction("firmware\\uimage", UIAction(self.on_uimage))
+ self.actionHandler.bindAction("font\\ttf", UIAction(self.on_ttf))
+ self.actionHandler.bindAction("game\\allegro_dat", UIAction(self.on_allegro_dat))
+ self.actionHandler.bindAction("game\\doom_wad", UIAction(self.on_doom_wad))
+ self.actionHandler.bindAction("game\\dune_2_pak", UIAction(self.on_dune_2_pak))
+ self.actionHandler.bindAction("game\\fallout2_dat", UIAction(self.on_fallout2_dat))
+ self.actionHandler.bindAction("game\\fallout_dat", UIAction(self.on_fallout_dat))
+ self.actionHandler.bindAction("game\\ftl_dat", UIAction(self.on_ftl_dat))
+ self.actionHandler.bindAction("game\\gran_turismo_vol", UIAction(self.on_gran_turismo_vol))
+ self.actionHandler.bindAction("game\\heaps_pak", UIAction(self.on_heaps_pak))
+ self.actionHandler.bindAction("game\\heroes_of_might_and_magic_agg", UIAction(self.on_heroes_of_might_and_magic_agg))
+ self.actionHandler.bindAction("game\\heroes_of_might_and_magic_bmp", UIAction(self.on_heroes_of_might_and_magic_bmp))
+ self.actionHandler.bindAction("game\\quake_mdl", UIAction(self.on_quake_mdl))
+ self.actionHandler.bindAction("game\\quake_pak", UIAction(self.on_quake_pak))
+ self.actionHandler.bindAction("game\\renderware_binary_stream", UIAction(self.on_renderware_binary_stream))
+ self.actionHandler.bindAction("game\\saints_row_2_vpp_pc", UIAction(self.on_saints_row_2_vpp_pc))
+ self.actionHandler.bindAction("game\\warcraft_2_pud", UIAction(self.on_warcraft_2_pud))
+ self.actionHandler.bindAction("geospatial\\shapefile_index", UIAction(self.on_shapefile_index))
+ self.actionHandler.bindAction("geospatial\\shapefile_main", UIAction(self.on_shapefile_main))
+ self.actionHandler.bindAction("hardware\\edid", UIAction(self.on_edid))
+ self.actionHandler.bindAction("hardware\\mifare\\mifare_classic", UIAction(self.on_mifare_classic))
+ self.actionHandler.bindAction("image\\bmp", UIAction(self.on_bmp))
+ self.actionHandler.bindAction("image\\dicom", UIAction(self.on_dicom))
+ self.actionHandler.bindAction("image\\exif", UIAction(self.on_exif))
+ self.actionHandler.bindAction("image\\exif_be", UIAction(self.on_exif_be))
+ self.actionHandler.bindAction("image\\exif_le", UIAction(self.on_exif_le))
+ self.actionHandler.bindAction("image\\gif", UIAction(self.on_gif))
+ self.actionHandler.bindAction("image\\icc_4", UIAction(self.on_icc_4))
+ self.actionHandler.bindAction("image\\ico", UIAction(self.on_ico))
+ self.actionHandler.bindAction("image\\jpeg", UIAction(self.on_jpeg))
+ self.actionHandler.bindAction("image\\pcx", UIAction(self.on_pcx))
+ self.actionHandler.bindAction("image\\pcx_dcx", UIAction(self.on_pcx_dcx))
+ self.actionHandler.bindAction("image\\png", UIAction(self.on_png))
+ self.actionHandler.bindAction("image\\psx_tim", UIAction(self.on_psx_tim))
+ self.actionHandler.bindAction("image\\tga", UIAction(self.on_tga))
+ self.actionHandler.bindAction("image\\wmf", UIAction(self.on_wmf))
+ self.actionHandler.bindAction("image\\xwd", UIAction(self.on_xwd))
+ self.actionHandler.bindAction("log\\aix_utmp", UIAction(self.on_aix_utmp))
+ self.actionHandler.bindAction("log\\glibc_utmp", UIAction(self.on_glibc_utmp))
+ self.actionHandler.bindAction("log\\systemd_journal", UIAction(self.on_systemd_journal))
+ self.actionHandler.bindAction("log\\windows_evt_log", UIAction(self.on_windows_evt_log))
+ self.actionHandler.bindAction("machine_code\\code_6502", UIAction(self.on_code_6502))
+ self.actionHandler.bindAction("media\\avi", UIAction(self.on_avi))
+ self.actionHandler.bindAction("media\\blender_blend", UIAction(self.on_blender_blend))
+ self.actionHandler.bindAction("media\\creative_voice_file", UIAction(self.on_creative_voice_file))
+ self.actionHandler.bindAction("media\\genmidi_op2", UIAction(self.on_genmidi_op2))
+ self.actionHandler.bindAction("media\\id3v1_1", UIAction(self.on_id3v1_1))
+ self.actionHandler.bindAction("media\\id3v2_3", UIAction(self.on_id3v2_3))
+ self.actionHandler.bindAction("media\\id3v2_4", UIAction(self.on_id3v2_4))
+ self.actionHandler.bindAction("media\\magicavoxel_vox", UIAction(self.on_magicavoxel_vox))
+ self.actionHandler.bindAction("media\\ogg", UIAction(self.on_ogg))
+ self.actionHandler.bindAction("media\\quicktime_mov", UIAction(self.on_quicktime_mov))
+ self.actionHandler.bindAction("media\\standard_midi_file", UIAction(self.on_standard_midi_file))
+ self.actionHandler.bindAction("media\\stl", UIAction(self.on_stl))
+ self.actionHandler.bindAction("media\\tracker_modules\\fasttracker_xm_module", UIAction(self.on_fasttracker_xm_module))
+ self.actionHandler.bindAction("media\\tracker_modules\\s3m", UIAction(self.on_s3m))
+ self.actionHandler.bindAction("media\\vp8_ivf", UIAction(self.on_vp8_ivf))
+ self.actionHandler.bindAction("media\\wav", UIAction(self.on_wav))
+ self.actionHandler.bindAction("network\\bitcoin_transaction", UIAction(self.on_bitcoin_transaction))
+ self.actionHandler.bindAction("network\\dns_packet", UIAction(self.on_dns_packet))
+ self.actionHandler.bindAction("network\\ethernet_frame", UIAction(self.on_ethernet_frame))
+ self.actionHandler.bindAction("network\\hccap", UIAction(self.on_hccap))
+ self.actionHandler.bindAction("network\\hccapx", UIAction(self.on_hccapx))
+ self.actionHandler.bindAction("network\\icmp_packet", UIAction(self.on_icmp_packet))
+ self.actionHandler.bindAction("network\\ipv4_packet", UIAction(self.on_ipv4_packet))
+ self.actionHandler.bindAction("network\\ipv6_packet", UIAction(self.on_ipv6_packet))
+ self.actionHandler.bindAction("network\\microsoft_network_monitor_v2", UIAction(self.on_microsoft_network_monitor_v2))
+ self.actionHandler.bindAction("network\\packet_ppi", UIAction(self.on_packet_ppi))
+ self.actionHandler.bindAction("network\\pcap", UIAction(self.on_pcap))
+ self.actionHandler.bindAction("network\\protocol_body", UIAction(self.on_protocol_body))
+ self.actionHandler.bindAction("network\\rtcp_payload", UIAction(self.on_rtcp_payload))
+ self.actionHandler.bindAction("network\\rtp_packet", UIAction(self.on_rtp_packet))
+ self.actionHandler.bindAction("network\\tcp_segment", UIAction(self.on_tcp_segment))
+ self.actionHandler.bindAction("network\\tls_client_hello", UIAction(self.on_tls_client_hello))
+ self.actionHandler.bindAction("network\\udp_datagram", UIAction(self.on_udp_datagram))
+ self.actionHandler.bindAction("network\\windows_systemtime", UIAction(self.on_windows_systemtime))
+ self.actionHandler.bindAction("scientific\\nt_mdt\\nt_mdt", UIAction(self.on_nt_mdt))
+ self.actionHandler.bindAction("scientific\\nt_mdt\\nt_mdt_pal", UIAction(self.on_nt_mdt_pal))
+ self.actionHandler.bindAction("scientific\\spectroscopy\\avantes_roh60", UIAction(self.on_avantes_roh60))
+ self.actionHandler.bindAction("scientific\\spectroscopy\\specpr", UIAction(self.on_specpr))
+ self.actionHandler.bindAction("security\\openpgp_message", UIAction(self.on_openpgp_message))
+ self.actionHandler.bindAction("security\\ssh_public_key", UIAction(self.on_ssh_public_key))
+ self.actionHandler.bindAction("serialization\\asn1\\asn1_der", UIAction(self.on_asn1_der))
+ self.actionHandler.bindAction("serialization\\bson", UIAction(self.on_bson))
+ self.actionHandler.bindAction("serialization\\google_protobuf", UIAction(self.on_google_protobuf))
+ self.actionHandler.bindAction("serialization\\microsoft_cfb", UIAction(self.on_microsoft_cfb))
+ self.actionHandler.bindAction("serialization\\msgpack", UIAction(self.on_msgpack))
+ self.actionHandler.bindAction("serialization\\ruby_marshal", UIAction(self.on_ruby_marshal))
+ self.actionHandler.bindAction("windows\\regf", UIAction(self.on_regf))
+ self.actionHandler.bindAction("windows\\windows_lnk_file", UIAction(self.on_windows_lnk_file))
+ self.actionHandler.bindAction("windows\\windows_minidump", UIAction(self.on_windows_minidump))
+ self.actionHandler.bindAction("windows\\windows_resource_file", UIAction(self.on_windows_resource_file))
+ self.actionHandler.bindAction("windows\\windows_shell_items", UIAction(self.on_windows_shell_items))
+ self.actionHandler.bindAction("windows\\windows_systemtime", UIAction(self.on_windows_systemtime))
+
+ def mousePressEvent(self, event):
+ # when someone clicks our label, pop up the context menu
+ self.contextMenuManager.show(self.menu, self.actionHandler)
+
+ def enterEvent(self, event):
+ self.setAutoFillBackground(True)
+ self.setForegroundRole(QPalette.HighlightedText)
+ QLabel.enterEvent(self, event)
+
+ def leaveEvent(self, event):
+ self.setAutoFillBackground(False)
+ self.setForegroundRole(QPalette.WindowText)
+ QLabel.leaveEvent(self, event)
+
+ def on_cpio_old_le(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('cpio_old_le')
+
+ def on_gzip(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('gzip')
+
+ def on_lzh(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('lzh')
+
+ def on_rar(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('rar')
+
+ def on_zip(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('zip')
+
+ def on_monomakh_sapr_chg(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('monomakh_sapr_chg')
+
+ def on_bcd(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('bcd')
+
+ def on_dbf(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('dbf')
+
+ def on_gettext_mo(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('gettext_mo')
+
+ def on_sqlite3(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('sqlite3')
+
+ def on_tsm(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('tsm')
+
+ def on_dex(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('dex')
+
+ def on_dos_mz(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('dos_mz')
+
+ def on_elf(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('elf')
+
+ def on_java_class(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('java_class')
+
+ def on_mach_o(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('mach_o')
+
+ def on_microsoft_pe(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('microsoft_pe')
+
+ def on_python_pyc_27(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('python_pyc_27')
+
+ def on_swf(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('swf')
+
+ def on_apm_partition_table(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('apm_partition_table')
+
+ def on_apple_single_double(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('apple_single_double')
+
+ def on_cramfs(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('cramfs')
+
+ def on_ext2(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('ext2')
+
+ def on_gpt_partition_table(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('gpt_partition_table')
+
+ def on_iso9660(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('iso9660')
+
+ def on_luks(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('luks')
+
+ def on_lvm2(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('lvm2')
+
+ def on_mbr_partition_table(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('mbr_partition_table')
+
+ def on_tr_dos_image(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('tr_dos_image')
+
+ def on_vdi(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('vdi')
+
+ def on_vfat(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('vfat')
+
+ def on_vmware_vmdk(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('vmware_vmdk')
+
+ def on_andes_firmware(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('andes_firmware')
+
+ def on_ines(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('ines')
+
+ def on_uimage(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('uimage')
+
+ def on_ttf(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('ttf')
+
+ def on_allegro_dat(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('allegro_dat')
+
+ def on_doom_wad(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('doom_wad')
+
+ def on_dune_2_pak(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('dune_2_pak')
+
+ def on_fallout2_dat(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('fallout2_dat')
+
+ def on_fallout_dat(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('fallout_dat')
+
+ def on_ftl_dat(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('ftl_dat')
+
+ def on_gran_turismo_vol(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('gran_turismo_vol')
+
+ def on_heaps_pak(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('heaps_pak')
+
+ def on_heroes_of_might_and_magic_agg(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('heroes_of_might_and_magic_agg')
+
+ def on_heroes_of_might_and_magic_bmp(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('heroes_of_might_and_magic_bmp')
+
+ def on_quake_mdl(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('quake_mdl')
+
+ def on_quake_pak(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('quake_pak')
+
+ def on_renderware_binary_stream(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('renderware_binary_stream')
+
+ def on_saints_row_2_vpp_pc(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('saints_row_2_vpp_pc')
+
+ def on_warcraft_2_pud(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('warcraft_2_pud')
+
+ def on_shapefile_index(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('shapefile_index')
+
+ def on_shapefile_main(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('shapefile_main')
+
+ def on_edid(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('edid')
+
+ def on_mifare_classic(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('mifare_classic')
+
+ def on_bmp(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('bmp')
+
+ def on_dicom(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('dicom')
+
+ def on_exif(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('exif')
+
+ def on_exif_be(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('exif_be')
+
+ def on_exif_le(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('exif_le')
+
+ def on_gif(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('gif')
+
+ def on_icc_4(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('icc_4')
+
+ def on_ico(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('ico')
+
+ def on_jpeg(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('jpeg')
+
+ def on_pcx(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('pcx')
+
+ def on_pcx_dcx(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('pcx_dcx')
+
+ def on_png(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('png')
+
+ def on_psx_tim(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('psx_tim')
+
+ def on_tga(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('tga')
+
+ def on_wmf(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('wmf')
+
+ def on_xwd(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('xwd')
+
+ def on_aix_utmp(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('aix_utmp')
+
+ def on_glibc_utmp(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('glibc_utmp')
+
+ def on_systemd_journal(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('systemd_journal')
+
+ def on_windows_evt_log(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('windows_evt_log')
+
+ def on_code_6502(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('code_6502')
+
+ def on_avi(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('avi')
+
+ def on_blender_blend(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('blender_blend')
+
+ def on_creative_voice_file(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('creative_voice_file')
+
+ def on_genmidi_op2(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('genmidi_op2')
+
+ def on_id3v1_1(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('id3v1_1')
+
+ def on_id3v2_3(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('id3v2_3')
+
+ def on_id3v2_4(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('id3v2_4')
+
+ def on_magicavoxel_vox(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('magicavoxel_vox')
+
+ def on_ogg(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('ogg')
+
+ def on_quicktime_mov(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('quicktime_mov')
+
+ def on_standard_midi_file(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('standard_midi_file')
+
+ def on_stl(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('stl')
+
+ def on_fasttracker_xm_module(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('fasttracker_xm_module')
+
+ def on_s3m(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('s3m')
+
+ def on_vp8_ivf(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('vp8_ivf')
+
+ def on_wav(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('wav')
+
+ def on_bitcoin_transaction(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('bitcoin_transaction')
+
+ def on_dns_packet(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('dns_packet')
+
+ def on_ethernet_frame(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('ethernet_frame')
+
+ def on_hccap(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('hccap')
+
+ def on_hccapx(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('hccapx')
+
+ def on_icmp_packet(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('icmp_packet')
+
+ def on_ipv4_packet(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('ipv4_packet')
+
+ def on_ipv6_packet(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('ipv6_packet')
+
+ def on_microsoft_network_monitor_v2(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('microsoft_network_monitor_v2')
+
+ def on_packet_ppi(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('packet_ppi')
+
+ def on_pcap(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('pcap')
+
+ def on_protocol_body(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('protocol_body')
+
+ def on_rtcp_payload(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('rtcp_payload')
+
+ def on_rtp_packet(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('rtp_packet')
+
+ def on_tcp_segment(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('tcp_segment')
+
+ def on_tls_client_hello(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('tls_client_hello')
+
+ def on_udp_datagram(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('udp_datagram')
+
+ def on_windows_systemtime(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('windows_systemtime')
+
+ def on_nt_mdt(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('nt_mdt')
+
+ def on_nt_mdt_pal(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('nt_mdt_pal')
+
+ def on_avantes_roh60(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('avantes_roh60')
+
+ def on_specpr(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('specpr')
+
+ def on_openpgp_message(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('openpgp_message')
+
+ def on_ssh_public_key(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('ssh_public_key')
+
+ def on_asn1_der(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('asn1_der')
+
+ def on_bson(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('bson')
+
+ def on_google_protobuf(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('google_protobuf')
+
+ def on_microsoft_cfb(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('microsoft_cfb')
+
+ def on_msgpack(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('msgpack')
+
+ def on_ruby_marshal(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('ruby_marshal')
+
+ def on_regf(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('regf')
+
+ def on_windows_lnk_file(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('windows_lnk_file')
+
+ def on_windows_minidump(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('windows_minidump')
+
+ def on_windows_resource_file(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('windows_resource_file')
+
+ def on_windows_shell_items(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('windows_shell_items')
+
+ def on_windows_systemtime(self, uiActionContext):
+ self.statusBarWidget.kaitaiView.kaitaiParse('windows_systemtime')
+
+
+# KaitaiStatusBarWidget <- StatusBarWidget <- QFrame
+class KaitaiStatusBarWidget(StatusBarWidget):
+ def __init__(self, parent):
+ StatusBarWidget.__init__(self, parent)
+
+ self.kaitaiView = parent
+
+ self.layout = QHBoxLayout(self)
+ self.layout.setContentsMargins(0,0,0,0)
+
+ self.options = KaitaiOptionsWidget(self)
+ self.layout.addWidget(self.options)
+
+ def updateStatus(self):
+ #print 'updateStatus()'
+ pass
diff --git a/python/examples/kaitai/view.py b/python/examples/kaitai/view.py
index c37711d8..ee1ef6c0 100644
--- a/python/examples/kaitai/view.py
+++ b/python/examples/kaitai/view.py
@@ -1,3 +1,5 @@
+# -*- coding: utf-8 -*-
+
# python stuff
import io
import os
@@ -6,14 +8,16 @@ import types
import traceback
# binja stuff
-import binaryninjaui
-from binaryninja.settings import Settings
from binaryninja import log
-from binaryninja import _binaryninjacore as core
-from binaryninjaui import View, ViewType, ViewFrame, UIContext, HexEditor
from binaryninja import binaryview
-from PySide2.QtWidgets import QScrollArea, QWidget, QVBoxLayout, QGroupBox, QTreeWidget, QTreeWidgetItem, QLineEdit, QHeaderView
+from binaryninja.settings import Settings
+from binaryninja import _binaryninjacore as core
+from binaryninjaui import View, ViewType, ViewFrame, UIContext, HexEditor, getMonospaceFont
+
from PySide2.QtCore import Qt
+from PySide2.QtWidgets import QScrollArea, QWidget, QVBoxLayout, QGroupBox, QTreeWidget, QTreeWidgetItem, QLineEdit, QHeaderView
+
+from . import menu
if sys.version_info[0] == 2:
import kshelpers
@@ -68,15 +72,19 @@ class KaitaiView(QScrollArea, View):
self.kaitaiParse()
# parse the file using Kaitai, construct the TreeWidget
- def kaitaiParse(self):
- parsed = None
+ def kaitaiParse(self, formatName=None):
+ #print('kaitaiParse() with len(bv)=%d and bv.file.filename=%s' % (len(self.binaryView), self.binaryView.file.filename))
+
+ if len(self.binaryView) == 0:
+ return
kaitaiIO = kshelpers.KaitaiBinaryViewIO(self.binaryView)
if not kaitaiIO:
print('ERROR: initializing kaitai binary view')
- parsed = kshelpers.parseIo(kaitaiIO)
+ parsed = kshelpers.parseIo(kaitaiIO, formatName)
if not parsed:
print('ERROR: parsing the binary view')
+ return
tree = kshelpers.buildQtree(parsed)
if not tree:
@@ -240,6 +248,9 @@ class KaitaiView(QScrollArea, View):
# set hex group title to reflect current selection
#self.hexGroup.setTitle('Hex View @ [0x%X, 0x%X)' % (start, end))
+ def getStatusBarWidget(self):
+ return menu.KaitaiStatusBarWidget(self)
+
class KaitaiViewType(ViewType):
def __init__(self):
super(KaitaiViewType, self).__init__("Kaitai", "Kaitai")
@@ -252,22 +263,19 @@ class KaitaiViewType(ViewType):
# executable means the view is mapped like an OS loader would load an executable (eg: view=ELF)
# !executable means executable image is not mapped (eg: view=Raw) (or something like .png is loaded)
if binaryView.executable:
- return 0
+ return 1
if binaryView.start != 0:
- return 0
-
- if os.path.getsize(binaryView.file.filename) != len(binaryView):
- return 0
+ return 1
dataSample = binaryView.read(0, 16)
if len(dataSample) != 16:
- return 0
+ return 1
# if we don't recognize it, return 0
ksModuleName = kshelpers.idData(dataSample, len(binaryView))
if not ksModuleName:
- return 0
+ return 1
# for executables, yield triage (25)
if ksModuleName in ['elf', 'microsoft_pe', 'mach_o']: