Skip to content

Commit 2e8f359

Browse files
committed
added some json functionality, can output to screen
1 parent 7d172a5 commit 2e8f359

1 file changed

Lines changed: 39 additions & 5 deletions

File tree

scripts/evtx_dump.py

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919
# Version v0.1.1
2020
import Evtx.Evtx as evtx
2121
import Evtx.Views as e_views
22+
import os
23+
import xmltodict
24+
from typing import Dict
2225

2326

2427
def main():
@@ -28,14 +31,45 @@ def main():
2831
description="Dump a binary EVTX file into XML.")
2932
parser.add_argument("evtx", type=str,
3033
help="Path to the Windows EVTX event log file")
34+
parser.add_argument("-o","--output",type=str,help="Path to the output file")
3135
args = parser.parse_args()
3236

3337
with evtx.Evtx(args.evtx) as log:
34-
print(e_views.XML_HEADER)
35-
print("<Events>")
36-
for record in log.records():
37-
print(record.xml())
38-
print("</Events>")
38+
39+
if (args.output):
40+
if(os.path.splitext(args.output)[1]==".json"):
41+
for record in log.records():
42+
data_dict=xmltodict.parse(record.xml()) #convert the xml to a dictionary
43+
'''
44+
for event_system_key,event_system_value in data_dict['Event']['System'].items(): #loop through each key and value pair
45+
if isinstance(data_dict['Event']['System'][str(event_system_key)],Dict): #if the dictionary is nested, enter the dictionary
46+
sublist=[]
47+
for event_system_subkey,event_system_subvalue in data_dict['Event']['System'][str(event_system_key)].items(): #loop through the nested dictionary
48+
print(event_system_key+"_"+event_system_subkey[1:] + ":" + str(event_system_subvalue))
49+
else:
50+
print(event_system_key + ":" + str(event_system_value))
51+
'''
52+
for event_system_key, event_system_value in data_dict['Event']['System'].items(): # loop through each key and value pair
53+
if (event_system_key=="EventRecordID"):
54+
json_subline = {}
55+
firstline={event_system_key:event_system_value}
56+
json_subline.update(firstline)
57+
for event_data_key, event_data_value in data_dict['Event']['EventData'].items(): # loop through each key and value pair
58+
for values in event_data_value:
59+
for event_data_subkey,event_data_subvalue in values.items():
60+
if event_data_subkey=="@Name":
61+
data_name=event_data_subvalue
62+
else:
63+
data_value=event_data_subvalue
64+
json_subline.update({data_name:data_value})
65+
else:
66+
print("Invalid File Type")
67+
else:
68+
print(e_views.XML_HEADER)
69+
print("<Events>")
70+
for record in log.records():
71+
print(record.xml())
72+
print("</Events>")
3973

4074

4175
if __name__ == "__main__":

0 commit comments

Comments
 (0)