динамический адрес cheat engine
Как найти указатель в Cheat Engine
Cheat Engine – программа для гейм-хакеров, предназначается для читерства в компьютерных играх. Принцип работы заключается в том, что показатели игры – достижения, жизни, патроны, ресурсы – хранятся в виде цифр по определенным адресам оперативной памяти компьютера. Указатели — память, которая содержит не значение параметра, а адрес нахождения параметра. Сканирование памяти игры в Cheat Engine делает доступным эти адреса найти и изменить цифры на те, которые нужны.
Для чего нужен поиск указателей
Переменные объекта в игре создаются динамически, чтобы не нагружать оперативную память игры и процесса – с текущими параметрами игр оперативной памяти не хватит. Соответственно, ведется учет, где в памяти размещается тот или иной параметр. Базовый элемент — указатель, а внутри – параметры здоровья, ресурсов, опыта, патронов, денег. При каждом новом запуске игры или нового уровня, адреса динамических игровых параметров переезжают в другую область памяти. Для изменения приходится снова и снова находить. Для того, что бы этого не делать применяется поиск указателей.
Найти одноуровневый указатель
Запускаем Cheat Engine. Находим и копируем в нижнее окно адрес переменной, которая отвечает за нужный параметр. Правым кликом по адресной строке вызываем меню, находим строку «Find out what writes to this address». Ставим break на запись и разрешаем запуск отладчика. Идем в игру и тратим часть золота или теряем одну жизнь — чтобы изменить показатель. Возвращаемся к Cheat Engine и видим в окне отладчика новые строки. Выбираем одну типа mov и переходим во вкладку «More information». Правым кликом открываем меню и выбираем «Copy info to clipboard» — скопированное переносим в блокнот, закрываем отладчик.
Далее переходим в главное окно программы и в поисковой строке вводим адрес из указанной области 07AF.., отмечаем галочкой НЕХ и тип значения 4Б, — запускаем поиск. В результатах поиска ищем постоянный адрес – выделяется зеленым. Копируем в нижнее окно и кликаем дважды по строке «Adress».
Копируем адрес сверху, отмечаем галочкой «Pointer» и вставляем в нижнее выпавшее поле. Тип определяем исходный. Далее при помощи вендового калькулятора рассчитываем смещение между первоначальным адресом, копированным в блокнот и найденным зеленым. Результат вставляем во второе поле снизу и жмем «Ок». После этого правым кликом по значению – «Value» выбираем в меню «Show as decimal» — отражать показатели в десятичном формате. Итог сохраняем в типе файла *.СТ. При загрузке этого файла в Cheat Engine с запуском уровня не надо будет снова искать переменные.
Найти многоуровневый указатель
Многоуровневый – это такой, который ссылается не на искомую информацию, а на другой указатель. Таких уровней может найтись сколько угодно. Многоуровневая адресация усложняет процесс поиска цепочки указателей. Обработка занимает время. Сканирование памяти проводится 8-12 раз с перезапуском игры до тех пор, пока не выявится постоянный результат и один показатель не отразит хоть раз одинаковый результат с игровым параметром при перезагрузке.
Thread: Поиск базового адреса, смещения. Jade Dynasty
Thread Tools
Display
Поиск базового адреса, смещения. Jade Dynasty
В целом, процедура абсолютно одинакова для большинства программ, посему, раз прочитав подобное руководство для другой игры, которых хватает на нашем ресурсе, читать уже для Jade Dynasty особого смысла нет. Хотя, здесь я приведу несколько дополнительных вещей и пояснений.
Note:
— здесь не дается определения базовому адресу, смещениям и т.п.
— здесь нет детального описания функций и окон CE
— здесь нет детального описания ассемблерных команд
— данное руководство на 90% применимо и для Perfect World’а, т.к. движки у этих двух игр одинаковые.
— перед многими значениями стоит символ «$». Используется для идентификации шестнадцатеричных величин
Приступим.
Загружаем клиент Jade Dynasty, запускаем Cheat Engine (CE) и присоединяем последний к процессу игры «elementclient.exe». Объектом поиска будет самая доступная величина – количество жизней (HP), в моем случае, равная 779 единиц.
В поле «Value» CE вводим значение 779, выбираем тип сканирования «Exact value» и тип величины «4 bytes», и начинаем сканирование «first scan»
По завершению первого сканирования, CE отобразит список адресов (если он не очень велик), значения которых в момент поиска равнялись 779. Таких адресов может быть 10, может быть и сотни тысяч. Поэтому, нам требуется точно определить нужный адрес. Возвращаемся в игру и любым способом меняем значение HP, например, снимем с чара какую-либо вещь, дающую прирост HP:
Как только значение изменится, продолжаем поиск в CE, при этом тип сканирования оставляя «Exact value»
Найдено 4 адреса. Можно еще раз изменить значение HP и посмотреть, как будут меняться значения у этих адресов.
Через несколько секунд становится ясно: два первых адреса не имеют отношения к искомой величине, а два последних – текущее значение HP и максимальное.
Добавляем оба адреса в список и, выбрав «HP max», вызываем контекстное меню.
Нам требуется отыскать участок кода, который записывает значения в выбранный адрес $1265F098: «Find out what writes to this address»
Убедимся, что отображаются все опкоды, для чего требуется вернуться в клиент и изменить значение HP
Посмотрим дополнительную информацию для инструкции по адресу «$0046b5ca»:
Note: если не будет найдено ни одного значения, значит требуется повторить процедуру по определению значения указателя (просмотр списка опкодов)
Берем первый из найденных адресов (совсем не обязательно, что данный адрес даст какой-либо результат), добавляем его в список (название +$288 для более легкой идентификации смещений) и теперь начнем поиск того, что обращается к данному адресу
Список опкодов достаточно велик, что, по большей части, свидетельствует о правильности поиска.
Видим, что значение указателя уже было использовано нами для поиска, следовательно, требуется выбрать другую инструкцию.
Человек, знакомый с ассемблером, сразу видит результат… К этому результату вернемся чуть позже, т.к. завершим процедуру поиска базового адреса по выработанному алгоритму.
$039F6E20 – следующая величина для поиска.
Please, post your questions on forum, not by PM or mail
I spend my time, so please pay a little bit of your time to keep world in equilibrium
Тема: Как легко и просто сделать чит!
Социальные закладки
Опции темы
Отображение
Делать нефиг, выходной, решил рассказать большую часть того, что умею)) сам учусь ещё, и буду учиться всегда. ). Есть множество уроков в которых рассказывается как делать читы, но для обычного «Юзера» могут быть они не понятны. В этом уроке я постараюсь объяснить всё так, чтобы было понятно любому новичку. Если вы бог реверсинжиниринга, то вы не узнаете не чего нового из этого урока. И так кратко о программах которые нужны: как не странно нам понадобится CheatEngine, с помощью него мы будем искать значения, так же нам понадобится ReClass, для создания классов, чтобы не писать адрес каждого значения, и естественно нам нужна Visual Studio или Dev-C++ для написания самого чита.
Объяснять я буду на примере GTA San Andreas.
1)И так, для начала ознакомимся с игрой и посмотрим, какие значения мы сможем найти. Сразу видим две полоски в верху экрана, одна здоровье, другая броня, чтобы найти их значение открываем cheat engine и так как это полоска, а значения таких полосок чаще всего float, поэтому ищем не известное значение типа float,
Затем заходим в игру, изменяем значение т.е. делаем так чтобы полоска уменьшилась, переходим в cheat engine и выбираем: значение уменьшилось
затем увеличим значение с помощью чит кода (в других играх можно и аптечкой), и отсеиваем, сказав при этом, что значение увеличилось
проделываем это пока не останется 1-2 значения, и проверяем его: Замораживаем значение
и смотрим в игре если жизни не уменьшаются, то значение правильное.
2) Ищем универсальный статический адрес для наших будущих классов, cтавим бряк, для этого выбираем наш адрес и нажимаем F5, появится окно
заходим в игру и ждём секунду, сворачиваем игру и у нас в этом окне появляются инструкции
Теперь вылезло новое окно, «Настройка поиска», я настрои поиск вот так: поток 1, максимальное смещение 128, максимальный уровень 2
Теперь выбираем адрес на свой вкус, я выберу gta_sa.exe+76F5F0 + offset 0x00, двойноё щелчёк и он дабавится в таблицу cheat engine, так как этот адрес статический, для удобства я его запишу по другому 0xB6F5F0.
3) Начинаем покорять reclass!
Теперь откроем reclass, выберем процесс, создадим новый класс
Вставим наш адрес (Базовый адрес) и придумаем имя классу
Теперь перейдём к реверсингу, чтобы в будущем не писать всяких больших функций, для поиска адреса по указателям, мы будем реверсить от статического адреса, не зря же в реклассе есть такая штука как pointer, и так как мы помним смещение до первого поинтера у нас было 0x00, по этому открываем в реклассе вкладку Modify, выделяем наш адрес и нажимаем на «кнопку» Pointer с права внизу
Добавляем ещё адресов кнопкой add 1024, чтобы в левой колонке появилось смещение 540, выделяем его и ставим modify->type значение float, затем переименовываем в Hilth, или как хотите, у меня это выглядит вот так:
Теперь найдём координаты игрока, заходим в CE, устанавливаем не извесное значение, ищем, изменяем положение, отсеиваем, я искал значение по z, его легче всего найти. Так же ставим бряк, затем ищем так же как и в первом случае, у меня нашолся указатель с базой gta_sa.exe+76F5F0, а это такой же базовый адрес, как и у нашего хп, и это радует.
Назовём наши координаты и сгенерируем наш класс, для того чтобы использовать его на c++
У меня получился код
//Generated using ReClass 2011 by DrUnKeN ChEeTaH
class Player ;
class mPlayer ;
class Coord ;
class Player
<
public:
mPlayer * N02D52422 ; //0x0000
char _0x0004 [ 60 ];
class mPlayer
<
public:
char _0x0000 [ 20 ];
Coord * Coordinates ; //0x0014
char _0x0018 [ 1320 ];
float HILTH ; //0x0540
char _0x0544 [ 4 ];
float ARMOR ; //0x0548
char _0x054C [ 4852 ];
class Coord
<
public:
char _0x0000 [ 48 ];
float CoordX ; //0x0030
float CoordY ; //0x0034
float CoordZ ; //0x0038
char _0x003C [ 4 ];
Function объявляем новую функцию,
void Function:: hilTH ()
<
#include
#include «Function.h»
#define new_Thread(Function) CreateThread(0,0,(LPTHREAD_START_ROUTINE)Function,0,0,0);//Создание потоков
return 0 ; //вернём 0
>
new_Thread ( MainThread ); //Запуск функции MainThread() в новом потоке
//Generated using ReClass 2011 by DrUnKeN ChEeTaH
class GloballPlayer ;
class myPlayerCondition ;
class N036F3A76 ;
class myPlayerCoordinates ;
class GlobalOdjects ;
class ThePlayerCars ;
class ConditionActiveCarPlayer ;
class PlayerSkillS ;
class MainlandStats ;
class RedPoint ;
class GloballPlayer
<
public:
char _0x0000 [ 584 ];
float PlayerCamerTopBottom ; //0x0248
char _0x024C [ 4 ];
float PlayerCameraDistance ; //0x0250
char _0x0254 [ 4 ];
float PlayerCameraCircle ; //0x0258
char _0x025C [ 916 ];
myPlayerCondition * PlayerCondition ; //0x05F0
char _0x05F4 [ 908 ];
__int32 N036CAB05 ; //0x0980
char _0x0984 [ 1724 ];
static GloballPlayer * Singleton ( int * addres )
<
return *( GloballPlayer **) addres ;
>
>; //Size=0x1040
class myPlayerCondition
<
public:
char _0x0000 [ 20 ];
myPlayerCoordinates * PlayerCoordinats ; //0x0014
char _0x0018 [ 116 ];
float Jump ; //0x008C
char _0x0090 [ 1200 ];
float myPlayerHilth ; //0x0540
float MaxCondition ; //0x0544
float myPlayerArmor ; //0x0548
char _0x054C [ 116 ];
class N036F3A76
<
public:
char _0x0000 [ 64 ];
class myPlayerCoordinates
<
public:
char _0x0000 [ 48 ];
float Coord_X ; //0x0030
float Coord_Y ; //0x0034
float Coord_Z ; //0x0038
char _0x003C [ 2052 ];
class GlobalOdjects
<
public:
char _0x0000 [ 2300 ];
ThePlayerCars * Cars ; //0x08FC
char _0x0900 [ 832 ];
static GlobalOdjects * Singleton ( int * addres )
<
return *( GlobalOdjects **) addres ;
>
class ThePlayerCars
<
public:
char _0x0000 [ 20 ];
ConditionActiveCarPlayer * ConditionsOlayerCar ; //0x0014
char _0x0018 [ 1088 ];
float WheelSize ; //0x0458
char _0x045C [ 8 ];
float ModelDisplay2D ; //0x0464
char _0x0468 [ 4 ];
float ModelDisplay3D ; //0x046C
char _0x0470 [ 4 ];
float ModelDisplay4D ; //0x0474
char _0x0478 [ 72 ];
float HiltActivCar ; //0x04C0
char _0x04C4 [ 7036 ];
class ConditionActiveCarPlayer
<
public:
float TheDegreeOfRotationOnAxesX ; //0x0000
float TheDegreeOfRotationOnAxesY ; //0x0004
float TheDegreeOfRotationOnAxesZ ; //0x0008
char _0x000C [ 4 ];
float TheBlockModelCoordinatesInAccordanceWithTheReliefX ; //0x0010
float TheBlockModelCoordinatesInAccordanceWithTheReliefY ; //0x0014
float TheBlockModelCoordinatesInAccordanceWithTheReliefZ ; //0x0018
char _0x001C [ 20 ];
float CoordCarX ; //0x0030
float CoordCarY ; //0x0034
float CoordCarZ ; //0x0038
char _0x003C [ 4 ];
class PlayerSkillS
<
public:
char _0x0000 [ 160 ];
__int32 Driving ; //0x00A0
char _0x00A4 [ 248 ];
__int32 Flying ; //0x019C
char _0x01A0 [ 4 ];
__int32 Lung ; //0x01A4
char _0x01A8 [ 12 ];
__int32 Bike ; //0x01B4
__int32 Cycling ; //0x01B8
char _0x01BC [ 8 ];
__int32 Luk ; //0x01C4
char _0x01C8 [ 524 ];
float FAT ; //0x03D4
float Stamine ; //0x03D8
float Muskule ; //0x03DC
__int32 N0423A370 ; //0x03E0
float Sexy ; //0x03E4
char _0x03E8 [ 152 ];
float Resepcts ; //0x0480
char _0x0484 [ 16 ];
float Pistol ; //0x0494
float Silenced ; //0x0498
float Degl ; //0x049C
float Shotgan ; //0x04A0
__int32 Sawn_Off ; //0x04A4
float ShoutGun ; //0x04A8
float MachinePistol ; //0x04AC
float SMG ; //0x04B0
float AK_47 ; //0x04B4
float M4A1 ; //0x04B8
char _0x04BC [ 1920 ];
static PlayerSkillS * Singleton ( int * addres )
<
return *( PlayerSkillS **) addres ;
>
>; //Size=0x0C3C
class MainlandStats
<
public:
char _0x0000 [ 2436 ];
float Gravitation ; //0x0984
char _0x0988 [ 3832 ];
static MainlandStats * Singleton ( int * addres )
<
return *( MainlandStats **) addres ;
>
class N039BCA3E
<
public:
char _0x0000 [ 1088 ];
class RedPoint
<
public:
char _0x0000 [ 52 ];
float CoordRDX ; //0x0034
float CoordRDY ; //0x0038
float CoordRDZ ; //0x003C
char _0x0040 [ 148 ];
float twoCoordRDX ; //0x00D4
float twoCoordRDY ; //0x00D8
float twoCoordRDZ ; //0x00DC
char _0x00E0 [ 3936 ];
static RedPoint * Singleton ( int * addres )
<
return *( RedPoint **) addres ;
>
При умелом подходе можно использовать лишь 1 адрес.
Более подробно о Reclass вы можете узнать из видеоурок а [Вы должны быть зарегистрированным и не заблокированным пользователем для того чтобы просматривать ссылки зарегистрироваться можно по этой ссылке]
Вот ссылка на исходник Тыч Тыч Тыч Этот исходник подходит для любой мультиплеерной gta (SAMP, CR и т.п.)
Только файлы исходного кода, по этому без VT
С трейнерами приловчусь, и добалю в эту тему). И про RakNet, тоже здесь напишу, когда разберусь)
Как добавить таблицу в Cheat Engine
Игры для хранения показателей пользуются оперативной памятью компьютера. Оснащение персонажа, скорость передвижения, количество богатств, время и здоровье – показатели игры, которые содержит память. С помощью наладчика CЕ доступно сканировать ячейки оперативной памяти, найти указатели и заменить значения на нужные пользователю. Таблицы – функциональная часть базы памяти, там содержатся сведения и указатели. В Cheat Engine – файл с сохраненными значениями для изменения.
Почему необходимы
Показатели игры – достижения, богатство, экипировка, скорость, количество жизней — хранятся в виде динамических цифр в памяти игры. Для изменения показателей и достижений на нужные, требуется произвести поиск указателей – файлов, которые содержат информацию о местонахождении ячейки памяти. Установка готовой чит-таблицы в Cheat Engine допускает не искать нужные переменные. Авторы нашли и записали переменные так, что находить ничего не нужно. Параметры подписываются, и после загрузки остается ввести значения для требуемых величин в ячейки и играть. Например, cheat-table, которая содержит список функций как бессмертие или бесконечные ресурсы.
Как загрузить таблицу в Cheat Engine
Добавить нужную чит-таблицу в программу не трудно. Сначала требуется запустить игру. Запустить приложение Cheat Engine. Чтобы открыть таблицу, нажимаем кнопку «Открыть» или «Load» и в выпадающем окне отражаем путь к папке хранения файла чит-таблицы. После этого – выбрать процесс для открытия «Select a process to оpen» — выбрать игру.
В окне программы ставим галочку на «ActivateltFirst». Открывается список способностей для редактирования – количество прописанных разработчиком в перечне. Выставляем нужные значения показателей.
Как добавить скрипт в таблицу
Доступно не менять вцелом, а добавить к чит-таблице готовый скрипт для пополнения списка способностей. Для этого так же открываем приложение СЕ, находим опцию «Отладчик» — «Memory View».
В открывающемся окне выбираем строку меню «Инструменты» — «Tools». Далее в инструментах переходим в «Auto Assemble» в нижней части панели окна.
Откроется панель автоассамблера. Копируем сюда скрипт, затем переходим в настройку «Файл» — «File» и «Добавить скрипт в таблицу» — «Assign to current cheat table». Закрываем окно. Таким образом, к опциям в чит-таблице добавится дополнительная способность, которую доступно активировать и отключать.
Нахождение динамического адреса в памяти
Пытаюсь теперь на шарпе перейти по этому поинтеру и найти нужный мне динамический адрес. Но ничего не получается, так как если брать адрес engine.dll (пусть будет 0D2F0000) и к нему прибавлять значение 00611CC8 уже мы не попадаем на нужный адрес 082В7400. хз в чем проблема, прошу подсказать в чем ошибка или в каком направлении копать
Просьба не слать меня в гугл!! итд
Вот исходник фрагмента моей проги, но думаю что проблема не в ней
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Нахождение статического адреса в памяти процесса
Всем привет, может кто-нибудь помочь найти статический адрес в памяти процесса при помощи c#.
Нахождение адреса стороннего процесса в виртуальной памяти
Для нахождения адреса текущего процесса существует GetSystemInfo с.
Нахождение наибольшего однобайтового числа, расположенного в памяти, начиная с адреса 08FFН по 0905Н
Задача: Написать программу нахождения наибольшего однобайтового числа, расположенного в памяти.
Выделить в памяти 1024 ячейки по 8 байт и вывести их адреса(МИНИ менеджер памяти))
Вот тут появилась такая интересная задача: требуется сделать программу которая управляет 1024.
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Настройка динамического IP адреса в локальных сетях
Привет всем!прежде всего обращаюсь к тем кто разбирается в локальных сетях. у меня дома имеется.
Почему разные адреса одного и того же элемента динамического массива?
Я создаю динамический массив и отправляю его в функцию, если потом сравнивать адреса элементов.
Возможность назначения шлюза по умолчанию при использовании динамического IP-адреса.
Есть сеть из 30 машин с windows XP (статические адреса) и windows 7 (преимущественно статические.