C++ Вопрос C++ Реверс-Инжиниринг

Начинающий
Статус
Оффлайн
Регистрация
5 Янв 2024
Сообщения
40
Реакции[?]
4
Поинты[?]
6K
а ещё вот:

у меня есть указатель prbf2.exe + 0x608F64
также оффсеты к указателю 0x60, 0x80, 0x4, 0x1B8, 0x194, 0x8, 0x0
как мне вычислить конечный адрес в визуал студио?

вот шаблон примерный, чтобы не выделять много времени на Бомбарама
C++:
#include <Windows.h>
#include <TlHelp32.h>
#include <iostream>
using namespace std;


int GetProcesByName(wstring name) {
    HANDLE snapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    PROCESSENTRY32 pInfo = { 0 };
    pInfo.dwSize = sizeof(PROCESSENTRY32);

    while (Process32Next(snapShot, &pInfo)) {
        if (wcscmp(pInfo.szExeFile, name.c_str()) == 0) {
            CloseHandle(snapShot);
            return pInfo.th32ProcessID;
        }
    }
    CloseHandle(snapShot);


    return 0;
}


int main(int argc, char** argv) {
    int pID = GetProcesByName(L"igra.exe");
    HANDLE handle_pID = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID);

    int ammo_999 = 999;
    WriteProcessMemory(handle_pID, (LPVOID)final_adress, &ammo_999, sizeof(ammo_999), NULL);


    return 0;
}
 
Пользователь
Статус
Оффлайн
Регистрация
25 Окт 2023
Сообщения
76
Реакции[?]
28
Поинты[?]
25K
Ну так он будет всегда разный.
:FailFish:, у него не конечный адресс, а оффсеты

а ещё вот:

у меня есть указатель prbf2.exe + 0x608F64
также оффсеты к указателю 0x60, 0x80, 0x4, 0x1B8, 0x194, 0x8, 0x0
как мне вычислить конечный адрес в визуал студио?

вот шаблон примерный, чтобы не выделять много времени на Бомбарама
C++:
#include <Windows.h>
#include <TlHelp32.h>
#include <iostream>
using namespace std;


int GetProcesByName(wstring name) {
    HANDLE snapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    PROCESSENTRY32 pInfo = { 0 };
    pInfo.dwSize = sizeof(PROCESSENTRY32);

    while (Process32Next(snapShot, &pInfo)) {
        if (wcscmp(pInfo.szExeFile, name.c_str()) == 0) {
            CloseHandle(snapShot);
            return pInfo.th32ProcessID;
        }
    }
    CloseHandle(snapShot);


    return 0;
}


int main(int argc, char** argv) {
    int pID = GetProcesByName(L"igra.exe");
    HANDLE handle_pID = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID);

    int ammo_999 = 999;
    WriteProcessMemory(handle_pID, (LPVOID)final_adress, &ammo_999, sizeof(ammo_999), NULL);


    return 0;
}
получай базовый адресс игры, и читай, я написал тебе пример
C++:
auto off = hv::read< uint64_t >( base + 0x608F64 );
auto idk = hv::read< uint64_t >( off + 0x60 );
auto idk2 = hv::read< uint64_t >( idk + 0x80 );
auto idk3 = hv::read< uint64_t >( idk2 + 0x4 );
auto idk4 = hv::read< uint64_t >( idk3 + 0x1B8 );
auto idk5 = hv::read< uint64_t >( idk4 + 0x194 );
auto idk6 = hv::read< uint64_t >( idk5 + 0x8 );
hv::write< float >( idk7, 999 );
 
Последнее редактирование:
ЧВК EB_LAN
Эксперт
Статус
Онлайн
Регистрация
26 Янв 2021
Сообщения
1,567
Реакции[?]
522
Поинты[?]
185K
а ещё вот:

у меня есть указатель prbf2.exe + 0x608F64
также оффсеты к указателю 0x60, 0x80, 0x4, 0x1B8, 0x194, 0x8, 0x0
как мне вычислить конечный адрес в визуал студио?

вот шаблон примерный, чтобы не выделять много времени на Бомбарама
C++:
#include <Windows.h>
#include <TlHelp32.h>
#include <iostream>
using namespace std;


int GetProcesByName(wstring name) {
    HANDLE snapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    PROCESSENTRY32 pInfo = { 0 };
    pInfo.dwSize = sizeof(PROCESSENTRY32);

    while (Process32Next(snapShot, &pInfo)) {
        if (wcscmp(pInfo.szExeFile, name.c_str()) == 0) {
            CloseHandle(snapShot);
            return pInfo.th32ProcessID;
        }
    }
    CloseHandle(snapShot);


    return 0;
}


