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

barspinoff

Известный
126
33
Ну вот, как-то так, но с 37 по 43 нельзя преобразовать float в LPVOID

C++:
    private: System::Void TEST_Click(System::Object^ sender, System::EventArgs^ e) {

        WORD wID;

        DWORD pActor, pPed, pMtrx1, pMtrx2;

        float fPlayerHP;

        ReadProcessMemory(hProcess, (LPVOID)0xBAA410, &wID, sizeof(wID),0);
        ReadProcessMemory(hProcess, (LPVOID)0xBAA410, &pActor, sizeof(pActor),0);
        ReadProcessMemory(hProcess, (LPVOID)(pActor + 0x79C), &pPed, sizeof(pPed),0);
        ReadProcessMemory(hProcess, (LPVOID)(pPed + 0x14), &pMtrx2, sizeof(pMtrx2),0);
        ReadProcessMemory(hProcess, (LPVOID)(pPed + 0x540), &fPlayerHP, sizeof(fPlayerHP),0);

        if (&pPed > 0)
        {
            float* x = (float*)((&pMtrx1) + 0x30);//X position Ped
            float* y = (float*)((&pMtrx1) + 0x34);//Y position Ped
            float* z = (float*)((&pMtrx1) + 0x38);//Z position Ped
            float* x1 = (float*)((&pMtrx2) + 0x30);//X position Target
            float* y1 = (float*)((&pMtrx2) + 0x34);//Y position Target
            float* z1 = (float*)((&pMtrx2) + 0x38);//Z position Target
            float* RotAngle = (float*)((&pActor) + 0x558);//health of target player
            float Xwiping = (float)*x + 2 * (float)cos(*RotAngle + 1.48353F);
            float Ywiping = (float)*y + 2 * (float)sin(*RotAngle + 1.48353F);
            float Zwiping = (float)*z + 0.5F;
            *x1 = (float)Xwiping;
            *y1 = (float)Ywiping;
            *z1 = (float)Zwiping;
            ReadProcessMemory(hProcess, (LPVOID)(float*)((&pMtrx1) + 0x30), &pMtrx1, sizeof(pMtrx1), 0);
            ReadProcessMemory(hProcess, (LPVOID)(float*)((&pMtrx1) + 0x34), &pMtrx1, sizeof(pMtrx1), 0);
            ReadProcessMemory(hProcess, (LPVOID)(float*)((&pMtrx1) + 0x38), &pMtrx1, sizeof(pMtrx1), 0);
            ReadProcessMemory(hProcess, (LPVOID)(float*)((&pMtrx1) + 0x30), &pMtrx2, sizeof(pMtrx2), 0);
            ReadProcessMemory(hProcess, (LPVOID)(float*)((&pMtrx1) + 0x34), &pMtrx2, sizeof(pMtrx2), 0);
            ReadProcessMemory(hProcess, (LPVOID)(float*)((&pMtrx1) + 0x38), &pMtrx2, sizeof(pMtrx2), 0);
            ReadProcessMemory(hProcess, (LPVOID)(float*)((&pActor) + 0x558), &pActor, sizeof(pActor), 0);
            ReadProcessMemory(hProcess, (LPVOID)(float)*x + 2 * (float)cos(*RotAngle + 1.48353F), &RotAngle, sizeof(RotAngle), 0);
            ReadProcessMemory(hProcess, (LPVOID)(float)*y + 2 * (float)sin(*RotAngle + 1.48353F), &RotAngle, sizeof(RotAngle), 0);
            ReadProcessMemory(hProcess, (LPVOID)(float)*z + 0.5F, &RotAngle, sizeof(RotAngle), 0);

            WriteProcessMemory(hProcess, (LPVOID)(float)Xwiping, &Xwiping, sizeof(Xwiping), 0);
            WriteProcessMemory(hProcess, (LPVOID)(float)Ywiping, &Ywiping, sizeof(Ywiping), 0);
            WriteProcessMemory(hProcess, (LPVOID)(float)Zwiping, &Zwiping, sizeof(Zwiping), 0);
     

        }
    }
видимо, ты совсем ничего не понял
C:
float x, y, z, xt, yt, zt, angle, xw, yw, zw;
ReadProcessMemory(hProcess, (LPVOID)(pMtrx1 + 0x30), &x, sizeof(x), 0);
ReadProcessMemory(hProcess, (LPVOID)(pMtrx1 + 0x34), &y, sizeof(y), 0);
ReadProcessMemory(hProcess, (LPVOID)(pMtrx1 + 0x38), &z, sizeof(z), 0);

ReadProcessMemory(hProcess, (LPVOID)(pMtrx2 + 0x30), &xt, sizeof(xt), 0);
ReadProcessMemory(hProcess, (LPVOID)(pMtrx2 + 0x34), &yt, sizeof(yt), 0);
ReadProcessMemory(hProcess, (LPVOID)(pMtrx2 + 0x38), &zt, sizeof(zt), 0);

ReadProcessMemory(hProcess, (LPVOID)(pActor + 0x558), &angle, sizeof(angle), 0);

