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

MasterGH

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

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

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

    129

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

  1. Сколько можно писать сленгом со словами "пипец, глючит, загоняется ..." Большинство игр, которые тебя интересуют все с уклоном на порнуху. Взрослеть пора.
  2. Эта версия, полезна для более менее начинающих пользователей, которые могут попрактиковаться в: 1) создании трейнеров с ограниченными возможностями (не новинка) 2) шпионаже за writeprocessmemory чужих трейнеров (тоже не новинка) 3) сканере памяти (изобретение велосипеда, как и остальное) Я всё-таки больше склоняюсь к более полезным возможностям. Например, было бы неплохо (и не трудно это сделать) сделать поддержку загрузчика dll-ки в процесс игры созданным потоком. В этой dll-ке специально написанной для игры можно реализовать очень и очень многое вплоть до решений больной темы "обмана количества объектных типов". И при чём написать код в dll-ке можно на удобном языке высокого уровня поддерживающего ассемблерные вставки. Есть и ещё более гибкий способ (я о нём писал когда-то) это не использоваться код в dll-ках, а копировать код трейнера в процесс игры и исполнять его. Естественно, код трейнера компилируется в среде разработки программ. Это всё для случая, когда пишем авторские трейнеры отдельно для каждой игры.
  3. Жаль мне не до исходников в данный момент. Кстати я вижу следующую ситуацию после "двух руссификаций и модернизаций" CE - это излишняя повторяемость переноса модифицированного кода в каждую новую появляющуюся версию CE из прошлых модернизированных руссифицированных версий. Так что надо с этим что-то делать на подобии удобного контролируемого объединения исходных кодов и различных описаний: свойств форм и т.д. Если есть фаны ДаркБайта, то не при них будет сказано. У него плохой стиль программирования, точнее "грязный", допуск варнингов, хинтов, названия переменных, куча потоков, сбор сообщений, лишнее потоки... А самый "ужасный грех" в том, что программа CE плохо и коряво спроектирована на всём этапе разработки и этим автор показывает что не знаком с ООД. Чем дальше он будет писать обновления, тем сложнее будет что-то менять, переставлять, удалять и т.п. - сделано наспех и сделано и делается как "постоянный черновик". Каждая вышедшая версия, должна быть лишена этих недостатков. Тем не менее спасибо ему за программу, т.к. лучше так чем ни чего - ни исходников и не обновлений CE.
  4. Ошибка и тормоза сканеров памяти, видимо, связаны с нехваткой памяти для сканирования. Я бы попробовал искать указатель на структуру щита. 4 байта целое. Когда щит есть, то значение может быть в районе от 0x00400000 до 0x7FFF0000. Когда щит бросаешь, может быть 0 или всё что угодно. Когда поднимаешь то опять где-то в районе от 0x00400000 до 0x7FFF0000. После того как я нашёл бы этот указатель, то колдовал бы уже в отладке, чтобы найти свойство активации этого щита. Если будет у меня время, то попробую помочь.
  5. Пока работает щит, должен работать таймер по интервалу и счётчик этих интервалов. Например, интервал 1 секунда, а счётчик складывает секунды. Когда время достигнет своего порога щит - пропадёт. Так что, скорее всего, ищи счётчик интервалов времени. Я бы взял за поиск 4 байта целое и два правила поиска в прямой и обратной пропорциональности с отсевами не менее через 1 секунду. Так что пробуй. Ну и ещё хороший вариант, это поиск и заморозка флагов либо ноль, либо единица в какой-то момент: либо когда щит выключен/включен, либо наоборот включен/выключен. Ну а если флаг найдёшь, а его заморозка ни к чему не привела, то лучше лезть в отладку и искать зацепки как сделать щит.
  6. Простой трейнер на C# (10 кб) для тестого приложения Test.exe Основная моменты следующие. Мы просто по таймеру пишем значение в какой-то адрес. Примитивное действие правда? -Создаём объект доступа для процесса (на самом деле он просто запоминает имя процесса): AccessProcess_x86 accessProcess = new AccessProcess_x86("Test"); - Используем метод записи значения 9999 в адрес 0x0045B5A4 размером 4 байта accessProcess.ProcessWriteMem(0x0045B5A4, 4, 9999) - Дальше создаём таймер, условие работы таймера, условие работы чекбоксов... 1. Создайте AccessProcess_x86.cs и добавьте код:
  7. Выликий Code Filter Фантазии Эль Спиро можно позавидовать в создании такой функции как Code Filter. Её можно найти по пути: Tools->Code Filter из главного окна или через окно дизассемблера (путь надеюсь сами найдёте). Принцип следующий (см. на скрин) Мы перехватываем функции, которые работают в какое-то время. На рисунке я сделал три папки выполнения кода в во времени: 1) Работа окна - при этом я нажимал на клетки мин мышкой, но отпускал за пределами окна игры, таким образом не влиял на количество мин. 2) Уменьшение мин - когда ставим флажок 3) Увеличение мин - когда снимаем флажок Каждая последующая папка(т.е. фильтр) в группе исключает фильтры предыдущие. Можно ставить/снимать галочку на/с пункт/а контекстного меню "Exclude Results" для установления фильтров. Там же View Results покажет результат того или иного фильтра. Ну короче там всё просто. После того как мы поставили фильтры, можно установить фильтр выделения "функций" через окно указанное на скриншоте ниже. Там можно попробовать поставить фильтр на указанные мины. В общем я описал как это дело работает. Кому нужно за подробностями, то они находятся в справке MHS. Что даёт функция Code Filter С помощью неё можно установить причинно следственные связи между работой функций и какими-то входными/возвращаемыми данными
  8. Очень компактный справочник - сайт по языку программирования С++ - ссылка Кому надо, то учите С++ в первую очередь по ключевым словам. Ключевые слова и их приминение знать как таблицу умножения
  9. 4655 / 1789 = 2,6 1134 / 29 = 39 У них приходится на одного человека 2,6 сообщений У нас на одного человека 39. В итоге наш форум (29 человек) активнее в 15 раз.
  10. Тема. Поворот камеры в игровом мире (на английском, автор L. Spiro). #1: Creating the full view matrix.
  11. То, что написано в статье у меня получилось (можно посмотреть на скриншоте) Теперь попробую осуществить подобное в MHS. Я хочу сделать так чтобы скрипты MHS выводили информацию в окно игры, а не только в консоль MHS...
  12. А вообще ничего сложного. 1. Нужно получить D3DDev: IDirect3DDevice9 как результат из перехваченой CreateDevice9. Затем инициализировать тут же g_Font: ID3DXFont 2. Перехватить EndScene9 с выполнением TextRect := Rect(100,100,100,100); g_Font.DrawTextA(nil, PChar('Превед!!! '), -1, @TextRect, DT_LEFT or DT_NOCLIP, D3DCOLOR_RGBA($00, $ff, $ff, $ff) ); И это всё для вывода текста, а для рисования нужно поискать необходимые методы. Непонятно зачем автору именно для этой задачи надо было ставить хук на Direct3DCreate9. Я думаю это не нужно было. ---------- Та статья хорошо показывает как и что работает. Однако, я не хочу лоадер процесса, я не хочу подгрузчик dll и я хочу рисовать в окне игры, когда игра уже запущена. Мне не нужны хуки, т.к. я могу использовать инъекции кода: 1) в одну из сигнатур кода, который работает с D3DDev для получения указателя на D3DDev (или аналогичного OpenGL) и инициализации шрифта 2) в одну из сигнатур EndScene9 для разных DirectX-библиотек или для OpenGL для рисования текста. Думаю, можно было сделать и получше. С теорией всё понятно, можно приступить к практике.
  13. Что-то я не совсем понял где в твоём примере код, который рисует в видео-контексте игры. Но зато я нашёл статью (я, обычно, ищу статьи с известными подходами, чтобы по ним побыстрее сориентироваться чем копаться в документациях). И вот результат:
  14. Цель 1: с помощью MHS нарисовать график и текст в окне некоторой игрушки. Цель 2: разобраться как связать события мышки с рисуемыми частями. Нужна помощь в поиске информации по технологии рисования в окне чужого процесса (игры) и в перехвате событий: мышки, клавиатуры к примеру.
  15. Необходимо создать отдельную тему по этому читу, т.к. с телепортом супер-прыжок не вяжется. Создавай и тогда будем обсуждать
  16. Я думаю с телепортом если не всё стало ясно, то почти всё. Покрайне мере технология выяснена. SER[G]ANT-у +5 к прокачке за труды исследования телепорта (каждый уровень будет доставаться всё труднее и труднее) Подобные исследования я очень приветствую. live_4_ever +2 (за статью о телепорте, за то что интересуешься темой) M4K +6 (за выкристаллизованный опыт по расположению данных в структурах, за отличное умение пользоватья сканером памяти (я забыл тебе накинуть очков)) Чтобы стать Продвинутым, ты должен показать умение писать скрипты на CE.
  17. Тема. Мощные MHS С-скрипты. Цель этого туториала, показать как работать со скриптами в MHS, которые активируются по горячим клавишам. Ну а также привлечь внимание читателя к этим скриптам. В С- скрипте мы можем привести некоторый адрес игры к заданной структуре и работать с ней уже на C-коде. Очень жаль что нельзя создавать классы и приводить игровые объекты к этим классам (была бы очень мощная штука - поверьте мне). Мы познакомимся с функций PrintF(), которая будет выводить в консоль некоторые данные. Кто не знает язык С, тем учить! Подопытный кролик будет XP-шный сапёр (для него уже было решение на Дельфи). Мы сделаем одно задание - вывод на консоль информации о расположении мин. Решение этого задания находится в справке, но тем не менее решение я напишу на русском языке. По сравнению с решением на Дельфи, этот скрипт избавит вас от поиска процесса сапёра. Итак 1) Запускаем сапёра. 2) Находим адреса кол-ва мин по высоте и по ширине. 3) Находим массив в котором располагаются мины. 4) Tools->Script Editor. Создаём новый скрипт (сохраняя его в какой-нибудь файл и компилируем по F5) VOID ShowMineSweeperBoard() { extern struct BOARDSIZE { INT iWidth; INT iHeight; } g_bwSize = { "winmine.exe", 0x5334 }; extern BYTE g_pbBoard[32*32] = { "winmine.exe", 0x5361 }; CHAR * pcRow = Malloc( g_bwSize.iWidth + 1 ); PrintF( "%d?%d", g_bwSize.iWidth, g_bwSize.iHeight ); for ( INT J = 0; J < g_bwSize.iHeight; J++ ) { for ( INT I = 0; I < g_bwSize.iWidth; I++ ) { pcRow[I] = (g_pbBoard[(32*J)+I] & 0x80) ? '1' : '0'; } pcRow[g_bwSize.iWidth] = '\0'; PrintF( pcRow ); } Free( pcRow ); } VOID On_HK_23( DWORD dw1, DWORD dw2 ) { Clear(); ShowMineSweeperBoard(); } 5) Tools->Hotkeys и вводим там параметры 6) Нажимаем F2 и видим в консоли ответ: там где находятся единицы там мины. Справочная информация: У каждой ячейки есть свой номер, по которому происходит отображение: пустых клеток, мин, количество мин и т.п. Если вы желаете, то можете открыть все мины поменяв пустые клетки на флажки. А затем вам стоит только кликнуть на рожицу и вы выиграете. Конечно, для этого нужно писать свой алгоритм. Есть и вариант сделать выигрышь просто кликнув на рожицу не зависимо от того открыли ли вы все мины... Итак что же даёт скрипт MHS. Если вы посмотрите справку, то там вы увидите что есть разное применении С-скрипта. Правила поиска, правила заморозки, множество поддерживаемых функций с памятью, процессами, регистарми, работы с отладчиком и дизассемблером. Область примирения очень обширная. Чтобы сузить эту область применения, наверно, стоит размышлять о том как можно с помощью C-скрипта реализовать тот или иной чит-код. Прежде всего С-кодом можно работать со структурами и ссылками на эти или другие структуры. Поиск в этих структурах данных и составление логических действий. Во всяком случае я полагаю, что область эта ещё не очень изучена нами. Обычно, нам хватает ассемблерного отладочного кода как инъекции....
  18. Z- координату найти проще всего если подниматься / опускаться в игровом мире на каких-то возвышениях, лестницах и т.п. Обычно координата имеет 4-байта с точкой, а может быть и 8 байт с точкой. Ищу всегда через MHS в блоке памяти в котором находится здоровье героя или структура героя. Инъекцию отладочного кода можно сделать в любую часто срабатываемую инструкцию. Если тебя очень беспокоит производительность, то надо выбирать варианты инъекции и тестировать, тестировать... Я предполагаю, что вариант который я предложил будет лучшим. Инъекция сохраняющая или восстанавливающая координаты происходит, тогда когда ты нажимаешь на горячую клавишу и эта же инъекция сама исправляет инструкцию "прыга" на инструкцию "оригинальную". Вот и всё, производительность теряться не будет.
  19. Я думаю ты сам сможешь ответить на все вопросы Я бы сделал так: 1. Находим адрес координат Z любым удобным способом. 2. Находим инструкцию работающую с этой Z координатой. Если инструкция1 работает со всеми координатами, то это на руку. Если нет, то координата Z стоит, обычно, рядом с X, Y и не составит особого труда написать скрипт. 3. Создаём такой скрипт1 - инъекция "Сохранение координат в зарегистрированную метку1 из инструкции1 с последующей отменой этой иньекции". Только не уничтожай метку1. 5. Создаём скрипт2 - иньекция "Восстановление координат из метки1 с последующей отменой инъекции". Только не уничтожай метку1. 6. На первый и второй скрипты вешаем хот-кеи. Если сделать так как я написал, то это избавит от лишних флагов
  20. Решение 3-го задания (которое объединяет решения первого и второго) имеет следующий вид. Скрипт1 - Главный
  21. В разделе наши разработки появился новый форум - Трейнми.
  22. Оказывается я дал решение скрипта не для того скомпилированного трейнми. Теперь презалил - ссылка в первом посте. Так что можете скачать и проверить мой скрипт первого решения. Второе решение оставляю за вами. Следующее задание - задание3 На примере двух предыдущих решений делаем общий чит-код создающий 1000 объектов, которые не будут уменьшаться. С учётом того, что объекты могут уменьшаться от внешнего влияния (которого в трейнми нет). Это условие характерно, когда в играх начинается новый уровень и объекты создаются с новым уровнем в меньшем количестве. Подсказки: 1) Внедрить прыг в код трейнми создания объектов на функцию1(1000) 2) Внедрить прыг в код трейнми уменьшения объектов на функцию1(1000) Функция1 (int a) //количество гранат { 1) a1= Подсчитать количество гранат 2) a2= a-a1; // Вычислить недостатающее количество 3) функция2(a2); // Создать недостающее кол-во гранат } функция2 (int a){} Попробуйте сделать это решение как через автоассемблер так и через C-script. Если приводить аналогии с игрой, то нужно учитывать, что инструкций создания и уменьшения объектов может быть множество. Надо будет внедрять либо в одну из них, либо в некоторые, либо во все, либо создавать поток в игре, которые через интервал времени будет проверять кол-во объектов и создавать недостающие.
  23. В геймхакинге применение событий определить можно - это очень большее "поле" для раздумий. Например в терйнере можно перехватывать событие закрытия окна процесса игры и предпринять в это случае определённые действия. Особое внимание можно уделить событиям мышки и нажатиям клавиш на клавиатуре, т.к. это связано с действиями в игре, а если более конкретно связано с данными по адресам в игре. Перехватывая и инициализируя события мышки и клавиатуры можно что-то интересное сделать. Например, если по адресу такому-то такое-то значение, а событие от клавиатуры(мышки) такое то запустить такой-то чит. Короче говоря можно многое что придумать + даже придумать применении в инструментах по гемхакингу... Короче говоря нужно перелопатить справки по событиям и определить их полезность в геймхакинге, а пока просто информация про события. Тема События в Дельфи. Ниже будут темы которые на мой взгляд неплохо знать, т.е знать о их существовании, а потом лазить по справкам если что. События вещь очень полезная. Представьте что у вас есть доступ ко всей очереди событий происходящий в Windows? Это и нажатие кнопок в каких-то окнах, открытие окон/закрытие и т.п. + даже свои события можно создавать (там ограниченное количество). Ваша программа может обрабатывать эти события вплоть, выбрасывать из очереди сообщений и добавлении свои события... Автор: Briculski Тема: Добавление события на примере onmouseleave
  24. Основы работы с Win32API (прим. от меня применительно к Дельфи) Автор: Акулов Николай Введение Цель этого обзора - помочь человеку перейти от использования средств Delphi к функциям Win API. Предполагается, что читатель уже неплохо владеет Delphi... Продолжение ниже:
  25. 1. Создание системной кнопки "Знак вопроса" ограничивается не Дельфи, а ОС. Эту стандартную кнопку можно создать только в диалоге при отсутствии кнопок "минимизации" и "максимизации". Есть решение в создании этой кнопки не как стандартного элемента ОС через отрисовку этой кнопки. В этом случае я даже думаю, удобнее рисовать полностью собственное меню. "Изобретать велосипед" ненужно - в интернете можно найти различные способы создания "своего" системного меню. 2. В фразе "этот блокнот открылся" ты, наверно, подразумеваешь открытие текста в твоей программе. Если это так, то на форму размести компонент TMemo или TRichEdit, например, с TopenDialog (пример с Tmemo здесь). Цитата из этого примера: Если имеем дело с TrichEdit, то с ним аналогичная ситуация. Для того чтобы открыть единственный файл, то вместо OpenDialog1.FileName нужно задать его имя. Если файла не оказалось об этом будет быть оповещение. Либо будет исключение, которое можно перехватить try/exept (смотри справку) и вызвать сообщение raise exeption.create('Файла нет').
×
×
  • Создать...

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

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