-
Постов
2 999 -
Зарегистрирован
-
Победитель дней
129
Тип контента
Профили
Форумы
Загрузки
Блоги
Весь контент MasterGH
-
SamMurcer, выкладывайте свои исходники. Возможно по ним можно понять, что Вы хотите сделать и на каком языке программирования.
-
Задание. Поиск инструкций работающих только с одним адресом определённой структуры Дано Некоторый начальный адрес структуры Некоторый размер структуры Цель Во время игры найти часто обращаемые инструкции на которых проскакивает постоянно одинаковый адрес входящий в диапазон адресов от начала структуры до её конца. Возможность начать и остановить сбор данных. Применение Если найдётся хотя бы одна инструкция работающая только с определённой структурой, то её можно использовать для поиска этой структуры и изменения данных в ней. Это может избавить от поиска указателей. Описания решения
-
Почему тема в "Статьях для Новичков"? Это разве статья? 1. Стандартного компонента у CE скорее всего такого нет. Можно разными способами попытаться изворачиваться чтобы его сделать. Проще сделать рисунками кнопок-стрелок на компонентах TImage рядом с TEdit. Клики на TImage могут обрабатываться пользовательскими функциями, которые могут делать необходимые операции. 2. Трейнер создан необычным способом на основе исходников CE через компиляцию в Lazarus. Простыми словами взято самое нужное из исходников SVN и на основе этого автор создаёт трейнер компилируя их на Lazarus. Для опытных предпочитающих Standalone трейнеры, если посмотреть тему на форуме CE, то можно найти ссылки на все необходимые исходники (на СкайДрайве) с комментариями и другими описаниями. Если интересно моё мнение я бы выбрал вариант1, т.к. он избавит менее опытных от танцев с бубном в Lazarus-e как во втором варианте.
-
>>Такой вопрос: а можно как-то сделать кратковременную активацию скрипта и чтобы он сам скрипт отключал (выполнив то, что в [DISABLE]) Я думаю есть несколько решений задачи, о которой идёт речь без использования отключения скрипта... Но все их надо проверять на практике и выяснять какой лучше и какой будет работать. Например, при начале потока он может нопить инструкции сам, а после завершения потока он же сам может и возвращать байты. Память можно создавать один раз и не разрушать её. Возможно здесь потребуется создать два АА скрипта. И вообще лучше всё на Lua переписать, так как он более гибкий к автоассемблированию, установке горячих клавиш и т.п. Раз был вопрос именно про отключение АА, то предположительный ответ. Основная фича в том, что из АА-скрипта можно вызвать пользовательскую функцию Lua через LuaCall(название функции), которая найдёт этот скрипт в главной таблице CE (например, по имени) и выключит его после ожидания завершения потока, когда поток запишет 1 перед выходом в зарегистрированную переменную. Как-то так: [ENABLE] LuaCall(Cheat0WaitThreadAndDisable) // вызывает Lua функцию ожидания завершения потока registerSymbol(isThreadExecuted) alalloc(newmem,1024) createthread(newmem) newmem: push eax mov eax,1 mov ecx, [hl.dll+21928C] push ecx call hl.dll+12E790 //SaveGame pop ecx pop eax mov esp,ebp pop ebp mov byte [isThreadExecuted], 01 ret isThreadExecuted: db 00 hl.dll+12E7B3: //мешающая фигня, забирающая номер слота из стека db 90 90 90 [DISABLE] hl.dll+12E7B3: //восстановили занопенную инструкцию mov eax,[ebp+08] dealloc(newmem) unregisterSymbol(isThreadExecuted) Ну и не законченный Lua код function Cheat0WaitThreadAndDisable() -- Запуск таймера на проверку некоторой переменной, что поток был выполнен end -- функция тамера, function OnTimerTick(sender) -- выполняем проверку перменной isThreadExecuted (зарегистрированной) -- если поток выполнен, то найти чит в таблице и выключить его -- разрушить объект таймера end
-
aliast, скрипт вроде без видимых ошибок. Скорее всего нужно передавать аргументы иначе например через регистры. Или подготовить предшествующие данные до вызова функции как это делает оригинальный код игры. Возможно следует ещё кое-что знать. - Операция сохранения может быть синхронной и асинхронной. Если асинхронной, то может быть поток ожидающий завершения сохранения и закрытие directX-GUI визуазизирующего процесс сохранения. - Код игры может вызвать исключения и правильно обработать, а мы не зная как это сделать получим вылет. - Возможно стоит вызвать функцию сохранения не потоком из CE скриптов, а спровоцировать сохранение в самой игре не создавая никаких потоков. Т.е. надо найти и поправить развилку кода которая даёт сохранить и которая не позволяет этого сделать. Это самый лучший вариант на мой взгляд. Возможно можно взывать функцию потоком из скрипта CE, тогда можно пойти по этому пути. Хотя я уже на писал выше, что возможно проще узнать, какие условия не позволяют сохранить и попробовать их исправить. Этап1 Набраться немного опыта и практики в вызове функций из CE Для начала нужно набраться опыта в вызове функций из CE, чтобы быть уверенным в том, что правильно делаешь по своим представлениям и знаниям. Можно написать консольное приложение на C++ с вызовом функции сохранения данных по определённому вводу с клавиатуры. Скомпилить exe. B нем попробовать эту функцию вызвать с помощью скриптов CE. Этап2 Найти оригинальный код вызова функции внутри игры Я бы попробовал в дизассемблере CE перед сохранением перейти на call hl.dll+12E790 и поставить брейкпоинт на выполнение (Execut). Снять копию стека (текстом или скриншотом). Дойти до ret и подняться на вверх перед вызовом call hl.dll+12E790. Этап3 Изучить оригинальный код вызова функции внутри игры и стек И этот участок вызова функции (из этапа2) внимательно изучить . А именно то как передавать аргументы в функцию. Там может быть не push 1 //slot push hl.dll+21928C //pCBasePlayer call hl.dll+12E790 //CBasePlayer::PreSave(CBasePlayer *this, int slot) а типа этого через регистры mov eax, 1 //slot mov ecx, hl.dll+21928C //pCBasePlayer call hl.dll+12E790 //CBasePlayer::PreSave(CBasePlayer *this, int slot) // и код после тоже надо посмотреть Затем писать свой скрипт вызова функции и выполнять его по шагам до адреса "вылета из игры". Затем запоминаем этот адрес и снова к нему подбираемся и смотрим в чем дело. Возможно до вызова CBasePlayer::PreSave(CBasePlayer *this, int slot) должны в обязательном порядке вызваны предыдущие функции или подготовлены какие-то данные. Тогда перед сохранением в игре нужно подниматься через пошаговое выоленнеие по коду выше до места кода где происходит сравнение с запуском сохранения (кей-код или что-то в этом роде) и от этого места вглубь до вызова функции полностью изучить листинг дизассемблерного кода со стеком. Под рукой иметь IDA с плагином декомпилятора с запущенным вторым процессом игры. Этап4 Повторение залог найти ошибки и решение Если что-то не получается, то внимательно сравниваем успешное выполнение кода и принудительное не успешное. Возможно придётся писать две истории пошагового выполнения кода начиная с адреса начала сохранения. Запоминать и сравнивать надо всё, что происходит в отладчике. Самое главное здесь это определить - Правильно ли передаются аргументы в функцию - Правильны ли подготовлены данные перед вызовом функции - Соблюдена ли вся последовательность выполнение предшествующего отладочного кода для успешной операции сохранения
-
>>RE chuvak1121: Вообщем я хочу на языках программирования писать не только трейнеры но и программы. Для создания трейнеров на C# (или для другого языка): 1) Найти несколько исходников C# трейнера В Интернете 2) Открыть MSDN по базовым основам C# 3) Попробовать изменить что-то в готовых исходниках 4) Попробовать написать с нуля уже свой трейнер на основе знаний от предыдущих. 5) Купить нормальный "Интернет и модем", если нужно смотреть видео 6) Научиться пользоваться поисковиком на форуме или в Интернете Любой трейнер основан на: 1) Получение доступа к процессу на запись/чтение в или из памяти процесса в ОС-е Windows. Процесс ищем по названию *.exe файла или названию окна 2) После получения доступа проверяем атрибуты памяти на возможность записи. Если запрет есть, то меняем на разрешение 3) Дальше пишем в память свои байты (или другие типы данных) 4) Если нужно читать из памяти, то использовать соответствующую функцию 5) Если нужно искать сигнатуру байт, то пишем функцию поиска сигнатуры байт (или ищем примеры) 6) Если нужна функция получения базового адреса dll-ки, то пишем функцию или ищем примеры. 7) Если нужно написать Интерфейс трейнера, то ищем примеры готовых трейнеров Всё можно найти через поисковик. Тщательно разбирать исходники C# трейнеров имея под рукой MSDN. Для написания программ (не трейнеров) Опять же MSDN (без него никуда) по базовым понятиям C# и технологиям .NET Существует куча книг по C# и технологиям .NET. Все в Интернете или на полках магазинов.
-
-- Для CE 6.2 -- Описание http://code.google.com/p/cheat-engine/source/browse/trunk/Cheat+Engine/bin/main.lua local filePath = 'D:\\text.txt' local stringsList = createStringlist() strings_loadFromFile(stringsList, filePath) local text = strings_getText(stringsList) object_destroy(stringsList) showMessage(text)
-
Скорее всего, eax был перезаписан после выполнения инструкции. Можно изменить аппартный бряк на программный для того чтобы узнать eax до выполнения инструкции, а не после. Подробнее об этом было здесь.
-
Версия 1.0 Приложение ShotGame.rar Пакадж (для тех у кого Unity3d 4.0) ShotUnitypackage.rar Пользователь наводит пистолет на стену. После чего выстреливает. Создаётся пуля, ей придаётся сила и пуля летит в стену. Как только пуля касается стены, то стене наносится урон. Количество выстрелов и количество "здоровья" стены отображается в левом верхнем углу. Наша задача исследовать и сделать так чтобы пуля не наносила урон стене. Содержание: 1. Обзор игры и кода высокого уровня в игровом движке using UnityEngine;using System.Collections;public class BulletCollision : MonoBehaviour {public GameObject prefabflashAnimation;public float power = 25f;void OnCollisionEnter(Collision collision){GameObject.Instantiate(prefabflashAnimation,collision.contacts[0].point,prefabflashAnimation.transform.rotation);collision.collider.SendMessage("OnDamage", power, SendMessageOptions.DontRequireReceiver);}}using UnityEngine;using System.Collections;public class Unit : MonoBehaviour {public float health = 1000000f;string strHealth = "<b>Wall Health</b> 1000000";void OnGUI() {GUILayout.Label(strHealth, GUILayout.Width(220f), GUILayout.Height(30f));}void OnDamage(float valueDamage) {health -= valueDamage;strHealth = "<b>Wall Health</b> " + health.ToString();}} В редакторе это делается просто снятием галочки И наша задача как эту галочку снять средствами CE. А вот как именно, об этом позже. Продолжение следует...
-
Наверно, так push 0 fstp [esp] // сохранение ST0 FPU, esp увеличился при push на 4 fild [ebx+1dc] // загрузка int fstp [ebx+100] // запись как float fld [esp] // восстанавливаем ST0 sub esp, 04 // возвращаем esp
-
2Xipho: После удаления заразы о сервисе повторной проверки: 1 , 2
-
Общую информацию по движку в качестве введения можно получить из Википедии. Предлагаю найти и почитать. Знакомство будет начато с теории - архитектурой игрового движка и немного практики. Все будет компактно и более менее понятно на мой взгляд. Архитектура игрового движка Unity3d и базовые функции Кратко по пунктам о самом основном, что поможет сделать читы на высоком уровне, не влезая в дебри кода и оладчик. Только тут C#, а у него свои особенности using UnityEngine;using System.Collections;public class ExampleClass : MonoBehaviour{ public GameObject prefab; void Start() { prefab = GameObject.CreatePrimitive(PrimitiveType.Cube); int i = 0; while (i < 10) { Instantiate(prefab, new Vector3(i * 2.0F, 0, 0), Quaternion.identity); i++; } }}
- 1 ответ
-
- 1
-
-
Здесь мы можем выкладывать информацию и обсуждать её. Задача иметь возможноть получить общее представление о создании игр, о наглядном переводе высокого уровня кода в низкоуровневый. Создание на высоком уровне читов и обзор как это можно было бы сделать используя средства изменения отладочного кода (Cheat Engine или другие) В частности рассмотрение. 1. Работы с игровыми движками 2. Ваши или публичные игры-примеры 3. Программирование в игровых движках на высоком уровне 4. Знакомства с игровыми движками 6. Представление высокого уровня кода и низкоуровневого 7. Любая информация о создании читов в связке с языком высокого уровня. Приоритеты больше на читы в сингловых играх, которые чаще всего используются 1) Неуязвимость 2) Бесконечные ресурсы 3) Управление кол-вом и свойствами игровых объектов (позиции, вращения, бесконечное количество, создание объектов на карте) 4) Связи игровых объектов и событий между ними. О том как объекты получают ссылки друг на друга, как обмениваются сообщениями. 5) Отключение коллизий на коллайдерах (прохождение сквозь стены, выстрелы сквозь игроков ) 6) О том как обрабатываются данные от устройств ввода и как это влияет и на какие элементы в игре 7) О том, что происходит при загрузке сцены, при переигрывании, что и как приводит к завершению игры и как наиболее универсальным способом проходить игру на разных версиях игр. 8) Поиск чего-то общего между играми для создания читов Подопытные кроли: 1) Unity3D (и открытые демо проекты в сети) 2) UDK (и открытые демо проекты в сети) 3) Любые Движки на C++ (даже больше приветсвуются) 4) Движки на .NET технологиях 5) Любые движки или самописные игры с нуля. Только просьба, чтобы это не были трейнми, потому что наша задача научиться по отладочному коду представлять как была написана игра на высоком уровне и наоборот, а не концентрироваться на снятии защиты, которую сами придумали. Постараюсь сам поддерживать тему. Желаю успехов!
-
Ну, насчёт паролей обидеть не хотел. Прошу не принимать близко к сердцу. Если нет времени на решение проблемы, то я могу взяться. Решение проблемы описано в Интернете, но ссылки не дам, не запомнил. Искал по поисковикам.
-
Запись iframe чужеродна и не для добрых дел. Зараза с iframe популярно описана в Интернете, даже очень популярна. О все полном процессе правда не пишут во всех подробностях. В основном прут пароли с "FileZil-ы", получают доступ и через фтп автоматом дописывают код. Странно, что ты решил, что это "антивирус". Ссылки совершенно левые. В админке форума посмотри центр безопасности файлы которые были изменены с 19 декабря все нашпигованы заразой. Одно ясно, надо побыстрее от неё избавляться. Я больше всего уверен, что у тебя потырили пароль файлзилы с какого нибудь заразаного сайта. Их целая сеть около полторы тысячи. Информация с гугл.
-
К сожалению, я не знаю, что случилось с Xipho. Возможно Xipho очень занят. Он пропал. Я не могу почистить заразу без доступа к файлам. Позавчера он был и написал что о заразе знает. А вчера его сутки не было. У меня есть следующие рекомендации. 1. Настройте сайт в Вашем браузере (например в Опере) на доменное имя gamehacklab.ru: - выключить яваскрипт - выключить плагины Выйдите с сайта. 2. Проверьте все ваши компы антивирусом. Продвинутые пользователи могу воспользоваться AVZ. Дело в том что iframe теги прописываются яваскриптом. Эти теги могут подгружать флеш плагины, pdf или другие. Подгружаемые файлы могут быть заражены и выполнять вредносный код. 3. После лечения. Поменяйте все пароли ваших учётных записей и почтовых ящиков. Особенно, актуально если наиболее новые антивирусы что-то нашли. 4. Никогда не заходите на gamehacklab.ru или forum.gamehacklab.ru с включенными ява скриптами и плагинами пока Xipho единственный, после "хакера" имеющий доступ к файлам не появится и не почистит заразу на своём ПК. Поменяет свои пароли, проверит права доступа к файлам и т.п., а затем на сервере восстановит копии php и js файлов.
-
В множество файлов построения сайта была добавлена запись javascript которая "пишет" при включенном ява скрипте iframe теги с ссылками. Отписал Xipho. Если проблем не будет, то все будет как прежде. Хотя меня больше всего волнует закрыта эта брешь или нет для будущих атак и не украдена ли информация входов в учётные записи. Исправить один из серверных файлов это лишь временное решение.
-
>> Мне интересно как на Lua заморозить координату высоты персонажа Зависит от конкретной игры. Универсального решения или объяснения, скорее всего нет. Нужно искать отладочный код игры и менять его. >> И как сделать что бы при нажатии на ( Любой хоткей ) Координата высоты увеличивалась Можно сделать разными способами. Наиболее простой АА-скрипты. Установить горячие клавиши можно полазив по функциям Cheat Engine.
-
В C++ скорее всего проще использовать указатель на адрес и размер в байтах BOOL WriteProcessMemory( HANDLE hProcess, LPVOID lpBaseAddress, LPCVOID lpBuffer, SIZE_T nSize, SIZE_T* lpNumberOfBytesWritten ); int a = 4; bool rez = WriteProcessMemory(hProcess, lpBaseAddress, &a, 4, 4); Аналог BitConverter в этом случае не требуется. В противном случае, если нужно работать с массивом байт, то нужно почитать способы приведения типов/функции привидения в C++ и посмотреть информацию по указателями. Ну или поискать в поисковике исходники трейнеров на C++.
-
Вариант2- АА-скрипт и Lua управление // Заранее создать AA-скрипт с имением "CheatSpeed" в гланой таблице CE [ENABLE] alloc(newMem, 1024) createThread(newMem) newMem: mov eax,xxxx shl [eax],1 shl [eax+4],1 shl [eax+8],1 ret [DISABLE] dealloc(newMem) Код на Lua function CheatSpeed() local table = getAddressList() local mrCheatSpeed = addresslist_getMemoryRecordByDescription(table, 'CheatSpeed') memoryrecord_unfreeze(mrCheatSpeed) local isFreeze = 0 memoryrecord_freeze(mrCheatSpeed, isFreeze) end trainerForm = createForm(true) speed2xBtn = createButton(trainerForm) control_onClick(speed2xBtn, CheatSpeed) createHotkey(CheatSpeed, VK_SHIFT, VK_S) Вариант3 Lua function CheatSpeed() autoAssemble([[ createThread(newMem) ]]) end trainerForm = createForm(true) speed2xBtn = createButton(trainerForm) function onOpenProcess(processid) autoAssemble([[ alloc(newMem, 1024) registersymbol(newMem) newMem: mov eax,xxxx shl [eax],1 shl [eax+4],1 shl [eax+8],1 ret ]]) control_onClick(speed2xBtn, CheatSpeed) createHotkey(CheatSpeed, VK_SHIFT, VK_S) end
-
>>значение этих 3 поинтеров умножить на 2,но как это сделать в СЕ Код CE Lua: function Imul2xSpeed(addressX, addressY, addressZ) writeFloat(addressX, 2*readFloat(addressX)) writeFloat(addressY, 2*readFloat(addressY)) writeFloat(addressZ, 2*readFloat(addressZ)) end Пример: Imul2xSpeed('[xxxxxxx]', '[xxxxxxx]+4', '[xxxxxxx]+8') >>Как можно место HotKey сделать кнопку function CheatSpeed() Imul2xSpeed('[xxxxxxx]', '[xxxxxxx]+4', '[xxxxxxx]+8') end trainerForm = createForm(true) speed2xBtn = createButton(trainerForm) control_onClick(speed2xBtn, CheatSpeed) createHotkey(CheatSpeed, VK_SHIFT, VK_S)
-
Полностью управлять Cheat Engine из другой программы, скорее всего, просто так нельзя. Например, тебе придётся создать dll-ку-плагин подгружаемую в CE автоматически, которая будет участвовать в обработке межпроцессного взаимодействия, например, принимая Lua-команды. Поищи в Интернете информацию о межпроцессном взаимодействии. Файл Сигнал Сокет Канал Именованный канал Семафор Разделяемая память Обмен сообщениями Проецируемый в память файл Очередь сообщений Поток Dll-кb на стороне CheatEngin-е и управляющий процесс может выполнять, отвечать и запрашивать друг у друга разную информацию. ---------- Но, лучший вариант как ,мне кажется, это сборка большого exe в самой Cheat Engine с коллекцией читов к играм. В Интернете есть примеры подобных трейнеров с оформлением GUI выбора игры по названию из нескольких - когда один трейнер не к одной, а к множествам игр.
-
1) От потоков, которые работают по циклу даже с задержкой лучше отказываться. Сулит тормозами и вылетами из игры (особенно без проверок адресов есть ли доступ на чтения и запись) 2) Новый поток можно и нужно создавать в отдельной выделенной памяти. Два потока на одном блоке кода выполняться не могут. Они будут ждать друг друга пока один не выйден из блока кода. Тоже самое касается чтения данных в одной области. К сожалению, я не помню размеры этих областей. Эти и другие тонкости должны быть у Рихтера в его мемуарах или MSDN. Короче. Тебе нужно не использовать новый поток, а найти часто работающую инструкцию, которая позволила бы записать здоровье всем твоим юнитам или же не позволила наносить урон от юнита, который принадлежит противнику. Речь идёт о "Panzer General III - Scorched Earth" (от 2000го года)?