Другое С/С++ Вопрос - Ответ

THERION

Известный
Проверенный
88
331
Пытаюсь изменить
1634901282237.png

на
1634901345881.png

Если делать это через Сheat Engine то все работает прекрасно.
Программа которую я написал должна делать то же самое но не работает.
C:
#include <windows.h>
#include <string.h>
#include <stdlib.h>

void* ptr = (void*)0x2A3F4D; // fix: 0x2A3F4D => 0x6A3F4D
char patch[] = "\xB0\x05\x90\x90\x90\x90";

void write_memory(void) {
    DWORD old_prot;
    size_t size = sizeof(patch) - 1;

    VirtualProtect(ptr, size, PAGE_READWRITE, &old_prot);
    memcpy(ptr, patch, size);
    VirtualProtect(ptr, size, old_prot, &old_prot);
}

int __stdcall DllMain(HMODULE module, DWORD reason, LPVOID reserved) {
    if (reason == DLL_PROCESS_ATTACH)
            write_memory();
    return 1;
}
 
Последнее редактирование:

legendabrn

Известный
Проверенный
121
171
Пытаюсь изменить
Посмотреть вложение 118744
на
Посмотреть вложение 118745
Если делать это через Сheat Engine то все работает прекрасно.
Программа которую я написал должна делать то же самое но не работает.
Если скомпилировать код ниже и закинуть в папку с игрой Asi-loader выдает:
Посмотреть вложение 118746

C:
#include <windows.h>
#include <string.h>
#include <stdlib.h>

void write_memory(void) {
    DWORD old_prot;

    void* ptr = (void*)0x2A3F4D;
    char patch[] = "\xB0\x05\x90\x90\x90\x90";
    size_t size = sizeof(patch) - 1;

    VirtualProtect(ptr, size, PAGE_READWRITE, &old_prot);
    memcpy(ptr, patch, size);
    VirtualProtect(ptr, size, old_prot, &old_prot);

    return;
}

int __stdcall DllMain(HMODULE module, DWORD reason, LPVOID reserved)
{
    switch (reason)
    {
        case DLL_PROCESS_ATTACH:
            write_memory();
            break;
    }

    return 1;
}

Также пробовал написать тоже самое на Lua, но функции из библиотеки memory не работают

Lua:
local wrt = require('memory').setint8
local ptr = 0x2A3F4D

local result = wrt(ptr + 0, 0xB0, true)
result = result or wrt(ptr + 1, 0x05, true)
for i = 2, 5 do
    result = result or wrt(ptr + i, 0x90, true)
end
print(result) -- FALSE
C++:
void write_memory()
{
    DWORD old_prot;

    void* ptr = reinterpret_cast<void*>(0x6A3F4D);
    char patch[] = "\xB0\x05\x90\x90\x90\x90";
    size_t size = sizeof(patch) - 1;

    VirtualProtect(ptr, size, PAGE_READWRITE, &old_prot);
    memcpy(ptr, patch, size);
    VirtualProtect(ptr, size, old_prot, &old_prot);
}


BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
    if (ul_reason_for_call == DLL_PROCESS_ATTACH)
    {
        write_memory();
    }
    return TRUE;
}

1634902404939.png


upd: не работало потому что, ты пытался перезаписать только адрес смещения а не статический адрес
 
Последнее редактирование:
  • Нравится
Реакции: THERION

AdCKuY_DpO4uLa

Адский дрочер
Друг
369
817
C++:
#include <Windows.h>
#include <vector>

void WriteBytes(const unsigned __int32 &addr, const std::vector<unsigned __int8> &bytes) {
    DWORD prot;
    VirtualProtect((void*)addr, bytes.size(), PAGE_EXECUTE_READWRITE, &prot);
    memcpy((void*)addr, bytes.data(), bytes.size());
    VirtualProtect((void*)addr, bytes.size(), prot, &prot);
}

class CPlugin {
public:
    CPlugin() {
        WriteBytes(0x6A3F4D, { 0xB0, 0x05, 0x90, 0x90, 0x90, 0x90 });//install patch
    }

    ~CPlugin() {
        WriteBytes(0x6A3F4D, { 0x8A, 0x86, 0x8A, 0x04, 0x00, 0x00 });//remove patch if plugin unloaded
    }
} Plugin;

так красивее🤨
 

leak.

Известный
37
4
всем прив, у кого-нибудь есть samp.idb/dll v0.3.7-R1 без обфускации кода?и вообще кто-нибудь убрал протекцию?
 

F0RQU1N and

Известный
1,295
501
всем прив, у кого-нибудь есть samp.idb/dll v0.3.7-R1 без обфускации кода?и вообще кто-нибудь убрал протекцию?
пользуйся гуглом
 

legendabrn

Известный
Проверенный
121
171
а как надо?

Как реализовать? https://www.blast.hk/threads/12223/
Вот вариант получше.

C++:
auto speedHackMenuMap(const unsigned __int32 ui32Status, const float *pZoomSpeed, const float *pMoveSpeed) -> void {
    /* CMenuManager::AdditionalOptionInput */
    if (ui32Status) {
        patchAddress(reinterpret_cast<void *>(0x57769A), &pZoomSpeed, 0x4);
        patchAddress(reinterpret_cast<void *>(0x5779C9), &pZoomSpeed, 0x4);
        patchAddress(reinterpret_cast<void *>(0x578652), &pMoveSpeed, 0x4);
        patchAddress(reinterpret_cast<void *>(0x5784B7), &pMoveSpeed, 0x4);
        patchAddress(reinterpret_cast<void *>(0x577E72), &pMoveSpeed, 0x4);
        patchAddress(reinterpret_cast<void *>(0x578322), &pMoveSpeed, 0x4);
    } else {
        patchAddress(reinterpret_cast<void *>(0x57769A), "\xE4\x53\x86\x00", 0x4);
        patchAddress(reinterpret_cast<void *>(0x5779C9), "\xE4\x53\x86\x00", 0x4);
        patchAddress(reinterpret_cast<void *>(0x578652), "\x48\x8F\x85\x00", 0x4);
        patchAddress(reinterpret_cast<void *>(0x5784B7), "\x48\x8F\x85\x00", 0x4);
        patchAddress(reinterpret_cast<void *>(0x577E72), "\x48\x8F\x85\x00", 0x4);
        patchAddress(reinterpret_cast<void *>(0x578322), "\x48\x8F\x85\x00", 0x4);
    } return;
}
 
У

Удалённый пользователь 448549

Гость
123:
enum test
{
    one = 1,
    two = 2
};
Подскажите пожалуйста, как вывести "one" или "two"