информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
[Win32] сделал еще круче =))) 20.10.02 19:02  Число просмотров: 1299
Автор: beetle <beetle> Статус: Member
<"чистая" ссылка>
HANDLE hProcess = ::OpenProcess(PROCESS_ALL_ACCESS,FALSE,m_dwProcessID);
if(hProcess == NULL){
ERR
goto exit;
}
{
PROCESS_BASIC_INFORMATION pbi;
ULONG ulReturnLength;
NTSTATUS lNtStatus = NtQueryInformationProcess (hProcess,ProcessBasicInformation,&pbi,sizeof(pbi),&ulReturnLength);
if(lNtStatus == STATUS_SUCCESS && ulReturnLength == sizeof(pbi)) {
char buf[128];
PROCESS_ENVIRONMENT_BLOCK peb;
BOOL bResult = ReadProcessMemory(hProcess,pbi.PebBaseAddress,&peb,sizeof(peb),&ulReturnLength);
if (bResult == 0) {
ERR
goto exit;
}
wsprintf(buf,"%d",pbi.BasePriority);
m_szBasePriority = buf;
wsprintf(buf,"%s",(pbi.ExitStatus == 0) ? "EXITED":"STATUS_PENDING");
m_szExitStatus = buf;
wsprintf(buf,"%lu",pbi.UniqueProcessId);
m_szProcID = buf;
PROCESS_PARAMETRS pp;
bResult = ReadProcessMemory(hProcess,peb.pi,&pp,sizeof(pp),&ulReturnLength);
if (bResult == 0) {
ERR
goto exit;
}
WCHAR sz_buf[_MAX_PATH];
bResult = ReadProcessMemory(hProcess,pp.CurrentDirectory.Buffer,sz_buf,sizeof(sz_buf),&ulReturnLength);
if (bResult == 0) {
ERR
goto exit;
}
m_szLocation = sz_buf;
bResult = ReadProcessMemory(hProcess,pp.ApplicationName.Buffer,sz_buf,sizeof(sz_buf),&ulReturnLength);
if (bResult == 0) {
ERR
goto exit;
}
m_szName = sz_buf;
bResult = ReadProcessMemory(hProcess,pp.CommandLine.Buffer,sz_buf,sizeof(sz_buf),&ulReturnLength);
if (bResult == 0) {
ERR
goto exit;
}
m_szCommandLine = sz_buf;
}
}
вот так - прямо из ядра=))))))))
<programming>
[Win32] Full path 02.10.02 20:25  
Автор: beetle <beetle> Статус: Member
<"чистая" ссылка>
есть у меня имя и идентификатор некоторого процесса в системе.Как обладая такими данными получить месторасположение исполняемого файла процесса?????
[Win32] Full path 02.10.02 21:55  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
> есть у меня имя и идентификатор некоторого процесса в
> системе.Как обладая такими данными получить
> месторасположение исполняемого файла процесса?????

посмотри Process32First (нет в NT4) или GetModuleFileNameEx (нет в 9x)
[Win32] сделал еще круче =))) 20.10.02 19:02  
Автор: beetle <beetle> Статус: Member
<"чистая" ссылка>
HANDLE hProcess = ::OpenProcess(PROCESS_ALL_ACCESS,FALSE,m_dwProcessID);
if(hProcess == NULL){
ERR
goto exit;
}
{
PROCESS_BASIC_INFORMATION pbi;
ULONG ulReturnLength;
NTSTATUS lNtStatus = NtQueryInformationProcess (hProcess,ProcessBasicInformation,&pbi,sizeof(pbi),&ulReturnLength);
if(lNtStatus == STATUS_SUCCESS && ulReturnLength == sizeof(pbi)) {
char buf[128];
PROCESS_ENVIRONMENT_BLOCK peb;
BOOL bResult = ReadProcessMemory(hProcess,pbi.PebBaseAddress,&peb,sizeof(peb),&ulReturnLength);
if (bResult == 0) {
ERR
goto exit;
}
wsprintf(buf,"%d",pbi.BasePriority);
m_szBasePriority = buf;
wsprintf(buf,"%s",(pbi.ExitStatus == 0) ? "EXITED":"STATUS_PENDING");
m_szExitStatus = buf;
wsprintf(buf,"%lu",pbi.UniqueProcessId);
m_szProcID = buf;
PROCESS_PARAMETRS pp;
bResult = ReadProcessMemory(hProcess,peb.pi,&pp,sizeof(pp),&ulReturnLength);
if (bResult == 0) {
ERR
goto exit;
}
WCHAR sz_buf[_MAX_PATH];
bResult = ReadProcessMemory(hProcess,pp.CurrentDirectory.Buffer,sz_buf,sizeof(sz_buf),&ulReturnLength);
if (bResult == 0) {
ERR
goto exit;
}
m_szLocation = sz_buf;
bResult = ReadProcessMemory(hProcess,pp.ApplicationName.Buffer,sz_buf,sizeof(sz_buf),&ulReturnLength);
if (bResult == 0) {
ERR
goto exit;
}
m_szName = sz_buf;
bResult = ReadProcessMemory(hProcess,pp.CommandLine.Buffer,sz_buf,sizeof(sz_buf),&ulReturnLength);
if (bResult == 0) {
ERR
goto exit;
}
m_szCommandLine = sz_buf;
}
}
вот так - прямо из ядра=))))))))
[Win32] И мне интересно 06.10.02 03:05  
Автор: Бяша <Biasha> Статус: Member
<"чистая" ссылка>
> посмотри Process32First (нет в NT4) или GetModuleFileNameEx
> (нет в 9x)

Есть ли какая гарантия, что GetModuleFileNameEx, применённый к первому из EnumProcessModules вернёт именно то, что хочется?
Или он вернёт загруженный по наименьшему адресу модуль?

Просто интересно - уже не актуально, потому самому проверять лень, может кто знает.
[Win32] inside 08.10.02 09:24  
Автор: beetle <beetle> Статус: Member
<"чистая" ссылка>
> Есть ли какая гарантия, что GetModuleFileNameEx,
> применённый к первому из EnumProcessModules вернёт именно
> то, что хочется?
> Или он вернёт загруженный по наименьшему адресу модуль?
>
> Просто интересно - уже не актуально, потому самому
> проверять лень, может кто знае
я в начале очень хитро придумал:получал ID процесса из NtQuerySystemInformation, затем получал адрес PPEB процесса по его ID и далее выуживал из PPEB указатель на структуру PROCESSPARAMETERS из которой получал текущую директорию для процесса с ID. Но это не всегда работало(получал указатель на PROCESSPARAMETERS своего процесса вместо удаленного), потому попробовал сделать через psapi.dll.
Вот код - все работает абсолютно корректно:
HANDLE hProcess = ::OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcID);
if(hProcess == NULL){
ERR
return 0;
}
char sz_buf[_MAX_PATH];
HMODULE hm_psapi = ::LoadLibrary("psapi.dll");
GMFNE pfn_GetModuleFileNameEx = (GMFNE)::GetProcAddress(hm_psapi,"GetModuleFileNameExA");
__asm {
mov esi,esp
push 104h
lea ecx,[sz_buf]
push ecx
push 0
mov edx,dword ptr [hProcess]
push edx
call dword ptr [pfn_GetModuleFileNameEx]
cmp esi,esp
lea edx,_chkesp
call edx
mov dword ptr [res],eax
}
первый параметр - handle нужного процесса, второй NULL - в итоге получаешь полную строку запуска процесса с описателем handle
мегасенкс - 03.10.02 02:19  
Автор: beetle <beetle> Статус: Member
<"чистая" ссылка>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach