Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 8 мая!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Программисты долго мучаются с кодом прогаммы, изучают С++, WinAPI функции, MSDN. Потом пишут банальную систему защиты или навешивают банальный протектор, а крэкеры и реверсеры справляются с такой защитой за 5 минут. В итоге, продажи программы почти нулевые. Чтобы такого не допустить, тут самому надо немного поднабрать опыта отладки, реверсинга, тот же отладчик Ollydbg изучить или дизассемблер IDA Pro. Но где искать по крохам эти знания? Нет, конечно можно годами "методом тыка" разбираться, но куда быстрее видеокурс специальный посмотреть. Вот тут он есть: ссылка. Автор курса с большим опытом и объясняет понятно, я из этого курса много узнал про то как работает компьютер, процессор, про инструменты специальные и как с ними работать. Мои коллеги программисты на работе ничего такого и не знают, теперь я им нос утру.

Перечисление всех модулей для процесса

Чтобы определить, каким процессом была загружена определённая DLL, необходимо перечислить модули для каждого процесса. Для получения всех модулей для текущего процесса в системе можно воспользоваться функцией EnumProcessModules.

 

#include <windows.h>
 #include <stdio.h>
 #include "psapi.h"
 
 void PrintModules( DWORD processID )
 {
     HMODULE hMods[1024];
     HANDLE hProcess;
     DWORD cbNeeded;
     unsigned int i;
 
     // печатаем идентификатор процесса.
 
     printf( "\nProcess ID: %u\n", processID );
 
     // Получаем список всех модулей в этом процессе.
 
     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++ )
         {
             char szModName[MAX_PATH];
 
             // Получаем полный путь файла модуля.
 
             if ( GetModuleFileNameEx( hProcess, hMods[i], szModName,
                                       sizeof(szModName)))
             {
                 // Печатаем имя модуля и значение его дескриптора.
 
                 printf("\t%s (0x%08X)\n", szModName, hMods[i] );
             }
         }
     }
 
     CloseHandle( hProcess );
 }
 
 void main( )
 {
     // Пелучаем список идентификаторов процессов.
 
     DWORD aProcesses[1024], cbNeeded, cProcesses;
     unsigned int i;
 
     if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
         return;
 
     // Вычисляем количество полученных идентификаторов процессов.
 
     cProcesses = cbNeeded / sizeof(DWORD);
 
     // Печатаем имена модулей для каждого процесса.
 
     for ( i = 0; i < cProcesses; i++ )
         PrintModules( aProcesses[i] );
 }

Основная функция получает список процессов при помощи EnumProcesses. Для каждого процесса, основная функция вызывает PrintModules, передавая в неё идентификатор процесса. PrintModules в свою очередь, для получения дескриптора процесса вызывает OpenProcess. Если при выполнении OpenProcess возникла ошибка, то выводится только идентификатор процесса. В заключение, чтобы получить имена модулей, PrintModules вызывает функцию GetModuleFileNameEx для каждого модуля.

 

 

 





<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU Проект ReactOS