|
|
| Посл.отвђт | Сообщен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 |