Esempio n. 1
0
def header_info(li):
    idaapi.add_long_cmt(0, True, "-------------------------------")
    li.seek(0x100)
    idc.ExtLinA(0, 1, "; ROM HEADER")
    idc.ExtLinA(
        0, 2,
        "; Entry Point : %04X" % (struct.unpack("<I", li.read(4))[0] >> 0x10))
    li.read(0x30)
    idc.ExtLinA(0, 3, "; TITLE : %s" % li.read(0xF))
    idc.ExtLinA(0, 4, "; Manufacturer Code : %s" % li.read(4))
    idc.ExtLinA(0, 5, "; CGB Flag : %02X" % struct.unpack("<B", li.read(1))[0])
    idc.ExtLinA(
        0, 6,
        "; New Licensee Code : %02X" % struct.unpack("<B", li.read(1))[0])
    idc.ExtLinA(0, 7, "; SGB Flag : %02X" % struct.unpack("<B", li.read(1))[0])
    idc.ExtLinA(0, 8,
                "; Cartridge Type : %02X" % struct.unpack("<B", li.read(1))[0])
    idc.ExtLinA(0, 9, "; ROM Size : %02X" % struct.unpack("<B", li.read(1))[0])
    idc.ExtLinA(0, 10,
                "; RAM Size : %02X" % struct.unpack("<B", li.read(1))[0])
    idc.ExtLinA(
        0, 11,
        "; Destination Code : %02X" % struct.unpack("<B", li.read(1))[0])
    idc.ExtLinA(
        0, 12,
        "; Old license Code : %02X" % struct.unpack("<B", li.read(1))[0])
    idc.ExtLinA(
        0, 13, "; Mask ROM Version number : %02X" %
        struct.unpack("<B", li.read(1))[0])
    idc.ExtLinA(
        0, 14, "; Header Checksum : %02X" % struct.unpack("<B", li.read(1))[0])
    idc.ExtLinA(
        0, 15, "; Global Checksum : %02X" % struct.unpack("<B", li.read(1))[0])
    idc.ExtLinA(0, 16, "-------------------------------")
Esempio n. 2
0
 def searchClickedIndex_Slot(self, value, local_comment_data=None):
     a = idaapi.jumpto(value)
     # Highlight the current line in IDA views
     idc.SetColor(value, idc.CIC_ITEM, 0x90EE90)
     if local_comment_data:
         # Add the flow-max information (e.g, call hit 42 times)
         idaapi.add_long_cmt(value, 1, local_comment_data)
     self.selectRow(value)
Esempio n. 3
0
 def searchClickedIndex_Slot(self, value, local_comment_data=None):
     a = idaapi.jumpto(value)
     # Highlight the current line in IDA views
     idc.SetColor(value, idc.CIC_ITEM, 0x90EE90)
     if local_comment_data:
         # Add the flow-max information (e.g, call hit 42 times)
         idaapi.add_long_cmt(value, 1, local_comment_data)
     self.selectRow(value)
Esempio n. 4
0
def header_info(li, addr):
	idaapi.add_long_cmt(addr, True, "-------------------------------")
	li.seek(0x0)
	idc.ExtLinA(addr, 1,  "; ROM HEADER")
	idc.ExtLinA(addr, 2,  "; Signature : %s" % li.read(4))
	idc.ExtLinA(addr, 3,  "; Number of 16K PRG-ROM Pages : %02X" % struct.unpack("<B", li.read(1))[0])
	idc.ExtLinA(addr, 4,  "; Number of 8K CHR-ROM Pages : %02X" % struct.unpack("<B", li.read(1))[0])
	idc.ExtLinA(addr, 5,  "; Cartridge Type LSB : %02X" % struct.unpack("<B", li.read(1))[0])
	idc.ExtLinA(addr, 6,  "; Cartridge Type MSB : %02X" % struct.unpack("<B", li.read(1))[0])
	idc.ExtLinA(addr, 7,  "; Number of 8K RAM : %02X" % struct.unpack("<B", li.read(1))[0])
	idc.ExtLinA(addr, 8,  "-------------------------------")
