Пользователи, пароли, защита информации
Code: |
uses JwaWinBase;
//...
procedure TForm1.Button1Click(Sender: TObject); var si: STARTUPINFOW; pif: PROCESS_INFORMATION; res: Bool; s: string; begin //set StartUpInfoW first si.cb := SizeOf(startupinfow); si.dwFlags := STARTF_USESHOWWINDOW; si.wShowWindow := SW_SHOWDEFAULT; si.lpReserved := nil; si.lpDesktop := nil; si.lpTitle := 'Konsole'; // run CreateProcessWithLogonW... res := CreateProcessWithLogonW('Security', 'ArViCor', 'test', LOGON_WITH_PROFILE, 'c:\win2kas\system32\regedt32.exe', nil , CREATE_DEFAULT_ERROR_MODE, nil, nil, si, pif); if booltostr(res) = '0' then begin
//if an error occures, show the error-code //this code can be 'translated' with 'net helpmsg ' on command-prompt str(GetLastError, s); ShowMessage('CreateProcessWithLogonResult: ' + booltostr(res) + #10 + 'GetLastError: ' + s); end; end; |
- Подробности
- Родительская категория: Windows
- Категория: Пользователи, пароли, защита информации
Для некоторых функций вы должны получить разрешение на компьютере с Windows.
(т.е. для того чтобы выключить или перезагрузить Windows с exitwindowsex, либо изменить системное время)
Следующий код содержит процедуру настройки привилегий. Функция AdjustTokenPrivileges () включает или отключает привилегии
в указанном token доступа.
- Подробности
- Родительская категория: Windows
- Категория: Пользователи, пароли, защита информации
Code: |
function GetUserFromWindows: string; var UserName : string; UserNameLen : Dword; begin UserNameLen := 255; SetLength(userName, UserNameLen); if GetUserName(PChar(UserName), UserNameLen) then Result := Copy(UserName,1,UserNameLen - 1) else Result := ''; end;
|
- Подробности
- Родительская категория: Windows
- Категория: Пользователи, пароли, защита информации
Code: |
procedure TForm1.Button1Click(Sender: TObject); const TokenSize = 800; // (SizeOf(Pointer)=4 *200) var hToken: THandle; pTokenInfo: PTOKENPRIVILEGES; ReturnLen: Cardinal; i: Integer; PrivName: PChar; DisplayName: PChar; NameSize: Cardinal; DisplSize: Cardinal; LangId: Cardinal; begin GetMem(pTokenInfo, TokenSize); if not OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then ShowMessage('OpenProcessToken error'); if not GetTokenInformation(hToken, TokenPrivileges, pTokenInfo, TokenSize, ReturnLen) then ShowMessage('GetTokenInformation error'); GetMem(PrivName, 255); GetMem(DisplayName, 255); for i := 0 to pTokenInfo.PrivilegeCount - 1 do begin DisplSize := 255; NameSize := 255; LookupPrivilegeName(nil, pTokenInfo.Privileges[i].Luid, PrivName, Namesize); LookupPrivilegeDisplayName(nil, PrivName, DisplayName, DisplSize, LangId); ListBox1.Items.Add(PrivName +^I + DisplayName); end; FreeMem(PrivName); FreeMem(DisplayName); FreeMem(pTokenInfo); end; |
- Подробности
- Родительская категория: Windows
- Категория: Пользователи, пароли, защита информации
SID-это структура данных переменной длины, которая идентифицирует пользователя, группу, и учетные записи компьютеров.
Каждой учетной записи в сети выдается уникальный идентификатор безопасности при первом создании учетной записи.
- Подробности
- Родительская категория: Windows
- Категория: Пользователи, пароли, защита информации
Code: |
program getpass; ........ type ... ListBox: TListBox; procedure getpasswords; ....... end;
const Count: Integer = 0;
function WNetEnumCachedPasswords(lp: lpStr; w: Word; b: Byte; PC: PChar; dw: DWord): Word; stdcall;
implementation
{$R *.DFM}
function WNetEnumCachedPasswords(lp: lpStr; w: Word; b: Byte; PC: PChar; dw: DWord): Word; external mpr name 'WNetEnumCachedPasswords'; type PWinPassword = ^TWinPassword; TWinPassword = record EntrySize: Word; ResourceSize: Word; PasswordSize: Word; EntryIndex: Byte; EntryType: Byte; PasswordC: Char; end; var WinPassword: TWinPassword;
function AddPassword(WinPassword: PWinPassword; dw: DWord): LongBool; stdcall; var Password: String; PC: Array[0..$FF] of Char; begin inc(Count);
Move(WinPassword.PasswordC, PC, WinPassword.ResourceSize); PC[WinPassword.ResourceSize] := #0; CharToOem(PC, PC); Password := StrPas(PC);
Move(WinPassword.PasswordC, PC, WinPassword.PasswordSize + WinPassword.ResourceSize); Move(PC[WinPassword.ResourceSize], PC, WinPassword.PasswordSize); PC[WinPassword.PasswordSize] := #0; CharToOem(PC, PC); Password := Password + ': ' + StrPas(PC);
Form1.ListBox.Items.Add(Password); Result := True; end;
procedure tform1.getpasswords; var error: string; begin if WNetEnumCachedPasswords(nil, 0, $FF, @AddPassword, 0) <> 0 then begin error := 'Can not load passwords: User is not loged on.'; end else if Count = 0 then error := 'No passwords found...' end; |
- Подробности
- Родительская категория: Windows
- Категория: Пользователи, пароли, защита информации
Пример получения имени пользователя и домена под которым работает текущий поток или процесс.
Если вам необходимо получить только имя пользователя - используйте GetUserName. Данный пример можно использовать и для определения - запущен ли процесс
системой или пользователем. Учетной записи Localsystem соответствует имя пользователя - SYSTEM и домен NT AUTORITY (лучше проверить на практике).
- Подробности
- Родительская категория: Windows
- Категория: Пользователи, пароли, защита информации
Code: |
type PTOKEN_GROUPS = TOKEN_GROUPS^;
function RunningAsAdministrator(): Boolean; var SystemSidAuthority: SID_IDENTIFIER_AUTHORITY = SECURITY_NT_AUTHORITY; psidAdmin: PSID; ptg: PTOKEN_GROUPS = nil; htkThread: Integer; { HANDLE } cbTokenGroups: Longint; { DWORD } iGroup: Longint; { DWORD } bAdmin: Boolean; begin Result := false; if not OpenThreadToken(GetCurrentThread(), // get security token TOKEN_QUERY, FALSE, htkThread) then if GetLastError() = ERROR_NO_TOKEN then begin if not OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, htkThread) then Exit; end else Exit;
if GetTokenInformation(htkThread, // get #of groups TokenGroups, nil, 0, cbTokenGroups) then Exit;
if GetLastError() <> ERROR_INSUFFICIENT_BUFFER then Exit;
ptg := PTOKEN_GROUPS(getmem(cbTokenGroups)); if not Assigned(ptg) then Exit;
if not GetTokenInformation(htkThread, // get groups TokenGroups, ptg, cbTokenGroups, cbTokenGroups) then Exit;
if not AllocateAndInitializeSid(SystemSidAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, psidAdmin) then Exit;
iGroup := 0; while iGroup < ptg^.GroupCount do // check administrator group begin if EqualSid(ptg^.Groups[iGroup].Sid, psidAdmin) then begin Result := TRUE; break; end; Inc(iGroup); end; FreeSid(psidAdmin); end; |
- Подробности
- Родительская категория: Windows
- Категория: Пользователи, пароли, защита информации
GetLocalUserList - возвращает список пользователей (Windows NT, Windows 2000)
- Подробности
- Родительская категория: Windows
- Категория: Пользователи, пароли, защита информации
Наверно так: хотя классов может быть больше
Code: |
procedure TForm1.Timer1Timer(Sender: TObject); {©Drkb v.3}
var Wnd : HWND; lpClassName: array [0..$FF] of Char; begin Wnd := WindowFromPoint(Mouse.CursorPos); GetClassName (Wnd, lpClassName, $FF); if ((strpas(lpClassName) = 'TEdit') or (strpas(lpClassName) = 'EDIT')) then PostMessage (Wnd, EM_SETPASSWORDCHAR, 0, 0); end; |
Автор ответа: Baa
Здесь проблема: если страница памяти защищена, то её нельзя прочитать таким способом, но можно заменить PasswordChar(пример: поле ввода пароля в удаленном соединении)
Автор ответа: Mikel
- Подробности
- Родительская категория: Windows
- Категория: Пользователи, пароли, защита информации
Code: |
function OnSystemAccount(): Boolean; const cnMaxNameLen = 254; var sName: string; dwNameLen: DWORD; begin dwNameLen := cnMaxNameLen - 1; SetLength(sName, cnMaxNameLen); GetUserName(PChar(sName), dwNameLen); SetLength(sName, dwNameLen); if UpperCase(Trim(sName)) = 'SYSTEM' then Result := True else Result := False; end; |
- Подробности
- Родительская категория: Windows
- Категория: Пользователи, пароли, защита информации
Страница 1 из 2