Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: EnumProcesses,EnumProcessModules с кучей юзерофф.. Добавлено: 13.11.09 00:53  

Автор вопроса:  Morpheus | Web-сайт: xury.zx6.ru
Изначально, задача стояла так: найти все процессы юзающие длл-ку и прибить их из под какого-нить консольного приложения. выбрал с++, но вопрос не в этом..

короче, EnumProcesses, с помощью которой я получаю инфу о процессах и что они используют, не может доступисться к данным процессов, которые бегут под другим пользователем (точнее: EnumProcesses то может получить номер процесса, а вот EnumProcessModules не может получить список длл-ок)

Но! я знаю что в принципе это возможно -- process explorer их видит все!

кто-нибудь делал что-нибудь подобное?

заранее благодарен!


вот код, если что...



// xenocide.cpp : does lots of freaky stuff
//
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <psapi.h>
#pragma comment(lib, "Psapi")

using namespace std;


void PrintModules( DWORD processID )
{
    HMODULE hMods[1024];
    HANDLE hProcess;
    DWORD cbNeeded;
    unsigned int i;

    // Print the process identifier.

    //printf( "\nProcess ID: %u\n", processID );

    // Get a list of all the modules in this process.

    hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
                            PROCESS_VM_READ,
                            FALSE, processID );
    if (NULL == hProcess)
        return;

    if( EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded))
    {
        for ( i = 0; i < (cbNeeded / sizeof(HMODULE)); i++ )
        {
            TCHAR szModName[MAX_PATH];

            // Get the full path to the module's file.

            if ( GetModuleFileNameEx( hProcess, hMods[i], szModName,
                                      sizeof(szModName) / sizeof(TCHAR)))
            {
                // Print the module name and handle value.




                std::wstring ws (szModName);


                string s(ws.begin(), ws.end());
                s.assign(ws.begin(), ws.end());

                 string::size_type loc = s.find("<some name>adll" );
                 if(loc != string::npos)
                 {
                     printf( "\nProcess ID: %u\n", processID );
                    _tprintf( TEXT("\t%s (0x%08X)\n"), szModName, hMods[i] );  
                 }
            }


            
        }
    }

    CloseHandle( hProcess );
}

void main( )
{
    // Get the list of process identifiers.

    DWORD aProcesses[1024], cbNeeded, cProcesses;
    unsigned int i;

    if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
        return;

    // Calculate how many process identifiers were returned.

    cProcesses = cbNeeded / sizeof(DWORD);

    // Print the name of the modules for each process.

    for ( i = 0; i < cProcesses; i++ )
        PrintModules( aProcesses[i] );
}


Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #1
Добавлено: 13.11.09 07:49
Думаю ключевое слово SeDebugPrivilege. Вообще вызывай GetLastError чтобы понять причину проблем. Эффективнее телепатии в разы.

Ответить

Номер ответа: 2
Автор ответа:
 VerhoLom



Вопросов: 20
Ответов: 285
 Профиль | | #2 Добавлено: 13.11.09 11:43
process explorer перебирает структуры EPROCESS и им подобные в ядре!

Ответить

Номер ответа: 3
Автор ответа:
 VerhoLom



Вопросов: 20
Ответов: 285
 Профиль | | #3 Добавлено: 13.11.09 11:46
Кстати, вот скачайте и изучите MS-REMовский ProcessHunter: http://xakssoft.narod.ru/download/phunter.rar. принцип работы у него тот же. Зато с исходником!

Ответить

Номер ответа: 4
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #4
Добавлено: 13.11.09 16:58
GetLastError даёт ошибку 299, но у нас нету ничего 64-битного! Зато установлен File Based Write Filter -- можнт он виноват..

А как юзать SeDebugPrivilege и для чего?

Ответить

Номер ответа: 5
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #5
Добавлено: 13.11.09 17:48
чё то нашёл на expert-sex-change, но проверить не могу на прямую, хотя на kernel32.dll под localboot кажись пашет.. не подумал про дебаг... потом отпишусь 100% если что! :)

Ответить

Номер ответа: 6
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #6
Добавлено: 17.11.09 19:33
Урааа! Сделал! Спасибо всем :) дебаг привилегии -- это весчъ

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам