_nic посмотреть ошибки возвращаемые, или заюзать мегахакерскую функцию GetLastError. Но тк телепаты ушли работать в фсб, и сегодня я за них, предположу что вы запускаете не из под админа.
Блин туплю значит Значит у меня проблема Есть вин7,есть процесс экзешник которого с релоками,т.е. ASLR в действие.А мне нада как то узнать базу по которой он был загружен. ЗЫ:может есть какая то недокументированная ф-ция для вытягивания PEBа из чужого процесса?
Ппробовал с помощью "ZwQueryInformationProcess".Облом GetLastError() возвращяет ERROR_BAD_ENVIRONMENT.Отладочные привелегии непомагают Код (Text): int _tmain(int argc, _TCHAR* argv[]) { HANDLE tok; OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&tok); LUID priv; LookupPrivilegeValue(NULL,"SeDebugPrivilege",&priv); TOKEN_PRIVILEGES newpriv; newpriv.PrivilegeCount=1; newpriv.Privileges[0].Luid = priv; newpriv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; BOOL privresult=AdjustTokenPrivileges(tok, FALSE, &newpriv, sizeof(TOKEN_PRIVILEGES), (PTOKEN_PRIVILEGES) NULL,(PDWORD)NULL); printf("%d: %d\n",privresult,TRUE); PROCESSENTRY32 proc; DWORD pid=0; HANDLE th=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0); if(th==INVALID_HANDLE_VALUE){return 0;} Process32First(th,&proc); for(;;) { if(strcmp("Divinity2.exe",proc.szExeFile)==0){pid=proc.th32ProcessID;break;} if(Process32Next(th,&proc)==FALSE){return 0;} } if(pid!=0) { printf("%d",sizeof(byte)); SetLastError(0); HANDLE divine=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid); if(divine==NULL) { printf("Error open Divine: %d",GetLastError()); } /*PROCESS_MEMORY_COUNTERS memfo={0}; if(GetProcessMemoryInfo(divine,&memfo,sizeof(memfo))==0) { printf("File get mem info. Er: %d",GetLastError()); }*/ else { HMODULE nt=LoadLibrary("Ntdll.dll"); PROCESS_BASIC_INFORMATION pbi={0}; ZWQUERYINFORMATIONPROCESS _ZwQueryInformationProcess; _ZwQueryInformationProcess = (ZWQUERYINFORMATIONPROCESS)GetProcAddress(nt, "ZwQueryInformationProcess"); DWORD rlg; SetLastError(0); _ZwQueryInformationProcess(divine,0,&pbi,sizeof(pbi),&rlg); printf("%d",GetLastError()); //printf("%d\n",pbi.PebBaseAddress); PEB *_peb=(PEB*)pbi.PebBaseAddress; //printf("base: %X",_peb->ImageBaseAddress); getch(); DWORD matches=0; DWORD base=0x400000; DWORD result=0; DWORD r; for(DWORD i=0;i<(0x121A000/sizeof(DWORD));i++) { ReadProcessMemory(divine,(void*)(base),&result,sizeof(DWORD),&r); base=base+sizeof(DWORD); if(result==100) { matches++; system("cls"); printf("match: %d\nbytes %d",matches,i*sizeof(DWORD)); result=0; } } } CloseHandle(divine); } CloseHandle(th); getch(); return 0; }
Код (Text): SetLastError(0); _ZwQueryInformationProcess(divine,0,&pbi,sizeof(pbi),&rlg); printf("%d",GetLastError()); хех... улыбнуло.. про ntstatus слышали что-нибудь? да и вообще SetLastError(0) перед каждым вызовом апи тоже весело... кстати если вспомнить, что ntdll.dll есть маппится ядром и есть во всех процессах, то это тоже улыбнуло) код где? судя по "улыбательному фрагменту", винда тут вовсе не причем...
Нет винда 32х битная.Цель запущенна из под админа,и мой код то же работает из под админа. Какая вам разница как я получаю базу библиотеки.Индусы в майкрософте не идиоты,и LoadLibrary всегда возвращяет то что надо.Кароче идите троллить в другие темы.
Ничего неизменилось.ZwQueryInformationProcess отлично работает коогда нада добратся до PEBа внтури процесса,но на чужом процессе обламывается(
а зачем использовать ее чтобы получить пеб внутри своего процесса?о_0 Так какой статус ошибки возвращается? ГетЛастЕрор тут вообще не в тему, так что давай ntstatus.
а ничего и не изменится... еще раз: и где неработающий код Module32First\Module32Next? внутри чужого процесса... но других способов куча, в этом вы правы)) да-да... для эпических васмовских исходников у меня теперь есть отличный сайт: http://www.govnokod.ru/6173
Код (Text): PROCESSENTRY32 proc; DWORD pid=0; HANDLE th=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0); if(th==INVALID_HANDLE_VALUE){return 0;} Process32First(th,&proc); а где адекватный инит переменной размера структуры? мсдн какбэ намекает typedef struct tagPROCESSENTRY32 { DWORD dwSize; ... и дело не в ее глюках а в глюках девелопера