include '%fasm%\win32ax.inc'
section '.code' code readable executable
start:
invoke SetLocalTime,lpSystemTime
invoke ExitProcess,0
section '.data' data readable writeable
lpSystemTime SYSTEMTIME 1,1,1,1,1,1,1,1
data import
library kernel32,'KERNEL32.DLL'
import kernel32,ExitProcess,'ExitProcess',\
SetLocalTime,'SetLocalTime'
end data
Privileges(msdn)
Код:
(Не ругайтесь сильно, не сильно можно)
На msdn сказанно "function enables the SE_SYSTEMTIME_NAME privilege before changing the system time"
Уже сразу очевидно, что в функцию некуда воткнуть привилегию, нет таких полей для неё!?
Хорошо следуя "For more information, see Running with Special Privileges"
видим http://msdn.microsoft.com/en-us/library/aa379306(VS.85,printer).aspx
где сразу куча "девайсов" которые попридумали MS. Имхо прочитав их все
станешь совсем старьий, причём забудешь, что вообще хотел сначала!
Однако, я понял кажись то, что без привилегиев в windows ни шагу нельзя! С чего же мне начать? Во-первых как часы всётаки крута ануть.
А второе, есть хоть примеры явные с приминением привилегий, токенсов и тукенсов :) Чтоб чтонибудь хоть вникнуть?
А может тут всё просто и я сам всё усложняю?
OpenProcessToken
LookupPrivilegeValue
AdjustTokenPrivileges
смотри их описание
пример включения привилегии
Код:
struc _LUID_AND_ATTRIBUTES
{
.Luid dq ?
.Attributes dd ?
}
struc _TOKEN_PRIVILEGES
{
.PrivilegeCount dd ?
.Privileges _LUID_AND_ATTRIBUTES
}
TOKEN_QUERY = $0008;
TOKEN_ADJUST_PRIVILEGES = $0020;
SE_PRIVILEGE_ENABLED= $00000002;
.....
SeDeugPriv db 'SeDebugPrivilege',0
TokenPrivs _TOKEN_PRIVILEGES
TokenHandle dd 0
.....
invoke GetCurrentProcess
invoke OpenProcessToken, eax, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, TokenHandle
invoke LookupPrivilegeValue, 0, SeDeugPriv, TokenPrivs.Privileges.Luid
mov [TokenPrivs.PrivilegeCount], 1
mov [TokenPrivs.Privileges.Attributes], SE_PRIVILEGE_ENABLED;
invoke AdjustTokenPrivileges, [TokenHandle], FALSE, TokenPrivs, 0, 0, 0
....
library kernel,'KERNEL32.DLL',\
......
advapi, 'advapi32.dll'
import advapi,\
OpenProcessToken,'OpenProcessToken',\
LookupPrivilegeValue, 'LookupPrivilegeValueA',\
AdjustTokenPrivileges,'AdjustTokenPrivileges'
{
.Luid dq ?
.Attributes dd ?
}
struc _TOKEN_PRIVILEGES
{
.PrivilegeCount dd ?
.Privileges _LUID_AND_ATTRIBUTES
}
TOKEN_QUERY = $0008;
TOKEN_ADJUST_PRIVILEGES = $0020;
SE_PRIVILEGE_ENABLED= $00000002;
.....
SeDeugPriv db 'SeDebugPrivilege',0
TokenPrivs _TOKEN_PRIVILEGES
TokenHandle dd 0
.....
invoke GetCurrentProcess
invoke OpenProcessToken, eax, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, TokenHandle
invoke LookupPrivilegeValue, 0, SeDeugPriv, TokenPrivs.Privileges.Luid
mov [TokenPrivs.PrivilegeCount], 1
mov [TokenPrivs.Privileges.Attributes], SE_PRIVILEGE_ENABLED;
invoke AdjustTokenPrivileges, [TokenHandle], FALSE, TokenPrivs, 0, 0, 0
....
library kernel,'KERNEL32.DLL',\
......
advapi, 'advapi32.dll'
import advapi,\
OpenProcessToken,'OpenProcessToken',\
LookupPrivilegeValue, 'LookupPrivilegeValueA',\
AdjustTokenPrivileges,'AdjustTokenPrivileges'
У меня оказывается ошибка была >
lpSystemTime SYSTEMTIME 2001,1,1,1,1,1,0,0
Только в этом дело было.
Но всёже спрошу ещё, а что за условия должны быть для исполнения функции,
например SetLocalTime()? Вмысле кто получает привилегии - GetCurrentProcess,
это типа всё приложение имеется ввиду? Или на одну API...
хендл чего подставлять надо?