int main(int argc, char** argv) {
    int pID = GetProcesByName(L"igra.exe");
    HANDLE handle_pID = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID);

    int ammo_999 = 999;
    WriteProcessMemory(handle_pID, (LPVOID)final_adress, &ammo_999, sizeof(ammo_999), NULL);


    return 0;
}
прибавляй оффсет к базовуму адресу игры
посмотреть, как получить базовый адрес процесса можешь тут:
Пожалуйста, авторизуйтесь для просмотра ссылки.


no ad
 
Начинающий
Статус
Оффлайн
Регистрация
5 Янв 2024
Сообщения
40
Реакции[?]
4
Поинты[?]
6K
прибавляй оффсет к базовуму адресу игры
посмотреть, как получить базовый адрес процесса можешь тут:
Пожалуйста, авторизуйтесь для просмотра ссылки.


no ad
да у меня есть базовый адрес игры и оффсеты есть, покажи мне как в визуал студио это выразить, как мне изменить значение конечного адреса исходя из указателя и оффсетов
 
Searching for myself
Пользователь
Статус
Оффлайн
Регистрация
29 Сен 2021
Сообщения
212
Реакции[?]
69
Поинты[?]
11K
да у меня есть базовый адрес игры и оффсеты есть, покажи мне как в визуал студио это выразить, как мне изменить значение конечного адреса исходя из указателя и оффсетов
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Начинающий
Статус
Оффлайн
Регистрация
5 Янв 2024
Сообщения
40
Реакции[?]
4
Поинты[?]
6K
:FailFish:, у него не конечный адресс, а оффсеты


получай базовый адресс игры, и читай, я написал тебе пример
C++:
auto off = hv::read< uint64_t >( base + 0x608F64 );
auto idk = hv::read< uint64_t >( off + 0x60 );
auto idk2 = hv::read< uint64_t >( idk + 0x80 );
auto idk3 = hv::read< uint64_t >( idk2 + 0x4 );
auto idk4 = hv::read< uint64_t >( idk3 + 0x1B8 );
auto idk5 = hv::read< uint64_t >( idk4 + 0x194 );
auto idk6 = hv::read< uint64_t >( idk5 + 0x8 );
hv::write< float >( idk7, 999 );
Вроде сделал как ты, но у меня в файле лога адрес 0xCCCCCCCC
Мб я оффсеты как то не правильно сказал?
Пожалуйста, авторизуйтесь для просмотра ссылки.


Вот если что код для dll
C++:
#include <Windows.h>
#include <iostream>

void injected_thread() {
    FILE* logFile;
    fopen_s(&logFile, "log.txt", "w");

    while (true) {
        if (GetAsyncKeyState('M')) {
            MessageBox(0, 0, 0, 0);
            DWORD base_address;
            ReadProcessMemory(GetCurrentProcess(), (LPCVOID)0x00400000, &base_address, sizeof(DWORD), NULL);
            DWORD offset1;
            ReadProcessMemory(GetCurrentProcess(), (LPCVOID)(base_address + 0x00608F64), &offset1, sizeof(DWORD), NULL);
            DWORD offset2;
            ReadProcessMemory(GetCurrentProcess(), (LPCVOID)(offset1 + 0x60), &offset2, sizeof(DWORD), NULL);
            DWORD offset3;
            ReadProcessMemory(GetCurrentProcess(), (LPCVOID)(offset2 + 0x80), &offset3, sizeof(DWORD), NULL);
            DWORD offset4;
            ReadProcessMemory(GetCurrentProcess(), (LPCVOID)(offset3 + 0x4), &offset4, sizeof(DWORD), NULL);
            DWORD offset5;
            ReadProcessMemory(GetCurrentProcess(), (LPCVOID)(offset4 + 0x1B8), &offset5, sizeof(DWORD), NULL);
            DWORD offset6;
            ReadProcessMemory(GetCurrentProcess(), (LPCVOID)(offset5 + 0x194), &offset6, sizeof(DWORD), NULL);
            DWORD ammo_address;
            ReadProcessMemory(GetCurrentProcess(), (LPCVOID)(offset6 + 0x8), &ammo_address, sizeof(DWORD), NULL);

            DWORD ammo_value = 999;
            WriteProcessMemory(GetCurrentProcess(), (LPVOID)ammo_address, &ammo_value, sizeof(DWORD), NULL);

            fprintf(logFile, "Address: 0x%p\n", ammo_address);
        }

        Sleep(1);
    }
    fclose(logFile);
}

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
    if (fdwReason == DLL_PROCESS_ATTACH) {
        CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)injected_thread, NULL, 0, NULL);
    }

    return true;
}
 
