目前这里只支持下面这几种指令集的识别法。
这种方法针对传统的二进制文件是有一定的意义的,但是针对固件是不能很好地判断,因为许多的固件头部信息被抹去。
关于固件的指令集判断方法,想了解的留言私信我。
废话不多说,直接上代码:
def check_arch(ff):
'''ff为文件名'''
#可执行文件、链接库、动态流、对象
mime_kw = 'x-executable|x-sharedlib|octet-stream|x-object'
ISADict = {b'\x00':'No Specific Instruction Set',
b'\x02':'SPARC' ,
b'\x03':'x86',
b'\x08':'MIPS',
b'\x14':'PowerPC',
b'\x16':'S390',
b'\x28':'ARM',
b'\x2a':'SuperH',
b'\x32':'IA-64',
b'\x3e':'x86-64',
b'\xb7':'Arch64',
b'\xf3':'RISC-V'
}
magic_mime = magic.from_file(ff, mime=True) #create the file's type 读取文件类型
magic_hit = re.search(mime_kw, magic_mime, re.I)
if magic_hit:
with open(ff, "rb") as f:
byte = f.read(20) ###
for key, value in ISADict.items():
if byte[5] == b'\x01' and byte[18] == key: ##魔术的格式
return value
else:
if byte[5] == b'\x02' and byte[19] == key:
return value