Python 扫描PE文件头信息

'''
Python 扫描PE文件头信息 by 郑瑞国
getPEinfo.py
'''
import os
import string
import hashlib
import pefile
import datetime
 
def gethash(file):
    m = hashlib.md5()
    s = hashlib.sha1()
    s256 = hashlib.sha256()
    with open(file,'rb') as f:
        for line in f:
            m.update(line)
            s.update(line)
            s256.update(line)
    md5code = m.hexdigest()
    sha1code = s.hexdigest()
    sha256code = s256.hexdigest()
    return (md5code,sha1code,sha256code)
 
def getdisklist():
    disklist = []
    d = string.ascii_uppercase
    #print(d)
    for w in d:        
        disk = w+':'        
        if os.path.isdir(disk):            
            disklist.append(disk)
    return disklist    
 
def scan(disklist):
    #print(disklist)
    for disk in disklist:
        #print(disk)
        os.chdir(disk+'/')
        tree = os.walk('/')
        for dir in tree:
            for file in dir[2]:
                exname = os.path.splitext(file) 
                if '.exe'in exname[1] or '.dll'in exname[1]:
                    myfile = disk+dir[0]+'/'+file
                    try:
                        pe = pefile.PE(myfile)
                        warning = pe.get_warnings()
                        mymd5code,mysha1code,mysha256code = gethash(myfile)
                        if warning:
                            print()
                            with open ('d:/md5.txt','a') as f:
                                f.write(myfile+'\n'+mymd5code+'\n'+str(warning)+'\n')
                            print(myfile)
                            print('MD5: ',mymd5code)
                            print('SHA-1:',mysha1code)
                            print('SHA-256:',mysha256code)
                            print('File Name:',os.path.basename(myfile))
                            print('File Size:',os.path.getsize(myfile),'byte')
                            print('Optional Header:',hex(pe.OPTIONAL_HEADER.ImageBase))
                            print('EntryPoint:',pe.OPTIONAL_HEADER.AddressOfEntryPoint)
                            print('Compile Time:',datetime.datetime.fromtimestamp(pe.FILE_HEADER.TimeDateStamp))
                            print('Subsystem:',pefile.SUBSYSTEM_TYPE[pe.OPTIONAL_HEADER.Subsystem])
                            print('DLL:',pe.FILE_HEADER.IMAGE_FILE_DLL)
                            print('Sections:',pe.FILE_HEADER.NumberOfSections)
                            print('warning:')
                            for w in warning:
                                print(w)
                            for importdll in pe.DIRECTORY_ENTRY_IMPORT:
                                print(importdll.dll.decode())
                    except:
                        pass
                    
if __name__=='__main__':
    disklist = getdisklist()
    scan(disklist)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空云风语

人工智能,深度学习,神经网络

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值