Пользователь
Статус
Оффлайн
Регистрация
25 Окт 2023
Сообщения
76
Реакции[?]
28
Поинты[?]
25K
Вроде сделал как ты, но у меня в файле лога адрес 0xCCCCCCCC
Мб я оффсеты как то не правильно сказал?
Пожалуйста, авторизуйтесь для просмотра ссылки.


Вот если что код для dll
C++:
#include <Windows.h>
#include <iostream>

void injected_thread() {
    FILE* logFile;
    fopen_s(&logFile, "log.txt", "w");

    while (true) {
        if (GetAsyncKeyState('M')) {
            MessageBox(0, 0, 0, 0);
            DWORD base_address;
            ReadProcessMemory(GetCurrentProcess(), (LPCVOID)0x00400000, &base_address, sizeof(DWORD), NULL);
            DWORD offset1;
            ReadProcessMemory(GetCurrentProcess(), (LPCVOID)(base_address + 0x00608F64), &offset1, sizeof(DWORD), NULL);
            DWORD offset2;
            ReadProcessMemory(GetCurrentProcess(), (LPCVOID)(offset1 + 0x60), &offset2, sizeof(DWORD), NULL);
            DWORD offset3;
            ReadProcessMemory(GetCurrentProcess(), (LPCVOID)(offset2 + 0x80), &offset3, sizeof(DWORD), NULL);
            DWORD offset4;
            ReadProcessMemory(GetCurrentProcess(), (LPCVOID)(offset3 + 0x4), &offset4, sizeof(DWORD), NULL);
            DWORD offset5;
            ReadProcessMemory(GetCurrentProcess(), (LPCVOID)(offset4 + 0x1B8), &offset5, sizeof(DWORD), NULL);
            DWORD offset6;
            ReadProcessMemory(GetCurrentProcess(), (LPCVOID)(offset5 + 0x194), &offset6, sizeof(DWORD), NULL);
            DWORD ammo_address;
            ReadProcessMemory(GetCurrentProcess(), (LPCVOID)(offset6 + 0x8), &ammo_address, sizeof(DWORD), NULL);

            DWORD ammo_value = 999;
            WriteProcessMemory(GetCurrentProcess(), (LPVOID)ammo_address, &ammo_value, sizeof(DWORD), NULL);

            fprintf(logFile, "Address: 0x%p\n", ammo_address);
        }

        Sleep(1);
    }
    fclose(logFile);
}

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
    if (fdwReason == DLL_PROCESS_ATTACH) {
        CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)injected_thread, NULL, 0, NULL);
    }

    return true;
}
если это длл то сделай так:

C++:
#include <Windows.h>

#include <cstdint>
#include <iostream>

void injected_thread() {
    FILE* logFile;
    fopen_s(&logFile, "log.txt", "w");

    while (true) {
        if (GetAsyncKeyState('M')) {
        auto game_base = ( uint64_t )GetModuleHandle( NULL ); 
            auto idk = *( uint64_t* )( game_base + 0x608F64 );
        auto idk1 = *( uint64_t* )( idk + 0x60 );
        auto idk2 = *( uint64_t* )( idk1 + 0x80 );
        auto idk3 = *( uint64_t* )( idk2 + 0x4 );
        auto idk4 = *( uint64_t* )( idk3 + 0x1B8 );
        auto idk5 = *( uint64_t* )( idk4 + 0x194 );
        auto idk6 = *( uint64_t* )( idk5 + 0x8 );
        auto idk7 = *( uint64_t* )( idk6 );

            *( int* )( idk7 ) = 999;       

            fprintf(logFile, "Address: 0x%p\n", idk7);
        }

        Sleep(1);

    }

    fclose(logFile);

}


BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
    if (fdwReason == DLL_PROCESS_ATTACH) {
        CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)injected_thread, NULL, 0, NULL);
    }

    return true;
}
 
Начинающий
Статус
Оффлайн
Регистрация
5 Янв 2024
Сообщения
40
Реакции[?]
4
Поинты[?]
6K
если это длл то сделай так:

