Перейти к содержанию

Изменение значения в адресе указателя


Рекомендуемые сообщения

Ребят привет, юзаю C++. Вопрос. У меня есть адрес указателя но если я пишу в него свое значение то пойнтер в СЕ в вопросики превращается и пойнтер тупо не работает больше(надо игру перезапускать)

вот что я делаю:

int newValue = 353;

WriteProcessMemory(handle, (LPVOID)0x001B4E84, &newValue, sizeof(newValue), 0);

Ссылка на комментарий
Поделиться на другие сайты

Ну вот у меня есть в CE пойнтер здоровья, если я там его меняю на здоровье которое я хочу то оно меняется и все вроде норм, но как это в C++ реализовать то ?

Ссылка на комментарий
Поделиться на другие сайты

читаешь адрес получаешь указатель на значение, пишешь в этот указатель и значение меняется.

 

ReadProcessMemory(handle, (LPVOID)0x001B4E84, &ptrBiffer, sizeof(ptrBiffer), 0);

WriteProcessMemory(handle, (LPVOID)ptrBiffer, &newValue, sizeof(newValue), 0);

Ссылка на комментарий
Поделиться на другие сайты

48 минут назад, vadik111 сказал:

Не работает, он вместо здоровья вообще другое значение берет

Извини но

Цитата

 

Ванга

Дата смерти:

11 августа 1996 (85 лет)

 

по этому приложи код и больше информации.

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

У меня есть указатель и в C++ он берет непонятную дичь, а в СЕ значение 513.

ReadProcessMemory(handle, (LPVOID*)0x010F583C, &readtest, sizeof(readtest), 0);

он берет какие-то левые числа, 1014432 и т.д когда в Cheat Engine там значение 513 что делать в данном случае ?

Изменено пользователем vadik111
Ссылка на комментарий
Поделиться на другие сайты

30 минут назад, vadik111 сказал:

У меня есть указатель и в C++ он берет непонятную дичь, а в СЕ значение 513.

ReadProcessMemory(handle, (LPVOID*)0x010F583C, &readtest, sizeof(readtest), 0);

он берет какие-то левые числа, 1014432 и т.д когда в Cheat Engine там значение 513 что делать в данном случае ?

Почему не понятную? 

1014432  это адрес, в котором и лежит значение 513. Только адрес в десятичной 1014432  - в HEX он будет таким : 000F7AA0.

Попробуй теперь записать в него, как тебе написали:

В 19.01.2018 в 16:58, kiwipapayamongoose сказал:

WriteProcessMemory(handle, (LPVOID)ptrBiffer, &newValue, sizeof(newValue), 0);

 

 

Цитата

WriteProcessMemory(handle, (LPVOID)readtest, &newValue, sizeof(newValue), 0);

 

 А лучше ты бы записал видео, что и как делаешь и тебе бы поправили бы ошибку.

Потому что мне кажется, что ты не допонял @kiwipapayamongoose.

Он тебе написал (Хотя я не знаю С++. но ито это понял):

В 19.01.2018 в 16:58, kiwipapayamongoose сказал:

читаешь адрес получаешь указатель на значение, пишешь в этот указатель и значение меняется.

 

ReadProcessMemory(handle, (LPVOID)0x001B4E84, &ptrBiffer, sizeof(ptrBiffer), 0); --читаешь адрес получаешь указатель на значение,

WriteProcessMemory(handle, (LPVOID)ptrBiffer, &newValue, sizeof(newValue), 0);   --пишешь в этот указатель и значение меняется.

 

  • Понравилось 1
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, vadik111 сказал:

что делать в данном случае ?

Правильно все записать.

Может поможет это? 

Видео:

Скрытый текст

 

 

  • Понравилось 1
Ссылка на комментарий
Поделиться на другие сайты

53 минуты назад, Garik66 сказал:

Правильно все записать.

Может поможет это? 

Видео:

  Скрыть содержимое

 

 

