Авторизация  
vadik111

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

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

Ребят привет, юзаю 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);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
4 часа назад, vadik111 сказал:

Измена значения

Извините не по теме не удержался. ИЗМЕНА - улыбнуло.;):D 

 

Поделиться сообщением


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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
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)

  

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, vadik111 сказал:

А как это ?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 23.01.2018 в 15:11, vadik111 сказал:

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

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

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

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

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

Поделиться сообщением


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

Пиши Internal cheat, там с этим проблем не бывает (В основном)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 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. для модеров, удалил тег кода, он весь мой код без перехода на след. строку лепит. Не читабельно!

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация