Вопрос Патчинг из длл

Забаненный
Статус
Оффлайн
Регистрация
5 Сен 2020
Сообщения
986
Реакции[?]
275
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
всем привет , может я тупой ну скорее всего я тупой , при попытке перезаписать память выдаёт ошибку 0x5 1648117926708.png
пробывал менять протект через VirtualProtect но я мог сделать что то не так поэтому прошу дополнить мой говно код что бы он стал работать
плиз не надо писать про говно код или же какой я тупой я очень ранимый сэд ребенок :(
C++:
BYTE bt1[] = { 0xEB, 0x17 };
int patched_address = 45889;

void pacth_to_dll()
{
    openprcs();

    hProcess = OpenProcess(PROCESS_ALL_ACCESS, true, PID_PROC);

    printf("[i] module loading... \n");

    HANDLE csgo_handle = get_csgo_handle();
    HMODULE client_module = GetModuleHandle(L"csgo.exe");
    HMODULE server_module = GetModuleHandle(L"module.dll");
    address_with_offset = ((int)server_module);
    int Address = (DWORD)address_with_offset + (DWORD)patched_address;

    csgo_handle = OpenProcess(PROCESS_ALL_ACCESS, true, PID_PROC);



        std::cout << "[i] base address 0x" << (DWORD*)address_with_offset << std::endl;
        std::cout << "[i] patch address 0x" << (DWORD*)patched_address << std::endl;
        std::cout << "[i] final address 0x" << (DWORD*)Address << std::endl;
        
        if (!WriteProcessMemory(hProcess, LPVOID(Address), &bt1, sizeof(bt1), 0))
        {
            std::cout << "[i] bad patch (0x" << (DWORD*)Address << ") " << std::endl;

            std::cout << "[i] error -> " << GetLastError() << std::endl;
        }
        else
        {
            std::cout << "[i] patched (0x" << (DWORD*)Address << ") " << std::endl;
        }

}
 
Energy Reload
Забаненный
Статус
Оффлайн
Регистрация
20 Авг 2017
Сообщения
1,206
Реакции[?]
330
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
"патчинг из длл" - ты в процесс инжектишь эту длл и из нее пытаешься пропатчить процесс игры?
Или я не пойму что ты хочешь сделатьь.

C++:
HMODULE client_module = GetModuleHandle(L"csgo.exe");
printf("client_module: %d \n",client_module);

HMODULE server_module = GetModuleHandle(L"module.dll");
printf("server_module: %d \n",server_module);
 
Забаненный
Статус
Оффлайн
Регистрация
5 Сен 2020
Сообщения
986
Реакции[?]
275
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
"патчинг из длл" - ты в процесс инжектишь эту длл и из нее пытаешься пропатчить процесс игры?
Или я не пойму что ты хочешь сделатьь.

C++:
HMODULE client_module = GetModuleHandle(L"csgo.exe");
printf("client_module: %d \n",client_module);

HMODULE server_module = GetModuleHandle(L"module.dll");
printf("server_module: %d \n",server_module);
ну предположим у меня есть длл чита который под вмп и там проверка которая не даёт работать читу , я хочу сделать дллку которая будет перезаписывать байты на те которые мне нужны , делая это через консольное приложение все успешно получается , но делая это через длл выдает ошибку с доступом , вот как то так , искал инфу и нашёл только что надо поменять протект через VirtualProtect , но у меня это не сработало , возможно я что то неправильно сделал
 
Пользователь
Статус
Оффлайн
Регистрация
17 Июл 2021
Сообщения
463
Реакции[?]
119
Поинты[?]
11K
Зачем..... Просто......
Зачем ты из под DLL пытаешься получить хендл к процессу и используешь WriteProcessMemory, КОГДА ТЫ И ЕСТЬ САМ ЭТОТ ПРОЦЕСС. Какой же кринж...

Один из вариантов как можно пропатчить (shitty метод не рекомендую):
Код:
int *address = (int*)((byte*)GetModuleHandle(null) + 0xDEADBEEF);
*address = 45889; // это твои байты, но в инте
Другой вариант самый топчик (рекомендую к использованию)
Код:
void WriteToMemory(DWORD addressToWrite, char* valueToWrite, int byteNum)
{
    unsigned long OldProtection;
    VirtualProtect((LPVOID)(addressToWrite), byteNum, PAGE_EXECUTE_READWRITE, &OldProtection);
    memcpy((LPVOID)addressToWrite, valueToWrite, byteNum);
    VirtualProtect((LPVOID)(addressToWrite), byteNum, OldProtection, NULL);
}

DWORD address = GetModuleHandle(null) + 0xDEADBEEF;
WriteToMemory(address, "\xEB\x17", 2);
писал по памяти поэтому мб будет ошибка приведения типов с гетмодульхендлом, но ты просто подставь в скобочках тип и все заработает ведь визуалка ровный типочек :fearscream: :fearscream: :fearscream:
 
Забаненный
Статус
Оффлайн
Регистрация
5 Сен 2020
Сообщения
986
Реакции[?]
275
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Зачем..... Просто......
Зачем ты из под DLL пытаешься получить хендл к процессу и используешь WriteProcessMemory, КОГДА ТЫ И ЕСТЬ САМ ЭТОТ ПРОЦЕСС. Какой же кринж...

Один из вариантов как можно пропатчить (shitty метод не рекомендую):
Код:
int *address = (int*)((byte*)GetModuleHandle(null) + 0xDEADBEEF);
*address = 45889; // это твои байты, но в инте
Другой вариант самый топчик (рекомендую к использованию)
Код:
void WriteToMemory(DWORD addressToWrite, char* valueToWrite, int byteNum)
{
    unsigned long OldProtection;
    VirtualProtect((LPVOID)(addressToWrite), byteNum, PAGE_EXECUTE_READWRITE, &OldProtection);
    memcpy((LPVOID)addressToWrite, valueToWrite, byteNum);
    VirtualProtect((LPVOID)(addressToWrite), byteNum, OldProtection, NULL);
}

DWORD address = GetModuleHandle(null) + 0xDEADBEEF;
WriteToMemory(address, "\xEB\x17", 2);
писал по памяти поэтому мб будет ошибка приведения типов с гетмодульхендлом, но ты просто подставь в скобочках тип и все заработает ведь визуалка ровный типочек :fearscream: :fearscream: :fearscream:
спасибо буду пробывать , а хендл я получал что бы кое что протестить и не убрал его , короче спасибо :3
 
Сверху Снизу