diff options
Diffstat (limited to 'python/examples')
| -rw-r--r-- | python/examples/kaitai/kaitai_struct_formats/executable/elf.py (renamed from python/examples/kaitai/elf.py) | 3 | ||||
| -rw-r--r-- | python/examples/kaitai/kaitai_struct_formats/executable/mach_o.py (renamed from python/examples/kaitai/mach_o.py) | 3 | ||||
| -rw-r--r-- | python/examples/kaitai/kaitai_struct_formats/executable/microsoft_pe.py (renamed from python/examples/kaitai/microsoft_pe.py) | 3 | ||||
| -rwxr-xr-x | python/examples/kaitai/kshelpers.py | 185 | ||||
| -rw-r--r-- | python/examples/kaitai/view.py | 28 |
5 files changed, 205 insertions, 17 deletions
diff --git a/python/examples/kaitai/elf.py b/python/examples/kaitai/kaitai_struct_formats/executable/elf.py index b06956c4..c134a2e2 100644 --- a/python/examples/kaitai/elf.py +++ b/python/examples/kaitai/kaitai_struct_formats/executable/elf.py @@ -1,7 +1,8 @@ +from __future__ import absolute_import # This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild from pkg_resources import parse_version -from kaitaistruct import __version__ as ks_version, KaitaiStruct, KaitaiStream, BytesIO +from ...kaitaistruct import __version__ as ks_version, KaitaiStruct, KaitaiStream, BytesIO from enum import Enum import collections diff --git a/python/examples/kaitai/mach_o.py b/python/examples/kaitai/kaitai_struct_formats/executable/mach_o.py index ac517678..9595184d 100644 --- a/python/examples/kaitai/mach_o.py +++ b/python/examples/kaitai/kaitai_struct_formats/executable/mach_o.py @@ -1,7 +1,8 @@ +from __future__ import absolute_import # This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild from pkg_resources import parse_version -from kaitaistruct import __version__ as ks_version, KaitaiStruct, KaitaiStream, BytesIO +from ...kaitaistruct import __version__ as ks_version, KaitaiStruct, KaitaiStream, BytesIO from enum import Enum import collections diff --git a/python/examples/kaitai/microsoft_pe.py b/python/examples/kaitai/kaitai_struct_formats/executable/microsoft_pe.py index 0c8fcc1f..054f8b96 100644 --- a/python/examples/kaitai/microsoft_pe.py +++ b/python/examples/kaitai/kaitai_struct_formats/executable/microsoft_pe.py @@ -1,7 +1,8 @@ +from __future__ import absolute_import # This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild from pkg_resources import parse_version -from kaitaistruct import __version__ as ks_version, KaitaiStruct, KaitaiStream, BytesIO +from ...kaitaistruct import __version__ as ks_version, KaitaiStruct, KaitaiStream, BytesIO from enum import Enum import collections diff --git a/python/examples/kaitai/kshelpers.py b/python/examples/kaitai/kshelpers.py index 374a1e77..859a206c 100755 --- a/python/examples/kaitai/kshelpers.py +++ b/python/examples/kaitai/kshelpers.py @@ -1,5 +1,7 @@ #!/usr/bin/env python +from __future__ import absolute_import + import io import sys import types @@ -9,22 +11,49 @@ import binaryninja from PySide2.QtCore import Qt from PySide2.QtWidgets import QTreeWidgetItem -from kaitaistruct import KaitaiStruct +from .kaitaistruct import KaitaiStruct + +#sys.path.append('kaitai_struct_formats/archive') +#sys.path.append('kaitai_struct_formats/cad') +#sys.path.append('kaitai_struct_formats/common') +#sys.path.append('kaitai_struct_formats/database') +#sys.path.append('./kaitai_struct_formats/executable') +#sys.path.append('kaitai_struct_formats/filesystem') +#sys.path.append('kaitai_struct_formats/firmware') +#sys.path.append('kaitai_struct_formats/font') +#sys.path.append('kaitai_struct_formats/game') +#sys.path.append('kaitai_struct_formats/geospatial') +#sys.path.append('kaitai_struct_formats/hardware') +#sys.path.append('kaitai_struct_formats/image') +#sys.path.append('kaitai_struct_formats/log') +#sys.path.append('kaitai_struct_formats/machine_code') +#sys.path.append('kaitai_struct_formats/media') +#sys.path.append('kaitai_struct_formats/network') +#sys.path.append('kaitai_struct_formats/scientific') +#sys.path.append('kaitai_struct_formats/security') +#sys.path.append('kaitai_struct_formats/serialization') +#sys.path.append('kaitai_struct_formats/windows') #------------------------------------------------------------------------------ # id and parse #------------------------------------------------------------------------------ def id_data(data): - if len(data) < 4: + if len(data) < 16: return None if data[0:4] == "\x7fELF": return 'elf' - elif data[0:4] in ['\xfe\xed\xfa\xce', '\xce\xfa\xed\xfe', '\xfe\xed\xfa\xcf', '\xcf\xfa\xed\xfe']: + if data[0:4] in ['\xfe\xed\xfa\xce', '\xce\xfa\xed\xfe', '\xfe\xed\xfa\xcf', '\xcf\xfa\xed\xfe']: return 'macho' - elif data[0:2] == 'MZ': + if data[0:2] == 'MZ': return 'pe' + if data[0:8] == '\x89\x50\x4e\x47\x0d\x0a\x1a\x0a': + return 'png' + if data[2:11] == '0xFF\xe0\x00\x10JFIF\x00': + return 'jpeg' + if data[0:6] == 'GIF89a': + return 'gif' return None @@ -36,14 +65,23 @@ def id_file(fpath): def getKaitaiModuleFromFileType(ftype): if ftype == 'elf': - from elf import Elf + from .kaitai_struct_formats.executable.elf import Elf return Elf elif ftype == 'macho': - from mach_o import MachO + from .kaitai_struct_formats.executable.mach_o import MachO return MachO elif ftype == 'pe': - from microsoft_pe import MicrosoftPe + from .kaitai_struct_formats.executable.microsoft_pe import MicrosoftPe return MicrosoftPe + elif ftype == 'png': + from .kaitai_struct_formats.image.png import Png + return Png + elif ftype == 'jpeg': + from .kaitai_struct_formats.image.jpeg import Jpeg + return Jpeg + elif ftype == 'gif': + from .kaitai_struct_formats.image.gif import Gif + return Gif return None @@ -169,6 +207,137 @@ def dump(obj, depth=0): #else: # print '%s%s: %s' % (indent, fieldName, repr(subObj)) +def import_all_formats(): + from .kaitai_struct_formats.archive.cpio_old_le import CpioOldLe + from .kaitai_struct_formats.archive.gzip import Gzip + from .kaitai_struct_formats.archive.lzh import Lzh + from .kaitai_struct_formats.archive.rar import Rar + from .kaitai_struct_formats.archive.zip import Zip + from .kaitai_struct_formats.cad.monomakh_sapr_chg import MonomakhSaprChg + from .kaitai_struct_formats.common.bcd import Bcd + from .kaitai_struct_formats.common.vlq_base128_be import VlqBase128Be + from .kaitai_struct_formats.common.vlq_base128_le import VlqBase128Le + from .kaitai_struct_formats.database.dbf import Dbf + from .kaitai_struct_formats.database.gettext_mo import GettextMo + from .kaitai_struct_formats.database.sqlite3 import Sqlite3 + from .kaitai_struct_formats.database.tsm import Tsm + from .kaitai_struct_formats.executable.dex import Dex + from .kaitai_struct_formats.executable.dos_mz import DosMz + from .kaitai_struct_formats.executable.elf import Elf + from .kaitai_struct_formats.executable.java_class import JavaClass + from .kaitai_struct_formats.executable.mach_o import MachO + from .kaitai_struct_formats.executable.microsoft_pe import MicrosoftPe + from .kaitai_struct_formats.executable.python_pyc_27 import PythonPyc27 + from .kaitai_struct_formats.executable.swf import Swf + from .kaitai_struct_formats.filesystem.apm_partition_table import ApmPartitionTable + from .kaitai_struct_formats.filesystem.apple_single_double import AppleSingleDouble + from .kaitai_struct_formats.filesystem.cramfs import Cramfs + from .kaitai_struct_formats.filesystem.ext2 import Ext2 + from .kaitai_struct_formats.filesystem.gpt_partition_table import GptPartitionTable + from .kaitai_struct_formats.filesystem.iso9660 import Iso9660 + from .kaitai_struct_formats.filesystem.luks import Luks + from .kaitai_struct_formats.filesystem.lvm2 import Lvm2 + from .kaitai_struct_formats.filesystem.mbr_partition_table import MbrPartitionTable + from .kaitai_struct_formats.filesystem.tr_dos_image import TrDosImage + from .kaitai_struct_formats.filesystem.vdi import Vdi + from .kaitai_struct_formats.filesystem.vfat import Vfat + from .kaitai_struct_formats.filesystem.vmware_vmdk import VmwareVmdk + from .kaitai_struct_formats.firmware.andes_firmware import AndesFirmware + from .kaitai_struct_formats.firmware.ines import Ines + from .kaitai_struct_formats.firmware.uimage import Uimage + from .kaitai_struct_formats.font.ttf import Ttf + from .kaitai_struct_formats.game.allegro_dat import AllegroDat + from .kaitai_struct_formats.game.doom_wad import DoomWad + from .kaitai_struct_formats.game.dune_2_pak import Dune2Pak + from .kaitai_struct_formats.game.fallout2_dat import Fallout2Dat + from .kaitai_struct_formats.game.fallout_dat import FalloutDat + from .kaitai_struct_formats.game.ftl_dat import FtlDat + from .kaitai_struct_formats.game.gran_turismo_vol import GranTurismoVol + from .kaitai_struct_formats.game.heaps_pak import HeapsPak + from .kaitai_struct_formats.game.heroes_of_might_and_magic_agg import HeroesOfMightAndMagicAgg + from .kaitai_struct_formats.game.heroes_of_might_and_magic_bmp import HeroesOfMightAndMagicBmp + from .kaitai_struct_formats.game.quake_mdl import QuakeMdl + from .kaitai_struct_formats.game.quake_pak import QuakePak + from .kaitai_struct_formats.game.renderware_binary_stream import RenderwareBinaryStream + from .kaitai_struct_formats.game.saints_row_2_vpp_pc import SaintsRow2VppPc + from .kaitai_struct_formats.game.warcraft_2_pud import Warcraft2Pud + from .kaitai_struct_formats.geospatial.shapefile_index import ShapefileIndex + from .kaitai_struct_formats.geospatial.shapefile_main import ShapefileMain + from .kaitai_struct_formats.hardware.edid import Edid + from .kaitai_struct_formats.hardware.mifare.mifare_classic import MifareClassic + from .kaitai_struct_formats.image.bmp import Bmp + from .kaitai_struct_formats.image.dicom import Dicom + from .kaitai_struct_formats.image.exif import Exif + from .kaitai_struct_formats.image.exif_be import ExifBe + from .kaitai_struct_formats.image.exif_le import ExifLe + from .kaitai_struct_formats.image.gif import Gif + from .kaitai_struct_formats.image.icc_4 import Icc4 + from .kaitai_struct_formats.image.ico import Ico + from .kaitai_struct_formats.image.jpeg import Jpeg + from .kaitai_struct_formats.image.pcx import Pcx + from .kaitai_struct_formats.image.pcx_dcx import PcxDcx + from .kaitai_struct_formats.image.png import Png + from .kaitai_struct_formats.image.psx_tim import PsxTim + from .kaitai_struct_formats.image.tga import Tga + from .kaitai_struct_formats.image.wmf import Wmf + from .kaitai_struct_formats.image.xwd import Xwd + from .kaitai_struct_formats.log.aix_utmp import AixUtmp + from .kaitai_struct_formats.log.glibc_utmp import GlibcUtmp + from .kaitai_struct_formats.log.systemd_journal import SystemdJournal + from .kaitai_struct_formats.log.windows_evt_log import WindowsEvtLog + from .kaitai_struct_formats.machine_code.code_6502 import Code6502 + from .kaitai_struct_formats.media.avi import Avi + from .kaitai_struct_formats.media.blender_blend import BlenderBlend + from .kaitai_struct_formats.media.creative_voice_file import CreativeVoiceFile + from .kaitai_struct_formats.media.genmidi_op2 import GenmidiOp2 + from .kaitai_struct_formats.media.id3v1_1 import Id3v11 + from .kaitai_struct_formats.media.id3v2_3 import Id3v23 + from .kaitai_struct_formats.media.id3v2_4 import Id3v24 + from .kaitai_struct_formats.media.magicavoxel_vox import MagicavoxelVox + from .kaitai_struct_formats.media.ogg import Ogg + from .kaitai_struct_formats.media.quicktime_mov import QuicktimeMov + from .kaitai_struct_formats.media.standard_midi_file import StandardMidiFile + from .kaitai_struct_formats.media.stl import Stl + from .kaitai_struct_formats.media.tracker_modules.fasttracker_xm_module import FasttrackerXmModule + from .kaitai_struct_formats.media.tracker_modules.s3m import S3m + from .kaitai_struct_formats.media.vp8_ivf import Vp8Ivf + from .kaitai_struct_formats.media.wav import Wav + from .kaitai_struct_formats.network.bitcoin_transaction import BitcoinTransaction + from .kaitai_struct_formats.network.dns_packet import DnsPacket + from .kaitai_struct_formats.network.ethernet_frame import EthernetFrame + from .kaitai_struct_formats.network.hccap import Hccap + from .kaitai_struct_formats.network.hccapx import Hccapx + from .kaitai_struct_formats.network.icmp_packet import IcmpPacket + from .kaitai_struct_formats.network.ipv4_packet import Ipv4Packet + from .kaitai_struct_formats.network.ipv6_packet import Ipv6Packet + from .kaitai_struct_formats.network.microsoft_network_monitor_v2 import MicrosoftNetworkMonitorV2 + from .kaitai_struct_formats.network.packet_ppi import PacketPpi + from .kaitai_struct_formats.network.pcap import Pcap + from .kaitai_struct_formats.network.protocol_body import ProtocolBody + from .kaitai_struct_formats.network.rtcp_payload import RtcpPayload + from .kaitai_struct_formats.network.rtp_packet import RtpPacket + from .kaitai_struct_formats.network.tcp_segment import TcpSegment + from .kaitai_struct_formats.network.tls_client_hello import TlsClientHello + from .kaitai_struct_formats.network.udp_datagram import UdpDatagram + from .kaitai_struct_formats.scientific.nt_mdt.nt_mdt import NtMdt + from .kaitai_struct_formats.scientific.nt_mdt.nt_mdt_pal import NtMdtPal + from .kaitai_struct_formats.scientific.spectroscopy.avantes_roh60 import AvantesRoh60 + from .kaitai_struct_formats.scientific.spectroscopy.specpr import Specpr + from .kaitai_struct_formats.security.openpgp_message import OpenpgpMessage + from .kaitai_struct_formats.security.ssh_public_key import SshPublicKey + from .kaitai_struct_formats.serialization.asn1.asn1_der import Asn1Der + from .kaitai_struct_formats.serialization.bson import Bson + from .kaitai_struct_formats.serialization.google_protobuf import GoogleProtobuf + from .kaitai_struct_formats.serialization.microsoft_cfb import MicrosoftCfb + from .kaitai_struct_formats.serialization.msgpack import Msgpack + from .kaitai_struct_formats.serialization.ruby_marshal import RubyMarshal + from .kaitai_struct_formats.windows.regf import Regf + from .kaitai_struct_formats.windows.windows_lnk_file import WindowsLnkFile + from .kaitai_struct_formats.windows.windows_minidump import WindowsMinidump + from .kaitai_struct_formats.windows.windows_resource_file import WindowsResourceFile + from .kaitai_struct_formats.windows.windows_shell_items import WindowsShellItems + from .kaitai_struct_formats.windows.windows_systemtime import WindowsSystemtime + #------------------------------------------------------------------------------ # Qt/Kaitai OOP #------------------------------------------------------------------------------ @@ -428,7 +597,7 @@ def populate_child(ksobj, fieldName, fieldLabel, fieldValue, widget): widget.setEnd(end) #------------------------------------------------------------------------------ -# main() - for dev testing +# main()/ - for dev testing #------------------------------------------------------------------------------ if __name__ == '__main__': diff --git a/python/examples/kaitai/view.py b/python/examples/kaitai/view.py index 888049ac..f861b275 100644 --- a/python/examples/kaitai/view.py +++ b/python/examples/kaitai/view.py @@ -207,12 +207,28 @@ class KaitaiViewType(ViewType): # data.file: FileMetadata # data.raw: BinaryView - if binaryView == binaryView.file.raw: - #print 'returning priority=100 for FileView' - return 100 - else: - #print 'returning priority 0, not given a raw view' - return 0 + priority = 0 + isExec = binaryView.executable + weRecognize = kshelpers.id_data(binaryView.read(0,16)) != None + + # NOTE: ui/shared/hexeditor.cpp has the hex editor at priority 20 when + # executable, and 10 otherwise + + if isExec and weRecognize: + #print 'priority=25 to slightly beat out the hex editor case=(executable, recognize)' + priority = 25 + if isExec and not weRecognize: + #print 'priority=15 to lose to the hex editor case=(executable, !recognize)' + priority = 15 + if not isExec and weRecognize: + #print 'priority=100 to beat out everything case=(!executable, recognize)' + priority = 100 + if not isExec and not weRecognize: + #print 'priority=5 to lose to hex editor case=(!executable, !recognize)' + priority = 5 + + #print 'returning priority=%d for KaitaiViewType' % priority + return priority def create(self, binaryView, view_frame): return KaitaiView(view_frame, binaryView) |
