Страница: 1 | 
		
		 
			   
			 
			 
			 
			 Страница: 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-сайт:  
 Профиль |  | #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-сайт:  
 Профиль |  | #4
      
Добавлено:  13.11.09 16:58
       
    
       
  
GetLastError даёт ошибку 299, но у нас нету ничего 64-битного! Зато установлен File Based Write Filter -- можнт он виноват..
 
    
А как юзать SeDebugPrivilege и для чего?
		
	  
			 
	
		 
    
       
    
Номер ответа: 5 
      
Автор ответа:
 Morpheus
![]()
![]()
![]()
![]()
Вопросов: 224
Ответов: 3777
      
 Web-сайт:  
 Профиль |  | #5
      
Добавлено:  13.11.09 17:48
       
    
       
  
чё то нашёл на expert-sex-change, но проверить не могу на прямую, хотя на kernel32.dll под localboot кажись пашет.. не подумал про дебаг... потом отпишусь 100% если что!  
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 6 
      
Автор ответа:
 Morpheus
![]()
![]()
![]()
![]()
Вопросов: 224
Ответов: 3777
      
 Web-сайт:  
 Профиль |  | #6
      
Добавлено:  17.11.09 19:33
       
    
       
  
Урааа! Сделал! Спасибо всем  
    
 дебаг привилегии -- это весчъ