Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[Win32] каму интересно, вот так это делается 29.09.04 15:54 Число просмотров: 1454
Автор: Tamas Статус: Member Отредактировано 29.09.04 16:00 Количество правок: 2
|
RetrieveLSASecrets возвращает данные из Protected Storage по ключу L$_RasDefaultCredentials#0 в этом клуче хранятся пароли сохранёные для всех пользователей, поля в Data разделены по 0x00
пароли для каждого пользователя в одельнасти хранятся по ключу
RasDialParams!S-1-5-21-1454471165-113007714-1708537768-1003#0
где S-1-5-21-1454471165-113007714-1708537768-1003 идентефикатор пользователля
и вот ещё вопрос к публике как получить лист таких ид по всем пользователям ???
PS примного блогодарен hello_world за ценный линк :-))
OS WinXP 5 1 2600
Lcc-Win32
#include <windows.h>
#include <ntsecapi.h>
#include <stdbool.h>
bool RetrieveLSASecrets(unsigned char *KeyName,unsigned char *Data,unsigned long *DataSize,unsigned long DataMaxSize);
int main()
{
unsigned char Data[255];
unsigned char DataSize;
RetrieveLSASecrets("L$_RasDefaultCredentials#0",&Data,&DataSize,sizeof(Data));
return 0;
}
bool RetrieveLSASecrets(unsigned char *KeyName,unsigned char *Data,unsigned long *DataSize,unsigned long DataMaxSize)
{
void *HAdvapi32;
typedef NTSTATUS NTAPI(*LPLSAOPENPOLICY)(PLSA_UNICODE_STRING,PLSA_OBJECT_ATTRIBUTES,ACCESS_MASK,PLSA_HANDLE);
typedef NTSTATUS NTAPILPLSARETRIEVEPRIVATEDATA)(LSA_HANDLE,PLSA_UNICODE_STRING,PLSA_UNICODE_STRING;
typedef NTSTATUS NTAPI(*LPLSACLOSE)(LSA_HANDLE);
typedef NTSTATUS NTAPI(*LPLSAFREEMEMORY)(PVOID);
LPLSAOPENPOLICY LsaOpenPolicyLF;
LPLSARETRIEVEPRIVATEDATA LsaRetrievePrivateDataLF;
LPLSACLOSE LsaCloseLF;
LPLSAFREEMEMORY LsaFreeMemoryLF;
LSA_OBJECT_ATTRIBUTES Attr;
LSA_HANDLE hPolicy;
LSA_UNICODE_STRING LsaKeyName;
PLSA_UNICODE_STRING pResult;
HAdvapi32=LoadLibrary("advapi32.dll");
if(HAdvapi32==NULL)return false;
LsaOpenPolicyLF=(LPLSAOPENPOLICY)GetProcAddress(HAdvapi32,"LsaOpenPolicy");
if(LsaOpenPolicyLF==NULL)return false;
LsaRetrievePrivateDataLF=(LPLSARETRIEVEPRIVATEDATA)GetProcAddress(HAdvapi32,"LsaRetrievePrivateData");
if(LsaRetrievePrivateDataLF==NULL)return false;
LsaCloseLF=(LPLSACLOSE)GetProcAddress(HAdvapi32,"LsaClose");
if(LsaCloseLF==NULL)return false;
LsaFreeMemoryLF=(LPLSAFREEMEMORY)GetProcAddress(HAdvapi32,"LsaFreeMemory");
if(LsaFreeMemoryLF==NULL)return false;
ZeroMemory(&Attr,sizeof(Attr));
ZeroMemory(&LsaKeyName,sizeof(LsaKeyName));
LsaKeyName.Buffer=LocalAlloc(LMEM_FIXED,strlen(KeyName)*sizeof(unsigned short));
MultiByteToWideChar(CP_ACP,0,KeyName,-1,LsaKeyName.Buffer,strlen(KeyName)*sizeof(unsigned short));
LsaKeyName.Length=lstrlenW(LsaKeyName.Buffer)*sizeof(unsigned short);
LsaKeyName.MaximumLength=(lstrlenW(LsaKeyName.Buffer)+1)*sizeof(unsigned short);
LsaOpenPolicyLF(NULL,&Attr,POLICY_ALL_ACCESS,&hPolicy);
if(hPolicy==NULL)return false;
LsaRetrievePrivateDataLF(hPolicy,&LsaKeyName,&pResult);
if(pResult==NULL)return false;
(*DataSize)=(pResult->Length/sizeof(unsigned short));
WideCharToMultiByte(CP_ACP,0,pResult->Buffer,(*DataSize),Data,DataMaxSize,NULL,NULL);
LsaCloseLF(hPolicy);
LsaFreeMemoryLF(pResult);
LocalFree(LsaKeyName.Buffer);
FreeLibrary(HAdvapi32);
return true;
}
|
|
|