Показаны сообщения с ярлыком Игры. Показать все сообщения
Показаны сообщения с ярлыком Игры. Показать все сообщения

20150808

Про конкурс от gamehacklab, пожертвования и будущие посты.

Ребята, всем привет!

Я кенг, дела у меня хорошо, спасибо. Почему я так долго ничего не писал и ничего не выкладывал? Да, меня тоже это бесит, прекратите кидаться, пожалуйста. Во-первых, наступило лето, но меня, равно как и вас, это не должно особенно волновать. Во-вторых, у меня сменилось место работы. Поэтому я последние 2-3 месяца на работе сижу просто безвылазно - испытательный срок, то да се. Но в этом есть и хорошая сторона - теперь у меня будет больше свободного времени, как минимум по выходным, а выходных как раз хватает на написание поста и\или запись видео.

Сейчас на моем youtube-канале самый актуальный и живой раздел - это "Перезагрузка". Суть в том, что я перезаписываю все старые видео с нуля, с хорошим качеством звука и видео, другими играми и немного на новый лад - то есть немного по-другому объясняю.

На данный момент перезагрузка обучает базовым вещам - поиску и отсеву значений и работе с указателями. Теперь, что достаточно логично, можно переходить к Ассемблеру и работе с отладчиком, а параллельно можно начинать писать свой движок для трейнеров.

Я решил начать со второго пункта, очень аккуратно и потихоньку объяснив язык ассемблера как таковой, как это все работает и что вообще происходит, так что видео будут выходить сначала с объяснениями - мы будем сидеть и изучать сам ассемблер в отладчике на абстрактных примерах, постепенно создавая трейнерный движок, а параллельно я буду показывать некоторые вещи в Cheat Engine - про Code Injection, Code Shifting, Code Relocation, Staple Intersection и тому подобные вещи.

Да, вы все правильно прочитали - теперь в блоге будет ТОЛЬКО ассемблер. Почему? Потому что я его люблю - раз. Потому что с ним в любом случае придется работать хотя бы во время взлома игры - два. Потому что он не такой пугающе сложный, как может поначалу показаться - три. И четыре - потому что его более чем достаточно для написания движка, зато можно будет неплохо выпендриться перед друзьями.

Вы могли заметить в верхней части блога штучку с подписью "помоги кенгу!". Для осмелившихся на ней кликнуть откроется возможность просто так взять и выдать мне любое количество денег на ваше усмотрение. Не то, чтобы они были мне жизненно необходимы и тем более я не собираюсь жить за счет блога, но это будет приятная плюшка, на которую можно будет купить игры или какие-то программы. Текущая цель - Bandicam, который стоит 39 сатанинских долларов. Плюс это в любом случае будет очень сильно меня мотивировать, потому что альтруистичный энтузиазм, на котором уже пять лет держится вся затея, не резиновый. И мне совершенно не хочется бросать это дело.

Больше скажу - мне хочется развивать его дальше, как минимум до уровня мировой сцены. Следовательно, чем больше будет читателей\зрителей и участников, тем быстрее попрет дело, потому что коллективный разум - всегда сильнее. Поэтому я горячо прошу всех читателей блога и зрителей канала на youtube рассказывать об этом в социальных сетях - пусть сарафанное радио работает.

Кстати, возможно я уже говорил, но на форуме gamehacklab несколько месяцев назад официально открылся раздел по взлому многопользовательских игр. И уже даже есть свои наработки, да-да!

А что за конкурс? Конкурс, к сожалению, уже прошедший, но я все равно хочу о нем написать. Берем игру, берем сроки в 2-3-4 дня и затем участники конкурса делают как можно больше опций для игры - бессмертие, бесконечные патроны или что-то еще, быстрое перемещение, возможность летать и так далее. А дальше разыгрывается призовой фонд в виде репутации на форуме, уважухи и разнообразных скидок и игр в Steam. Интересно? Добро пожаловать на форум! Уверен, конкурс этот - не единственный.

Еще совсем недавно открылась страничка Вконтакте, посвященная сайту gamehacklab.ru. Там наш админ выкладывает свою собственную серию обучающих видео, причем он любит C++. Ознакомиться будет все равно полезно, даже если вы все это уже знаете.

Вот она - [ссылочка] на официальную страницу ВК.

На этом - пока все. Думаю, что запишу хотя бы видео-введение по программированию. Критика и пожелания - в комментарии. :)

20150309

Можно ли при помощи Cheat Engine взломать сетевую игру?

...задал мне вопрос один из зрителей на youtube. Попробую ответить.

Во-первых, давайте немного разберемся, как работают сетевые игры. Есть клиент (К), в который играет игрок, где рисуется вся красивая графика, леса, монстры бегают и рейды на боссах вайпаются. Есть сервер (С), к которому подключаются игроки, который управляет авторизацией, чатом, игровым миром и всем таким прочим. На нем графики обычно нет вообще, часто - даже консольного окна. Представим, что у нас два клиента и один сервер:

(К0)
  ^
  |---------(С)
  v
(К1)


К0 бежит себе по полю, видит монстра. Потому что сервер ему об этом сказал. К0 берет и убивает монстра. Говорит серверу - "Я убил монстра!". Сервер думает и отвечает - вот тебе 3 золотых. К0 видит на экране появившиеся 3 золотых и подбирает их. Говорит серверу - "Я подобрал золото! 3 штуки!!". Сервер открывает у себя блокнотик и записывает - у К0 золота стало на 3 больше. Далее К0 открывает инвентарь (спрашивая у сервера, "Что у меня в инвентаре?"), а сервер ему и отвечает - столько-то золотых, половинка дарницкого и литр кефира.

Бывают такие невообразимо глупые игры, где можно заморозить здоровье на стороне клиента и он просто будет сообщать серверу, что здоровье полное. То есть на стороне сервера не будет никаких проверок на это. Бывает, например, World of Tanks, к которому толком нет читов, потому что весь клиент игры - это большой слайд-проектор, которому сервер выдает картинки, а всю информацию считает у себя. Чуть что не сошлось - клиента выкидывает из игры. Бывает так, что на одни показатели в игре косвенно влияют другие. Скажем, как это было у моих друзей в LineAge - если сильно нагрузить персонажа багажом, у него не будет со временем восстанавливаться здоровье. Если после этого умереть и в момент возрождения разорвать соединение клиента с сервером, то игрок возрождается с 0 здоровья и становится бессмертным. Баг был быстро исправлен, но было весело. (:

Вторая сторона монеты, помимо сканирования адресов и ковыряния в отладчике - разбор сетевых данных, которыми обменивается сервер и клиент. Те самые цитаты от клиента серверу и обратно, что я приводил выше. Можно, скажем, взять утилиту, которая позволяет увидеть и прочитать сетевые пакеты, передаваемые между клиентом и сервером (такие утилиты называются снифферами, от английского to sniff - нюхать), и увидеть там (например):

(К0): Я нашел 3 золота!
(С): Положил тебе в инвентарь 3 золота.

Берем пакет, отправляемый клиентом, исправляем в нем цифру 3 на 10000, а затем отправляем опять. Смотрим, что ответит сервер:

(С): Положил тебе в инвентарь 10000 золота.

Вуаля. Взломали? Вполне. Но это - самый простой случай, обычно все куда сложнее.

20140119

D3D: Трагически наступившее "скоро".

Всем привет!

У меня нашлось время и я решил ещё немного поковыряться с D3D и прочими неприличными словами. (:

Остановились мы на том, что написали перехватчик методов D3D, ответственных за рисование, и смогли нарисовать на экране чужого приложения квадратик. Попутно мы написали свой собственный инжектор DLL-ок.

Это всё, конечно, круто, но не очень сильно впечатляет и далековато от наших амбиций. Итак, встречаем:


Вот эта самая функция нам и понадобится. Я, честно сказать, фигово разбираюсь в 3д-графике и рисовании в целом, так что гуру этой области прошу меня сильно не пинать - объяснять буду, как понял сам.

Как мы помним, читали или где-нибудь слышали, нельзя просто так взять и нарисовать оружие, машину или нечто такое. Видеокарточки туповаты и рисовать умеют только примитивы - точки, линии, треугольники. Захотели квадрат - сложили два треугольника вместе. Эти штуки ещё иногда зовут полигонами, ага. Дык вот эта самая функция используется для отрисовки примитивов, если очень кратко. Нас там будет интересовать параметр BaseVertexIndex, в суть которого я тоже вник крайне смутно и пытаться объяснить это кому-то пока что не стану - давайте просто звать эту штуку индексом. Ещё пара крутых штук ждёт нас чуть дальше, когда я код приведу. Так как у меня возникли некоторые трудности с перехватом этой функции, то перехватывать мы её будем не вручную, а при помощи библиотечки detours от microsoft (все необходимые файлы идут в комплекте с исходниками), так что код слегка видоизменился. Вот, например:



Тут сразу бросаются в глаза последние три строчки - это, собственно, и есть перехват. Делает библиотека всё то же самое - мы скармливаем ей адрес найденной фунции, которую нужно перехватить, в её начало дописывается переход (JMP 00112233) на перехваченную функцию, а перехваченная выставляет всё, как было, отрабатывает и возвращает хук на место. Едем дальше:



Это - перехваченная DrawIndexedPrimitive, при помощи которой игра будет пытаться рисовать всё то, что мы с вами видим на экране. Я не буду вдаваться глубоко в подробности, нам это нужно один раз, так что приведу примерную суть:

1. Каждый вызов у нас есть некие данные (Stride и BaseVertexIndex) , которые нам надо узнать и запомнить для использования уже в чите. Они характеризуют тот или иной объект на экране.
2. Каждый раз, когда игра пытается что-нибудь нарисовать, мы заносим структуру этих данных в массив.
3. В логгере есть кнопки, позволяющие управлять процессом - менять значения Stride и BaseVertexIndex, выбранные на данный момент будут подсвечиваться зелёным цветом.
4. Задача - натыкать такое значение, чтобы нужный нам объект(-ты) подсветился(-лись) зелёным. Запомнить цифры.

Скомпилируется всё это дело в DLL, которую надо будет заинжектить в процесс игры (я не парюсь и продолжаю делать это через Cheat Engine). Поддерживаются любые игры, которые рисуют при помощи D3D9.

ВНИМАНИЕ тем, кто запускает игры из Steam (как я, например): В стиме в свойствах игры надо отрубить steam overlay ui, так как он работает точно так же - иначе получим вылет.

ВНИМАНИЕ тем, кто до сих пор не использует MS Visual Studio 2013 (как я, например): Если вам лень ставить 13-ю студию, то просто слейте все исходники и создайте новый проект (DLL). Ему понадобится в свойствах указать путь до include и lib для MS DirectX SDK (полгига которого можно спокойно скачать в гугле), если заругается на отсутствие detours.lib - она лежт в папке проекта.

Результат:


А вот и [ссылка] на все исходники. На днях будем учить этих инопланетных парней просвечивать сквозь стены. (:

20111028

О координатах.

Вообще говоря, тема работы с координатами (как по горизонтальной оси - X\Y, так и по вертикальной - Z) довольно обширная и там можно много чего придумать. Самые распостранённые техники - побыстрее прыгать \ повыше прыгать (для врагов, соответственно, наоборот, ибо нефиг), да телепорт с места на место по уровню. Вот вариантов исполнения - их много, очень много. Подробнее расскажу в видео - там показан только один из способов, самый простой.

Периодически я ещё буду возвращаться к этой теме - показывать другие техники, может, какие-то фишки помимо телепорта и скорости (ограничение - только фантазия), возможно, что-то окажется в ваших заявках на взлом любимых игр. :)

В будущем планирую показать пару других инструментов для взлома. В частности, более мощный отладчик и более мощный дизассемблер. Кому-то может не нравиться отладчик в Cheat Engine, кому-то могут понадобиться более крутые возможности. Словом, покажу, а там уж сами решите - надо оно вам, или нет. Я более продвинутые инструменты использую, когда не могу разобраться в коде игры сразу, т.е. в запущенных случаях, которые случаются довольно редко, как видно из предыдущих видеоуроков.

20111027

Опрос-опросничек: Ломаем любимые игры читателей!

Ребята, я тут вот что подумал!

Пока я в спешном порядке доделываю видео по супер-прыжкам и телепорту, давайте устроим небольшой опрос. Мне уже несколько раз писали (и тут, и на youtube), что ломали такую-то игру, пытались сделать то-то и это-то, но ничего не вышло. Предлагаю в комментариях к этому посту писать сообщения следующего вида:

1. Ваше имя или никнейм (чтобы можно было как-то обратиться).
2. Название игры. Лучше - на английском языке.
3. Опция, которую пытались сделать. Например - "Бессмертие, бесконечные очки\деньги\жизни, убийство с одного удара" и т.д.

Соберём пачечку сообщений и я буду периодически записывать небольшие уроки конкретно по этим "заявкам", с максимально подробными объяснениями. И человеку будет приятно и материал заодно повторим, поймём и усвоим ещё лучше. Ну как? В общем, жду. :)

20110924

Первая часть седьмого видеоурока, или знакомимся со структурами.

Итак!

Тянуть время дальше стало катастрофически лень, так что я быстренько сел и записал вводное видео. Простите, что так поздно, дела-дела. :)

