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, "-------------------------------")
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)
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, "-------------------------------")
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, "-------------------------------")
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, "-------------------------------")
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
def comment_xrefs(self, ea, comment): for xref in XrefsTo(ea): idaapi.add_long_cmt(xref.frm, 1, comment)