Registry Time Decoder

Статьи Как раскодировать дату в DateCreated параметре реестра. 2.0

SENSORED

Новый пользователь
Сообщения
8
Симпатии
10
Баллы
13
#1
Доброго времени суток уважаемые!
В разделе реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles содержится информация о сетевых подключениях.
Интересует данные по "DateCreated'' и ''DateLastConnected'', как выяснить дату создания и подключения по имеющейся в них информации (вопрос расследования инцидента информационной безопасности). Т.е. по сути интересуют любые сведения подтверждающие несанкционированное подключение к сетям (беспроводным, внутренним, "Интернет").
Заранее благодарен!!!!
 

regist

гоняюсь за туманом
Ассоциация VN/VIP
VIP
Разработчик
Сообщения
12,277
Симпатии
5,867
Баллы
918
#2
Так выше же сами всё написали. Там данные просто в бинарном формате, сконвертировать надо.
 

Кирилл

Команда форума
Администратор
Сообщения
13,589
Симпатии
6,028
Баллы
843
#3
SENSORED, здравствуйте!
Переводим бинарное значение в шестнадцатиричное,а его - в десятичное.
Например:
Код:
e0,07,04,00,03,00,14,00,06,00,2b,00,3a,00,33,01
Переводим:
Код:
07e0 0004 0003 0014 0006 002b 003a 0133

Получаем:
2016.04.03
Это дата.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,964
Симпатии
5,786
Баллы
588
#4
неправильно.

SENSORED, это структура SYSTEMTIME.
C++:
typedef struct _SYSTEMTIME {
  WORD wYear;
  WORD wMonth;
  WORD wDayOfWeek;
  WORD wDay;
  WORD wHour;
  WORD wMinute;
  WORD wSecond;
  WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME;
e0,07,04,00,03,00,14,00,06,00,2b,00,3a,00,33,01
Берёте каждые два байта и переворачиваете их, например,
e0,07 = 07e0 = 2016 (год)
04,00 = 0004 = 4 (месяц)
03,00 = 0003 = 3 (день недели)
14,00 = 0014 = 20 (день)
06,00 = 0006 = 6 (часы)
2b,00 = 002b = 43 (минуты)
3a,00 = 003a = 58 (секунды)
33,01 = 0133 = 307 (миллисекунды)

Учтите, что такой формат записывается обычно по отношению к временному смещению UTC+0.
Вам необходимо дополнительно провести перерасчёт, учитывая часовой пояс на системе, откуда эта запись была прочитана.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,964
Симпатии
5,786
Баллы
588
#5
Для удобства написал скрипт, с помощью которого можно легко преобразовать SYSTEMTIME в привычную дату.
 

Вложения

shestale

Ассоциация VN/VIP
Преподаватель
Сообщения
9,637
Симпатии
4,974
Баллы
663
#6
Для удобства написал скрипт
:Good:
Учтите, что такой формат записывается обычно по отношению к временному смещению UTC+0.
Проверил сейчас у себя дату и время последнего коннекта, всё соответствует моему UTC+7 и поправки ни какой делать не пришлось.
 

SENSORED

Новый пользователь
Сообщения
8
Симпатии
10
Баллы
13
#7
тысячекратное спасибо!!!
 

SENSORED

Новый пользователь
Сообщения
8
Симпатии
10
Баллы
13
#8
Спрошу попутно, в разделах реестра CurrentControlSet001, CurrentControlSet002, CurrentControlSet001 (HKEY_LOCAL_MACHINE\SYSTEM\) имеется информация о подключаемых USB-устройствах. Есть ли параметр отражающий дату подключения? Нашел в разделе [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\ параметр "DriverDateData" ( конкретно у меня для одного из USB-устройств hex:00,80,8c,a3,c5,94,c6,01), что он показывает??? (заранее спасибо)
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,964
Симпатии
5,786
Баллы
588
#9
shestale, значит для каждого параметра следует индивидуально перепроверять, пишет система с поправкой или без, если это важно для расследования инцидента.

SENSORED, 8-байтовые значения отображают дату в формате FILETIME.
Это число - кол-во 100 наносекундных промежутков времени, которые прошли с момента даты 1 января 1601 года (так называемое время UTC, начало эпохи, или 1-й день 17 столетия).
C++:
typedef struct _FILETIME {
  DWORD dwLowDateTime;
  DWORD dwHighDateTime;
} FILETIME, *PFILETIME;
Код:
hex:00,80,8c,a3,c5,94,c6,01
Группы байтов берём в том же порядке, в котором они указаны в структуре (DWORD - это 4 байта).
При этом байты читаем в обратном порядке:
dwLowDateTime - hex:00,80,8c,a3 -> 0x a38c8000
dwHighDateTime - hex:c5,94,c6,01 -> 0x 01c694c5

В виде обычного числа это записывается как
dwHighDateTime, dwLowDateTime = 0x 01c694c5a38c8000 = 127953216000000000.

1 нс = 10 сек. в -9 степени. 100 нс интервал = 1 сек. в -7 степени.
Соответственно 127953216000000000 100-нс. инт. = 12795321600 сек. + 1 января 1601 года = 21.06.2006
(если считать примерно, то 12795321600 / 60 / 60 / 24 / 365 = 405 + 1601 = 2006).

------------------
Также, ещё один распространённый тип кодирования даты, который вы можете встретить в реестре, это Unix-time, 4-байтовое значение.
Оно представляет собой кол-во секунд, прошедших с момента даты 01.01.1970.

Пример такого параметра:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion => InstallDate
 
Последнее редактирование:

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,964
Симпатии
5,786
Баллы
588
#10
Пользователь Dragokas разместил новый ресурс:

Registry Time Decoder - Конвертирует дату из форматов FILETIME, SYSTEMTIME, UNIX-TIME, которая обычно встречается в реестре

Консольный VBS скрипт.

Позволяет увидеть в привычном формате DD.MM.YYYY hh:mm:ss даты, которые указаны в реестре в бинарном формате или в виде 16-ричного значения.

Можно указывать на выбор:
  • бинарную строку
  • 16-ричное число
  • путь к параметру реестра
Поддерживаемые форматы:
  • Unix-Time (4 байта)
  • FILETIME (8 байт)
  • SYSTEMTIME (16 байт)
Фейс:

Посмотреть вложение 34816
Узнать больше об этом ресурсе...
 

Similar Threads

У
2
Ответы
27
Просмотры
2,782
Удалённый пользователь 6777
Ответы
18
Просмотры
3,877
Сверху Снизу