· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.NETWORKS —› Пароли в XP :=(((

Посл.отвђт Сообщен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