-
#1
Автор темы
Короче, скажу так, по гайдам с ютубчика, нашёл постоянный паттерн для Cheat Engin’a, он нормально работает, теперь вопрос, как найти постоянный адрес, чтобы юзать его в C++ для чита??? (Игра на флеше «Adobe FlashPlayer») Прикрепил скрин, может как-то да поможет. Благодарю за помощь <3
Эксперт
Пользователь
-
#3
Статистический адрес выделяется зеленым цветом в cheat engine, его не трудно найти.
-
#4
Статистический адрес выделяется зеленым цветом в cheat engine, его не трудно найти.
он не во всех играх так находится, вот в той же гта например там почти все адреса грин
Короче, скажу так, по гайдам с ютубчика, нашёл постоянный паттерн для Cheat Engin’a, он нормально работает, теперь вопрос, как найти постоянный адрес, чтобы юзать его в C++ для чита??? (Игра на флеше «Adobe FlashPlayer») Прикрепил скрин, может как-то да поможет. Благодарю за помощь <3Посмотреть вложение 213087
дс дай свой
-
#5
Автор темы
он не во всех играх так находится, вот в той же гта например там почти все адреса грин
дс дай свой
DS Ty6ukTV#7720
ЗАЧЕМ ДУМАТЬ ЕСЛИ МОЖНО НЕ ДУМАТЬ
Пользователь
-
#6
Статистический адрес выделяется зеленым цветом в cheat engine, его не трудно найти.
а?
ты крутой да?
а вот как найти эго вот знаешь ведь да?
Короче, скажу так, по гайдам с ютубчика, нашёл постоянный паттерн для Cheat Engin’a, он нормально работает, теперь вопрос, как найти постоянный адрес, чтобы юзать его в C++ для чита??? (Игра на флеше «Adobe FlashPlayer») Прикрепил скрин, может как-то да поможет. Благодарю за помощь <3Посмотреть вложение 213087
читаешь значение вот аксес да и потом смотрешь в индекс крутой там rcx or rax да вот и вот копируешь из него аддр и вот ищешь так же да и вот пока не будет статик
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 раз с перезапуском игры до тех пор, пока не выявится постоянный результат и один показатель не отразит хоть раз одинаковый результат с игровым параметром при перезагрузке.
This is a method to find a desired static pointer address through the desired value you want changed that is extremely simple and straight forward and is what I use to find static addresses fast. I will in layman’s terms one step at a time explain how to use this method.
Update edit: You could also just right click your desired value and do a pointer scan right away and keep it open and close the game and then open the game and reattach cheat engine then click pointer scanner at the top of its menu and click rescan for your value in that list (make sure to set the right value type and correct value you want to search for) the problem with this method is its quick and dirty and less thorough for the addresses you get.
Overview: You will find a value (health, etc.) then use the pointer map generate tool and then pointer scan tool to then compare two maps for the same desired value to find the static address for your desired value.
Step 0: Open cheat engine and attach to desired process.
Step 1: Search for your first desired value (health, ammo, etc.)
Step 2: Generate pointer map A for found value (right click value to find generate)
Step 3: (KEEP CHEAT ENGINE OPEN) Restart program/game and attach to process then find value B (same desired value as in step 1 but it will have a different address)
Step 4: Generate pointer map B for the new address of the desired value.
Step 5: Open pointer scanner (right click address>pointer scan for this address)
Step 6: Click the box for «Use saved pointermap» and browse to your A map (from step 1)
Step 7: Click the box for «Compare results with other saved pointermap(s)»
Step 8: Add the the second value address you found in step four into compare text box (After selecting the box in step 7, click it to open file explorer)
Step 9: Start Scan (With whatever settings you need I usually leave it default but go crazy if ya want lol see what works)
Once it gets the results KEEP YOUR SCAN LIST OPEN AND CHEAT ENGINE OPEN
Step 10: Restart program/game (MAKE SURE TO REATTACH TO PROGRAM/GAME)
Step 11: Find the static pointer(s) that remain in the scan list that change with each restart of the program/game to correctly point to the desired value, anything that reads — or is blank are fake/incorrect addresses.
Whatever is left in the scan list that correctly points to your value is what you want to use for your cheats. This is your static address(s) (most likely if they stayed true through the restart).
Enjoy and keep learning! Hacking is a journay man.
«The only true wisdom is in knowing you know nothing.» ~Socrates
«It does not matter how slowly you go as long as you do not stop» ~Confucius
To walk multilevel pointers using modulename.dll + 0xDEADC0DE scheme base addresses you can use my code
public static IntPtr FindDMAAddy(IntPtr hProc, IntPtr ptr, int[] offsets)
{
var buffer = new byte[IntPtr.Size];
foreach (int i in offsets)
{
ReadProcessMemory(hProc, ptr, buffer, buffer.Length, out var read);
ptr = (IntPtr.Size == 4)
? IntPtr.Add(new IntPtr(BitConverter.ToInt32(buffer, 0)), i)
: ptr = IntPtr.Add(new IntPtr(BitConverter.ToInt64(buffer, 0)), i);
}
return ptr;
}
public static IntPtr GetModuleBaseAddress(Process proc, string modName)
{
IntPtr addr = IntPtr.Zero;
foreach (ProcessModule m in proc.Modules)
{
if (m.ModuleName == modName)
{
addr = m.BaseAddress;
break;
}
}
return addr;
}
Here is an example of me using this code to do what you want to do
Process process;
process = Process.GetProcessesByName("ac_client")[0];
var hProc = OpenProcess(0x001F0FFF, false, process.Id);
var modBase = GetModuleBaseAddress(process, "ac_client.exe");
var addr = FindDMAAddy(hProc, (IntPtr)(modBase + 0x10f4f4), new int[] { 0x374, 0x14, 0 });
Console.WriteLine("0x" + addr.ToString("X"));
Console.ReadKey();
Completing the CAPTCHA proves you are a human and gives you temporary access to the web property.
What can I do to prevent this in the future?
If you are on a personal connection, like at home, you can run an anti-virus scan on your device to make sure it is not infected with malware.
If you are at an office or shared network, you can ask the network administrator to run a scan across the network looking for misconfigured or infected devices.
Another way to prevent getting this page in the future is to use Privacy Pass. Check out the browser extension in the Chrome Web Store.
Cloudflare Ray ID: 72104f8f0acb719e • Your IP : 109.70.150.94 • Performance & security by Cloudflare
Читерство
Навеяно недавней дискуссией про игры с донатом. Собственно, в нормальных, сингл играх микротранзакции уже не новость. Тот же Dead Space 3, говорят, еще в свежих Assassin Creed появилось. Логично ожидать, что это безобразие продолжится и таких игр будет появляться все больше. Следовательно, вопрос читерства становится все более актуальным. Мы же не хотим донатить и тем самым поощрять скотскую тенденцию.
Не, разумеется, можно играть честно и набирать нужные ресурсы в самой игре. Но разработчики не дураки, и чтобы стимулировать геймеров к донату, они, можно не сомневаться, позаботились о том, чтобы честная игра была некомфортной, и нужное количество ресурсов или опыта можно было добыть только путем страданий. Да даже если и достаточно быстро набирается честно — один черт, если бы я хотел играть в тупой фарм одних и тех же локаций, я бы давно играл в какую-нибудь ММО, которые все без исключения про тупой фарм одних и тех же локаций. Так что будем читерить.
Собственно, о читерстве речи уже и нет. Мы используем возможность, предусмотренную в игре самими разработчиками как часть игрового процесса. Т.е. все честно. То, что они сделали ее платной — да пошли они в жопу.
Для лечения игры будем использовать Cheat Engine. Есть еще аналогичная по возможностям софтина — Artmoney, но я ее не знаю. Вообще, с помощью CE начитерить себе нужное количество денег, опыта, ресурсов, да и вообще чего угодно — не представляет ни малейшей проблемы. Но есть одно неудобство: при каждом запуске игры (а в некоторых играх — и при каждой загрузке локации) нужные переменные приходится искать заново.
Ниже описан самый простой из нескольких возможных способов, как автоматизировать этот процесс. К сожалению, не идеальный, работает не со всеми играми. Но с большинством. Зато простой и можно быстро сделать. А вот если простой способ не прокатит — тогда уже можно начинать разбираться с особенностями игры индивидуально, или заглянуть на форум Cheat Engine и посмотреть там, скорее всего, кто-нибудь уже выложил подходящий скрипт.
Как водится, сколько-нибудь толковый гайд гуглом найти проблематично. Даже тот, по которому разбирался я — давно сгинул, и сайт тоже. Так что, пока что-то еще помню, решил записать здесь. Чтобы, если когда-нибудь понадобится, не искать и не напрягать память.
1. Для начала находим адрес переменной, отвечающей за нужный нам игровой параметр. Подробно про этот шаг писать смысла нет, он общеизвестен. Копируем адрес в нижнее окно.
2. В нижнем окне кликаем правой кнопкой по строке адреса и в появившемся меню выбираем «Find out what writes to this address» — ставим бряк на запись. Даем разрешение на запуск дебаггера.
3. Возвращаемся в игру и проделываем там что-нибудь, что изменит нужное нам значение. Покупаем/продаем, если ищем деньги, или подставляемся под пулю, если здоровье.
4. Переключаемся на CE и в окне дебаггера видим появившуюся запись из одной или нескольких строк. Выбираем одну (вида mov [eax+xxx],ecx) и нажимаем сбоку кнопку «More information».
5. Кликаем правой кнопкой по списку адресов вверху и нажимаем «copy info to clipboard». Копируем куда-нибудь в блокнот. После этого закрываем окно информации и в окне дебаггера нажимаем кнопку «Stop», чтобы не гонять лишние процессы. Закрываем дебаггер.
Картинка №1.
6. В основном окне CE в окно для поиска вводим адрес, который видели в указанном на картинке №1 месте. Ставим рядом галку Hex, тип значения — 4 байта. Нажимаем поиск. Листаем появившийся список адресов и находим первый, отмеченный зеленым — статический адрес. Копируем его вниз. Если на данном этапе зеленых адресов не нашлось — значит, с этой игрой не все так просто, и чтобы создать чит, понадобится скрипт на языке ассемблера. Или пробуем способ, описанный во второй части заметки.
7. В нижнем окне дважды кликаем по адресу (именно там, где в заголовке таблицы указано «Adress»).
Картинка №2.
8. Копируем из верхней строки адрес вида «program.exe+HEX».
9. Ставим галку «Pointer». Ниже появляется два новых поля, верхнее, где был адрес, становится недоступным. В самое нижнее поле вставляем адрес, скопированный сверху. Тип выставляем такой же, какой был у исходной переменной, непосредственно содержащей нужное нам значение. В рассматриваем примере это однобайтовая переменная.
10. Рассчитываем смещение. Запускаем вендовый калькулятор в шестнадцатиричном режиме и из адреса исходной переменной ( 07B2D52B ) вычитаем адрес, который искали в пункте 6 ( 07AF0020 ). Полученное число ( 3D50B ) вставляем во второе снизу поле над адресом. Впрочем, это же смещение и так было в окне информации дебаггера. Если знать, на что смотреть — можно не считать. Заодно можно и описание какое-нибудь вбить.
Картинка №3.
11. Жмем «Ok». В принявшей нужный нам вид строке в нижнем окне CE кликаем правой кнопкой по значению в колонке «Value» и выбираем пункт «Show as decimal», чтобы число наших денег/здоровья/патронов показывалось в десятичном формате, для удобства. Удаляем из нижнего окна все лишнее и сохраняем результат в виде файла *.CT. Теперь не надо будет каждый раз после запуска игры заново искать нужные переменные, достаточно загрузить этот файл в CE.
PS: Спойлер. Чтобы не считать смещение, достаточно посмотреть на команду, в примере — eax+ebx. Внизу в окне информации дебаггера был список значений. Смотрим значения регистров, eax — это адрес, тот же самый, который мы копировали в поиск. Следовательно, ebx — смещение.
1. Начинаем точно также. Находим адрес нужной переменной и копируем его вниз.
2. Правой кнопкой кликаем по строке в нижнем окне и выбираем пункт «Pointer scan for this adress». В появившемся окне ничего не меняем, жмем «Ok».
3. Появится окно с предложением сохранить файл, вводим какое-нибудь имя и подтверждаем. Начнется обработка, которая может занять довольно длительное время. По окончании выскочит окно с результатом.
4. Закрываем все окна, кроме основного окна СЕ. Выходим из игры. Запускаем игру заново. В окне CE снова открываем процесс игры. Отвечаем «No» на вопрос, хотим ли мы сохранить ранее найденные результаты.
5. В основном окне CE слева, над нижним окном, нажимаем кнопочку «Memory View». Откроется новое окно с дампом памяти, в верхнем меню которого следует выбрать Tools -> Pointer Scan. После чего снова появится уже знакомое нам окно указателей.
6. В окне указателей в верхнем меню выбираем File -> Open и открываем сохраненный в пунте 3 файл. Теперь в верхнем меню уже этого окна выбираем Pointer scanner -> Rescan memory — Removes pointers not pointing to the right adress. В появившемся новом окне ставим переключатель вверху в положение «Value to find» и вводим в поле ниже число, соответствующее тому, какое значение имеет в игре нужный нам параметр на данный момент. И указываем справа его тип, тот же самый, что мы искали в самый первый раз. (Как вариант — ищем не по значению, а по адресу, если не поленились найти его заново). Жмем «Ok», снова появляется окно для сохранения файла, сохраняем. Можно перезаписать старый. Теперь процесс занимает намного меньше времени и некоторое количество результатов отсеивается.
7. Повторяем пункты 4-6 раз пять или больше, пока количество результатов не перестанет уменьшаться заметно.
8. Когда количество найденных результатов стало более-менее стабильным, начинаем отлавливать среди них нужный. Сортируем значения по «Base Adress» и выбираем штук пять из тех, которые относятся к основному процессу игры. Если таковых не осталось — тогда сойдет и из игровых модулей. Выбираем наугад и дважды кликаем по каждому, после чего готовые указатели копируются в нижнюю таблицу основного окна CE.
9. Продолжаем выполнять пункты 4-6 с той разницей, что при перезагрузке процесса игры теперь сохраняем ранее найденные результаты. После каждой загрузки процесса смотрим нижнюю таблицу и выкидываем адреса, чье значение не соответствует актуальному игровому параметру или вообще осталось не определено. После этого грузим, как ранее, Pointer scanner, проводим новую фильтрацию и добавляем в нижнюю таблицу несколько свежих адресов.
10. Продолжаем развлекаться до достижения стабильного результата — пока хотя бы один из записанных в нижней таблице адресов не будет при каждом запуске игры неизменно показывать актуальный результат. Собственно, вот оно и есть, что нам и требовалось.
11. Выкидываем из таблицы все лишнее и сохраняем нужное в файл *.CT. Удаляем созданный при сканировании указателей файл(ы) *.PTR и огромную кучу накопившихся к тому времени временных файлов. Впрочем, с удалением можно и погодить пару дней, на случай, если после пары перезагрузок найденные адреса все-таки слетят. Т.е. окажется все-таки не то. Чтобы можно было продолжить с того момента, на котором остановились, а не начинать все заново.
Thread: Поиск базового адреса, смещения. Jade Dynasty
Veteran
Join Date 2010 Mar Posts 2,222 Thanks 211 Thanked 2,225 Times in 290 Posts Rep Power 10
Поиск базового адреса, смещения. 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»:
CE отобразит окно, где будут указаны значения регистров и дизассемблированный участок кода клиента; инструкция mov [esi + $288], ecx как раз и отвечает за запись величины HP по адресу $1265F098, а значение указателя равно $1265EE10.
Смещение: +288.
$1265EE10 – следующая величина для поиска.
Note: если не будет найдено ни одного значения, значит требуется повторить процедуру по определению значения указателя (просмотр списка опкодов)
Берем первый из найденных адресов (совсем не обязательно, что данный адрес даст какой-либо результат), добавляем его в список (название +$288 для более легкой идентификации смещений) и теперь начнем поиск того, что обращается к данному адресу
Список опкодов достаточно велик, что, по большей части, свидетельствует о правильности поиска.
Рассмотрим две инструкции.
первая по адресу: $004c2ad2
Видим, что значение указателя уже было использовано нами для поиска, следовательно, требуется выбрать другую инструкцию.
вторая по адресу: $004d11c8
Человек, знакомый с ассемблером, сразу видит результат… К этому результату вернемся чуть позже, т.к. завершим процедуру поиска базового адреса по выработанному алгоритму.
$039F6E20 – следующая величина для поиска.
Итог:
[Базовый адрес] = $00B03064
[BA] + $1C + $28 + $288 – Максимальное значение HP
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