В C++ так нельзя буквами сделать чтобы туда значение записать :(

Ссылка на комментарий
Поделиться на другие сайты

6 минут назад, vadik111 сказал:

В C++ так нельзя буквами сделать чтобы туда значение записать :(

Переведи в цифры :D

На видео это видно, спец. оставил адрес, т.е.:

writeInteger('[006345d0]+480',1000)

  

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...
1 час назад, vadik111 сказал:

А как это ?

Судя по вопросам, мне кажется, рановато ты за это берешься. Сначала нужно освоить, что такое указатели, затем нужно освоить чтение/запись памяти чужих процессов, и только потом пытаться. С наскоку это сделать практически невозможно.

Ссылка на комментарий
Поделиться на другие сайты

В 23.01.2018 в 15:11, vadik111 сказал:

В C++ так нельзя буквами сделать чтобы туда значение записать

в с/с++ есть разыменовывание указателя, обратная получению адреса (&): *ptr

тогда можно изменять значение которое в указателе (или просто обращаться  к нему для проверки)

но т.к. у тебя данные не в своем адресном пространстве, то используются функции записи/чтения в процесс ReadProcessMemory/WriteProcessMemory

хотя не очень понятно что ты хочешь

Ссылка на комментарий
Поделиться на другие сайты

В 05.02.2018 в 20:49, roma91212 сказал:

Пиши Internal cheat

У человека явные проблемы с простейшими WinAPI функциями и указателями, о чем еще может быть речь?

А по теме, скинь свой код, может косякнул где, так же сегодня как домой приду гляну старые проекты, может найду что-то на чтение/запись в сторонний процес.

Ссылка на комментарий
Поделиться на другие сайты

Сори, не нашел в своем хламе не чего с работой с памятью :( 

быстренько написал код для чтения указателя, если надо, то поясню по строчкам. или запишу видос с пояснением кода.

 

#include <Windows.h>
#include <TlHelp32.h>
#include <iostream>

DWORD PID = NULL;
DWORD BaseAddr = NULL;
DWORD offs = NULL;
char* ProcName = "Tutorial-i386.exe";

int HP;
// Портотип
bool OpenProc();

int main()
{
    OpenProc();
    HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, TRUE, PID);
    printf("%x \n", hProc);

    if (hProc != NULL)
    {
        // Базовый адрес
        BaseAddr = 0x400000;
        printf("0x%x \n", PID);
        // До тех пор пока не нажмем INSERT
        while (!GetAsyncKeyState(VK_INSERT))
        {
            if (GetAsyncKeyState(VK_F1) & 1)
            {
                printf("Test Memory Read \n");
                

                // Ох... Давно не работал из вне процесса жертвы
                // Так бы сейчас разименованым указателем жахнул
                // *(DWORD*)

                ReadProcessMemory(hProc, (LPVOID*)(BaseAddr + 0x001FD5D0), &offs, 4, NULL);
                printf("Readed \n Now We need add offset 0x480 to readed Addr 0x%x \n", offs);
                offs += 0x480;
                // Ну вот и все, читаем наш оффс
                ReadProcessMemory(hProc, (LPVOID*)(offs), &HP, 4, NULL);
                printf("Our HP is %d \n", HP);
        
            }
        }


    }
    else
    {
        printf("LastError: %x \n", GetLastError());
    }
    system("PAUSE");
    return 0;
}


bool OpenProc()
{
    // Сначала ищем наш процес
    // как-то так
    PROCESSENTRY32 pe = { sizeof(PROCESSENTRY32) };
    HANDLE hSnapshot;
    
    while (!PID)
    {
        hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
        if (Process32First(hSnapshot, &pe))
        {
            do
            {
                if (!strcmp(pe.szExeFile, ProcName))
                {
                    PID = pe.th32ProcessID;
                    printf("We find Process!!! PID: %x \n", PID);
                    break;
                }
                
            }
            while (Process32Next(hSnapshot, &pe));

        }
        Sleep(1000);

    }
    // В любом случае вернем false в PID мы и так все записали раз дошли сюда :)
    return false;
}

 

 

Как-то так, надеюсь поможет.

 

P.s. для модеров, удалил тег кода, он весь мой код без перехода на след. строку лепит. Не читабельно!

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.