C++:
#include <Windows.h>

#include <cstdint>
#include <iostream>

void injected_thread() {
    FILE* logFile;
    fopen_s(&logFile, "log.txt", "w");

    while (true) {
        if (GetAsyncKeyState('M')) {
        auto game_base = ( uint64_t )GetModuleHandle( NULL );
            auto idk = *( uint64_t* )( game_base + 0x608F64 );
        auto idk1 = *( uint64_t* )( idk + 0x60 );
        auto idk2 = *( uint64_t* )( idk1 + 0x80 );
        auto idk3 = *( uint64_t* )( idk2 + 0x4 );
        auto idk4 = *( uint64_t* )( idk3 + 0x1B8 );
        auto idk5 = *( uint64_t* )( idk4 + 0x194 );
        auto idk6 = *( uint64_t* )( idk5 + 0x8 );
        auto idk7 = *( uint64_t* )( idk6 );

            *( int* )( idk7 ) = 999;     

            fprintf(logFile, "Address: 0x%p\n", idk7);
        }

        Sleep(1);

    }

    fclose(logFile);

}


BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
    if (fdwReason == DLL_PROCESS_ATTACH) {
        CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)injected_thread, NULL, 0, NULL);
    }

    return true;
}

Игра на 32 бит поэтому сделал так, при нажатии клавиши M появляется MessageBox, после крашит, не записывается даже fprintf(logFile, "Pressed M%p\n");


C++:
#include <Windows.h>
#include <cstdint>
#include <iostream>

void injected_thread() {
    FILE* logFile;
    fopen_s(&logFile, "log.txt", "w");

    while (true) {
        if (GetAsyncKeyState('M')) {
            MessageBox(0, 0, 0, 0);
            fprintf(logFile, "Pressed M%p\n");
            auto game_base = (uint32_t)GetModuleHandle(L"prbf2.exe");
            fprintf(logFile, "Get game_base: 0x%p\n", game_base);
            auto idk = *(uint32_t*)(game_base + 0x608F64);
            fprintf(logFile, "idk: 0x%p\n", idk);
            auto idk1 = *(uint32_t*)(idk + 0x60);
            fprintf(logFile, "idk1: 0x%p\n", idk1);
            auto idk2 = *(uint32_t*)(idk1 + 0x80);
            fprintf(logFile, "idk2: 0x%p\n", idk2);
            auto idk3 = *(uint32_t*)(idk2 + 0x4);
            fprintf(logFile, "idk3: 0x%p\n", idk3);
            auto idk4 = *(uint32_t*)(idk3 + 0x1B8);
            fprintf(logFile, "idk4: 0x%p\n", idk4);
            auto idk5 = *(uint32_t*)(idk4 + 0x194);
            fprintf(logFile, "idk5: 0x%p\n", idk5);
            auto idk6 = *(uint32_t*)(idk5 + 0x8);
            fprintf(logFile, "idk6: 0x%p\n", idk6);
            auto idk7 = *(uint32_t*)(idk6);
            fprintf(logFile, "idk7: 0x%p\n", idk7);

            *(int*)(idk7) = 999;
            fprintf(logFile, "set 999%p\n");
        }
        Sleep(1);
    }
    fclose(logFile);
}


BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
    if (fdwReason == DLL_PROCESS_ATTACH) {
        CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)injected_thread, NULL, 0, NULL);
    }

    return true;
}
 
Последнее редактирование:
На самом деле я Zodiak
Участник
Статус
Оффлайн
Регистрация
22 Дек 2020
Сообщения
1,052
Реакции[?]
183
Поинты[?]
72K
Игра на 32 бит поэтому сделал так, но при нажатии на клавишу M игра крашит, не записывается даже fprintf(logFile, "Pressed M%p\n");


C++:
#include <Windows.h>
#include <cstdint>
#include <iostream>

