Перейти к содержанию
На нашем форуме вы можете получить приватный чит для игры Euro Truck Simulator 2. Подробности по ссылке ниже:
Тема с читом на Euro Truck Simulator 2

roma912

Пользователи+
  • Публикаций

    204
  • Зарегистрирован

  • Посещение

  • Победитель дней

    5

roma912 стал победителем дня 7 января

roma912 имел наиболее популярный контент!

Репутация

42 Rookie

3 Подписчика

Информация о roma912

  • Звание
    Спамер
  • День рождения 12.10.1999

Посетители профиля

2 931 просмотр профиля
  1. Хочу в вступить в группу разработчиков Достоин?
  2. А еще можно найти указатель на хп и выставить банку на клавишу Потом читать хп и если оно меньше твоего установленного %, отправлять игре Sendmassage c нажатием клавиши на которой установлена банка Это самый просто вариант, максимально простой
  3. Может просто скрыл шторку где показываются asm команды? Хмм?
  4. Начиная от версии игры заканчиваю сущей магией вне Хогвардса
  5. Так, давно что-то ничего не писал в блог Собственно время пришло Данная статья является примером метода о котором рассказано в данном видео Рассмотрим вызов игровой функции на примере перовой части игры Dishonored В данном примере будем восполнять себе количество маны, которая в игре не может регенерироваться полностью после использования череды способностей Для начала нам необходимо найти само значение маны, благо оно храниться 4мя байтами в памяти и тут нет ничего сложного Теперь когда у нас есть адрес маны или же указатель на данный адрес, нам необходимо найти метод который как раз и перезаписывает значение Делается это очень просто (F6) Нас интересует инструкция которая перезаписывает значение 1 раз Выходим на эту инструкцию в дизассемблере и ставим брейк Вот мы и нашли инструкцию, далее просто выходим из него (Кнопка Execute till return) Для того чтобы вызвать метод, необходимо узнать и проанализировать его параметры. Этим и займемся В метод передается 2 параметра, один из которых находится в ecx (Указатель на базовый класс) А второй передается в регистре ecx, до инструкции которая перезапишет значение Данный кусок: push ecx mov ecx,esi Регистр edx содержит все время один и тот же не изменяющийся адрес, т.е он статичен Распишу параметры чтобы было более нагляднее push ecx (Значение 50 в данный момент) mov ecx, esi (В ecx записывается значение из esi (0x0AD0A000)) Теперь если немного проанализировать, то можно понять что 50 - это значение маны, которое будет присвоено игроку после применения способности А 0x0AD0A000 это указатель на начало структуры игрока, т.е PlayerController* player; Таким образом метод выглядит так: ManaMethod(PlayerController* player, int ManaOut); Теперь можно приступать к написанию самого кода на c++, чтобы вызывать этот внутреигровой метод (При этом заранее найдем работающий указатель на класс игрока PlayerController) Для вызова метода нам необходимо определить его соглашение о вызове, т.е в каком порядке туда передаются аргументы Посмотреть все соглашения можно тут https://ru.wikipedia.org/wiki/Соглашение_о_вызове Немного почитав можно увидеть что это соглашение __thiscall thiscall — соглашение о вызовах, используемое компиляторами для языка C++ при вызове методов классов в объектно-ориентированном программировании. Аргументы функции передаются через стек, справа налево. Очистку стека производит вызываемая функция. Соглашение thiscall отличается от cdecl соглашения только тем, что указатель на объект, для которого вызывается метод (указатель this), записывается в регистр ecx. В самом коде объявляем этот метод для его вызова далее //Метод принимает PlayerController* и ManaOut //0x00AB17C0 - адрес которых хранился в edx и он статичен typedef void*(__thiscall * _ManaType)(PlayerController* Player, int Mana); _ManaType ManaFunc = (_ManaType)(0x00AB17C0); Остается только написать вызов этого метода и на этом дело будет сделано /*PlayerConroller.h */ struct PlayerController { public: char pad_0000[2656]; //0x0000 int Mana; //0x0A60 }; /*Метод который вызывается при создании потока из dll*/ void onAttach() { while (true) { if (GetAsyncKeyState(VK_END)) { PlayerController* Player = reinterpret_cast<PlayerController*>(*(DWORD*)(Base + 0x01052DE8)); //Получаем указатель на игрока PlayerController* ManaFunc(Player, 100); } Sleep(150); } } Собственно на этом моменте статья закончена При нажатии на кнопку END внутри игры, мана восполняется до 100 единиц
  6. Думаю ты можешь выйти на инструкции которые перебирают в цикле указатели на персонажей А потом уже просто читать их прямо оттуда Те которые уже не будут использоваться сразу отпадают, т.к иначе игра бы просто пыталась читать пустой / неправильный указатель
  7. Можешь при каждой отработке функции просто обновлять указатель на объект а потом пользоваться функциями Примерно также как у меня и сделано
  8. Без ProcessEvent никак Его нужно хукать и хукать обязательно
  9. Смотри 1. Тот урок, что от Кенга бородатых времен вполне подходит для css v34 Принцип вообще не поменялся никак 2. Без базы знаний c++ ты толком ничего и не напишешь без полного копипаста готового исходника Да хотя даже для копипаста кода надо знать как он работает, ну и соответственно знать синтаксис языка для исправления ошибок
  10. Вроде он меняется как request.addfield(Content-Type, value); Или же в самом запросе request.post(link, postdata, ValueofContentType); Какой-то из 2х методов, сейчас не помню
  11. Посмотри в сторону этой статьи
  12. *(int*)( ((DWORD)GetModuleHandleA(NULL)) + 0x116F3 + 1 ) = 1000; Вроде все что необходимо Что-то ты слишком много делаешь чтобы добиться такого простого результата
  13. if (password = MachineID) { UnzipFile(smth); OpenCheat(); }
×

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

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