xw = (float)x + 2 * (float)cos(angle + 1.48353F);
yw = (float)y + 2 * (float)sin(angle + 1.48353F);
zw = (float)z + 0.5F;

WriteProcessMemory(hProcess, (LPVOID)(pMtrx2 + 0x30), &xw, sizeof(xw), 0);
WriteProcessMemory(hProcess, (LPVOID)(pMtrx2 + 0x34), &yw, sizeof(yw), 0);
WriteProcessMemory(hProcess, (LPVOID)(pMtrx2 + 0x38), &zw, sizeof(zw), 0);
 

samp is meme

Активный
183
63
Я щас как ебучий абориген, которому показали зажигалку. Как этим пользоваться? Я что-то написал, исходя из инфы на странице этой функции msoft, но я ничего не понимаю. Подскажи, пожалуйста, как мне юзать это ?
Посмотреть вложение 55573

Не знаю, хоть как-то тебе облегчить жизнь, класс для работы с памятью.

C++:
#pragma once
#include    <Windows.h>
#include    <TlHelp32.h>
#include    <comdef.h>

struct PModule
{
    DWORD dwBase;
    DWORD dwSize;
};

class memory
{
public:
    inline bool Attach(const char* pName, DWORD dwSize)
    {
        HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);

        PROCESSENTRY32 entry;
        entry.dwSize = sizeof(entry);

        do
            if (!strcmp(_bstr_t(entry.szExeFile), pName))
            {
                _pId = entry.th32ProcessID;
                CloseHandle(handle);
                _process = OpenProcess(dwSize, false, _pId);
                return true;
            }
        while (Process32Next(handle, &entry));
        return false;
    }

    inline PModule GetModule(const char* pModule)
    {
        HANDLE module = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, _pId);
        MODULEENTRY32 entry;
        entry.dwSize = sizeof(entry);
       
        do
            if (!strcmp(_bstr_t(entry.szModule), pModule))
            {
                CloseHandle(module);
                return PModule{ reinterpret_cast<DWORD>(entry.hModule), entry.modBaseSize };
            }
        while (Module32Next(module, &entry));

        return PModule { 0 , 0 };
    }

    template <class T>
    T Read(const DWORD dwSize)
    {
        T _read;
        ReadProcessMemory(_process, LPVOID(dwSize), &_read, sizeof(T), NULL);
        return _read;
    }

    template <class T>
    void Write(const DWORD dwSize, const T value)
    {
        WriteProcessMemory(_process, LPVOID(dwSize), &value, sizeof(T), NULL);
    }

    void Exit()
    {
        CloseHandle(_process);
    }

private:
    HANDLE _process;
    DWORD _pId;
};

Как юзать на примере контры
C++:
memory mem;
PModule bClient;
while (!mem.Attach("csgo.exe", PROCESS_ALL_ACCESS)) {}

bClient = mem.GetModule("client_panorama.dll");
   
DWORD playerBase = mem.Read<DWORD>(bClient.dwBase + dwLocalPlayer);
 

RTD

Потужно
Модератор
399
470
Я щас как ебучий абориген, которому показали зажигалку. Как этим пользоваться? Я что-то написал, исходя из инфы на странице этой функции msoft, но я ничего не понимаю. Подскажи, пожалуйста, как мне юзать это ?
Посмотреть вложение 55573
Ну для начала я не вижу где ты получаешь hProcess
C++:
DWORD procId = GetProcId(L"gta-sa.exe");
if (procId == NULL) return;
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procId);
if (hProc == INVALID_HANDLE_VALUE) return;
По поводу virtualprotectex, то используется обычно для записи, выглядит примерно так
C++:
xw = (float)x + 2 * (float)cos(angle + 1.48353F);
DWORD oldProt;
VirtualProtectEx(hProcess, (void*)(pMtrx2 + 0x30), sizeof(xw), PAGE_EXECUTE_READWRITE, &oldProt);
WriteProcessMemory(hProcess, (LPVOID)(pMtrx2 + 0x30), &xw, sizeof(xw), 0);
VirtualProtectEx(hProcess, (void*)(pMtrx2 + 0x30), sizeof(xw), oldProt, NULL);
В конце всех твоих манипуляций не забудь прописать
C++:
CloseHandle(hProcess);
 

loganhackerdff

Известный
868
519
Как сделать чтоб русский текст из imgui::InputText в чат выводился нормальным а не каракулями
 

RTD

Потужно
Модератор
399
470
Переделал AntiBikeFall (ремень) internal в external. В принципе, он работает. Однако при столкновении на большой скорости игра крашит.
В чем может быть проблема?
Ты не правильно перевел даже близко, оно не могло работать(если говоришь "В принципе, он работает", то ты не набрал достаточную скорость чтобы сработала функция падения), почитай что делает
C++:
*(BYTE*)0x4BA3B9 = 0xE9;
и что
C++:
memset((PVOID)0x4BA3BC, 0x00, 2);
и параметры функции WriteProcessMemory

Я вижу что ты на рандоме пишешь - а вдруг сработает...
 

RTD

Потужно
Модератор
399
470
Есть такое)
memset использовать не могу:
Посмотреть вложение 55876

