Введение
Добро пожаловать в мою новую статью, сегодня я покажу вам новый модуль инструмента RedNeuron, этот модуль его ProcList, и, в отличие от других функций RedNeuron, все они созданы на C++.
Эта функция основана на одном из моих собственных инструментов, в данном случае он называется ProcList.
И ссылка RedNeuron:
Код
#include <windows.h> #include "conio.h" #include <tchar.h> #include <conio.h> #include <psapi.h> #include <iostream> #include <vector> #include <tlhelp32.h> #include <sstream> #include <lmcons.h> #include "ColorClass.h" void PrintProcessNameAndID(DWORD processID) { TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>"); // Get a handle to the process. HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID); // Get the process name. if (NULL != hProcess) { HMODULE hMod; DWORD cbNeeded; if (EnumProcessModules(hProcess, &hMod, sizeof(hMod), &cbNeeded)) { GetModuleBaseName(hProcess, hMod, szProcessName, sizeof(szProcessName) / sizeof(TCHAR)); } } // Get the parent process ID DWORD parentProcessID = 0; HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hSnapshot != INVALID_HANDLE_VALUE) { PROCESSENTRY32 pe32; pe32.dwSize = sizeof(PROCESSENTRY32); if (Process32First(hSnapshot, &pe32)) { do { if (pe32.th32ProcessID == processID) { parentProcessID = pe32.th32ParentProcessID; break; } } while (Process32Next(hSnapshot, &pe32)); } CloseHandle(hSnapshot); } // Get the username of the process owner HANDLE hToken; if (OpenProcessToken(hProcess, TOKEN_QUERY, &hToken)) { DWORD cbTokenUser = 0; GetTokenInformation(hToken, TokenUser, NULL, 0, &cbTokenUser); std::vector<char> userInfo(cbTokenUser); if (GetTokenInformation(hToken, TokenUser, userInfo.data(), cbTokenUser, &cbTokenUser)) { SID_NAME_USE SidType; TCHAR lpName[UNLEN + 1]; DWORD cchName = UNLEN + 1; TCHAR lpReferencedDomainName[UNLEN + 1]; DWORD cchReferencedDomainName = UNLEN + 1; if (LookupAccountSid(NULL, reinterpret_cast<TOKEN_USER*>(userInfo.data())->User.Sid, lpName, &cchName, lpReferencedDomainName, &cchReferencedDomainName, &SidType)) { printf("Process name: "); std::wcout << szProcessName << std::endl; printf("Process ID: "); std::wcout << processID << std::endl; printf("Parent Process ID: "); std::wcout << parentProcessID << std::endl; printf("User name: "); std::wcout << lpName << std::endl; CloseHandle(hProcess); CloseHandle(hToken); } } } } int main() { DWORD aProcesses[1024], cbNeeded, 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 name and process identifier for each process. for (i = 0; i < cProcesses; i++) { if (aProcesses[i] != 0) { PrintProcessNameAndID(aProcesses[i]); std::cout << std::endl; } } getch(); return 0; }
Это программа, написанная на C++, которая извлекает информацию о процессах, запущенных на компьютере с Windows. Программа использует Windows API для взаимодействия с операционной системой.
Программа начинается с использования функции EnumProcesses для получения списка идентификаторов процессов. Затем он перебирает этот список и вызывает функцию PrintProcessNameAndID
для каждого идентификатора процесса. Эта функция принимает идентификатор процесса в качестве входных данных и извлекает информацию о процессе с помощью различных других функций из Windows API, таких как OpenProcess
, EnumProcessModules
, GetModuleBaseName
, CreateToolhelp32Snapshot
, Process32First
и Process32Next
. Функция получает имя процесса, идентификатор процесса, идентификатор родительского процесса и имя пользователя владельца процесса. Затем эта информация выводится на консоль.
Наконец, программа ждет, пока пользователь нажмет клавишу, вызывая getch()
, функцию из библиотеки conio.h
, прежде чем вернуться.
ПОС
Давайте попробуем этот инструмент, в первую очередь необходимо создать EXE, для этого вам нужно запустить RedNeuron:
Затем выполните команду create:
Затем выполните proclist и создайте EXE:
Теперь перенесите исполняемый файл на компьютер-жертву и запустите его, чтобы увидеть все процессы, PID, родительский PID и имя пользователя, на которых он запущен.
Выводы
В заключение, код, представленный в этой статье, представляет собой программу, которая извлекает информацию о процессах, запущенных в системе Windows. Он использует различные API-интерфейсы Windows, такие как EnumProcesses, OpenProcess, EnumProcessModules, GetModuleBaseName, CreateToolhelp32Snapshot и LookupAccountSid, для получения имени процесса, идентификатора процесса, идентификатора родительского процесса и имени пользователя владельца процесса. Код написан на C++ и использует различные стандартные библиотеки, такие как iostream и vector. Программа демонстрирует возможности Windows API для сбора подробной информации о процессах, запущенных в системе, что делает ее полезной как для системных администраторов, так и для разработчиков.
Наконец-то он добавлен в RedNeuron!
Если вам нравится мой контент и вы хотите помочь мне вывести этот проект на новый уровень, вы можете стать участником, пожертвовав ежемесячную подписку. Ваша поддержка поможет мне продолжать создавать качественный контент. Благодарим вас за щедрость!
Если в настоящее время пожертвование невозможно для вас, не проблема! Ваша поддержка в обмене моим проектом и распространении слова очень ценится. Я буду продолжать создавать и делиться своими работами, несмотря ни на что, и я благодарен за вашу поддержку и интерес.
Спасибо, что прочитали это :)
S12.