[PYTHON] (Pour les avocats) Extraire le comportement du logiciel Office à partir de fichiers .evtx

Il y a environ un an, j'ai écrit un article Analyse des fichiers .evtx avec Python, mais en gros, c'est une application. C'est ça?

Si un avocat l'utilise ou non pour prouver les heures de travail dans un procès ... Je me demande s'il y a des moments où je veux extraire des données qui semblent fonctionner à partir du fichier EVTX (Windows XML Event Log) qui enregistre le journal système Windows. pense. (Il semble que le fichier EVTX soit au format Win7, et cela peut être différent selon la version du système d'exploitation, mais je pense que la façon de penser ne change pas tellement.) Si l'ordinateur n'est pas sorti du bureau, cela semble aller du démarrage à l'arrêt, mais si le PC est autorisé à être retiré, il n'est pas toujours clair si le démarrage du PC en vacances est destiné au travail ou à un usage privé. Mais si vous utilisez un logiciel Office, cela peut ressembler au travail. Donc, dans la continuité de l'article précédent, utilisons Python-Evtx pour extraire ces journaux d'événements à l'aide du logiciel Office.

L'idée est presque la même que celle de l'article précédent, veuillez donc vous y référer. Ainsi, lorsque j'ai écrit un script pour lister le type de programme qui apparaît dans Data [@ Name = ProcessName] ou Data [@ Name = NewProcessName], il semble que la chaîne de caractères ʻOfficesoit incluse. J'avais l'impression que le logiciel Office fonctionnerait. Donc, si vous créez un code comme celui-ci à peu près et le faites ressembler à$ python ExtractOffice.py EventLog.evtx, il crachera un fichier appelé ʻEvents_office.tsv.

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") #Appel direct du nom de fichier(Transpiration
    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()
    
    #Travailler avec des fichiers EVTX
    with evtx.Evtx(args.evtx) as log:
        counter = 0 #Pour le rapport d'étape
        for record in log.records():
            elm = record.lxml()
            #rapport d'étape
            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="" #La valeur par défaut de ProcessName""Nishitoku
            npnt="" #NewProcessName (omis)
            try: #Essayez car un échec peut se produire
                if ("Office" in pn[0].text): #Recherche de chaîne ici
                    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) #Notez le nombre d'événements lorsque vous avez terminé.
    f.close()


if __name__ == "__main__":
    main()

Ensuite, lisez le craché ʻEvents_office.tsv` dans Excel et formatez-le correctement (→ Par exemple, Comme ceci (article séparé)), Si vous l'assemblez correctement, cela ressemblera à ça.

Quelques explications supplémentaires

Le fichier EVTX est XML pour chaque événement (Record), et il semble que les éléments Data sous // Event / EventData / ʻ ne sont pas constants selon le type de ʻEvent. Cependant, s'il y a soit ProcessName ou NewProcessName, il semble que vous puissiez d'une manière ou d'une autre savoir de quel programme le journal a été craché. Alors, j'ai essayé de compléter l'un d'entre eux. Étant donné que le même traitement est effectué pour ProcessName et NewProcessName, je comprends qu'il est préférable de refactoriser pour sortir en tant que fonction ...

Recommended Posts

(Pour les avocats) Extraire le comportement du logiciel Office à partir de fichiers .evtx
Extrait uniquement complet du résultat de Trinity
Extraire le tableau des fichiers image avec OneDrive et Python
Extraire des fichiers du stockage EC2 avec la commande scp
Rechercher des fichiers volumineux sous Linux à partir de la ligne de commande
Vérifiez l'augmentation / la diminution des pièces de monnaie pour chaque adresse de la blockchain
Etudier le web scraping dans le but d'extraire des données de Filmarks # 2
Existence du point de vue de Python
À propos du comportement de yield_per de SqlAlchemy
Extraire des chaînes de fichiers avec Python
J'ai essayé d'extraire automatiquement les mouvements des joueurs Wiire avec un logiciel
Obtenir la liste des packages de l'utilisateur spécifié à partir des packages enregistrés dans PyPI
[Python] Maîtrisez la lecture des fichiers csv. Liste des principales options pour pandas.read_csv.