void injected_thread() {
    FILE* logFile;
    fopen_s(&logFile, "log.txt", "w");

    while (true) {
        if (GetAsyncKeyState('M')) {
            fprintf(logFile, "Pressed M%p\n");
            auto game_base = (uint32_t)GetModuleHandle(L"prbf2.exe");
            fprintf(logFile, "Get game_base: 0x%p\n", game_base);
            auto idk = *(uint32_t*)(game_base + 0x608F64);
            fprintf(logFile, "idk: 0x%p\n", idk);
            auto idk1 = *(uint32_t*)(idk + 0x60);
            fprintf(logFile, "idk1: 0x%p\n", idk1);
            auto idk2 = *(uint32_t*)(idk1 + 0x80);
            fprintf(logFile, "idk2: 0x%p\n", idk2);
            auto idk3 = *(uint32_t*)(idk2 + 0x4);
            fprintf(logFile, "idk3: 0x%p\n", idk3);
            auto idk4 = *(uint32_t*)(idk3 + 0x1B8);
            fprintf(logFile, "idk4: 0x%p\n", idk4);
            auto idk5 = *(uint32_t*)(idk4 + 0x194);
            fprintf(logFile, "idk5: 0x%p\n", idk5);
            auto idk6 = *(uint32_t*)(idk5 + 0x8);
            fprintf(logFile, "idk6: 0x%p\n", idk6);
            auto idk7 = *(uint32_t*)(idk6);
            fprintf(logFile, "idk7: 0x%p\n", idk7);

            *(int*)(idk7) = 999;
            fprintf(logFile, "set 999%p\n");
        }

        Sleep(1);

    }

    fclose(logFile);

}


BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
    if (fdwReason == DLL_PROCESS_ATTACH) {
        CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)injected_thread, NULL, 0, NULL);
    }

    return true;
}
проверку на каждый адрес сделай
edit
а блять, ну у тебя крашится, а не записывается ничего потому что файл не закрывается.
 
Начинающий
Статус
Оффлайн
Регистрация
5 Янв 2024
Сообщения
40
Реакции[?]
4
Поинты[?]
6K
Пользователь
Статус
Оффлайн
Регистрация
25 Окт 2023
Сообщения
76
Реакции[?]
28
Поинты[?]
25K
Последнее редактирование:
Участник
Статус
Оффлайн
Регистрация
19 Апр 2020
Сообщения
1,180
Реакции[?]
314
Поинты[?]
152K
Игра на 32 бит поэтому сделал так, при нажатии клавиши M появляется MessageBox, после крашит, не записывается даже fprintf(logFile, "Pressed M%p\n");


C++:
#include <Windows.h>
#include <cstdint>
#include <iostream>

void injected_thread() {
    FILE* logFile;
    fopen_s(&logFile, "log.txt", "w");

    while (true) {
        if (GetAsyncKeyState('M')) {
            MessageBox(0, 0, 0, 0);
            fprintf(logFile, "Pressed M%p\n");
            auto game_base = (uint32_t)GetModuleHandle(L"prbf2.exe");
            fprintf(logFile, "Get game_base: 0x%p\n", game_base);
            auto idk = *(uint32_t*)(game_base + 0x608F64);
            fprintf(logFile, "idk: 0x%p\n", idk);
            auto idk1 = *(uint32_t*)(idk + 0x60);
            fprintf(logFile, "idk1: 0x%p\n", idk1);
            auto idk2 = *(uint32_t*)(idk1 + 0x80);
            fprintf(logFile, "idk2: 0x%p\n", idk2);
            auto idk3 = *(uint32_t*)(idk2 + 0x4);
            fprintf(logFile, "idk3: 0x%p\n", idk3);
            auto idk4 = *(uint32_t*)(idk3 + 0x1B8);
            fprintf(logFile, "idk4: 0x%p\n", idk4);
            auto idk5 = *(uint32_t*)(idk4 + 0x194);
            fprintf(logFile, "idk5: 0x%p\n", idk5);
            auto idk6 = *(uint32_t*)(idk5 + 0x8);
            fprintf(logFile, "idk6: 0x%p\n", idk6);
            auto idk7 = *(uint32_t*)(idk6);
            fprintf(logFile, "idk7: 0x%p\n", idk7);

            *(int*)(idk7) = 999;
            fprintf(logFile, "set 999%p\n");
        }
        Sleep(1);
    }
    fclose(logFile);
}


BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
    if (fdwReason == DLL_PROCESS_ATTACH) {
        CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)injected_thread, NULL, 0, NULL);
    }

    return true;
}
сделай через цикл for
 
Начинающий
Статус
Оффлайн
Регистрация
5 Янв 2024
Сообщения
40
Реакции[?]
4
Поинты[?]
6K
Участник
Статус
Оффлайн
Регистрация
19 Апр 2020
Сообщения
1,180
Реакции[?]
314
Поинты[?]
152K
C++:
#include <Windows.h>
#include <iostream>

void injected_thread() {
    FILE* logFile;
    fopen_s(&logFile, "log.txt", "w");

    while (true) {
        if (GetAsyncKeyState('M')) {
            DWORD base_address;
            MessageBox(0, 0, 0, 0);
            ReadProcessMemory(GetCurrentProcess(), (LPCVOID)0x00400000, &base_address, sizeof(DWORD), NULL);

            DWORD offsets[] = {0x00608F64, 0x60, 0x80, 0x4, 0x1B8, 0x194, 0x8};
            DWORD ammo_address = base_address;

            for (int i = 0; i < sizeof(offsets) / sizeof(offsets[0]); ++i) {
                ReadProcessMemory(GetCurrentProcess(), (LPCVOID)(ammo_address + offsets[i]), &ammo_address, sizeof(DWORD), NULL);
            }

            DWORD ammo_value = 999;
            WriteProcessMemory(GetCurrentProcess(), (LPVOID)ammo_address, &ammo_value, sizeof(DWORD), NULL);

            fprintf(logFile, "Address: 0x%p\n", ammo_address);
        }

        Sleep(1);
    }
    fclose(logFile);
}

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
    if (fdwReason == DLL_PROCESS_ATTACH) {
        CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)injected_thread, NULL, 0, NULL);
    }

    return true;
}
 
Начинающий
Статус
Оффлайн
Регистрация
5 Янв 2024
Сообщения
40
Реакции[?]
4
Поинты[?]
6K
C++:
#include <Windows.h>
#include <iostream>

void injected_thread() {
    FILE* logFile;
    fopen_s(&logFile, "log.txt", "w");

    while (true) {
        if (GetAsyncKeyState('M')) {
            DWORD base_address;
            MessageBox(0, 0, 0, 0);
            ReadProcessMemory(GetCurrentProcess(), (LPCVOID)0x00400000, &base_address, sizeof(DWORD), NULL);

            DWORD offsets[] = {0x00608F64, 0x60, 0x80, 0x4, 0x1B8, 0x194, 0x8};
            DWORD ammo_address = base_address;

            for (int i = 0; i < sizeof(offsets) / sizeof(offsets[0]); ++i) {
                ReadProcessMemory(GetCurrentProcess(), (LPCVOID)(ammo_address + offsets[i]), &ammo_address, sizeof(DWORD), NULL);
            }

            DWORD ammo_value = 999;
            WriteProcessMemory(GetCurrentProcess(), (LPVOID)ammo_address, &ammo_value, sizeof(DWORD), NULL);

            fprintf(logFile, "Address: 0x%p\n", ammo_address);
        }

        Sleep(1);
    }
    fclose(logFile);
}

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
    if (fdwReason == DLL_PROCESS_ATTACH) {
        CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)injected_thread, NULL, 0, NULL);
    }

    return true;
}

Адрес 0x00000000 в логе выдает
 
ппоршень
Пользователь
Статус
Оффлайн
Регистрация
15 Фев 2020
Сообщения
278
Реакции[?]
49
Поинты[?]
38K
C++:
#include <Windows.h>
#include <iostream>

void injected_thread() {
    FILE* logFile;
    fopen_s(&logFile, "log.txt", "w");

    while (true) {
        if (GetAsyncKeyState('M')) {
            DWORD base_address;
            MessageBox(0, 0, 0, 0);
            ReadProcessMemory(GetCurrentProcess(), (LPCVOID)0x00400000, &base_address, sizeof(DWORD), NULL);

            DWORD offsets[] = {0x00608F64, 0x60, 0x80, 0x4, 0x1B8, 0x194, 0x8};
            DWORD ammo_address = base_address;

            for (int i = 0; i < sizeof(offsets) / sizeof(offsets[0]); ++i) {
                ReadProcessMemory(GetCurrentProcess(), (LPCVOID)(ammo_address + offsets[i]), &ammo_address, sizeof(DWORD), NULL);
            }

            DWORD ammo_value = 999;
            WriteProcessMemory(GetCurrentProcess(), (LPVOID)ammo_address, &ammo_value, sizeof(DWORD), NULL);

            fprintf(logFile, "Address: 0x%p\n", ammo_address);
        }

        Sleep(1);
    }
    fclose(logFile);
}

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
    if (fdwReason == DLL_PROCESS_ATTACH) {
        CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)injected_thread, NULL, 0, NULL);
    }

    return true;
}
пожалуйста, не используйте ReadProcessMemory/WriteProcessMemory когда вы блять заинжекчены в процесс, вы тратите на эти бесполезные операции процессорное время
 
Сверху Снизу