информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Атака на InternetВсе любят мед
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[Win32] сделал еще круче =))) 20.10.02 19:02  Число просмотров: 1178
Автор: 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-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach