Forum: PC-Programmierung Format von Hexwerten erkennen


von Peter (Gast)


Lesenswert?

Rein aus Interesse und zur Übung bin ich dabei, mir ein kleines Programm 
zu schreiben was aus den Logs einer Software die Daten extrahiert (da es 
keine richtige Exportmöglichkeit hat).

Die einfacheren Werte konnte ich zuordnen, aber ich komme einfach nicht 
darauf, wie das Datum und die Uhrzeit gespeichert sind.
1
00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
2
3
A5 E8 0F EA 2F B7 CC 01 3E 73 0D 00 00 00 02 00   10.12.2011 13-14   881470 bytes down
4
A5 E8 0F EA 2F B7 CC 01 29 FA 00 00 00 01 02 00   10.12.2011 13-14    64041 bytes up
5
15 C3 C6 A9 82 B7 CC 01 85 2A 01 00 00 00 02 00   10.12.2011 23-24    76421 bytes down
6
BB 60 C4 A9 82 B7 CC 01 A1 1F 00 00 00 01 02 00   10.12.2011 23-24     8097 bytes up
7
B4 1A 4A 05 F4 CF CC 01 18 35 02 00 00 00 02 00   11.01.2012 02-03   144664 bytes down
8
BA 92 21 05 F4 CF CC 01 C0 63 00 00 00 01 02 00   11.01.2012 02-03    25536 bytes up
9
75 DE 17 43 A3 D0 CC 01 FD 19 46 00 00 00 02 00   11.01.2012 22-23  4594173 bytes down
10
5D D1 88 42 A3 D0 CC 01 85 13 04 00 00 01 02 00   11.01.2012 22-23   267141 bytes up
11
9A BA 14 F6 F3 CF CC 01 4A C9 28 00 00 00 02 00   11.01.2012 01-02  2672970 bytes down
12
2A 82 DB F5 F3 CF CC 01 A6 FD 06 00 00 01 02 00   11.01.2012 01-02   458150 bytes up
13
14
00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
15
16
00-07: Datum/Stunde?
17
08-0c: Bytes
18
0d:    Download (00) oder Upload (01)
19
0e-0f: Immer 02 00
Falls es von Interesse ist, es handelt sich um Netlimiter, Version 1.25

von fonsana (Gast)


Lesenswert?

Was fuer ein Betriebssystem?

fonsana

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Wenn du das Log auswertest warum dann nicht gleich das formatierte 
Datum?

von dochgast (Gast)


Lesenswert?

Läubi .. schrieb:
> Wenn du das Log auswertest warum dann nicht gleich das formatierte
> Datum?
Gute Frage!

Die Hypothese 00-07=Datum+Uhrzeit passt nicht so gut zu diesen zwei 
Zeilen:
1
B4 1A 4A 05 F4 CF CC 01 18 35 02 00 00 00 02 00   11.01.2012 02-03   144664 bytes down
2
BA 92 21 05 F4 CF CC 01 C0 63 00 00 00 01 02 00   11.01.2012 02-03    25536 bytes up
Gleiches Datum, gleiche Uhrzeit aber unterschiedliche Hexwerte...

-->?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Naja die Frage ist halt wieso du nicht den Klartext auswertest anstelle 
der Hexwerte?

von dochgast (Gast)


Lesenswert?

@Läubi
Ich bin nicht der TO...

von fonsana (Gast)


Lesenswert?

In *nix werden Uhrzeiten ueblicherweise als
"Anzahl der Sekunden seit dem 1. Januar 1970 00:00 Uhr GMT " 
gespeichert.
Unter Win$ ist das wohl anders.

fonsana

von dochgast (Gast)


Lesenswert?

fonsana schrieb:
> In *nix werden Uhrzeiten ueblicherweise als
> "Anzahl der Sekunden seit dem 1. Januar 1970 00:00 Uhr GMT "
> gespeichert.
Das habe ich bereits in allen Varianten durchprobiert, passt nicht... 
War meine erste Idee.

von fonsana (Gast)


Lesenswert?

Dann provoziere Eintraege mit sehr kurzem Abstand.

fonsana

von dochgast (Gast)


Lesenswert?

Ihr verwechselt mich mit dem TO!

von Eddy C. (chrisi)


Lesenswert?

Ich sage jetzt einfach mal Anzahl 100ns seit 15. Oktober 1582 (Beginn 
des gregorianischen Kalenders), womit sich auch das Rauschen in den 
niederwertigen Stellen erklärt.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Eddy Current schrieb:
> Ich sage jetzt einfach mal Anzahl 100ns seit 15. Oktober 1582 (Beginn
> des gregorianischen Kalenders), womit sich auch das Rauschen in den
> niederwertigen Stellen erklärt.

Fast

The FILETIME structure is a 64-bit value representing the number of 
100-nanosecond intervals since January 1, 1601.