BYTE использовать не могу:


Посмотреть вложение 55875
Тебе и не нужно их использовать, ты должен знать что они делают, а ты не знаешь. Вот пример(с мемсет такой же код)
C++:
int bufMoney = 444;
WriteProcessMemory(hProcess, (LPVOID)0xB7CE50, &bufMoney, 4 /*sizeof(DWORD)*/, nullptr); //*(*DWORD)0xB7CE50 = 444
 

ALF

Известный
Проверенный
320
539
Переделал AntiBikeFall (ремень) internal в external. В принципе, он работает. Однако при столкновении на большой скорости игра крашит.
В чем может быть проблема?
C++:
        VirtualProtect((PVOID)0x4BA3B9, 6, PAGE_EXECUTE_READWRITE, NULL);
        VirtualProtect((PVOID)0x4B3296, 3, PAGE_EXECUTE_READWRITE, NULL);
        DWORD one = 0x4BA3B9;
        DWORD two = 0x4BA3BA;
        DWORD three = 0x4BA3BB;
        DWORD four = 0x4BA3BF;
        DWORD five = 0x4BA3BC;
        DWORD six = 0x4B3296;
        one = 0xE9;
        two = 0xA7;
        three = 0x03;
        ReadProcessMemory(hProcess, (LPVOID)0x4BA3B9, &one, sizeof(one), 0);
        ReadProcessMemory(hProcess, (LPVOID)0x4BA3BA, &two, sizeof(two), 0);
        ReadProcessMemory(hProcess, (LPVOID)0x4BA3BB, &three, sizeof(three), 0);
        ReadProcessMemory(hProcess, (LPVOID)0x4BA3BF, &four, sizeof(four), 0);
        WriteProcessMemory(hProcess, (PVOID)(five + 0x00 + 2), &five, 3, 0);
        WriteProcessMemory(hProcess, (LPVOID)(six + 0x90 + 3), (LPVOID)&six, 3, NULL);

Вот такой был интернал:

C++:
        VirtualProtect((PVOID)0x4BA3B9, 6, PAGE_EXECUTE_READWRITE, NULL);
        VirtualProtect((PVOID)0x4B3296, 3, PAGE_EXECUTE_READWRITE, NULL);
        *(BYTE*)0x4BA3B9 = 0xE9;
        *(BYTE*)0x4BA3BA = 0xA7;
        *(BYTE*)0x4BA3BB = 0x03;
        memset((PVOID)0x4BA3BC, 0x00, 2);
        *(BYTE*)0x4BA3BF + 0x90;
        memset((PVOID)0x4B3296, 0x90, 3);
Ты снимаешь протекты текущего процесса, а не в том где ты работаешь с памятью.
Используй экстендед функцию, в ней первый параметр это хендл процесса, остальное всё тоже самое.
Да и вообще снимать протекты тут не надо, так что можешь просто удалить VirtualProtect
 
  • Нравится
Реакции: manukhov

RTD

Потужно
Модератор
399
470

RTD

Потужно
Модератор
399
470
@DolgorukovGTA @RTD оценку?

C++:
        DWORD one = 0x4BA3B9;
        DWORD two = 0x4BA3BA;
        DWORD three = 0x4BA3BB;
        DWORD four = 0x4BA3BF;
       
        one = 0xE9;
        two = 0xA7;
        three = 0x03;

        ReadProcessMemory(hProcess, (LPVOID)0x4BA3B9, &one, sizeof(one), 0);
        ReadProcessMemory(hProcess, (LPVOID)0x4BA3BA, &two, sizeof(two), 0);
        ReadProcessMemory(hProcess, (LPVOID)0x4BA3BB, &three, sizeof(three), 0);
        ReadProcessMemory(hProcess, (LPVOID)0x4BA3BF, &four, sizeof(four), 0);

        WriteProcessMemory(hProcess, (LPVOID) * (BYTE*)0x4BA3B9, &one, 1 , nullptr);
        WriteProcessMemory(hProcess, (LPVOID) * (BYTE*)0x4BA3BA, &two, 1, nullptr);
        WriteProcessMemory(hProcess, (LPVOID) * (BYTE*)0x4BA3BB, &three, 1, nullptr);
        WriteProcessMemory(hProcess, (LPVOID) * (BYTE*)0x4BA3BF, &four, 1, nullptr);

        WriteProcessMemory(hProcess, (LPVOID) * (BYTE*)(0x4BA3BF +0x90), &four, 1, nullptr);

        const int i = 0x90;
        const void* newi = &i;

        WriteProcessMemory(hProcess, (LPVOID)0x4BA3BC, 0x00, 2, nullptr);
        WriteProcessMemory(hProcess, (LPVOID)0x4B3296, newi, 3, nullptr);
    }
Мдаааа.... Ты опять даже близко не подошел. Все что тебе нужно в моих сообщениях, но ты их не понял и никак не применил(если ваще читал). Код за тебя никто писать не будет, я тебе подсказал все что нужно, а ты продолжаешь пихать отсебятину которая не будет работать даже в теории. Продолжай писать на рандоме и у тебя ничего не получится или попытайся понять что и как работает