В этом видео я постарался объяснить значение такой офигенно полезной штуки, как структура.
Это, если не обращаться к википедии и заумным книжкам, просто способ организовать какую-то информацию. Относительно игр нам надо просто понимать, что своя структура есть у каждого игрового объекта, для однотипных объектов она чаще всего одинаковая (структура "монстр" - у каждого монстра, "игрок" - у каждого игрока, "пуля" - у каждой пули и так далее), а при взломе помним самое главное - в памяти все значения конкретной структуры чаще всего хранятся рядышком, бывает что просто подряд. :D

Нам это может сильно помочь при поиске каких-то величин, которые на экране не отображаются и которые найти обычными способами довольно проблематично. Например, ломаем мы гоночки. В какой-то момент нам ВНЕЗАПНО очень захотелось найти массу нашей машины. Да-да, раз в игре есть хоть какая-то физика (а в современных играх для этого дела целые физические движки созданы) - то есть и масса и все основные законы. Все ведь помнят второй закон Ньютона из школьного курса физики? Если нет, то поясню: чем меньше будет масса нашей машины, тем быстрее она будет ускоряться. Так что на старте с машиной весом в 5 грамм мы всех уделаем. ^^

Проблема в том, что массу машины нигде на экране не написали (идиоты!), и вот тут-то мы и вспоминаем про то, что у каждой машины наверняка есть структура, а в этой структуре наверняка хранится и масса тоже. :)

Такие вот пироги. Смотрим, вникаем, запоминаем: [ссылка].


20110923

Следующие видеоуроки

Помните, что я указал в последнем видеоуроке? "Будем учиться быстро бегать и высоко прыгать". Это значит, что мы будем искать координаты игрока и работать с ними.

Проблема заключается в том, что просто так эти самые координаты не найдёшь, поэтому я разобью эту тему на несколько видео, в которых сначала пролью свет на несколько очень важных (и полезных!) штуковин, вместе научимся искать координаты и поломаем при этом пару-тройку игр. :)

Частей планируется 2-3, первая - про необходимые понятия и теорию, вторая - про "быстро бегать", ну а третья, очевидно, - про "высоко прыгать". Как пройдём это всё и материал более-менее усвоится - покажу, как делается "Rapid fire hack" - это когда мы из какого-то медленно стреляющего оружия будем стрелять аки из шестиствольного пулемёта - в общем, быстро, очень быстро!

На этом основной курс "как научиться ломать игры" будет в общем-то окончен, так что дальше буду выкладывать какие-то конкретные фичи (как найти то или иное труднодоступное для обычного поиска значение, более простой метод поиска указателей и т.п.), может быть коснусь темы снятия игровых защит - да, бывает и так, в современных играх - почти повсеместно.

Параллельно приступим к написанию трейнеров. Эта тема довольно объёмная и абстрактная - зависит она в основном от умения программировать. Всё ещё думаю, как к ней грамотно подойти, но какой-никакой план уже есть. :)

20110910

В дополнение к предыдущей записи - тренироваться будем вот на этой вот игре: [Turok 2: Seeds of Evil]. Одна из любимейших игр детства была. Эх, ностальгия! :)

PS: Очень надеюсь, что у всех желающих она нормально запустится - у меня, на Win7 x32, запустилась на ура, хотя игра - аж 1998 (sic!) года выпуска.

Неожиданно, второй урок.

Привет, ребята!

Жаркое лето кончилось, наступила школа осень, а это значит что пора поучиться ещё чему-нибудь, например - взлому игр! ^^ На этот раз мы познакомимся с программой [Cheat Engine], её интерфейсом, основными возможностями, а так же попробуем побороть идущую с ней в комплекте программу-обучалку по взлому, сегодняшняя тема - поиск неизвестного значения. Что это значит? А вот что:

Все видели в играх не конкретные значения здоровья (100, 80, 47), а полоски? Такая дико раздражающая штука, которая, будучи не заполненной, всегда жутко нервирует? Кто же не мечтает о том, чтобы она вообще не убавлялась? Бесконечное здоровье, энергия в плазменной винтовке, да что угодно! И это ведь легко! Смотрим, познаём, пробуем. В следующем уроке - издевательства над настоящей игрой! :)

[А вот и ссылка на урок]



20110629

Завершение опроса на тему тематики блога.

 Спасибо всем, кто яростно голосовал и дискутировал в комментариях на тему дальнейшей тематики! :)
 Шучу-шучу. Всё-таки, блог будет вестись по обучению гейм-хаку, то есть взлому игр, как и планировалось изначально - больно уж долго я собирал информацию на эту тему по всему интернету. Хочется как-то всё структурировать, организовать и привести в читабельный, доступный вид.
 Думаю, формат записей немного изменится - постараюсь писать полноценные статьи - с теорией, пояснениями, скриншотами и, конечно, практикой (разбором примеров на конкретных играх). В конце каждой статьи - видеозапись этой самой практики, чтобы было нагляднее.
 Как-то вот так. Будет от всего этого польза или нет - посмотрим. Со временем.