[PYTHON] (Für Anwälte) Extrahieren Sie das Verhalten von Office-Software aus .evtx-Dateien

Vor ungefähr einem Jahr schrieb ich einen Artikel Analysieren von .evtx-Dateien mit Python, aber grob gesagt handelt es sich um eine Anwendung. Ist es?

Ob ein Anwalt es verwendet, um die Arbeitszeit in einem Prozess nachzuweisen oder nicht ... Ich frage mich, ob es Zeiten gibt, in denen ich Daten extrahieren möchte, die anscheinend aus der EVTX-Datei (Windows XML Event Log) funktionieren, in der das Windows-Systemprotokoll aufgezeichnet wird. Überlegen. (Es scheint, dass die EVTX-Datei im Win7-Format vorliegt und je nach Betriebssystemversion unterschiedlich sein kann, aber ich denke, dass sich die Denkweise nicht so sehr ändert.) Wenn es sich um einen PC handelt, der nicht aus dem Büro genommen wird, scheint es vom Start bis zur Beendigung in Ordnung zu sein. Wenn Sie jedoch den PC herausnehmen dürfen, ist nicht immer klar, ob der PC-Start an Feiertagen für den geschäftlichen oder privaten Gebrauch bestimmt ist. Wenn Sie jedoch Office-Software verwenden, kann dies wie Arbeit sein. Verwenden Sie also den vorherigen Artikel und verwenden Sie Python-Evtx, um solche Ereignisprotokolle mithilfe der Office-Software zu extrahieren.

Die Idee ist fast die gleiche wie im vorherigen Artikel. Bitte beziehen Sie sich darauf. Wenn ich also ein Skript geschrieben habe, um aufzulisten, welche Art von Programm in "Data [@ Name = ProcessName]" oder "Data [@ Name = NewProcessName]" erscheint, scheint die Zeichenfolge "Office" enthalten zu sein. Ich hatte das Gefühl, dass die Office-Software funktionieren würde. Wenn Sie also einen Code wie diesen grob erstellen und ihn wie "$ python ExtractOffice.py EventLog.evtx" aussehen lassen, wird eine Datei mit dem Namen "Events_office.tsv" ausgespuckt.

ExtractOffice.py


import Evtx.Evtx as evtx
from lxml import etree

schema = "http://schemas.microsoft.com/win/2004/08/events/event"

def main():
    f = open("events_office.tsv", "w") #Dateiname direkt getroffen(Schweiß
    import argparse
    
    parser = argparse.ArgumentParser(
        description="Dump a binary EVTX file into XML.")
    parser.add_argument("evtx", type=str,
                        help="Path to the Windows EVTX event log file")
    args = parser.parse_args()
    
    #Arbeiten mit EVTX-Dateien
    with evtx.Evtx(args.evtx) as log:
        counter = 0 #Für den Fortschrittsbericht
        for record in log.records():
            elm = record.lxml()
            #Fortschrittsbericht
            counter += 1
            if counter % 1000 == 0:
                print("Now on record:"+str(counter))
            
            pn = elm.xpath("//event:Data[@Name='ProcessName']", namespaces={"event":schema})
            npn = elm.xpath("//event:Data[@Name='NewProcessName']", namespaces={"event":schema})
            pnt="" #Der Standardwert von ProcessName""Nishitoku
            npnt="" #NewProcessName (weggelassen)
            try: #Versuchen Sie es, da einige Fehler auftreten können
                if ("Office" in pn[0].text): #String-Suche hier
                    pnt = pn[0].text
            except:
                pnt = ""
            try:
                if "Office" in npn[0].text:
                    npnt = npn[0].text
            except:
                npnt = ""
            
            if ( len(pnt) or len(npnt) ):
                print(
                    elm.xpath("//event:EventID", namespaces={"event":schema})[0].text
                    +"\t"+
                    elm.xpath("//event:TimeCreated", namespaces={"event":schema})[0].get("SystemTime")
                    +"\t"+pnt
                    +"\t"+npnt
                , file=f)
        print(counter) #Notieren Sie die Anzahl der Ereignisse, wenn Sie fertig sind.
    f.close()


if __name__ == "__main__":
    main()

Lesen Sie dann die Spucke Events_office.tsv in Excel aus und formatieren Sie sie entsprechend (→ Zum Beispiel Gefällt mir (separater Artikel)). Wenn Sie es richtig zusammenstellen, wird es so aussehen.

Einige ergänzende Erklärungen

Die EVTX-Datei ist XML für jedes Ereignis (Datensatz), und es scheint, dass die "Daten" -Elemente unter "// Ereignis / Ereignisdaten /" abhängig vom Typ des "Ereignisses" nicht konstant sind. Wenn es jedoch entweder "ProcessName" oder "NewProcessName" gibt, kann man anscheinend irgendwie erkennen, aus welchem Programm das Protokoll ausgespuckt wurde. Also habe ich versucht, einen von ihnen zu ergänzen. Da die gleiche Verarbeitung für ProcessName und NewProcessName ausgeführt wird, ist es meines Erachtens besser, den Refactor so zu gestalten, dass er als Funktion ausgeht ...

Recommended Posts

(Für Anwälte) Extrahieren Sie das Verhalten von Office-Software aus .evtx-Dateien
Auszug nur vollständig aus dem Ergebnis von Trinity
Extrahieren Sie die Tabelle der Bilddateien mit OneDrive & Python
Extrahieren Sie Dateien mit dem Befehl scp aus dem EC2-Speicher
Suchen Sie unter Linux über die Befehlszeile nach großen Dateien
Überprüfen Sie die Zunahme / Abnahme der Bitmünzen für jede Adresse aus der Blockchain
Studieren von Web Scraping zum Extrahieren von Daten aus Filmarks # 2
Existenz aus Sicht von Python
Über das Verhalten von Yield_per von SqlAlchemy
Extrahieren Sie mit Python Zeichenfolgen aus Dateien
Ich habe versucht, die Bewegungen von Wiire-Playern automatisch mit Software zu extrahieren
Rufen Sie die Paketliste des angegebenen Benutzers aus den in PyPI registrierten Paketen ab
[Python] Beherrsche das Lesen von CSV-Dateien. Liste der Hauptoptionen für pandas.read_csv.