Показать полную графическую версию : Windows XP. Назад в прошлое.
Здравствуйте. Есть задача, которую необходимо решить. Возможно, вы знаете как к ней подступиться.
Задача и информация к размышлению:
ОС Windows XP (коротко XP) позволяет устанавливать дату в пределах 2001-2099 год. Однако, если установить дату меньшую, чем 1 января 2001 года, то она продержится до первой перезагрузки. Задача состоит в том, чтобы найти у XP файл(ы), в которых прописана исходная дата (1 января 2001) и изменить её к примеру на 1 января 1950. Я уверен, что операционная система XP этого просто не заметит. Предугадывая ваши вопросы, сразу на них отвечу
1. Нет. Компьютер не имеет подключения к интернету
2. У меня установлена Windows XP, SP2, FAT32
3. Зачем это нужно? - Вопрос не по теме
Итак я предполагаю, что искомая дата находится в одном из загружаемых файлов. Вот заглянул в файл ntoskrnl.exe, который является ядром XP.
[ntoskrnl.exe]
...
RtlSecondsSince1970ToTime
RtlSecondsSince1980ToTime
RtlSetTimeZoneInformation
RtlTimeFieldsToTime
RtlTimeToElapsedTimeFields
RtlTimeToSecondsSince1970
RtlTimeToSecondsSince1980
RtlTimeToTimeFields
Что это? Просто информация или нечто большее?
Надеюсь на помощь специалистов.
Kirill_S
08-02-2022, 12:12
она продержится до первой перезагрузки »
Вероятно дата из БИОСа?
dmitryst
08-02-2022, 12:20
echs, если вам нужно запускать определенную программу с фейковой датой, можно применить бесплатную RunAsDate (http://www.nirsoft.net/utils/run_as_date.html)
Kirill_S,
Биос тут ни причём. Хотя пробовал и через Биос, а также через командную строку и другими методами. Тут видимо дело вот в чём. Эта дата при перезагрузке компьютера, проходит проверку. Если она находится на интервале (2001; 2099), то ОС её не трогает. В противном случае происходит "обнуление" даты и устанавливается 1 января 2001 года.
Уважаемый dmitryst,
хочу сразу отметить, что моя задача никак не связана с запуском какой-либо программы. Мне нужно фактически установить местонахождение даты "1 января 2001". Чудес не бывает. Где-то она прописана в Windows XP. Сложность задачи в том, что я не знаю где. Именно это заставило меня обратиться на форум, где, я полагаю, есть специалисты знающие Windows XP намного лучше меня.
dmitryst
08-02-2022, 14:43
echs, попробуйте в ядре поискать магическое число 978307200 (десятичное) ;)
dmitryst,
такого числа в ядре нет. Точнее, именно в десятичном виде (с пробелами и без) нет. Вероятно оно закодировано и что искать непонятно.
dmitryst
08-02-2022, 17:55
echs, попробуйте 0х 3A4F C880. Точнее, 80C84F3A, если я ничего не напутал.
dmitryst,
этого числа я тоже не обнаружил. Возможно мы ищем не в том файле. Мне тут пришла в голову ещё одна мысль. А что если отсчёт даты идёт с какого-то года? Например 1980 (или 1970) - начало отсчёта времени вообще. Тогда 2001 год может быть обозначен числом 21? В общем тут есть над чем подумать...
Grabber2006
08-02-2022, 21:58
В Линуксе за ноль было раньше принято 1 января 1970 года, при этом время считалось в секундах от этой даты. Возможно, что в Windows похожая ситуация.
Подробнее здесь (https://ru.wikipedia.org/wiki/Unix-%D0%B2%D1%80%D0%B5%D0%BC%D1%8F).
dmitryst
09-02-2022, 09:24
Grabber2006, дык, я почему предложил 978307200 - это как раз *nix time - количество секунд, прошедших с 1 янв. 2001г.
RtlTimeToSecondsSince1970
RtlTimeToSecondsSince1980 »
Для RtlTimeToSecondsSince1970 это как раз оно(может быть шестнадцатеричным).
Возможно, что в Windows похожая ситуация. »
да, но если учесть, что в Excel в свое время дату хранили не как у всех, а в своем формате (сэкономив байт памяти, но создав забавный глюк (https://habr.com/ru/post/198174/) , который были вынуждены повторять создатели аналогичных программ, дабы сохранить совместимость), то не исключено, что дата/время в ядре тоже "не как у всех".
начало отсчёта времени вообще »
это *nix-time, - количество секунд, прошедших с 1 янв. 1970г. Вот конвертер (https://www.epochconverter.com/), можете поиграться стартовой датой, напр., 1 янв. 1980г.
echs, чем ковыряете ядро? Дебаггером? Помнится, там надо в шестнадцатеричном виде менять старшие/младшие байты местами, т.е. число 0x0102 надо искать как 0x0201. Коллеги, поправьте, если я неправ ;)
Ребята,
тут надо прежде всего разобраться с форматом в котором записывается дата-время. В противном случае мы будем искать то, не зная что.
Вот что я ещё накопал интересного в интернете:
● Время и дата
Двухбайтовая отметка даты имеет следующий формат:
● биты 0–4 — день месяца, допускаются значения 1–31;
● биты 5–8 — месяц года, допускаются значения 1–12;
● биты 9–15 — год, считая от 1980 года («эпоха MS-DOS»), возможны значения от 0 до 127 включительно, то есть 1980–2107 годы.
Двухбайтовая отметка времени имеет следующий формат:
● биты 0–4 — счётчик секунд (по две), допустимы значения 0–29, то есть 0–58 секунд;
● биты 5–10 — минуты, допустимы значения 0–59;
● биты 11–15 — часы, допустимы значения 0–23.
После этого пришлось открыть файл реестра NTUSER.DAT, который находится в папке Documents and Settings. Правда Windows XP возражала против этого, но на такой случай у меня на диске D: стоит вторая Windows XP. Так что я просто скопировал этот файл и посмотрел, как там обстоит дело с записью дат и времени. Если кто запамятовал, то напомню, что в файле NTUSER.DAT хранятся записи о каждом файле в ОС (и пользовательских файлах тоже). То есть вы создаёте файл, а ОС спешит запись о нём внести в NTUSER.DAT. Когда создан, когда изменён, когда открыт и бог знает что ещё... В общем я был потрясён... Похоже там числа пишутся наоборот... и вообще это отдельная тема для диссертации по ОС.
Что ещё?
О файле boot.ini вы конечно знаете. Удалось узнать, что есть такой параметр /year , который приказывает ОС игнорировать установленный на компьютере год. Так ли это? В общем я написал после параметра /fastdetect ещё один /year=1980 , установив этот же год и на компьютере. Включил перезагрузку. ОС выдала предупреждение, что год неправильный и его надо исправить (сама ОС менять год не стала, ведь параметр /year ей это запрещает). Всё бы ничего, но при попытке установить 1950 год ОС зависла на 20 секунд ... и установила свой 7492 год от рождества Христова. В общем надо ещё думать...
dmitryst,
спасибо за конвертер
Буду изучать время-дату и способы записи в ОС Windows XP
dmitryst
09-02-2022, 11:04
установила свой 7492 год »
ага, значит, 1950 год невалидный, а 7492 валидный? :laugh:
Накопаете что-нибудь - пишите сюда, даже любопытно стало, как они это обыграли (в отличие от *nix)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.