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

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

#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;
}
 
Energy Reload
Забаненный
Статус
Оффлайн
Регистрация
20 Авг 2017
Сообщения
1,206
Реакции[?]
330
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Как получить список длл который использует процесс, или были заинжекчены в него?
Аналог: процес хакер - пкм по процессу - properties (как то так) - modules, там список длл которые были заинжекчены, или используются программой, в интернете нечего внятного не нашёл, надеюсь на вашу помощь.
(Хочу сделать подобие анти чита)
Твоя идея пойдет под откос если использовать скрытие длл, инжектить ммапом длл.
 
Rias Gremory
Начинающий
Статус
Оффлайн
Регистрация
3 Май 2019
Сообщения
96
Реакции[?]
27
Поинты[?]
0
Твоя идея пойдет под откос если использовать скрытие длл, инжектить ммапом длл.
Я понимаю это, просто хочу попробовать что-то для теста написать и научиться чему-то новому
 
Nike.lua
Олдфаг
Статус
Оффлайн
Регистрация
13 Окт 2020
Сообщения
2,747
Реакции[?]
1,465
Поинты[?]
2K
Твоя идея пойдет под откос если использовать скрытие длл, инжектить ммапом длл.
меня всегда интересовал вопрос, в хакинге игр не шарю так шо не бейте:
Может ли длл просто чита просто заинжектится, сделать свои недобрые дела а потом просто выгрузится? :roflanEbalo:
 
Energy Reload
Забаненный
Статус
Оффлайн
Регистрация
20 Авг 2017
Сообщения
1,206
Реакции[?]
330
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
меня всегда интересовал вопрос, в хакинге игр не шарю так шо не бейте:
Может ли длл просто чита просто заинжектится, сделать свои недобрые дела а потом просто выгрузится? :roflanEbalo:
Может.
 
Nike.lua
Олдфаг
Статус
Оффлайн
Регистрация
13 Окт 2020
Сообщения
2,747
Реакции[?]
1,465
Поинты[?]
2K
Energy Reload
Забаненный
Статус
Оффлайн
Регистрация
20 Авг 2017
Сообщения
1,206
Реакции[?]
330
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Ну так если ммап не оставляет следов инжекта, то и смысла от античита с алгоритмом проверки загруженных модулей тоже нет?
Нету.
Можно перебирать память на сигнатуру dll файла, получать базовый адресс, сверять с базовым адресом загруженной длл и отсеивать её, оставляя ммапнутую длл в процессе.
 
Keine panik!
Эксперт
Статус
Оффлайн
Регистрация
29 Апр 2020
Сообщения
812
Реакции[?]
417
Поинты[?]
49K
Как получить список длл который использует процесс, или были заинжекчены в него
Все загрузки происходят через LoadLibrary и его вариации, самая конечная функция LdrLoadDll, все это часть юзермодного кода загрузчика винды, он считывает файл, проецирует его в память процесса, выставляет секциям права, в конце вызывает точку входа, помимо этих действий он делает еще кучу вещей, но так же ведет специальные списки загруженных дллок.
Собственно у процесса есть специальная большая структура PEB - Process Environment Block, в ней хранится много информации о процесса включая струкуры загрузчика PEB_LDR_DATA, уже в этой структуре есть несколько списков которые и хранят загруженные модули, а именно InLoadOrderModuleList - в порядке загрузки, InMemoryOrderModuleList - в порядке адреса в памяти, InInitializationOrderModuleList - в порядке инициализации.
Все обычные апи юзают в конечном итоге именно эти списки, чтобы показать список модулей, всякие первобытные скрытия дллок так и работали с этими списками, т.е. удаляли опредленный модуль из них, и например античит переставал его видеть.
В остальном же, есть модуль мануалмапнут, т.е. спроецирован вручную в обход загрузчика винды, в списках его не будет, тогда задетектить можно только по формальным признакам, например по PE заголовку (который кстати говоря вполне может быть вырезан или зачищен), или по участкам исполняемой памяти которая не относится ни к какому модулю.
 
Сверху Снизу