Esempio n. 5
0
def header_info(li):
	idaapi.add_long_cmt(0, True, "-------------------------------")
	li.seek(0x100)
	idc.ExtLinA(0, 1,  "; ROM HEADER")
	idc.ExtLinA(0, 2,  "; Entry Point : %04X" % (struct.unpack("<I", li.read(4))[0] >> 0x10))
	li.read(0x30)
	idc.ExtLinA(0, 3,  "; TITLE : %s" % li.read(0xF))
	idc.ExtLinA(0, 4,  "; Manufacturer Code : %s" % li.read(4))
	idc.ExtLinA(0, 5,  "; CGB Flag : %02X" % struct.unpack("<B", li.read(1))[0])
	idc.ExtLinA(0, 6,  "; New Licensee Code : %02X" % struct.unpack("<B", li.read(1))[0])
	idc.ExtLinA(0, 7,  "; SGB Flag : %02X" % struct.unpack("<B", li.read(1))[0])
	idc.ExtLinA(0, 8,  "; Cartridge Type : %02X" % struct.unpack("<B", li.read(1))[0])
	idc.ExtLinA(0, 9,  "; ROM Size : %02X" % struct.unpack("<B", li.read(1))[0])
	idc.ExtLinA(0, 10,  "; RAM Size : %02X" % struct.unpack("<B", li.read(1))[0])
	idc.ExtLinA(0, 11,  "; Destination Code : %02X" % struct.unpack("<B", li.read(1))[0])
	idc.ExtLinA(0, 12,  "; Old license Code : %02X" % struct.unpack("<B", li.read(1))[0])
	idc.ExtLinA(0, 13,  "; Mask ROM Version number : %02X" % struct.unpack("<B", li.read(1))[0])
	idc.ExtLinA(0, 14,  "; Header Checksum : %02X" % struct.unpack("<B", li.read(1))[0])
	idc.ExtLinA(0, 15,  "; Global Checksum : %02X" % struct.unpack("<B", li.read(1))[0])
	idc.ExtLinA(0, 16,  "-------------------------------")
Esempio n. 6
0
def header_info(li, addr):
    idaapi.add_long_cmt(addr, True, "-------------------------------")
    li.seek(0x0)
    idc.ExtLinA(addr, 1, "; ROM HEADER")
    idc.ExtLinA(addr, 2, "; Signature : %s" % li.read(4))
    idc.ExtLinA(
        addr, 3, "; Number of 16K PRG-ROM Pages : %02X" %
        struct.unpack("<B", li.read(1))[0])
    idc.ExtLinA(
        addr, 4, "; Number of 8K CHR-ROM Pages : %02X" %
        struct.unpack("<B", li.read(1))[0])
    idc.ExtLinA(
        addr, 5,
        "; Cartridge Type LSB : %02X" % struct.unpack("<B", li.read(1))[0])
    idc.ExtLinA(
        addr, 6,
        "; Cartridge Type MSB : %02X" % struct.unpack("<B", li.read(1))[0])
    idc.ExtLinA(
        addr, 7,
        "; Number of 8K RAM : %02X" % struct.unpack("<B", li.read(1))[0])
    idc.ExtLinA(addr, 8, "-------------------------------")
