sobinist

Rayman 3 MAC extract structs

Mar 28th, 2021
459
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.59 KB | None | 0 0
  1. import array as arr
  2. import idaapi
  3. import idautils
  4.  
  5. import idc
  6. import operator
  7. import os
  8. import glob
  9.  
  10. offsets = arr.array('I', [0x28DCA6,0x28DCBF,0x28DD20,0x28DDD1,0x28DE23,0x28DE50,0x28DE63,0x28E142,0x28E159,0x28E16F,0x28E234,0x28E28B,0x28E35A,0x28E38E,0x28E3BC,0x28E3DF,0x28E412,0x28E423,0x28E434,0x28E447,0x28E451,0x28E47B,0x28E48F,0x28E49A,0x28E4A5,0x28E4C4,0x28E511,0x28E526,0x28E559,0x28E693,0x28E7E0,0x28E8B8,0x28E8DA,0x28E91F,0x28E93D,0x28E989,0x28E99E,0x28E9B3,0x28E9BC,0x28EAA1,0x28EB05,0x28EB1C,0x28EB46,0x28EB5A,0x28EB82,0x28EB9C,0x28EBB6,0x28EBCC,0x28EC19,0x28EC4F,0x28EC9E,0x28ECBD,0x28ECD2,0x28ECE2,0x28ECFE,0x28ED76,0x28EF1D,0x28EF34,0x28EF81,0x28F093,0x28F0AD,0x28F0C3,0x28F0E1,0x28F0E8,0x28F0EE,0x28F0F6,0x28F0FF,0x28F1D4,0x28F1E8,0x28F251,0x28F266,0x28F43B,0x28F457,0x28F4A0,0x28F4BB,0x28F4E7,0x28F4EF,0x28F51B,0x28F53A,0x28F55B,0x28F576,0x28F5CF,0x28F675,0x28F67F,0x28F72A,0x28F74C,0x28F76B,0x28F775,0x28F77F,0x28F84E,0x28F96B,0x28FAE4,0x28FAFD,0x28FB03,0x28FB5B,0x28FB8B,0x28FBA9,0x28FBDE,0x28FC25,0x28FCC4,0x28FD15,0x28FD27,0x28FD3E,0x28FDA3,0x28FE27,0x28FF64,0x28FF77,0x28FFFC,0x290072,0x29020A,0x29024B,0x2902B4,0x2902CD,0x29032F,0x290356,0x29038D,0x2903AE,0x2903D5,0x2903F2,0x290404,0x290412,0x29044E,0x290462,0x290476,0x29049A,0x2904DF,0x2904E7,0x2904EF,0x29051C,0x290538,0x290596,0x2905CD,0x290643,0x29067B,0x29069F,0x2906CD,0x2906FC,0x290745,0x290778,0x2907A2,0x2907B2,0x2907C7,0x2907EB,0x290811,0x290836,0x290858,0x29086B,0x29095E,0x290987,0x2909D6,0x290A0A,0x290A41,0x290A76,0x290AA6,0x290ADF,0x290B18,0x290B4F,0x290B88,0x290BC3,0x290BFB,0x290C44,0x290C83,0x290CCD,0x290D0C,0x290D54,0x290D9A,0x290DDC,0x290E14,0x290E54,0x290E85,0x290EB6,0x290EEE,0x290F1D,0x290F49,0x290F77,0x290FAA,0x290FDB,0x291007,0x291032,0x291067,0x29109E,0x2910DD,0x29114F,0x291187,0x291660,0x2916C5,0x2916FB,0x29170E,0x291721,0x29172F,0x29173F,0x29174F,0x2917E3,0x291898,0x2918D7,0x2918FC,0x29190A,0x291AAD,0x291ACC,0x291B10,0x291B1D,0x291BAC,0x291BC0,0x291BDA,0x291C0B,0x291C51,0x291C83,0x291CAE,0x291EAC,0x291F2C,0x291F9F,0x2920C0,0x2921E5,0x29227E,0x2922E5,0x292385,0x2926DD,0x292705,0x29271E,0x292763,0x292778,0x2927C9,0x29282C,0x29286E,0x292893,0x292908,0x29295A,0x292973,0x2929EE,0x292A09,0x292A36,0x292A50,0x292AA0,0x292ADE,0x292B09,0x292B4B,0x292B97,0x292BD3,0x292C14,0x292C56,0x292CAD,0x292CF6,0x292D4D,0x292E18,0x292E55,0x292EA0,0x292EAC,0x292EFF,0x292F76,0x292FE4,0x29308C,0x2930CC,0x293100,0x29310F,0x293128,0x293142,0x2931D7,0x2931FE,0x293245,0x29326E,0x293293,0x2932BE,0x2932E6,0x293347,0x29339D,0x2933AC,0x2933E2,0x29340C,0x293434,0x293474,0x2934B2,0x2934DE,0x2934FD,0x29354E,0x29359B,0x2935E0,0x293655,0x29366D,0x2936C7,0x2936FD,0x293794,0x2937CB,0x2937EF,0x2938AD,0x2938E3,0x2938FF,0x293930,0x293998,0x2939AA,0x2939F6,0x293A2F,0x293A66,0x293A73,0x293AAD,0x293ABE,0x293B0E,0x293B42,0x293B61,0x293C08,0x293C2D,0x293CAA,0x293E7B,0x293EA1,0x293EC7,0x293F00,0x293F2C,0x293FDD,0x293FF6,0x293FFC,0x294005,0x29400B,0x29401D,0x29403A,0x294091,0x29409C,0x2940E2,0x294105,0x294133,0x2941B6,0x294266,0x29430E,0x294355,0x2943FC,0x294489,0x2944A5,0x2944CC,0x29452C,0x2925CE,0x293EE5,])
  11.  
  12. print("[")
  13.  
  14. for offset in offsets:
  15.    
  16.     print("{")
  17.     print("\""+idaapi.get_ascii_contents2(offset, idaapi.get_max_ascii_length(offset,0), 0)+"\"")
  18.     print(":")
  19.    
  20.     xrefs = idautils.XrefsTo(offset)
  21.     xrefs_arr = []
  22.     for xref in xrefs:
  23.         xrefs_arr.append(xref)
  24.        
  25.     if (len(xrefs_arr)!=0):
  26.    
  27.         print("[")
  28.    
  29.         lastRef = xrefs_arr[-1]
  30.         #print(lastRef.type, idautils.XrefTypeName(lastRef.type),                          'from', hex(lastRef.frm), 'to', hex(lastRef.to))
  31.        
  32.         start = lastRef.frm
  33.         off = 0
  34.        
  35.         items = [];
  36.        
  37.         addr = idaapi.get_long(start+off)
  38.        
  39.         while addr!=1:
  40.        
  41.             if addr>99999:
  42.            
  43.                 string = idaapi.get_ascii_contents2(addr, idaapi.get_max_ascii_length(addr,0), 0)
  44.                
  45.                 if string is not None:
  46.                     items.append("\""+string+"\"")
  47.             #else:
  48.                 #nb = idaapi.get_long(start+off)
  49.                 #if nb is not None:
  50.                     #items.append(nb.__str__())
  51.            
  52.             off += 4
  53.             addr = idaapi.get_long(start+off)
  54.            
  55.         if (len(items)>1):
  56.             items.pop(0)
  57.             print(",".join(items))
  58.         else:
  59.             print("\"empty_"+((hex(offset)).__str__())+"\"")
  60.        
  61.         print("]")
  62.     else:
  63.         print("null");#print("No references to ", hex(offset))
  64.  
  65.     if (offset == offsets[-1]):
  66.         print("}")
  67.     else:
  68.         print("},")
  69.  
  70. print("]")
Add Comment
Please, Sign In to add comment