· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› как программно остановить системное время в XP?

Посл.отвђт Сообщенiе


Дата: Ноя 14, 2004 18:43:58

Вот собственно и мой вопрос?
Смею предположить, что нет api-функции для этого?


Дата: Ноя 14, 2004 18:55:51 · Поправил: Stub

В цикле юзать SetSystemTime :), хотя это не способ... А так действительно не видел апишек точно


Дата: Ноя 14, 2004 20:11:20

А что если перехватывать GetSystemTime и возвращать нужное значение?


Дата: Ноя 14, 2004 20:58:18

Написать драйвер подсмотрев как это делает SoftIce ;-)


Дата: Ноя 14, 2004 21:06:18

Возможно можно заюзать ZwSetSystemInformation с классом SystemTimeAdjustment, установив отрицательные значение (хотя вряд ли это возможно), но в два раза быстрее, наверное, можно сделать чтоб тикало :)

Вот ещё по теме. Может кому пригодится... Что-то форум в 2010 году меня не признает. Пришлось назад вернуться ;)

.386
.model flat, stdcall
option casemap:none

;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::
;                                  I N C L U D E   F I L E S                                        
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::

include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
include \masm32\include\w2k\ntdll.inc
include \masm32\include\w2k\ntddk.inc
include \masm32\include\w2k\ntstatus.inc

includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\w2k\ntdll.lib

include \masm32\macros\Strings.mac

;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::
;                                    E Q U A T E S                                                  
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::

MB_OK           equ 0
MB_YESNO        equ 4
IDYES           equ 6
MB_DEFBUTTON2   equ 100h

SystemTimePrivilege     equ 12

;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::
;                                       C O D E                                                     
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::

.code

;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::
;                                         start                                                     
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::

start proc

local liSystemTime:LARGE_INTEGER
local liLocalTime:LARGE_INTEGER
local tf:TIME_FIELDS

local buffer[512]:CHAR

    push ecx
    invoke RtlAdjustPrivilege, SystemTimePrivilege, \
                                TRUE, \                 ; Enable
                                FALSE, \                ; Use client's token
                                esp                     ; WasEnabled
    pop ecx

    ; Get time

    invoke ZwQuerySystemTime, addr liSystemTime
    invoke RtlSystemTimeToLocalTime, addr liSystemTime, addr liLocalTime
    invoke RtlTimeToTimeFields, addr liLocalTime, addr tf

    CTA "Year:\t\t%d\n", g_szFmt
    CTA "Month:\t\t%d\n"
    CTA "Day:\t\t%d\n"
    CTA "Hour:\t\t%d\n"
    CTA "Minute:\t\t%d\n"
    CTA "Second:\t\t%d\n"
    CTA "Milliseconds:\t%d\n"
    CTA "Weekday:\t%d\n\n"
    CTA0 "Would you like to change it to 01 Januar 2010?"

    xor eax, eax
    mov ax, tf.Weekday
    push eax
    mov ax, tf.Milliseconds
    push eax
    mov ax, tf.Second
    push eax
    mov ax, tf.Minute
    push eax
    mov ax, tf.Hour
    push eax
    mov ax, tf.Day
    push eax
    mov ax, tf.Month
    push eax
    mov ax, tf.Year
    push eax

    lea eax, g_szFmt
    push eax
    
    lea eax, buffer
    push eax

    call wsprintf
    
    add esp, 10 * sizeof DWORD

    invoke MessageBox, NULL, addr buffer, $CTA0("Your current time"), MB_YESNO + MB_DEFBUTTON2
    
    .if eax == IDYES
                    
        ; Set time

        mov tf.Year, 2010
        mov tf.Month, 01
        mov tf.Day, 01
        mov tf.Hour, 00
        mov tf.Minute, 00
        mov tf.Second, 00
        mov tf.Milliseconds, 000
        ; tf.Weekday ignored

        invoke RtlTimeFieldsToTime, addr tf, addr liLocalTime
        invoke RtlLocalTimeToSystemTime,  addr liLocalTime, addr liSystemTime
        invoke ZwSetSystemTime, addr liSystemTime, NULL
        
        invoke MessageBox, NULL, $CTA0("Happy New Year ;\}"), $CTA0("Time changed"), MB_OK
            
    .endif

    invoke ExitProcess, 0
    ret

start endp

;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::
;                                                                                                   
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::

end start



1876123355__ZwSetSystemTime.rar


Дата: Ноя 15, 2004 16:44:33

