固件解码后常含有二进制文件和文本文件,在二进制文件或者文本文件进行关键字搜索的时候根据魔数进行文件关键字匹配就ok了。
import magic
import re
import os
def user_search_kw(ff, keyword, bin_search):
'''
:param ff: 含路径的文件名
:param keyword: 搜索关键词
:param bin_search: 是否进行二进制搜索
:return:
'''
try:
with open (ff, 'r') as keyword_search:
text = keyword_search.read()
hits = re.findall(keyword, text, re.I)
if hits:
magic_mime = magic.from_file(ff, mime=True) #文件类型和版本号
mime_kw = 'x-executable|x-sharedlib|octet-stream|x-object' ###可执行文件、链接库、动态流、对象
magic_hit = re.search(mime_kw, magic_mime, re.I)
if magic_hit:
if bin_search is True:
offset_list = []
for m in re.finditer(keyword, text, re.I):
offset_list.append(m.start())
##二进制文件
print ("Non-Plain Text File, Keyword: '%s', File: %s, Offset(s) in File: " % (keyword, ff) + ", ".join('0x%x'%x for x in offset_list) + "\n")
else:
##文本文件
print ("Plain Text File, Keyword: '%s