判断二进制文件指令集的简易方法

目前这里只支持下面这几种指令集的识别法。

这种方法针对传统的二进制文件是有一定的意义的,但是针对固件是不能很好地判断,因为许多的固件头部信息被抹去。

关于固件的指令集判断方法,想了解的留言私信我。

废话不多说,直接上代码:

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

猜你喜欢

转载自blog.csdn.net/Homewm/article/details/93179201