Error opening event log (...) The event log file is corrupted
Przerwa w historii tamagotchi? Nie do końca, ten event log, którego nie mogę otworzyć pochodzi właśnie z tego tamagotchi.
Ważnym elementem analizy jest przeglądnięcie logów systemowych, Application , System i Security. Pliki logów są w formacie binarnym, więc ich przeglądnięcie nie jest tak łatwe, jak choćby logów sysloga. Co prawda istnieje wiele narzędzi, które potrafią na przykład zrzucić zawartość logów do plików tekstowych, które później można łatwiej (?) analizować. Większość narzędzi ma jednak pewną wadę – korzysta z funkcji API systemu. A czasami pojawia się właśnie taki miły komunikat o uszkodzeniu pliku logów. Co wtedy?
Struktura pliku jest opisana w dokumentacji udostępnionej przez firmę Microsoft. Składa się na nią:
Na podstawie tej dokumentacji napisałem sobie skrypt do odzyskiwania wpisów z plików *.evt. Takie skrypty co prawda istnieją (File-ReadEvt), ale jakoś jestem uczulony na Perla. W związku z tym napisałem sobie coś analogicznego korzystając z Pythona. Muszę przyznać, że zdziwiłem się łatwością, z jaką poradziłem sobie z tym zadaniem. W szczególności tym, że narzędzie bez problemu radzi sobie z plikiem, który podobno jest uszkodzony. O co więc chodzi z tym The event log file is corrupted?
Potem doszedłem jednak do opisu struktury ELFLOGFILEHEADER i zastanowiło mnie pole Flags, a konkretnie flaga ELFLOGFILEHEADER_DIRTY. Po dopisaniu parsowania nagłówka pliku, otrzymałem następujący rezultat:
Version: 1.1 StartOffset: 48 EndOffset: 83912 Current Record Number: 261 Oldest Record Number: 1 Max size: 65536 Flags: 9 Retention: 604800 End Header Size: 48 Flags: **ELF_LOGFILE_HEADER_DIRTY** ELF_LOGFILE_ARCHIVE_SET
Powoduje to pojawienia się naturalnego pytania: A co, jeśli wyczyszczę flagę ELFLOGFILEHEADERDIRTY?_ Okazuje się, że wyczyszczenie tej flagi pozwala już operować na pliku przy pomocy API znajdującego się w systemie, a więc również przy pomocy choćby narzędzia LogParser. Wyczyszczenie flag jest łatwe, wystarczy wyzerować zawartość pliku między 0x24 a 0x28, zgodnie z opisem struktury ELFLOGFILEHEADER.
EDIT: UWAGA – prawdopodobnie poza wyczyszczeniem flagi ELFLOGFILEHEADERDIRTY_ będzie istniała w części przypadków również potrzeba modyfikacji informacji o offsecie do rekordu ELFEOLRECORD. Informacja ta zapisana jest w polu EndOffset struktury EFLLOGFILEHEADER. Bez tej zmiany część rekordów będzie niewidoczna.
Oryginał tego wpisu dostępny jest pod adresem Error opening event log (...) The event log file is corrupted
Autor: Paweł Goleń