C++ Imgui запуск программы с байтов

Начинающий
Статус
Оффлайн
Регистрация
23 Авг 2022
Сообщения
54
Реакции[?]
1
Поинты[?]
0
Привет всем батям плюсов :)
Вопрос такой: Можно ли загруть программу в байты лоадора и инциализировать запуск нажмя на кнопку в имгуи?

Хочется код с примером для меня тупенького :(
 
Участник
Статус
Оффлайн
Регистрация
19 Апр 2020
Сообщения
1,178
Реакции[?]
314
Поинты[?]
152K
Привет всем батям плюсов :)
Вопрос такой: Можно ли загруть программу в байты лоадора и инциализировать запуск нажмя на кнопку в имгуи?

Хочется код с примером для меня тупенького :(
Ну да, имгуи это ведь интерфейс…
 
НЕКАСЕСТВЕНЫЙ КАД
Участник
Статус
Оффлайн
Регистрация
27 Фев 2019
Сообщения
1,431
Реакции[?]
252
Поинты[?]
4K
Начинающий
Статус
Оффлайн
Регистрация
23 Авг 2022
Сообщения
54
Реакции[?]
1
Поинты[?]
0
так и скажи что хочешь готовую пасту, че за прелюдия бля, тут девочек нет(или трансы)
Ну дело в том что мне хотя бы понять какая функция в имгу вызовет мою программу в байтах на подобии "D3DXCreateTextureFromFileInMemoryEx" это вызывает картинку.
 
НЕКАСЕСТВЕНЫЙ КАД
Участник
Статус
Оффлайн
Регистрация
27 Фев 2019
Сообщения
1,431
Реакции[?]
252
Поинты[?]
4K
Ну дело в том что мне хотя бы понять какая функция в имгу вызовет мою программу в байтах на подобии "D3DXCreateTextureFromFileInMemoryEx" это вызывает картинку.
если не важна «анонимность», то
создаешь файл -> пишешь в него байты -> ShellExecute(…, “open”, “C:\Windows\lox.exe”);
самый простой способ
ну и все это под кнопкой имгуи
 
Начинающий
Статус
Оффлайн
Регистрация
15 Янв 2022
Сообщения
129
Реакции[?]
18
Поинты[?]
8K
b - твой шеллкод, сделать можно с помощью Donut

C++:
void *exec = VirtualAlloc(0, sizeof b, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
memcpy(exec, b, sizeof b);
((void(*)())exec)();
 
Эксперт
Статус
Оффлайн
Регистрация
29 Мар 2021
Сообщения
1,595
Реакции[?]
603
Поинты[?]
44K
Пользователь
Статус
Оффлайн
Регистрация
25 Окт 2023
Сообщения
76
Реакции[?]
28
Поинты[?]
25K
Привет всем батям плюсов :)
Вопрос такой: Можно ли загруть программу в байты лоадора и инциализировать запуск нажмя на кнопку в имгуи?

Хочется код с примером для меня тупенького :(
runpe
 
Начинающий
Статус
Оффлайн
Регистрация
23 Авг 2022
Сообщения
54
Реакции[?]
1
Поинты[?]
0
Привет. Всё сделал с runpe , но при нажатие кнопки в режиме дебага выводит 0xc0000005. А при скомпилированном ничего не происходит.
Код:
void HideConsole()
{
    ::ShowWindow(::GetConsoleWindow(), SW_HIDE);
}


unsigned char rawData[31134] = {
    0x33 и т.д
};

int RunCheatFromMemory() {


    IMAGE_DOS_HEADER* DOSHeader;
    IMAGE_NT_HEADERS64* NtHeader;
    IMAGE_SECTION_HEADER* SectionHeader;

    PROCESS_INFORMATION PI;
    STARTUPINFOA SI;
    ZeroMemory(&PI, sizeof(PI));
    ZeroMemory(&SI, sizeof(SI));


    void* pImageBase;

    char currentFilePath[1024];
    void* pe = rawData;
    DOSHeader = PIMAGE_DOS_HEADER(pe);
    NtHeader = PIMAGE_NT_HEADERS64(DWORD64(pe) + DOSHeader->e_lfanew);

    if (NtHeader->Signature == IMAGE_NT_SIGNATURE) {

        GetModuleFileNameA(NULL, currentFilePath, MAX_PATH);
        //create process
        if (CreateProcessA(currentFilePath, NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &SI, &PI)) {

            CONTEXT* CTX;
            CTX = LPCONTEXT(VirtualAlloc(NULL, sizeof(CTX), MEM_COMMIT, PAGE_READWRITE));
            CTX->ContextFlags = CONTEXT_FULL;


            UINT64 imageBase = 0;
            if (GetThreadContext(PI.hThread, LPCONTEXT(CTX))) {
                pImageBase = VirtualAllocEx(
                    PI.hProcess,
                    LPVOID(NtHeader->OptionalHeader.ImageBase),
                    NtHeader->OptionalHeader.SizeOfImage,
                    MEM_COMMIT | MEM_RESERVE,
                    PAGE_EXECUTE_READWRITE
                );


                WriteProcessMemory(PI.hProcess, pImageBase, pe, NtHeader->OptionalHeader.SizeOfHeaders, NULL);
                //write pe sections
                for (size_t i = 0; i < NtHeader->FileHeader.NumberOfSections; i++)
                {
                    SectionHeader = PIMAGE_SECTION_HEADER(DWORD64(pe) + DOSHeader->e_lfanew + 264 + (i * 40));

                    WriteProcessMemory(
                        PI.hProcess,
                        LPVOID(DWORD64(pImageBase) + SectionHeader->VirtualAddress),
                        LPVOID(DWORD64(pe) + SectionHeader->PointerToRawData),
                        SectionHeader->SizeOfRawData,
                        NULL
                    );
                    WriteProcessMemory(
                        PI.hProcess,
                        LPVOID(CTX->Rdx + 0x10),
                        LPVOID(&NtHeader->OptionalHeader.ImageBase),
                        8,
                        NULL
                    );

                }

                CTX->Rcx = DWORD64(pImageBase) + NtHeader->OptionalHeader.AddressOfEntryPoint;
                SetThreadContext(PI.hThread, LPCONTEXT(CTX));
                ResumeThread(PI.hThread);

                WaitForSingleObject(PI.hProcess, NULL);

                return 0;

            }
        }
    }
}

что-то..

if (ImGui::Button("TEST", ImVec2(166 * dpi_scale, 67 * dpi_scale)))
{
     {
                        RunCheatFromMemory();
         Sleep(900);
      
     }

что-то..
[/USERS]
 
Пользователь
Статус
Оффлайн
Регистрация
25 Окт 2023
Сообщения
76
Реакции[?]
28
Поинты[?]
25K
Привет. Всё сделал с runpe , но при нажатие кнопки в режиме дебага выводит 0xc0000005. А при скомпилированном ничего не происходит.
Код:
void HideConsole()
{
    ::ShowWindow(::GetConsoleWindow(), SW_HIDE);
}


unsigned char rawData[31134] = {
    0x33 и т.д
};

int RunCheatFromMemory() {


    IMAGE_DOS_HEADER* DOSHeader;
    IMAGE_NT_HEADERS64* NtHeader;
    IMAGE_SECTION_HEADER* SectionHeader;

    PROCESS_INFORMATION PI;
    STARTUPINFOA SI;
    ZeroMemory(&PI, sizeof(PI));
    ZeroMemory(&SI, sizeof(SI));


    void* pImageBase;

    char currentFilePath[1024];
    void* pe = rawData;
    DOSHeader = PIMAGE_DOS_HEADER(pe);
    NtHeader = PIMAGE_NT_HEADERS64(DWORD64(pe) + DOSHeader->e_lfanew);

    if (NtHeader->Signature == IMAGE_NT_SIGNATURE) {

        GetModuleFileNameA(NULL, currentFilePath, MAX_PATH);
        //create process
        if (CreateProcessA(currentFilePath, NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &SI, &PI)) {

            CONTEXT* CTX;
            CTX = LPCONTEXT(VirtualAlloc(NULL, sizeof(CTX), MEM_COMMIT, PAGE_READWRITE));
            CTX->ContextFlags = CONTEXT_FULL;


            UINT64 imageBase = 0;
            if (GetThreadContext(PI.hThread, LPCONTEXT(CTX))) {
                pImageBase = VirtualAllocEx(
                    PI.hProcess,
                    LPVOID(NtHeader->OptionalHeader.ImageBase),
                    NtHeader->OptionalHeader.SizeOfImage,
                    MEM_COMMIT | MEM_RESERVE,
                    PAGE_EXECUTE_READWRITE
                );


                WriteProcessMemory(PI.hProcess, pImageBase, pe, NtHeader->OptionalHeader.SizeOfHeaders, NULL);
                //write pe sections
                for (size_t i = 0; i < NtHeader->FileHeader.NumberOfSections; i++)
                {
                    SectionHeader = PIMAGE_SECTION_HEADER(DWORD64(pe) + DOSHeader->e_lfanew + 264 + (i * 40));

                    WriteProcessMemory(
                        PI.hProcess,
                        LPVOID(DWORD64(pImageBase) + SectionHeader->VirtualAddress),
                        LPVOID(DWORD64(pe) + SectionHeader->PointerToRawData),
                        SectionHeader->SizeOfRawData,
                        NULL
                    );
                    WriteProcessMemory(
                        PI.hProcess,
                        LPVOID(CTX->Rdx + 0x10),
                        LPVOID(&NtHeader->OptionalHeader.ImageBase),
                        8,
                        NULL
                    );

                }

                CTX->Rcx = DWORD64(pImageBase) + NtHeader->OptionalHeader.AddressOfEntryPoint;
                SetThreadContext(PI.hThread, LPCONTEXT(CTX));
                ResumeThread(PI.hThread);

                WaitForSingleObject(PI.hProcess, NULL);

                return 0;

            }
        }
    }
}

что-то..

if (ImGui::Button("TEST", ImVec2(166 * dpi_scale, 67 * dpi_scale)))
{
     {
                        RunCheatFromMemory();
         Sleep(900);
     
     }

что-то..
[/USERS]
Привет, байты твоего .exe должны начинаться с 4d 5a
 
Пользователь
Статус
Оффлайн
Регистрация
25 Окт 2023
Сообщения
76
Реакции[?]
28
Поинты[?]
25K
Привет. Всё сделал с runpe , но при нажатие кнопки в режиме дебага выводит 0xc0000005. А при скомпилированном ничего не происходит.
Код:
void HideConsole()
{
    ::ShowWindow(::GetConsoleWindow(), SW_HIDE);
}


unsigned char rawData[31134] = {
    0x33 и т.д
};

int RunCheatFromMemory() {


    IMAGE_DOS_HEADER* DOSHeader;
    IMAGE_NT_HEADERS64* NtHeader;
    IMAGE_SECTION_HEADER* SectionHeader;

    PROCESS_INFORMATION PI;
    STARTUPINFOA SI;
    ZeroMemory(&PI, sizeof(PI));
    ZeroMemory(&SI, sizeof(SI));


    void* pImageBase;

    char currentFilePath[1024];
    void* pe = rawData;
    DOSHeader = PIMAGE_DOS_HEADER(pe);
    NtHeader = PIMAGE_NT_HEADERS64(DWORD64(pe) + DOSHeader->e_lfanew);

    if (NtHeader->Signature == IMAGE_NT_SIGNATURE) {

        GetModuleFileNameA(NULL, currentFilePath, MAX_PATH);
        //create process
        if (CreateProcessA(currentFilePath, NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &SI, &PI)) {

            CONTEXT* CTX;
            CTX = LPCONTEXT(VirtualAlloc(NULL, sizeof(CTX), MEM_COMMIT, PAGE_READWRITE));
            CTX->ContextFlags = CONTEXT_FULL;


            UINT64 imageBase = 0;
            if (GetThreadContext(PI.hThread, LPCONTEXT(CTX))) {
                pImageBase = VirtualAllocEx(
                    PI.hProcess,
                    LPVOID(NtHeader->OptionalHeader.ImageBase),
                    NtHeader->OptionalHeader.SizeOfImage,
                    MEM_COMMIT | MEM_RESERVE,
                    PAGE_EXECUTE_READWRITE
                );


                WriteProcessMemory(PI.hProcess, pImageBase, pe, NtHeader->OptionalHeader.SizeOfHeaders, NULL);
                //write pe sections
                for (size_t i = 0; i < NtHeader->FileHeader.NumberOfSections; i++)
                {
                    SectionHeader = PIMAGE_SECTION_HEADER(DWORD64(pe) + DOSHeader->e_lfanew + 264 + (i * 40));

                    WriteProcessMemory(
                        PI.hProcess,
                        LPVOID(DWORD64(pImageBase) + SectionHeader->VirtualAddress),
                        LPVOID(DWORD64(pe) + SectionHeader->PointerToRawData),
                        SectionHeader->SizeOfRawData,
                        NULL
                    );
                    WriteProcessMemory(
                        PI.hProcess,
                        LPVOID(CTX->Rdx + 0x10),
                        LPVOID(&NtHeader->OptionalHeader.ImageBase),
                        8,
                        NULL
                    );

                }

                CTX->Rcx = DWORD64(pImageBase) + NtHeader->OptionalHeader.AddressOfEntryPoint;
                SetThreadContext(PI.hThread, LPCONTEXT(CTX));
                ResumeThread(PI.hThread);

                WaitForSingleObject(PI.hProcess, NULL);

                return 0;

            }
        }
    }
}

что-то..

if (ImGui::Button("TEST", ImVec2(166 * dpi_scale, 67 * dpi_scale)))
{
     {
                        RunCheatFromMemory();
         Sleep(900);
     
     }

что-то..
[/USERS]
а лучше попробуй маппить свой чит в создаваемый cmd.exe
 
Сверху Снизу