typedef struct _FILETIME { // ft
    DWORD dwLowDateTime;
    DWORD dwHighDateTime;
} FILETIME;

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Allerdings unterscheidet sich der Zeitwert !

A5 E8 0F EA 2F B7 CC 01 TIME = 10.12.2011 11:36:10
15 C3 C6 A9 82 B7 CC 01 TIME = 10.12.2011 21:28:30
BB 60 C4 A9 82 B7 CC 01 TIME = 10.12.2011 21:28:30
B4 1A 4A 05 F4 CF CC 01 TIME = 11.1.2012 0:0:25
BA 92 21 05 F4 CF CC 01 TIME = 11.1.2012 0:0:25
75 DE 17 43 A3 D0 CC 01 TIME = 11.1.2012 20:54:51
5D D1 88 42 A3 D0 CC 01 TIME = 11.1.2012 20:54:50
9A BA 14 F6 F3 CF CC 01 TIME = 10.1.2012 23:59:59
2A 82 DB F5 F3 CF CC 01 TIME = 10.1.2012 23:59:59


Programm zum Testen


#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

#define LIT(a,b,c,d) (a | b << 8 | c << 16 | d << 24)

char r[9][24]={"A5 E8 0F EA 2F B7 CC 01","15 C3 C6 A9 82 B7 CC 01","BB 
60 C4 A9 82 B7 CC 01","B4 1A 4A 05 F4 CF CC 01","BA 92 21 05 F4 CF CC 
01","75 DE 17 43 A3 D0 CC 01","5D D1 88 42 A3 D0 CC 01","9A BA 14 F6 F3 
CF CC 01","2A 82 DB F5 F3 CF CC 01" };

int main()
{
    FILETIME ft;
    unsigned int z[8];
    int x;
    for(x=0;x<9;x++)
    if(sscanf(r[x],"%02x %02x %02x %02x %02x %02x %02x 
%02x",z,z+1,z+2,z+3,z+4,z+5,z+6,z+7)==8)
    {
        int t;
        for(t=0;t<8;t++)
            *(((char*)(&ft))+t)=z[t];

        SYSTEMTIME st;
        FileTimeToSystemTime(&ft,&st);

        printf("%s TIME = %i.%i.%i 
%i:%i:%i\n",r[x],st.wDay,st.wMonth,st.wYear,st.wHour,st.wMinute,st.wSeco 
nd);

    }
    return 0;
}

von Peter (Gast)


Lesenswert?

@fonsana
>Was fuer ein Betriebssystem?
Windows

@Läubi
>Wenn du das Log auswertest warum dann nicht gleich das formatierte
>Datum?
Das ist das Log. Das Programm schreibt kein "Textlog". Ich kann 
lediglich versuchen durch Korrelationen zwischen diesem Log und dem was 
ich im GUI sehen kann eine Beziehung herzustellen.

@fonsana
>Dann provoziere Eintraege mit sehr kurzem Abstand.
Kann ich nicht. Die Software läuft fortlaufend und loggt nur im 
Stundenrhythmus

>Dennis Heynlein
Danke! Ich werde mir das mal genauer anschauen

von Peter (Gast)


Lesenswert?

@Dennis Heynlein
Sieht so aus als wäre der Offset immer konstant bei 2 Stunden. Ich werde 
mal ein paar weitere Daten testen und wenn dem so ist, wird einfach 
alles um 2 Stunden verschoben; wird wohl mit GMT/CET zu tun haben.
Danke nochmal für den Tipp! FILETIME kannte ich bisher noch nicht.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Peter schrieb:
> @Dennis Heynlein
> Sieht so aus als wäre der Offset immer konstant bei 2 Stunden. Ich werde
> mal ein paar weitere Daten testen und wenn dem so ist, wird einfach
> alles um 2 Stunden verschoben; wird wohl mit GMT/CET zu tun haben.
> Danke nochmal für den Tipp! FILETIME kannte ich bisher noch nicht.

Die Systemtime ist meines Wissens eh GMT.
Und momentan ist Sommerzeit GMT+2.
Mich störten nur die vielen Minuten Abweichung.

von Peter (Gast)


Lesenswert?

@Dennis Heynlein
>Mich störten nur die vielen Minuten Abweichung.
Das kann ich eventuell erklären: das Programm wird wohl beim 
Herunterfahren des PC alle Daten mit dem aktuellen Zeitstempel ins 
Logfile schreiben. Das würde die größeren Offsets erklären. Und 
plus/minus ein paar Minuten um die volle Stunde herum könnte daran 
liegen, daß vielleicht nur alle x Minuten auf den Stundenwechsel geprüft 
wird. Auf die Sekunde genau muß die Software ja eigentlich nicht loggen, 
da die kleinste Auflösung im GUI eh nur eine Stunde ist.
Meine Tests sehen soweit vielversprechend aus und ich werde erst mal ein 
paar der Logs in SQL konvertieren.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.