|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Янв 6, 2004 02:41:52 Всем привет!!! Извиняюсь, что не на том языке... По мотивам вопроса: <<Как в WinNT/2000/XP узнать диалапный пасс?>> Такая проблема: Под XP Professional без сервис паков при попытке выполнения функции LsaOpenPolicy(...) выдается ошибка UNHANDLED EXCEPTION 0x00000005, а при попытке пошаговой отладки с самой первой команды появляется ошибка 6 - INVALID_HANDLE. И вообще, адрес этой функции, передаваемый в мою прграмму отличается от адреса этой же функции при просмотре таблицы импорта ADVAPI32.DLL Вот кусок кода на VC6.0 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ #include <windows.h> #include <ntsecapi.h> int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { LSA_OBJECT_ATTRIBUTES ObjAttrib; PLSA_HANDLE PolicyHandle; //===> Здесь уже ошибка №6 ZeroMemory(&ObjAttrib, sizeof(LSA_OBJECT_ATTRIBUTES)); ObjAttrib.Length=sizeof(LSA_OBJECT_ATTRIBUTES); HINSTANCE hi = LoadLibrary("advapi32.dll");if(!hi)return FALSE; NTSTATUS (__stdcall *enp)(PLSA_UNICODE_STRING, PLSA_OBJECT_ATTRIBUTES, ACCESS_MASK, PLSA_HANDLE) = (NTSTATUS (__stdcall *)(PLSA_UNICODE_STRING, PLSA_OBJECT_ATTRIBUTES, ACCESS_MASK, PLSA_HANDLE))GetProcAddress(hi, "LsaOpenPolicy"); (*enp)(NULL, &ObjAttrib, POLICY_ALL_ACCESS, PolicyHandle); FreeLibrary(hi); LsaClose(PolicyHandle); return 0; } \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Кто знает в чем проблема, помогите, пжалста!!! |
|
|
Дата: Янв 6, 2004 05:35:28 Nimnull //===> Здесь уже ошибка №6 Imho ошибка в другом месте. Последний параметр LsaOpenPolicy - это указатель на LSA_HANDLE, т.е. надо определить LSA_HANDLE PolicyHandle; и передавать &PolicyHandle. Вот рабочий код.
#include <windows.h>
#include <ntsecapi.h>
#include <stdio.h>
#ifndef STATUS_SUCCESS
#define STATUS_SUCCESS ((NTSTATUS)0x00000000L)
#endif
typedef NTSTATUS (* PFN_LSAOPENPOLICY)(PLSA_UNICODE_STRING,
PLSA_OBJECT_ATTRIBUTES,
ACCESS_MASK, PLSA_HANDLE);
#define PN_LSAOPENPOLICY "LsaOpenPolicy"
typedef NTSTATUS (* PFN_LSACLOSE)(LSA_HANDLE);
#define PN_LSACLOSE "LsaClose"
typedef ULONG (* PFN_LSANTSTATUSTOWINERROR)(NTSTATUS);
#define PN_LSANTSTATUSTOWINERROR "LsaNtStatusToWinError"
//-------------------------------------------------------------------
static void *get_pfn(HMODULE hLib, char *fn)
{
void *pfn = (void *) GetProcAddress(hLib, fn);
if (NULL == pfn)
printf("GetProcAddress(\'%s\') failed %d\n", fn, GetLastError());
return pfn;
}
//-------------------------------------------------------------------
int main(void)
{
PFN_LSAOPENPOLICY pfnLOP = NULL;
PFN_LSACLOSE pfnLC = NULL;
PFN_LSANTSTATUSTOWINERROR pfnLSTWE = NULL;
HMODULE hLib = NULL;
LSA_OBJECT_ATTRIBUTES ObjAttrib;
LSA_HANDLE PolicyHandle;
NTSTATUS nts;
ZeroMemory(&ObjAttrib, sizeof(ObjAttrib));
ObjAttrib.Length = sizeof(LSA_OBJECT_ATTRIBUTES);
hLib = LoadLibrary("ADVAPI32.DLL");
if (NULL == hLib)
printf("LoadLibrary failed %d\n", GetLastError());
else
{
pfnLOP = (PFN_LSAOPENPOLICY) get_pfn(hLib, PN_LSAOPENPOLICY);
pfnLC = (PFN_LSACLOSE) get_pfn(hLib, PN_LSACLOSE);
pfnLSTWE = (PFN_LSANTSTATUSTOWINERROR) get_pfn(hLib, PN_LSANTSTATUSTOWINERROR);
if ((NULL != pfnLOP) && (NULL != pfnLC) && (NULL != pfnLSTWE))
{
nts = (*pfnLOP)(NULL, &ObjAttrib, POLICY_ALL_ACCESS, &PolicyHandle);
if (STATUS_SUCCESS != nts)
printf("%s failed %d\n", PN_LSAOPENPOLICY, (* pfnLSTWE)(nts));
else
{
(*pfnLC)(PolicyHandle);
printf("Done.\n");
}
}
FreeLibrary(hLib);
}
return 0;
}
PS пользуйся тегом code. |
|
|
Дата: Янв 6, 2004 20:43:31 Спасибо за ответ... Но частично проблема осталась (компилится только в Release, а в Debug проблема с адресами функции осталась), и появилась еще одна небольшая проблемка ;) - функция LsaRetrievePrivateData возвращает ошибку 87 - INVALID_PARAMETR. Может знаешь в чем дело?
#include <windows.h>
#include <ntsecapi.h>
#include <stdio.h>
/*
#pragma comment(linker,"/MERGE:.rdata=.text")
#pragma comment(linker,"/FILEALIGN:512 /SECTION:.text,EWRX /IGNORE:4078")
#pragma comment(linker,"/ENTRY:new_main")
#pragma comment(linker,"/NODEFAULTLIB")
*/
#ifndef STATUS_SUCCESS
#define STATUS_SUCCESS ((NTSTATUS)0x00000000L)
#endif
typedef NTSTATUS (* PFN_LSARETRIEVEPRIVATEDATA)(LSA_HANDLE,PLSA_UNICODE_STRING,PLSA_UNICOD E_STRING*);
#define PN_LSARETRIEVEPRIVATEDATA "LsaRetrievePrivateData"
typedef NTSTATUS (* PFN_LSAOPENPOLICY)(PLSA_UNICODE_STRING,
PLSA_OBJECT_ATTRIBUTES,
ACCESS_MASK, PLSA_HANDLE);
#define PN_LSAOPENPOLICY "LsaOpenPolicy"
typedef NTSTATUS (* PFN_LSACLOSE)(LSA_HANDLE);
#define PN_LSACLOSE "LsaClose"
typedef ULONG (* PFN_LSANTSTATUSTOWINERROR)(NTSTATUS);
#define PN_LSANTSTATUSTOWINERROR "LsaNtStatusToWinError"
//-------------------------------------------------------------------
static void *get_pfn(HMODULE hLib, char *fn)
{
void *pfn = (void *) GetProcAddress(hLib, fn);
if (NULL == pfn)
printf("GetProcAddress(\'%s\') failed %d\n", fn, GetLastError());
return pfn;
}
//-------------------------------------------------------------------
int main(void)
{
PFN_LSARETRIEVEPRIVATEDATA pfnRPD = NULL;
PFN_LSAOPENPOLICY pfnLOP = NULL;
PFN_LSACLOSE pfnLC = NULL;
PFN_LSANTSTATUSTOWINERROR pfnLSTWE = NULL;
HMODULE hLib = NULL;
LSA_UNICODE_STRING UnicodeStr;
PLSA_UNICODE_STRING PrivateData;
LSA_OBJECT_ATTRIBUTES ObjAttrib;
LSA_HANDLE PolicyHandle;
NTSTATUS nts;
UnicodeStr.Buffer=L"L$_RasDefaultCredentials#";
UnicodeStr.Length=lstrlenW(UnicodeStr.Buffer);
UnicodeStr.MaximumLength=UnicodeStr.Length;
ZeroMemory(&ObjAttrib, sizeof(ObjAttrib));
ObjAttrib.Length = sizeof(LSA_OBJECT_ATTRIBUTES);
hLib = LoadLibrary("ADVAPI32.DLL");
if (NULL == hLib)
printf("LoadLibrary failed %d\n", GetLastError());
else
{
pfnRPD = (PFN_LSARETRIEVEPRIVATEDATA) get_pfn(hLib, PN_LSARETRIEVEPRIVATEDATA);
pfnLOP = (PFN_LSAOPENPOLICY) get_pfn(hLib, PN_LSAOPENPOLICY);
pfnLC = (PFN_LSACLOSE) get_pfn(hLib, PN_LSACLOSE);
pfnLSTWE = (PFN_LSANTSTATUSTOWINERROR) get_pfn(hLib, PN_LSANTSTATUSTOWINERROR);
if ((NULL != pfnLOP) && (NULL != pfnLC) && (NULL != pfnLSTWE))
{
nts = (*pfnLOP)(NULL, &ObjAttrib, POLICY_ALL_ACCESS, &PolicyHandle);
nts = (*pfnRPD)(PolicyHandle, &UnicodeStr, &PrivateData);
if (STATUS_SUCCESS != nts)
printf("%s failed %d\n", PN_LSAOPENPOLICY, (* pfnLSTWE)(nts));
else
{
(*pfnLC)(PolicyHandle);
printf("Done.\n");
}
}
FreeLibrary(hLib);
}
return 0;
}
Спасибо... |
|
|
Дата: Янв 6, 2004 22:17:37 Люди если кто модет и знает обясните нормально как все таки их вытащить т.е. обьясните по подробнее. И если у кого есть полностью рабочий пример то поделитесь, если не жалко!(пример можно оставить здесь или послать на asbalex@land.ru) P.S. Под нормально обьясните я понимаю вызываем такую-то функцию для токого-то результата. P.P.S Прсьба кто знает и хочет помочь не забивать на этот пост... |
|
|
Дата: Янв 7, 2004 01:23:50 · Поправил: Nimnull Со всем, кроме ошибок в Debug'e, разобрался... Теперь не пойму как пароли из этой структуры вытянуть... Подкиньте кто-нить идейку... Спасибо... З.Ы А примерчик есть уже на этом форуме... |
|
|
Дата: Янв 7, 2004 02:25:52 Не ленитесь искать, тут где-то в одном из топиков форума лежит готовый троян. |
|
|
Дата: Янв 8, 2004 00:38:01 Люди, кто-нибудь знает, почему RasEnumEntries() выдает ошибку №3 (не может найти файл PBK), когда 2-ой параметр NULL. В XP Professional SP1. ( если указать полный путь, то нормально, но ведь он (путь) не всегда одинаковый ;) ) Спасибо за ответы... |
|
|
Дата: Янв 8, 2004 11:50:45 Nimnull выдает ошибку №3 т.е. 3 == RasEnumEntries(NULL, NULL, ...)? |
|
|
Дата: Янв 8, 2004 17:02:04 q_q Нет, 0 == RasEnumEntries(NULL, NULL, ...), а 3==GetLastError(); и структура не заполнена... (ошибка именно в этой строке - проверял...) |
|
|
Дата: Янв 8, 2004 23:15:35 · Поправил: Nimnull Извиняюсь за предыдущий пост. Уже разобрался, все работает ( благодаря вопросу q_q ). Осталась одна проблема - как расшифровать пароль *********... Кто знает, об'ясните, пжалста!!! Спасибо... |
|
|
Дата: Янв 9, 2004 17:21:26 Кхе-хе-хе... Нашел я эти пароли, наконец-то!!! Так, что, q_q, спасибо за помощь... З.Ы. А hello_world за исходник... |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.096 |