- PVSM.RU - https://www.pvsm.ru -
[1]«Война… Война никогда не меняется». Думаю, многим знакома эта фраза. Каждый пользователь ПК хоть раз запускал компьютерную игру. Много компьютерного железа пострадало в баталиях от горячей руки геймера, потерявшего последнюю «жизнь». Иногда появляется мысль: а не поискать ли «читы» и не накрутить ли себе жизней или ресурсов?.. Так начинается путь читера.
В этой статье я на двух примерах покажу, как с помощью подручных средств можно нечестно играть в игры на HTML5.
Ядро любой HTML5-игры — JavaScript. Единственной, на данный момент, защитой этого ядра является обфускация кода. Согласитесь, увидеть «простыню» в 10 000 строк обфусцированного кода без new-line — это поначалу страшно. Но если немного покопать — логика и архитектура приложения как на ладони. Главное — определить цель читерства (скорость, ресурсы, GodMode). В качестве инструмента используем Chrome и его Web Inspector. Во вкладке Sources можно «на горячую» изменять исполняемый код.
Начну с простого примера: http://www.google.com/doodles/slalom-canoe-2012 [2]. Сравнительно свежий олимпийский Doodle.

Основная цель игры — пройти трассу как можно быстрее. В голову сразу приходят несколько уловок:
Чаще всего самая хорошая мысль — первая. На ней и остановимся. Открываем Chrome и его Web Inspector (основы работы — в замечательной статье [3] ).
Нас интересует JavaScript-код игры.

Логично предположить, что это slalom_canoe12-2.js [4].
Исходный код… немного страшный, правда? Можно автоматом расставить new-line и отформатировать по синтаксису JavaScript. Читаемость значительно улучшиться и анализировать станет легче. Также можно обложить весь код брейкпоинтами и попытаться восстановить алгоритмы. Но не будем стрелять из С-400 по квадрокоптеру…
Начинаем рассуждать. По нажатию клавиши или при прохождении через ворота лодка ускоряется. Следоватеньно, где-то есть параметр «скорость» и он должен (скорее всего) инкрементироваться. Ищем по коду все операторы «+=» (благо объем и сложность кода позволяют), их находится всего 12. В принципе можно включить метод «научного тыка» и попробовать изменить все 12 по очереди. А можно и подумать.
Остановимся и проверим. Обновляем страницу (на всякий случай). Открываем Sources slalom_canoe12-2.js. Находим R+=Qc*b. Предположим, что b — коэффициент ускорения. И заменим его на 500 (не забываем нажать Ctrl + S).

Жмем Play в игре и…

Бинго! Наш чудо-катер устремляется к финишу. Теперь можно похвастаться перед друзьями скоростью своих пальцев :)
Отмечу, что приведенный пример — это случай, в котором удалось обойтись малой кровью. И не потребовало глубоких знаний JavaScript, архитектуры, отладки. Только арифметика.
Перейдем к другому примеру.
В этом примере потребуется знать, что такое if и что такое =, а также базовое знание английского языка. Не так давно на Хабре была опубликована статья о Spelunky [5]. Игра, безусловно, заслуживает внимания. Старый добрый хардкор! Но есть в ней несколько «косяков» с управлением и коллизиями, которые мешают пройти игру. Давайте попробуем нарисовать себе жизней, бомб, веревок и прочей радости.

Открываем сайт с игрой [6]. В инспекторе находим index.js, это и есть код игры [7]. Первая мысль: «Какой кошмар».
Однако стоп! Встречаются и понятные слова. Например Bomb, Rope. Это уже интересно. Значит можно попробовать найти кусок кода, который обрабатывает получение предмета. А там где-то должно увеличивать количество оного…
Ищем слово Bomb. Результатов немало — 79. Попробуем Bomb Bag. И вот оно, первым же результатом!
if((qzb(hzb.lhc).hjc==«Bomb Bag»)){
{global.loc+=3;hzb.unc=ilc(qzb(hzb.lhc).exb,(qzb(hzb.lhc).fxb-14),195);qzb(hzb.unc).khc=603;{var moc=uzb(hzb.lhc);for(var noc in moc){var ooc=moc[noc];{nlc(ooc);}}};gg(hzb,izb,global.ync);hzb.lhc=0;global.bnc=«YOU GOT 3 MORE BOMBS!»
Тут мы видим, что что-то сравнивается с Bomb Bag и если это оно, то делаем global.loc+=3 и куда-то пишется «YOU GOT 3 MORE BOMBS!» соответственно в global.loc у нас лежит количество бомб. Анализируем код, расположенный рядом, и находим переменные, в которых хранятся веревки и прочие радости. Вот краткий список:
Теперь пробуем изменить значения в самой игре. В инспекторе во вкладке Sources жмем Pause Script Execution (F8).

Открываем Console и вводим следующее.

Отпускаем паузу — и наслаждаемся полученным результатом! Не буду описывать, как нарисовать себе жизней. Пусть читатель сам попробует разобраться с этой переменной.
Вывод: умный в гору не пойдет. Изменение JavaScript-кода — это легче легкого. Обфускация — это не смертельно. Старайтесь мыслить логически. И еще: любое читерство постепенно убивает интерес к игре (во всяком случае у меня), аккуратней с этим.
Данная статья носит информационный характер.
Автор: ptsecurity
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/html5/13940
Ссылки в тексте:
[1] Image: http://habrahabr.ru/company/pt/blog/150373/
[2] http://www.google.com/doodles/slalom-canoe-2012: http://www.google.com/doodles/slalom-canoe-2012
[3] замечательной статье: http://habrahabr.ru/post/143767/
[4] slalom_canoe12-2.js: http://www.google.com/logos/2012/slalom_canoe12-2.js
[5] статья о Spelunky: http://habrahabr.ru/post/148822/
[6] сайт с игрой: http://tinysubversions.com/game/spelunky/
[7] код игры: http://tinysubversions.com/game/spelunky/html5game/index.js
Нажмите здесь для печати.