Введение

Добро пожаловать в мою новую статью, сегодня я покажу вам новый модуль инструмента 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.