47 lines
1.5 KiB
Python
47 lines
1.5 KiB
Python
import pefile
|
|
def importKnownPackers(filePath):
|
|
knownPackers =[]
|
|
try:
|
|
with open(filePath) as packerPath:
|
|
for line in packerPath:
|
|
knownPackers.append(line.strip())
|
|
except:
|
|
print("Error reading given file.")
|
|
return None
|
|
|
|
return knownPackers
|
|
def detectPackers(pe, knownPackers):
|
|
sections=[]
|
|
for section in pe.sections:
|
|
sections.append(section.Name.decode('utf-8').strip('\x00'))
|
|
matches=[]
|
|
|
|
for section in sections:
|
|
for item_section in knownPackers:
|
|
if section == item_section or item_section==item_section.swapcase():
|
|
matches.append(section)
|
|
|
|
return matches
|
|
|
|
def detect_pack_res(targetMalware= "./pack/UPX.exe"):
|
|
knownPackerFile = "knownPackerSections.txt"
|
|
targetMalware = pefile.PE(targetMalware)
|
|
knownPackers = importKnownPackers(knownPackerFile)
|
|
detectedPackers = detectPackers(targetMalware, knownPackers)
|
|
if detectedPackers:
|
|
# print("有加壳")
|
|
return True
|
|
else:
|
|
# print("无加壳")
|
|
return False
|
|
if __name__ == '__main__':
|
|
# targetMalware = "./pack/UPX.exe"
|
|
# knownPackerFile = "knownPackerSections.txt"
|
|
#
|
|
# targetMalware = pefile.PE(targetMalware)
|
|
# knownPackers = importKnownPackers(knownPackerFile)
|
|
# print(knownPackers)
|
|
# detectedPackers = detectPackers(targetMalware, knownPackers)
|
|
# for item in detectedPackers:
|
|
# print(item)
|
|
detect_pack_res(targetMalware= "./pack/UPX.exe") |