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

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


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

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

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

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