Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

C++ Список dll которые использует процесс.

Rias Gremory
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
3 Май 2019
Сообщения
92
Реакции
27
Как получить список длл который использует процесс, или были заинжекчены в него?
Аналог: процес хакер - пкм по процессу - properties (как то так) - modules, там список длл которые были заинжекчены, или используются программой, в интернете нечего внятного не нашёл, надеюсь на вашу помощь.
(Хочу сделать подобие анти чита)
 
Попробуй это мб поможет
Пожалуйста, авторизуйтесь для просмотра ссылки.

#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <psapi.h>

// To ensure correct resolution of symbols, add Psapi.lib to TARGETLIBS
// and compile with -DPSAPI_VERSION=1

int 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 handle to the process.

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

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

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, szModName,
sizeof(szModName) / sizeof(TCHAR)))
{
// Print the module name and handle value.

_tprintf( TEXT("\t%s (0x%08X)\n"), szModName, hMods );
}
}
}

// Release the handle to the process.

CloseHandle( hProcess );

return 0;
}

int main( void )
{

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

// Get the list of process identifiers.

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

// Calculate how many process identifiers were returned.

cProcesses = cbNeeded / sizeof(DWORD);

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

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

return 0;
}
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Как получить список длл который использует процесс, или были заинжекчены в него?
Аналог: процес хакер - пкм по процессу - properties (как то так) - modules, там список длл которые были заинжекчены, или используются программой, в интернете нечего внятного не нашёл, надеюсь на вашу помощь.
(Хочу сделать подобие анти чита)
Твоя идея пойдет под откос если использовать скрытие длл, инжектить ммапом длл.
 
Твоя идея пойдет под откос если использовать скрытие длл, инжектить ммапом длл.
Я понимаю это, просто хочу попробовать что-то для теста написать и научиться чему-то новому
 
Твоя идея пойдет под откос если использовать скрытие длл, инжектить ммапом длл.
меня всегда интересовал вопрос, в хакинге игр не шарю так шо не бейте:
Может ли длл просто чита просто заинжектится, сделать свои недобрые дела а потом просто выгрузится? :roflanEbalo:
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
меня всегда интересовал вопрос, в хакинге игр не шарю так шо не бейте:
Может ли длл просто чита просто заинжектится, сделать свои недобрые дела а потом просто выгрузится? :roflanEbalo:
Может.
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Ну так если ммап не оставляет следов инжекта, то и смысла от античита с алгоритмом проверки загруженных модулей тоже нет?
Нету.
Можно перебирать память на сигнатуру dll файла, получать базовый адресс, сверять с базовым адресом загруженной длл и отсеивать её, оставляя ммапнутую длл в процессе.
 
Как получить список длл который использует процесс, или были заинжекчены в него
Все загрузки происходят через LoadLibrary и его вариации, самая конечная функция LdrLoadDll, все это часть юзермодного кода загрузчика винды, он считывает файл, проецирует его в память процесса, выставляет секциям права, в конце вызывает точку входа, помимо этих действий он делает еще кучу вещей, но так же ведет специальные списки загруженных дллок.
Собственно у процесса есть специальная большая структура PEB - Process Environment Block, в ней хранится много информации о процесса включая струкуры загрузчика PEB_LDR_DATA, уже в этой структуре есть несколько списков которые и хранят загруженные модули, а именно InLoadOrderModuleList - в порядке загрузки, InMemoryOrderModuleList - в порядке адреса в памяти, InInitializationOrderModuleList - в порядке инициализации.
Все обычные апи юзают в конечном итоге именно эти списки, чтобы показать список модулей, всякие первобытные скрытия дллок так и работали с этими списками, т.е. удаляли опредленный модуль из них, и например античит переставал его видеть.
В остальном же, есть модуль мануалмапнут, т.е. спроецирован вручную в обход загрузчика винды, в списках его не будет, тогда задетектить можно только по формальным признакам, например по PE заголовку (который кстати говоря вполне может быть вырезан или зачищен), или по участкам исполняемой памяти которая не относится ни к какому модулю.
 
Назад
Сверху Снизу