Esempio n. 7
0
def load_file(li, neflags, format):
    if format != ROM_FORMAT_NAME:
        Warning("Unknown format name: '%s'" % format)
        return 0
    jump = dwordAt(li, 0)
    # Test ARM branch
    if jump & 0xFF000000 != 0xEA000000:
        Warning("Unknown format name: '%s'" % format)
        return 0
    idaapi.set_processor_type("arm", SETPROC_ALL | SETPROC_FATAL)
    li.seek(0, idaapi.SEEK_END)
    size = li.tell()

    # Adding Header Section
    idc.AddSeg(ROM_START, ROM_START + SIZE_HEADER, 0, 1, idaapi.saRelPara,
               idaapi.scPub)
    idc.RenameSeg(ROM_START, "HEADER")
    idc.SetSegmentType(ROM_START, idc.SEG_CODE)
    li.seek(0)
    li.file2base(0, ROM_START, ROM_START + SIZE_HEADER, 0)

    # Adding OEP
    idaapi.add_entry(ROM_START, ROM_START, "start", 1)
    idaapi.cvar.inf.startIP = ROM_START
    idaapi.cvar.inf.beginEA = ROM_START

    # Adding ROM Section
    idc.AddSeg(ROM_START + SIZE_HEADER, ROM_START + (ROM_SIZE - SIZE_HEADER),
               0, 1, idaapi.saRelPara, idaapi.scPub)
    idc.RenameSeg(ROM_START + SIZE_HEADER, "ROM")
    idc.SetSegmentType(ROM_START + SIZE_HEADER, idc.SEG_CODE)
    li.seek(SIZE_HEADER)
    li.file2base(0, ROM_START + SIZE_HEADER, ROM_START + size, 0)

    # Adding EWRAM
    idc.AddSeg(0x02000000, 0x02040000, 0, 1, idaapi.saRelPara, idaapi.scPub)
    idc.RenameSeg(0x02000000, "EWRAM")
    memset_seg(0x02000000, 0x40000)

    # Adding IWRAM
    idc.AddSeg(0x03000000, 0x03008000, 0, 1, idaapi.saRelPara, idaapi.scPub)
    idc.RenameSeg(0x03000000, "IWRAM")
    memset_seg(0x03000000, 0x8000)

    # Adding IO / Registers
    idc.AddSeg(0x04000000, 0x04000400, 0, 1, idaapi.saRelPara, idaapi.scPub)
    idc.RenameSeg(0x04000000, "IOregisters")
    memset_seg(0x04000000, 0x400)

    # Adding BIOS System ROM
    idc.AddSeg(0x00000000, 0x00004000, 0, 1, idaapi.saRelPara, idaapi.scPub)
    idc.RenameSeg(0x00000000, "BIOS")
    memset_seg(0x00000000, 0x4000)
    idc.SetSegmentType(0x0000000, idc.SEG_CODE)

    idaapi.add_long_cmt(ROM_START, True, "ROM HEADER")
    li.seek(0xA0)
    idc.ExtLinA(ROM_START, 1, "; Game Title : %s" % li.read(12))
    idc.ExtLinA(ROM_START, 2, "; Game Code : %s" % li.read(4))
    idc.ExtLinA(ROM_START, 3, "; Marker Code : %s" % li.read(2))
    idc.ExtLinA(ROM_START, 4,
                "; Fixed value : %02X" % struct.unpack("<B", li.read(1))[0])
    idc.ExtLinA(ROM_START, 5,
                "; Main unit code : %02X" % struct.unpack("<B", li.read(1))[0])
    idc.ExtLinA(ROM_START, 6,
                "; Device type : %02X" % struct.unpack("<B", li.read(1))[0])
    idc.ExtLinA(ROM_START, 7, "; Reserved Area : db 7 dup(0)")
    li.read(7)
    idc.ExtLinA(ROM_START, 8,
                "; Software version %02X" % struct.unpack("<B", li.read(1))[0])
    idc.ExtLinA(ROM_START, 9,
                "; Complement Check %02X" % struct.unpack("<B", li.read(1))[0])
    idc.ExtLinA(ROM_START, 10, "; Reserved Area : db 2 dup(0)")

    io_naming()
    print("[+] Load OK")
    return 1
Esempio n. 8
0
 def comment_xrefs(self, ea, comment):
     for xref in XrefsTo(ea):
         idaapi.add_long_cmt(xref.frm, 1, comment)
