• Python:处理不是经由EXPORT出來的Windows日志


    问题描述(需求地址):

    在A机器上的日志(*.Evt)文件在A机器上可以直接读取,但是我将A机器上的日志文件拷贝到B机器上打开的时候,就会提示文件已损坏。

    解决办法:

    1. 首先找到 0x11111111222222223333333344444444 將之后16bytes 抄下,这16bytes会在0x28000000前,

    2. 回到文件开头,把这16bytes从第17byte开始复写到32byte,

    3. 最後再改第37byte的值為 0x08,就可以读进事件管理器了。

    Python脚本:

     1 import os, sys
     2 import binascii
     3 import time
     4 
     5 def convertfile(infile, outfile):
     6     
     7     fread = open(infile, "rb")  
     8     findedstr = ""
     9     
    10     while 1:
    11         strpart = fread.read(8192).encode('hex')
    12 
    13         '''if at the end or less than 32 char'''
    14         if strpart == "" or len(strpart) < 32 :
    15             break
    16 
    17         strposition = strpart.find("11111111222222223333333344444444")
    18         if strposition <> -1:
    19             '''if pos at end'''
    20             remainstrlen = len(strpart)-strposition - 32
    21             if remainstrlen < 64:
    22                 findedstr = strpart[strposition+32:] + fread.read((64-remainstrlen)/2).encode('hex')
    23             else:
    24                 findedstr = strpart[strposition+32:strposition+64]
    25                 
    26             break
    27         
    28         '''get top32 char and end32 char'''
    29         prepartendstr = strpart[-64:]
    30 
    31         '''read next 64 char'''
    32         nextpartstartstr = fread.read(64).encode('hex')
    33         joinstr = prepartendstr + nextpartstartstr
    34 
    35         strposition = joinstr.find("11111111222222223333333344444444")
    36         if strposition <> -1:
    37             remainstrlen = len()-strposition-32
    38             if remainstrlen < 64:
    39                 findedstr = strpart[strposition+32:] + fread.read((64-remainstrlen)/2).encode('hex')
    40             else:
    41                 findedstr = strpart[strposition+32:strposition+64]
    42         
    43             break
    44 
    45         fread.seek(-64,1)
    46         
    47     fread.close()    
    48     print "String find: %s"%findedstr
    49 
    50     '''reread and write to new file'''
    51     reread = open(infile, "rb")
    52     fwrite = open(outfile, "wb")
    53     partcount = 1
    54 
    55     while 1:
    56         instr = reread.read(8192)   
    57         if instr == "" :
    58             break
    59         
    60         if partcount <> 1:
    61             fwrite.write(instr)
    62         else:
    63             instr = instr.encode('hex')
    64             instr = instr[:32] + findedstr + instr[64:]
    65             instr = instr[:72] + "08" + instr[74:]
    66             fwrite.write(instr.decode('hex'))
    67             
    68         partcount += 1
    69 
    70     fwrite.close()
    71     reread.close()    
    72 
    73 
    74 
    75 if __name__ == "__main__":
    76     if len(sys.argv) == 1 :
    77         infilepath = raw_input("Please input the path of EVT file -> ")
    78         outfilepath = infilepath[:infilepath.rfind(".")] + ".new.Evt"
    79     elif len(sys.argv) == 2 :
    80         infilepath = sys.argv[1]
    81         outfilepath = infilepath[:infilepath.rfind(".")] + ".new.Evt"
    82     elif len(sys.argv) == 3:
    83         infilepath = sys.argv[1]
    84         outfilepath = sys.argv[2]
    85     else:
    86         print "Error args ."
    87         raw_input("")
    88         sys.exit()
    89     
    90     starttime = time.time()    
    91     print "Running..."
    92     convertfile(infilepath, outfilepath)
    93     print "Done ."    
    94     endtime = time.time()
    95     print "Time used: ",(endtime - starttime)," s"

    错误截图:

  • 相关阅读:
    N的阶乘 51Nod
    hdu1176 免费馅饼(dp)~~~~~~~~~~~~~~~~~
    细胞
    红与黑
    迷宫
    【TFLSnoi李志帅】---sort
    【TFLSnoi李志帅】---全排列例题
    【TFLSnoi李志帅】---全排列和组合
    【TFLSnoi李志帅】---栈
    【TFLSnoi李志帅】---函数递归
  • 原文地址:https://www.cnblogs.com/cstudio/p/2855858.html
Copyright © 2020-2023  润新知