Перейти к содержанию
Авторизация  
Alex

Поиск переменного указателя на структуру

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

Всем привет !

Наткнулся на ваш канал на Ютубе, 2 дня сидел смотрел ролики. Зацепило 😁
Вчера был мой первый опыт взлома игры. Жертвой стала "Plants Vs Zombies". Простенькая, легко ломается, ... . Благодаря отложенной в моей голове информации после непрерывного просмотра всех видеоуроков, мне без труда удалось запилить несколько скриптов - на кучу солнышек, баксов и на моментальное восстановление растений после покупки. Но, скрипты - скриптами, это всё легко даётся. А вот с указателями у меня какая-то засада. Никак не могу их оседлать в Cheat Engine. Ну ни в какую они мне не поддаются.

Так вот. В процессе экспериментов и освоения супер-пупер проги Cheat Engine, возникла у меня задача найти изменяемый указатель на, скажем простыми словами, константные структуры. Для примера - есть некий герой, у него есть рука. Рука - это указатель. Структура, на которую он указывает - предмет, который держит эта рука. Так вот, задача заключается в том, чтобы найти эту самую "руку", т.б. указатель на предметы, которые я могу в процессе отсеивания менять в руке. Соответственно, меняя в руке предметы, мы меняем само значение указателя. А вот как найти этот самый указатель - задача.

Может кто подскажет, в каком направлении хоть двигаться ? Спасибо.

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


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

Не совсем понял. Есть рука(структура). Как я понял. Задача найти цепочку???? Которая из структуры игрока приведёт к оружию в руке???

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


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

Да, верно.

Но, не совсем цепочку, а указатель на то, что держит эта "рука". Чтобы можно было менять параметры предмета. Но, загвоздка в том, что сами параметры неизменны в игре. Т.е. найти я их обычным отсеиванием не могу. Иначе было бы всё просто.

Задача найти указатель, именно он меняется. И меняются, соответственно, данные, на которые он указывает (предметы можно менять). За это можно было бы зацепиться, но я, увы, не понимаю как.

Изменено пользователем Alex

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


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

Похоже, я сам запутался, и запутал вас 🙂

Сейчас покажу более наглядно в виде кода :

Спойлер

//---------------------------------------------------------------------------
class Obj {
public :
    Obj(string n, int x, int y): Name(n), X(x), Y(y) {}
    //---------------
    const string      Name;             // const - для наглядности
    const int         X;                // Извне (игроком) эти данные изменить нельзя
    const int         Y;                // Они меняются только самой игрой (кодом)
};
//-------------------------------------------
class Field {
public :
    Field(string n): Name(n) {}
    //---------------
    string      Name;
    Obj*        obj;                       // <---- ВОТ ЭТО НУЖНО НАЙТИ
};
//---------------------------------------------------------------------------
Field *     f;
Obj *       obj1;
Obj *       obj2;
Obj *       obj3;
//---------------------------------------------------------------------------

 

Это примитивный примерчик иерархии. Obj конечно же, может быть сложней и иметь ещё несколько уровней вложенности указателей. Но, для понимания пойдёт :)

Вот сами данные в экземплярах Obj в игре изменить нельзя, только подсмотреть, меняя сами объекты в Field. Хотелось бы добраться до их указателя и менять их в Cheat Engine.

Вот и вся задача :)

 

Полный код, для наглядности :

Спойлер

//---------------------------------------------------------------------------
class Obj {
public :
    Obj(string n, int x, int y): Name(n), X(x), Y(y) {}
    //---------------
    const string      Name;             // const - для наглядности
    const int         X;                // Извне (игроком) эти данные изменить нельзя
    const int         Y;                // Они меняются только самой игрой (кодом)
};
//-------------------------------------------
class Field {
public :
    Field(string n): Name(n) {}
    //---------------
    string      Name;
    Obj*        obj;                       // <---- ВОТ ЭТО НУЖНО НАЙТИ
};
//---------------------------------------------------------------------------
Field *     f;
Obj *       obj1;
Obj *       obj2;
Obj *       obj3;
//---------------------------------------------------------------------------


//---------------------------------------------------------------------------
void __fastcall TmForm::Timer1Timer(TObject *Sender) {     // Обновление данных объекта на эеране
Label1->Caption = AnsiString("Имя = ") + f->obj->Name.c_str();
Label2->Caption = AnsiString("X = ") + f->obj->X;
Label3->Caption = AnsiString("Y = ") + f->obj->Y;
char buf[32];
sprintf(buf, "%X", (int)f->obj);
Edit1->Text = buf;
}
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
void __fastcall TmForm::Button1Click(TObject *Sender) {     // Устанавливаем 1-ый объёкт
f->obj = obj1;
}
//---------------------------------------------------------------------------
void __fastcall TmForm::Button2Click(TObject *Sender) {     // Устанавливаем 2-ой объёкт
f->obj = obj2;
}
//---------------------------------------------------------------------------
void __fastcall TmForm::Button3Click(TObject *Sender) {     // Устанавливаем 3-ой объёкт
f->obj = obj3;
}
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
__fastcall TmForm::TmForm(TComponent* Owner): TForm(Owner) {
    f = new Field("Поле");
    obj1 = new Obj("Аптека", 10, 50);
    obj2 = new Obj("Улица", 555, 333);
    obj3 = new Obj("Фонарь", 15, 100);

    f->obj = obj1;
}
//---------------------------------------------------------------------------
__fastcall TmForm::~TmForm() {
    delete f;
    delete obj1;
    delete obj2;
    delete obj3;
}
//---------------------------------------------------------------------------

 

 

Если кому интересно - могу скинуть саму тестовую программку.

Вот её фэйс :

.spacer.png

Изменено пользователем Alex

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


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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Предпросмотр
Авторизация  

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

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

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