Esempio n. 9
0
def load_file(li, neflags, format):
    if format != ROM_FORMAT_NAME:
        Warning("Unknown format name: '%s'" % format)
        return 0
    jump = dwordAt(li, 0)
    # Test ARM branch
    if jump & 0xFF000000 != 0xEA000000:
        Warning("Unknown format name: '%s'" % format)
        return 0
    idaapi.set_processor_type("arm", SETPROC_ALL | SETPROC_FATAL)
    li.seek(0, idaapi.SEEK_END)
    size = li.tell()

    # Adding Header Section
    idc.AddSeg(ROM_START, ROM_START + SIZE_HEADER, 0, 1, idaapi.saRelPara, idaapi.scPub)
    idc.RenameSeg(ROM_START, "HEADER")
    idc.SetSegmentType(ROM_START, idc.SEG_CODE)
    li.seek(0)
    li.file2base(0, ROM_START, ROM_START + SIZE_HEADER, 0)

    # Adding OEP
    idaapi.add_entry(ROM_START, ROM_START, "start", 1)
    idaapi.cvar.inf.startIP = ROM_START
    idaapi.cvar.inf.beginEA = ROM_START

    # Adding ROM Section
    idc.AddSeg(ROM_START + SIZE_HEADER, ROM_START + (ROM_SIZE - SIZE_HEADER), 0, 1, idaapi.saRelPara, idaapi.scPub)
    idc.RenameSeg(ROM_START + SIZE_HEADER, "ROM")
    idc.SetSegmentType(ROM_START + SIZE_HEADER, idc.SEG_CODE)
    li.seek(SIZE_HEADER)
    li.file2base(0, ROM_START + SIZE_HEADER, ROM_START + size, 0)

    # Adding EWRAM
    idc.AddSeg(0x02000000, 0x02040000, 0, 1, idaapi.saRelPara, idaapi.scPub)
    idc.RenameSeg(0x02000000, "EWRAM")
    memset_seg(0x02000000, 0x40000)

    # Adding IWRAM
    idc.AddSeg(0x03000000, 0x03008000, 0, 1, idaapi.saRelPara, idaapi.scPub)
    idc.RenameSeg(0x03000000, "IWRAM")
    memset_seg(0x03000000, 0x8000)

    # Adding IO / Registers
    idc.AddSeg(0x04000000, 0x04000400, 0, 1, idaapi.saRelPara, idaapi.scPub)
    idc.RenameSeg(0x04000000, "IOregisters")
    memset_seg(0x04000000, 0x400)

    # Adding BIOS System ROM
    idc.AddSeg(0x00000000, 0x00004000, 0, 1, idaapi.saRelPara, idaapi.scPub)
    idc.RenameSeg(0x00000000, "BIOS")
    memset_seg(0x00000000, 0x4000)
    idc.SetSegmentType(0x0000000, idc.SEG_CODE)

    idaapi.add_long_cmt(ROM_START, True, "ROM HEADER")
    li.seek(0xA0)
    idc.ExtLinA(ROM_START, 1, "; Game Title : %s" % li.read(12))
    idc.ExtLinA(ROM_START, 2, "; Game Code : %s" % li.read(4))
    idc.ExtLinA(ROM_START, 3, "; Marker Code : %s" % li.read(2))
    idc.ExtLinA(ROM_START, 4, "; Fixed value : %02X" % struct.unpack("<B", li.read(1))[0])
    idc.ExtLinA(ROM_START, 5, "; Main unit code : %02X" % struct.unpack("<B", li.read(1))[0])
    idc.ExtLinA(ROM_START, 6, "; Device type : %02X" % struct.unpack("<B", li.read(1))[0])
    idc.ExtLinA(ROM_START, 7, "; Reserved Area : db 7 dup(0)")
    li.read(7)
    idc.ExtLinA(ROM_START, 8, "; Software version %02X" % struct.unpack("<B", li.read(1))[0])
    idc.ExtLinA(ROM_START, 9, "; Complement Check %02X" % struct.unpack("<B", li.read(1))[0])
    idc.ExtLinA(ROM_START, 10, "; Reserved Area : db 2 dup(0)")

    io_naming()
    print("[+] Load OK")
    return 1