20111121

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

Ребята, про что следующий урок записать?

Поломаем стратегии? Скажем, мгновенную постройку сделаем?

Или RPG (работа с инвентарём)?

Или может, запишем урок по крутому дизассемблеру (и отладчику) - Hex-Rays IDA Pro?

 

Предложения, в том числе и свои, - в комментарии. :)

20111110

RSS

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

20111109

Материалы по Ассемблеру.

На хабрахабре обнаружился замечательный [пост], содержащий тучу информации для помощи в изучении этого не менее замечательного языка. Берём на вооружение! Что-то я уже в блоге упоминал, что-то - нет.

Дополнительная информация.

В [предыдущем] видеоуроке (если вы, конечно, уже успели его посмотреть и ужаснуться), взлом был не таким, как в остальных уроках. В чём он отличался? А в том, что Cheat Engine мы не использовали и никакие адреса, по сути, не искали. Использовали мы замечательный отладчик под названием [OllyDbg], абсолютно бесплатный для некоммерческого использования (его даже можно скачать по [этой ссылке]) и который мы будем использовать дальше. Не всё время (с Cheat Engine бы до конца разобраться, да?), но периодически будем.

В предыдущем уроке мы ломали игру под названием Call of Duty, построенную на движке Quake 3 Arena. Это - замечательный факт, потому что к движку этого самого третьего квейка прилагается исходный код в виде SDK - Software Developer's Kit, он же - Инструментарий Разработчика.

Мы тут же лезем на [FTP] ID Software и качаем SDK последней версии. Написан он на С++, но мы, не зная этого языка, используем логику и английский язык - нам нужна функция стрельбы, то есть всё, где есть слова "weapon" (оружие) и "fire" (стрельба). Находим нужный файл, открываем простым текстовым редактором и ищем в нём одноимённую функцию.

В этой функции (опять же, практически на чистом английском), мы узнаём, что при её выполнении играется анимация выстрела, вспышка и звук, а вот про отдачу там ни слова нет.

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

В отладчике мы открываем процесс нашей игры и ищем в нём все текстовые строчки, среди которых нам попадается та самая функция, к вызову которой мы и переходим. А сразу же после неё мы обнаруживаем шибко подозрительный условный переход. Меняем его на обратный - и voila - отдачи в игре нет.

 

Можно было бы и пойти другим путём, используя только Cheat Engine:

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

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

Видеоурок.

Записал [видео] на тему no recoil - отдачи при стрельбе. Смотрим, задаём вопросы - урок не совсем обычный. Чуть позже напишу более подробный пост.

20111107

Трейнеры.

Помните, ребята, когда-то давно, ещё в предыдущей версии блога, я устраивал опрос на тему "Какой же язык программирования выбрать для написания трейнеров?". Там были варианты вроде Visual Basic, C++, C# и так далее.

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

 

Компьютер сам по себе умеет обращаться только с ноликами и единичками - двоичным кодом, используя для этого двоичную систему счисления (у нас же, людей, она десятичная, арабская, а в Cheat Engine мы используем ещё и шестнадцатиричную). Когда трава была зеленее, а компьютеры занимали половинку спортивного зала программировали их никак иначе, чем переключением туда-сюда тумблеров (из 0 в 1 и наоборот). Потом ОКАЗАЛОСЬ, что это не очень удобно, когда программы стали посложнее и придумали язык ассемблера - максимально приближённый к переключению тумблеров с точки зрения компьютера и при этом хоть как-нибудь, но понятный людям. Большинство команд - это мнемонические сокращения, как то:

 

mov - move (сдвиг)

jmp - jump (прыжок)

ret - return (возврат)

 

и так далее. Это, собственно, самый низкий уровень языка. Простое правило - чем ниже уровень - тем больше возможностей. Со временем начали упрощать и ассемблер, так появились языки более высокого уровня - FORTRAN, C, Pascal и их современники. Код на ассемблере выглядит довольно специфично и сам процесс довольно сильно отличается от такового на языках высокого уровня, а раз мы с самого начала взялись вникать в ассембер (пусть и немного), то продолжать будем на нём же. В крайнем случае, когда читатель поймёт, что код трейнера довольно простенький - он сможет выбрать себе язык по вкусу и написать трейнер на нём.

Новые видеоуроки!

Уже совсем скоро. Будем ломать стратегии. Пару новых фишек тоже узнаем.

20111103

Подписки на блог.

RSS пока не перенастроен, но я есть и в твиттере, так что можете фолловить. Туда автоматически скидываются оповещения о добавлении новых уроков на YouTube, а так же комментариев к ним. Я тоже пишу, но редко.

Телепорт!

Ссылочка. Сейчас убегаю на работу, так что подробности напишу позже. Смотрим, вникаем, задаём вопросы, если что-то не ясно.

Ещё раз выражаю благодарность Xipho с форума Gamehacklab[RU], т.к. решение проблемы, возникшей при записи урока, нашлось именно благодаря его подсказке. Иначе бы мне пришлось дальше перелопачивать кучу иностранных ресурсов в поисках ответа, а это затянуло бы выход урока.

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

Следующие видеоуроки посвящу опциям rapid fire (быстрая стрельба) и no recoil (без отдачи), затем поломаем немного стратегии и RPG (мгновенная постройка зданий, работа с инвентарём и т.д.), после чего, вооружённые навыками, потихоньку начнём трейнеры писать.

Трейнеры будем писать сразу же на ассемблеры, причина довольно простая:

Ассемблер - низкоуровневый язык (чем ниже уровень - тем больше возможностей), выглядит он довольно странно и сам по себе сильно отличается от ЯВУ - языков высокого уровня, таких как C++, C#, Delphi или Visual Basic, на которых программирует подавляющее большинство вменяемых людей. :)

Код на языке ассемблера достаточно долго писать (команды маленькие и короткие, но их много - язык очень подробный), но этот код очень быстро выполняется и программы получаются крайне компактными, а учитывая то, что алгоритм работы трейнера по сути всегда один и тот же (и я вам его покажу и подробно объясню), то мы напишем его один раз и будем постепенно дорабатывать, не забивая голову языками высокого уровня. Кто захочет - тот освоит и их, тут разницы принципиальной нет. В будущем нам ЯВУ тоже наверняка понадобятся. ;)

20111101

123

Повседневное.

Пока я сижу на работе, а дома качаю\устанавливаю\ломаю игры по заявкам читателей, параллельно занимаясь написанием статей и записью видеоуроков, стало интересно:

Ребята! И те, кто читает мой блог, и те, кто случайно набрёл на эту страничку в поисках трейнера или читов к игре N, а блог их заинтересовал. Как у вас там? Применяете полученные знания? Всё получается? Ну не верится мне, что ни у кого не возникает ни единого вопроса. Задавайте их в комментах! Тут, на ютубе, присылайте по электропочте, в конце концов.

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

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