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

MasterGH

Ветераны
  • Постов

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

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

    129

Весь контент MasterGH

  1. Когда пишешь ассемблерные инструкции нужно писать не в круглых скобках, а в квадратных. mov (_Player),ecx нужно заменить на mov [_Player],ecx А также необходимо заменить остальные скобки под "_newmem:"
  2. Статья про взлом флеш-игр на английском. Всё что тут написано старо, но можно обратить внимание на пятый и шестой пункт ближе к концу статьи
  3. Написать эту тему меня подтолкнуло то, что о C# у нас мало информации. Это просто безобразие. Надо о нём обязательно поговорить особенно в контексте advanced gamehaking. Сразу перейдем к этому контексту без нудного вступления о C#. C# (Си-шарпу) успел найти применение некоторый человек (не помню имени) над проектом создания модов к GTA 4. Я так понял, что он изучил код игры и написал главный модуль и заголовочные описания к нему на VC++ 2005. Далее он написал на C# описания того как взаимодействовать с модулем, а дальше самое интересное. Пользователи могут писать свои скрипты на .NET используя последние упомянутые описания. Итак что сделал автор 1) Изучил код игры 2) Написал главный модуль и заголовочные описания к нему на VC++ позволяющие изменять поведения игры (писал конечно же с ассемблерными вставками) 3) Написал на C# описания работы с этим модулем. 4) Теперь пользователь может писать свои скрипты на NET языках (C#, VB.NET, F#, Delphi.NET и т.п.) Прежде всего .NET языки очень удобны для прикладных задач, т.е. работе с данными и бизнес-процессами (короче процессами по управлению чего-то). Автор уже написал костяк описаний того чем можно управлять и теперь очень удобно управлять, т.е. писать код чтобы в игровом процессе что-то происходило. Разработчиками .NET очень многое уже написано и вам остаётся это использовать. Короче на C# логику удобнее писать чем на VC++. Например, очень легко на C# написать различные условия каких-то игровых процессов. Среда разработки на каждом шагу подсказывает вам, то что вы могли бы забыть и что вы могли бы применить. Открывает вам список методов и интерфейсов и тут же дает краткое справочное описание... C# имеет ещё одно преимущество (правда я всех удобств не опишу, их довольно весомая кипа для определённых задач) которое мне очень нравиться это LINQ запрос к любому массиву данных. Будь то, простой массив строк, будь то массив XML, будь то массив SQL данных и так далее массив чего-то тип данных которого содержит интерфейс перечисления. Короче самое важное, это то что на .NET мы пишем меньше и яснее чем на VC++, делаем всё быстро и видим в коде меньше лишнего, а документация нам подсказывает очень многое, что писать самим нам не надо, а использовать уже готовое. В голове мы сразу строим то, что дольше будем строить на VC++. Идеальный современный вариант для решения прикладных задач как для новичков, так и для профессионалов различных областей. Ходят много споров о том какая программа C# или VC++ работает быстрее. Если вас интересует моё мнение, то я скажу, что скорость следует обсуждать тогда, когда её нужно обсуждать. В наших задачах скорость работы программ не плохая, даже хорошая. Пока скажу только одно. При настройках по умолчанию при первом запуске .программы написанной на .NET, JIT-компилятор компилирует CIL код ("код языка .NET, аналогичный ассемблеру") в машинный код и это занимает время. А далее если этот код будет работать постоянно на приемлемой скорости... ------------ На cheatengine форуме я нашёл тему, в которой парень хочет научиться C# и не знает с чего начать и ему посоветовали написать программу решающую прикладную простую задачу показывать знаки зодиака по введенной информации. Я написал эту программу остальное оставляю желающим исправить. Весь написанный код нужно расположить в Program.cs - генерированном файле при создании консольного приложения Тоже самое для того чтобы скопировать в проект:
  4. Прочитал я статью полностью и не со всем соглашусь. 1. Здесь нужно участие typedef для enum, чтобы kind объявить не как int, а как описанный тип множества. struct game_object_t { int kind; //это код типа объекта int x,y; int health; int score; int anger; }; enum game_object_kinds { kind_Player, kind_Monster, kind_Missle, kind_Explosion, }; 2. В базовом классе нельзя открывать так доступ через public. Следовало сделать через "protect" class GameObject { public: int x,y; int health; virtual int GetType() { return -1; } virtual void Think() {} }; 3. Я с этим не согласен. Координаты должны находиться внутри игровых объектов и должны быть закрыты. "Мир" не может двигать объекты, их могут двигать(оказывать влияние) только другие объекты в этом мире. "Мир" это абстрактная оболочка, она сама никак не влияет на объекты, она только связывает единым контекстом что объекты находятся в одном мире внутри неё. Когда мы смотрим в "мир" каждый объект в нём "передаёт" информацию о своё положении. И только сам игровой объект должен "решать" как ему передвигаться в зависимости от его природы, т.е. объект мир не должен двигать объект, а только другие объекты могут это делать.
  5. В этой теме не будет вопроса по программированию, а будет просто статья. Ссылка на оригинал (статья из RDSN) Она может быть полезна для расширения кругозора. Напомню, что указатели в играх появляются, когда разработчики во всю используют объекты создаваемые кодом игры по описанию класса. Описание класса естественно пишет разработчик... Объектная система игры (игровой "движок")
  6. Я пишу на VS в том числе и наработки для будущих трейнеров основываясь не таком малом и не правильном описании причин, которое ты привел. Да и под платформой принято понимать другое, а под средой разработки понимать не платформу как таковую. От того какая у тебя цель зависит то чем ты будешь пользоваться. Win-API и язык программирования это минимальный набор "трейнеров по умолчанию", которых большинство людей делают. В моих целях "полный вариант" включая устройства, драйвера, управление com-объектами, которые игра использует и многое другое. У Рихтера надо читать, только, то что тебя интересует. В случае трейнеров это в первую очередь механизмы работы Windows (процессы, потоки,защита памяти, работа потоков, очереди сообщений, и др). А вот для этого просто необходима VS C++. На ней можно писать приложения аналогичные игровым, дизассемблировать и понимать свои догадки. + IDA и hex-array, OllyDbg или иные программы. Под ресурсами игры обычно подразумевают: картинки, текстуры, музыка, модели, различные конфиги... Хотя последние могут пригодиться для создания читов, но мы как-то не занимались распаковкой/запаковкой ресурсов и у нас нет по этому информации (хотя жаль). Если тебе нужно копаться с игровыми ресурсами, то тебе надо на сайты по модингу., а если нет, то Welcome
  7. Правильно, Страуструпа нужно обязательно прочитать, тем кто не читал (даже тем кто читал Шилдта). Так же замечу, что хорошо бы понимать новую Visual Studio для C++: ее возможности, типы проектов которые можно, нужно или не нужно создавать... Для этого нужны книги по новее датируемые выше 2008 года. В частности нужны ещё книги (статьи или информация) как писать совместно с WinAPI от создания простых окон, работы с файлами до сложных задач. Классикой в последнем случае будет книга Рихтера (Windows для профессионалов). Также не забыть про архитектуру Windows (она есть у того же Рихтера и в некоторых книгах + в хелпах DDK: "Kernel-Mode Driver Architecture" и т.п. ). Также не забыть про ассемблер, который можно делать как вставками в VS C++ коде. И многое многое другое (программирование COM (DirectX, opneGL), PE формат (статьи в Wasm-а), работа с дизассемблирами и отладчиками (так же с Wasma и др. сайтов)). Короче знать надо все, всё от устройств, контроллеров и драйверов от которых зависит запуск игры... до процессов и механизмов позволяющие играть в эту игру. Только узнав всё это на полную катушку можно заниматься геймхакингом. Основные направления всё же это: 1) очень хорошие навыки дизассемблирования и отладки + такие же знания того как работают "механизмы" Windows 2) создание инъекций кода путём ассемблера и языка программирования 3) создание трейнеров как отдельных программ так и встроенных в саму игру (в том числе и интерфейс трейнера должен быть прямо в окне игры) 4) остальное по мелочам и в зависимости от целей. По С++ советую изучить указатели на адреса и функции, структуры, множества, классы (функции), операция привидения. Это поможет понять суть того как например вам в вашем трейнере работать с адресом здоровья и как игра с этим адресом работает через множество структур и классов и массивов данных. Позже изучить как выглядит при отладке инкапсуляция, наследование, полиморфизм и множественное виртуальное наследование. Т.е. надо понять как увидеть связь данных и функций привязанных к классу. Увидеть таблицу виртуальных методов, таблицу базовых классов (при множественном наследовании). Увидеть как в дизассемблере происходит привидение чего-то к какому-то типу: динамик касты, статик касты. Как работают конструкторы и деструкторы в отладке. Должны научиться видеть границы функции в дизассемблере, видеть и "догадываться" как используется эта функция например работающая со здоровьем: она используется одним объектом (вашим героем), множествами объектов (вашим героем и врагами) или эта функция настолько полиморфна, что используется не только для здоровья вашего героя и врагов, но ещё и для адреса патронов, усталости и маны также для вашего героя и врагов. Или же только для вашего героя или же только для ваших врагов... Все перечисленное мне кажется должен уметь каждый, т.к. это базовые моменты при создании ин]екции кода. Остальное например может быть таким. Если вам интересно собирать статистику о том что происходит в игре и как вы на эту игру влияете вот тут-то очень даже пригодятся знания языка программирования. Возможно это вам поможет автоматизировать некоторые процессы (я имею ввиду для сингловых игр, а не для многопользовательских)... Другие моменты касаются создания трейнера. В интернете можно найти уже "вылизанные" функции поиска процесса и "механизмы" чтения, записи в адрес, снятие протекции со страницы памяти если в неё нельзя записывать байты. Создание окна на Win API тоже есть. Всё это очень просто. Есть вещи посложнее, которые если и есть, то найти сложно. Создание directx, OpneGL трейнеров встроенных в окно игры, чтение/эмуляция нажатий клавиш на уровне ближе к устройствам ввода/вывода. Собрание, анализировании часто повторяющихся, связанных или не связанных данных того как вы играете с последующей автоматизацией.
  8. Статья Oboema про создание трейнера (2008 г.) "How To Create A Game Trainer Using C/C++" Дата статьи: Oct 4 2008 Chapters.... 1) Introduction... Programs needed... objective... 2) Api calls we will be using 3) header file of CProcess 4) methods of CProcess 5) An example: Mortal Kombat 4 trainer 6) the end CHAPTER 1: Introduction... Programs needed... objective... ***************************************************
  9. Ага, такой вариант тоже может быть. Что-то я про него совсем забыл.
  10. SER[G]ANT уже объяснил почему. Как у тебя получилось все мои варианты перепробовать: один явно не компилируется, два других не доделаны. Сомневаюсь, что ты правильно последних два сделал. Снова обращаю внимание на то, что все ошибки со скриптами узнаются в отладке при трассировке. Можно делать её в дизассемблере CE поставив бряк перед в ходом на инъекцию.
  11. По поводу рейтингов. Я взял на себя право убрать "Новую систему рейтингов" в связи с тем, что активность нашего форума желает лучшего. Теперь система рейтингов более либеральна чем раньше. Если вы видите, что человек заслуживает повышение рейтинга, то можете ему поставить (повысить ему уровень), только не переусердствуйте. Возможно в будущем будут изменения.
  12. Существует такой вариант movd eax,4640E400 movd xmm0,eax Может быть так прокатит movd xmm0,4640E400
  13. Я бы так написал [ENABLE] alloc(newmem,2048) label(_GodMode) label(_ExitGM) label(_BackGM) label(_pPlayerID) registersymbol(_pPlayerID) witcher.exe+37B1B0: jmp _GodMode _ExitGM: newmem: _GodMode: // save pointer push ecx mov ecx,[witcher.EXE+850EAC] mov ecx,[ecx+B8] mov [_pPlayerID],ecx pushf cmp esi,ecx jne _BackGM movss xmm0,4640E400 _BackGM: popf pop ecx movss [esi+48],xmm0 jmp _ExitGM _pPlayerID: dd 0 [DISABLE] witcher.exe+37B1B0: movss [esi+48],xmm0 Ошибки проверяются в отладке. Pushf, popf возможно не нужны.
  14. Тема. Поиск нулевого адреса средствами отладки на примере эмулятора FinalBurn Alpha 0.2.97.06 и игры CPS1 Knights of the Round(911127) p.s. Ссори за оформление статьи скриншотом, нет времени...
  15. Ладно, дело плёвое и лень писать скрипты. В игре есть два меню в которых можно повышать навыки у героя. Первое это при создании игрока, второе - на тренировке. На тренировке ищем значения некоторого ползунка типа 1 байт. Находим 4 адреса из них и путём проб находим рабочий. Лезем в память и видим, что там как писал M4K значения близлежащих ползунков. Соответственно можно исправить их всех вручную или скриптом CE. Должен быть цикл который читает все ползунки и в нём сделать инъекцию, так чтобы нехватающее количество белых прямоугольников в ползунках до возможных 6-ти было восполнено. Если хотим зелёные прямоугольники в ползунках в меню тренировки, то надо разобраться чем одни отличаются от других. Мне лень с этим возиться. Если хотим зелёные в меню создания игрока, то как в этом случае быть я без понятия, т.к. я не доделал... Большую часть времени я потратил на разбирательства почему общее количество доступных очков не отображается как надо. Я делал 10, 200 доступных всех очков, но отображалось постоянно 9. Хотя было на самом деле 10 и 200, и можно было добавлять белые прямоугольники так же 10 и все возможные. Вышел я на доступные очки следующим образом. Т.к. я предположил, что читаются количество очков в цикле, суммируются и сравниваются с общим возможным количеством. Если можно, то добавляем очки, если нет, то нет. Вот его-то я и нашёл, и изменил, а всё равно отображалось 9 доступных (белых прямоугольников) заданных при создании игрока. Ну, ладно...
  16. Я тоже взломал На счёт детского сада не знаю (я думаю ты перегнул палку, я думаю только несколько человек с нашего форума смогут понять в чём дело без всяких подсказок). Мне в меню создания игрока потребовалось минут 10 понять в чём дело. Но и то я пока скрипт не написал. Как я писал я нахожусь сейчас в меню создания игрока, а в твоём SER[G]ANT меню ещё не был. Может по этому ты быстрее меня нашёл?! Ну, ответ тогда напишем чуть позже, т.к. может Лив сам поймёт в чем дело.
  17. Тема. Управление игровыми персонажами скриптами MHS. Заставим Марио бежать и попрыгать при этом. Для этого нужно воспользоваться следующим скриптом. void send_key_loop (char * pChar, int loop, int wait1, int wait2){ int counter; short letterke ; int iLength = StrLen( pChar ); for ( counter = 0; counter < loop ; counter++ ) { letterke = VkKeyScan( pChar[0] ); KeyboardEvent(letterke,0 ); Sleep(wait1); KeyboardEvent(letterke,KEYEVENTF_KEYUP); Sleep(wait2); } } VOID On_HK_23( DWORD dw1, DWORD dw2 ) { //Clear(); CHAR * pCharJamp = Malloc(12); pCharJamp = "c\0"; // Удерживаем вправо 1 секунду - разгоняемся KeyboardEvent(VK_RIGHT,0); Sleep(1000); // разгончик! // Подпрыгиваем три раза! send_key_loop(pCharJamp,3,1000,1000); // Останавливаеся KeyboardEvent(VK_RIGHT,KEYEVENTF_KEYUP); PrintF("Попрыгали"); Free(pCharJamp); } Этот скрипт можно связать с горячей клавишей, например, с "J" как это было показано выше в постах. Теперь если нажать на J, то Марио выполнит разбег и три прыжка. Этот пример показывает что MHS может посылать нажатия клавиш DirectX-приложениям в том числе. К этому добавлю, что можно написать скрипт чтения нажатий клавишь с сохранением в память или файл. Затем эти нажатия можно эмулировать с различными поправками. С игрой Марио, например, можно записывать каждое прохождение и если Марио погибает, то предыдущее прохождение можно повторить автоматически Ну а самое интересное это сделать так чтобы Марио сам проходил игру.
  18. Привет. mov eax,[ecx+08] это инструкция вероятно типа C(A). Рис.1 Специально поставлены нопы (из-за бага CE...). Стрелкой показано определение адресов. Значения по некоторым адресам весьма большие, возможно это даже не значения, а адреса на другие значения. Она работает со структурами относящихся к главному герою, если это не так тогда будет C(В). Если хочешь внедрять именно в это место, то придётся писать фильтр. Пока я не понял какой, правда у человека у которого ты взял скрипт уже фильтры "готовы" и можно их применить в своём скрипте. Нельзя делать фильтр только на ecx, т.к. ecx недостаточно - все ecx принадлежат например герою, но есть ещё критерии и их нужно найти. Однако я советую, т.к. к этой инструкции идёт частое обращение по всяким "лишним адресам", то попытаться найти 1) три участка кода для каждого ресурса которые вычитают ресурсы - внедрить в них новое условие, которое не позволяет ресурсам уменьшаться 2) при активации читов для ресурсов, должен быть ещё один скрипт, который установит ресурсы и они сразу отобразятся. Если у меня сегодня/завтра будет настроение, то попробую сделать эти два пункта.
  19. Внимание в моём посте выше в теме "Создание трейнера на Дельфи для начинающих" теперь правильно расставлены скриншоты. В некоторых местах кода было исправление на OldProtectPage - восстановление предыдущей защиты стариницы памяти. Также я не пояснил для тех кто не знает. Страница памяти кратна 1000 байт. Если изменяем защиту памяти процесса для адреса, то меняется вся страница памяти включающая этот адрес. Более подробно я где-то писал на форуме про защиту памяти. Специально для тех кто не хочет регистрироваться или для Лива исходники пока можно скачать с рапиды - ссылка. Сроки хранения исходников на сайте по ссылке ограничены. Лив, Xipho мне писал, что должно быть всё нормально. Не знаю, что у тебя за проблемы Попробуй спросить у других людей, скачивается ли у них. В другом случае я на сторонние файлобменники выкладывать больше не буду.
  20. В этой пустоте размещается список последних тем. Включите куки. Уберите пустоту. Выйдите с форума. Включите куки перед тем как зайти на форум и пустоты быть не должно.
  21. Создание трейнера на Дельфи для начинающих На этом примере будет показано, как сделать программу, которую можно считать очень простым трейнером с деланным за минут 3-5 при готовых модулях. Скачайте новый проект Source_SimpleTrainer.rar и можете прочитать, как он был сделан. Цель - записать один раз значение “100” по некоторому адресу. Возьмём за пример тестовую программу test.exe, которая лежит вместе с исходниками. Найдём адрес значения в Cheat Engine Рис.1 Поскольку адрес теперь мы знаем,то приступим непосредственно к делу. Скачаем среду разработки Дельфи Лайт (размер установщика порядка 70 мб). Дельфи не плохая среда разработки и подходит для начинающих только изучающих язык Паскаль или боле сложный язык Дельфи (Дельфи можно называть языком и средой разработки) Писать мы будем на готовой форме, поэтому трейнер будет порядка 500 кб. Если хотите меньше, то просим на наш форум. Создадим проект как показано на рисунке. Рис.2 Разместим компоненты таймера и картинки (шаг 3, шаг 4) Кликнем на форму, на которой уже есть таймер и пунктир картинки и заполним поля (шаг 1, шаг 2) Рис.3 Выделим мышкой иконку таймера, которую вы перетащили на форму и поставим в свойствах Interval 100. Кликнем на картинку и установим её свойства: Align – alClient (выравнивание картинки внутри главного окна) picture - выберите вашу картинку. Я взял скрин с нового номер журнала Игромании. У таймер поставьте свойство интервала в 10 мс и Enable поставьте true Напишем модули (но их писать не надо, т.к. они уже у Вас есть): MemoryUse.pas Metrik.pas Process.pas Sound.pas MemoryProtect.pas Вы можете увидеть их в готовом проекте Рис.4 Дальше сделаем обработчики события: кликаем на компонент, переходим во вкладку events (события), выбираем событие и по два раза кликаем мышкой на нём чтобы сформировать код обработки события. Теперь на о том как это делается. Кликаем на окно формы. Переходим в events и дальше как на рисунке Рис.5 Тоже самое теперь проделываем с таймером. Рис.6 И наконец, пишем код выделенный красной рамкой. Рис.7 Полный код представляет следующее. unit frmMain; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, jpeg; type TForm3 = class(TForm) Image1: TImage; Timer1: TTimer; procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form3: TForm3; implementation {$R *.dfm} uses Process,MemoryUse,MemoryProtect, Metrik, Sound; var Process : TProcess; MemWriter : TMemWriter; MemProtected : TMemProtected; procedure TForm3.FormCreate(Sender: TObject); begin Process:=TProcess.Create('test.exe'); MemWriter:=TMemWriter.Create(Process); end; procedure TForm3.FormDestroy(Sender: TObject); begin MemWriter.Free; Process.Free; end; procedure TForm3.Timer1Timer(Sender: TObject); begin if (GetAsyncKeyState(VK_F2)<>0) then // если нажата клавиша F2 то… begin MemProtected:= TMemProtected.Create(Process,$0045B5A4,4); // снимем защиту страницы памяти с адреса $0045B5A4 MemProtected.UnProtectPage; MemWriter.TryMemDIGWrite('$0045B5A4','100',_dword); // запишем адрес MemProtected.OldProtectPage; // восстановим защиту страницы памяти MemProtected.Destroy; sleep(500); // пауза, чтобы пользователь end; end; end. Компилируем проект: значок плей. В этот момент происходит компиляция и запуск приложения. Проверям. Нажимаем на F2 происходи звук. Кликаем на кнопку тестовой программы и мы видим, что число там стало не 117, а 101. Заключение. Это руководство всего лишь начальный старт для тех, кто только учится писать трейнеры например на Дельфи. Есть ещё более гибкий язык C++ поддерживается средой разработки Visual Studio. Именно на этой среде разработки создано множество игр под операционную систему Windows. На C++ как-то приятнее писать программы c WinAPI, т.е. трейнеры. Но он и гораздо сложнее, чем Дельфи. Так что выбор за вами. Здесь было рассмотрено, как создавать проект в Дельфи. Немного показано как работать с компонентами VCL, как формировать обработчики событий. Было показано как заставить трейнер реагировать на нажатие кнопки клавиатуры записывая значение по адресу. Вы также можете создать ещё один таймер2, который будет замораживать значения по адресу. Таймер горячих клавиш будет включать таймер2. procedure TForm3.Timer2Timer(Sender: TObject); begin if (cheat1 = true) begin MemWriter.TryMemDIGWrite('$0045B5A4','100',_dword); end; end; Не забудьте перед включением таймер2 использовать один раз MemProtected:= TMemProtected.Create(Process,$0045B5A4,4); // снимем защиту страницы памяти с адреса $0045B5A4 MemProtected.UnProtectPage; Без MemProtected.OldProtectPage; // восстановим защиту страницы памяти MemProtected.Destroy; sleep(500); // пауза, чтобы пользователь успел отпустить клавишу Когда вы выключите таймер2, то используйте MemProtected.OldProtectPage; // восстановим защиту страницы памяти MemProtected.Destroy; Недостатки этого трейнера: 1) Я описал поддержку записи только в адрес памяти простым методом. Но этого может "не хватить". Причина в том, что часто требуется запись в адрес по указателю. А иногда нужен индивидуальный подход к записи по адресу, когда указатель особенный. Бывают случаи когда цепочка указателей состоит из динамических звеньев [[[статичный адрес]+смещение1]+смещение2] = значение. Например, смещение 1 постоянно меняется, и найти его можно только через условие, которое можно оформить только программным путём. Например, Если [[[статичный адрес]+0x250] равно 0x14, то { смещение1 = [[[статичный адрес]+0x254] [[[статичный адрес]+смещение1]+смещение2] = значение. } Т.е. в данном случае имеем динамический массив объектов, которые часто перетасовываются во время игры. Объекты содержат свой собственный тип. Игра обращается к адресу объекта приводя его к типу, а тип получает по идентификатору, который объект содержит в своей структуре. В общем тут свои сложности. 2) В сжатом виде, если запаковать пакером этот трейнер занимает 270 кб. Можно использовать WinAPI и тогда он будет меньше. 3) Тем не менее, всё это не то. Трейнер по моему представлению должен представлять из себя загрузчик .dll в процесс игры. И там эта .dll ка может творить многие вещи. Тем более dll-ку можно писать на языке высокого уровня и удобно делать очень сложные читы, которые на ассемблере в скриптах Cheat Engine писать трудоёмко. Если у вас есть вопросы, то их можно задать у нас на форуме.
  22. Guru.eXe, если тебя очень волнует вопрос о законности применения трейнера, то можешь не беспокоиться. Трейнеры по сей день выкладывают лицензированные фирмы игровых журналов на своих дисках и ничего страшного - они продолжают выкладывать. Другое дело NoDVD. Его предназначение - отнять потенциальную прибыль у разработчика. Соответственно, он если очень постарается, то сделает всё возможное чтобы свою потенциальную прибыль увеличить. И размещение NoDVD для нас не выгодно, т.к. пускай хоть и немного мы будем стимулировать разработчиков к новым защитам мешающим создавать чит-коды с помощью трейнеров. А самое главное у нас могут быть проблемы с фирмами локализаторами, которые находятся в России и им куда проще разобраться с Xipho Да, да... все тумаки достанутся в первую очередь ему, если достанутся )
  23. Xipho давно мне писал, что у нас на сайте незаконных вещей не будет. Конечно, можно попробовать в законе лазейки найти, типа "nodvd-программы не хуже чем нормальные, но пользоваться ими нельзя, т.к. это не законно"... Но зачем нам nodvd, этого навалом полно на других ресурсах. Наша задача создание читов, а NoDVD к читам отношения не имеет, также как и читы не имеют отношения к NoDVD. Посмотрим что напишет Xipho. Я - против.
  24. Тема. Создание и внедрение dll при помощи Cheat Engine. Сейчас у меня есть время на то, чтобы открыть самые основы этого метода и обратить внимание на его перспективы. Сразу напишу о перспективах. Ну, что тут сказать, если использовать этот метод внедрения чит-кодов, то открывается возможность использовать всю мощь языка программирования на котором вы пишите dll-ку включая ассемблерные вставки. Я же очень советую готовиться психологически переходить именно на этот метод совместно с языком C++ и использовать именно его, а не автоассемблер из Cheat Engine. Я не смогу раскрыть всё, то что можно сделать, но основы я покажу. Скачиваем VisualStudio 2010, если вам удобно, то на русском языке. Создаём проект типа Win32, называем его например AppCheatsLib. Перед вами будет мастер проектов, с различными переходами. Отметьте что проект будет создан как dll и будет пустым. У вас создаться пустой проект. В правом верхнем углу выделяем проект AppCheatsLib.dll и кликаем правой кнопкой мышки чтобы вызвать меню. Выберите добавить-> новый элемент. Там выберите Создать класс. Файл описания назовите CheatsLib.h, а реализации описания CheatsLib.cpp. Уберите предкомпиляцию. У вас создастся два файла. Пока я хочу показать только такой простой пример. Возьмите какую-нибудь программу или игру. Найдите и запомните в ней адрес параметра, который нужно будет изменить один раз при помощи метода загрузки dll. Допустим этот адрес будет равен 0x0041d090. А теперь в двух файлах удалите сгенерированных код и напишем свой: // CheatsLib.h namespace CheatsLib { class Cheats { public: // Write value 1000 static __declspec(dllexport) void Cheat_WriteValue_10000(); // запомните эту экспортируемую функцию }; } // CheatsLib.cpp #include "CheatsLib.h" #include <windows.h> namespace CheatsLib { void Cheats::Cheat_WriteValue_10000() { *(DWORD *)0x0041d090 = 10000; // поставьте свой адрес и своё значение } } После этого найдите выпадающий список вверху с надписью Debug и смените на Realise и теперь собираем проект горячей клавишей F6. Заходим в директорию с проектом ищем папку Realise и в ней наша супер библиотека AppCheatsLib.dll. ЗапускаемCE. Аттачим CE к процессу вашей игры/программы адрес которой вы нашли. В CE находим функцию внедрения dll из меню и вызываем её. Указываем путь к нашей AppCheatsLib.dll и жмём Ок. Сразу будет сообщение о том, не хотим ли мы запустить какую-то функцию из dll. СОГЛАШАЕМСЯ. И перед нами появится список в котором вы сможете узнать функцию Cheats::Cheat_WriteValue_10000() Выбираем её и жмём ОК. После этого значение в игре/программе должно измениться. На этом всё. Также мы могли бы использовать ассемблерные вставки и много всего-того что можно придумать. НО. Это всё дело довольно сырое. Здесь нет считывания горячих клавиш, нет инъекции кода (мы не затирали инструкции), нет сканера сигнатур, нет контроля активации и деактивации и многого другого. Как будет сделано это много другое, то с успехом можно писать загрузчик dll-ки и этот загрузчик можно будет делать как трейнер, а dll-ку поместить в его ресурсы. Ну а после таких нескольких трейнеров можно строить один общий трейнерМакс, про который я уже говорю чуть ли не каждый пост (самому надоело ). Дело времени и дело бодрого настроения реализовать это всё...
  25. Можно (уже был ответ) Ищи ниформацию как ставить оконный режим. Эта функциональность не поддерживается.
×
×
  • Создать...

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

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