Ну что? Так никто и не попробовал со временем поиграться? А я вот попробовал - работает :) Единственно, недопёр я с полем TimeSynchronization. Когда изначально Query делаешь, оно равно TRUE. Когда делаешь Set, то он делается только если TimeSynchronization установить в FALSE. Но потом его назад уже не вернуть. Вобщем, надоело играться. Пример заcтавляет часики тикать в 4 раза быстрее. Замедлить тоже можно. Как говорится: "Use it at your own risk!".
.386
.model flat, stdcall
option casemap:none

;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::
;                                  I N C L U D E   F I L E S                                        
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::

include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
include \masm32\include\w2k\ntdll.inc
include \masm32\include\w2k\ntddk.inc
include \masm32\include\w2k\ntstatus.inc

includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\w2k\ntdll.lib

include \masm32\Macros\Strings.mac

;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::
;                                    E Q U A T E S                                                  
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::

MB_OK           equ 0
MB_YESNO        equ 4
IDYES           equ 6
MB_DEFBUTTON2   equ 100h

SystemTimeAdjustment    equ 28

SYSTEM_QUERY_TIME_ADJUSTMENT STRUCT     ; Information Class 28
    TimeAdjustment      DWORD   ?
    MaximumIncrement    DWORD   ?
    TimeSynchronization BOOLEAN ?
                        db 3 dup(?)     ; padding
SYSTEM_QUERY_TIME_ADJUSTMENT ENDS
PSYSTEM_QUERY_TIME_ADJUSTMENT typedef ptr SYSTEM_QUERY_TIME_ADJUSTMENT

SYSTEM_SET_TIME_ADJUSTMENT STRUCT       ; Information Class 28
    TimeAdjustment      DWORD   ?
    TimeSynchronization BOOLEAN ?
                        db 3 dup(?)     ; padding
SYSTEM_SET_TIME_ADJUSTMENT ENDS
PSYSTEM_SET_TIME_ADJUSTMENT typedef ptr SYSTEM_SET_TIME_ADJUSTMENT

SystemTimePrivilege     equ 12

;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::
;                                       C O D E                                                     
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::

.code

;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::
;                                         start                                                     
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::

start proc uses esi edi ebx

local sqta:SYSTEM_QUERY_TIME_ADJUSTMENT
local ssta:SYSTEM_SET_TIME_ADJUSTMENT

    invoke ZwQuerySystemInformation, SystemTimeAdjustment, \
                                            addr sqta, sizeof SYSTEM_QUERY_TIME_ADJUSTMENT, NULL

    .if eax == STATUS_SUCCESS;  &&  sqta.TimeSynchronization != FALSE

        CTA "Would you like to adjust the time to move faster 4 times?\n\n", g_szMessage
        CTA0 "It will be reverted back after this application exits."
                    
        invoke MessageBox, NULL, addr g_szMessage, \
                    $CTA0("Time adjustment confirmation"), MB_YESNO + MB_DEFBUTTON2
    
        .if eax == IDYES

            push ecx
            invoke RtlAdjustPrivilege, SystemTimePrivilege, \
                                        TRUE, \                 ; Enable
                                        FALSE, \                ; Use client's token
                                        esp                     ; WasEnabled
            pop ecx

            mov eax, sqta.TimeAdjustment
            shl eax, 2
            mov ssta.TimeAdjustment, eax

            mov ssta.TimeSynchronization, FALSE

            invoke ZwSetSystemInformation, SystemTimeAdjustment, \
                                                    addr ssta, sizeof SYSTEM_SET_TIME_ADJUSTMENT

            .if eax == STATUS_SUCCESS
            
                invoke MessageBox, NULL, \
                        $CTA0("Now you are living faster 4 times?\n\nPress OK to revert back."), \
                        $CTA0("Time adjustment changed"), MB_OK

                ; Revert all back

                mov eax, sqta.TimeAdjustment
                mov ssta.TimeAdjustment, eax

                mov ssta.TimeSynchronization, FALSE

                invoke ZwSetSystemInformation, SystemTimeAdjustment, \
                                                    addr ssta, sizeof SYSTEM_SET_TIME_ADJUSTMENT
                
            .else

                invoke MessageBox, NULL, $CTA0("Sorry, time adjustment failed."), NULL, MB_OK           
            
            .endif
            
        .endif

    .endif

    invoke ExitProcess, 0
    ret

start endp

;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::
;                                                                                                   
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::

end start



782614906__SystemTimeAdjustment.rar


Дата: Ноя 15, 2004 18:28:08

Если достаточно остановить время внутри одного процесса - то
1. пропатчить нахрен ядро прямо в памяти
или
2. найти прогу "Hall of the Mountain king" - она сама время остановит, где попросишь


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.074