Как взломать html игру
В прошлой статье о безопасности приложений ВКонтакте были рассмотрены основные методы взлома онлайн приложений. Сейчас на vk.com все в порядке, уровень безопасности высок, как где бы то ни было!
Этого нельзя сказать о сторонних ресурсах. На большинстве сайтов с онлайн играми с легкостью применяется техника, описанная в предыдущей статье. Более или менее приличные игры мне попались на SmallGames.ws. Подобные игры (игры Я ищу) представляют собой квесты на отыскивание каких-либо скрытых комнат или предметов. Взломать их не удалось, что говорит о высоком качестве разработанных приложений. К тому же они довольно занимательные.
Мало про какие ресурсы такое можно сказать. В основном попадаются сайты низкого качества, безопасность которых оставляет желать лучшего. Обычно я оставляю на таких сайтах заметку от имени администратора о брешах системы защиты. Кто-то прислушивается, кто-то нет. Тут дело каждого.
Плохо только то, что с развитием HTML5 также появляются приложения не устойчивые к взлому. А HTML5, к слову, предоставляет доступ к локальному хранилищу (альтернатива cookie), в котором можно найти много полезной информации.
Также в таких играх можно показывать всплывающие напоминания, которые можно стилизовать под тот же vk.com и «напомнить» пользователю о новом друге или сообщении. Так как сообщение в углу браузера выглядит убедительным, толпы наивных пользователей переходят на различные мошеннические сайты, теряя при этом свои кровные.
На повышение компьютерной грамотности пользователей надеяться не стоит, поэтому стоит лучше писать более защищенные приложения. Этим я и займусь. Вскоре (может через недельку) выходит цикл статей по защите HTML5 приложений и методах различных атак на них. Надеюсь разработчикам будет полезно.
Возможности программы ArtMoney
Основное предназначение Артмани для взлома игр на ПК и редактирования отдельных параметров в играх. Принцип работы программного обеспечения заключается в постоянном сканировании оперативной памяти и файлов игры с целью выявления определенных категорий: опыт, золото, боеприпасов и тому подобное. ПО умеет отсортировывать их из огромного массива данных и обеспечивает возможность их редактирования.
Взломать игру с помощью Artmoney значительно удобнее и быстрее, нежели использовать другие методики. Поиск читов на золото, на опыт, на деньги или на бессмертие занимает слишком много времени. Нередко полученные данные не предназначены для вашей версии игры, да и розыск их сильно отвлекает от процесса. Описываемый гейм-редактор совместим со многими популярными играми, в их число входят:
- Ведьмак и Ведьмак 3;
- Дальнобойщики
- Диабло
- Зов Припяти;
- Корсары;
- Сталкер;
- Civilization 5;
- Cities: Skylines ;
- Dragon age inquisition;
- Euro truck simulator 2;
- Geopolitical simulator 3;
- GTA 5;
- This war of mine;
- Far cry 2;
- FIFA 9;
- Shogun 2.
Использование крякнутого Artmoney открывает перед героем широкие возможности, он всегда во всеоружии и с избытком жизненных сил встречает опасные ситуации. Возможность выходить победителем из любых передряг, такая способность дорогого стоит. Применение данного взломщика представляет заманчивые перспективы стать лучшим геймером.
Аналоги
Cheat Engine. Программа для увеличения количества денежных знаков, оружия, очков и многих других игровых параметров. В ней доступно применение специальных читов, которые помогают усовершенствовать дополнительные возможности в приложениях: видение через стены, ускорение ходьбы и др. Обладает встроенным генератором трейнеров и отладчиком игр.
CheMax Rus. Утилита с крупнейшей базой чит-кодов, секретов и паролей для различных компьютерных игр. Все нужные данные можно быстро найти в удобном каталоге.
Используйте легкое преимущество в место взлома игр:
Использовать легкое преимущество, очень многие используют данный метод, так как он безопасный, в чем он заключается?
Заключается он в изменении графики, обычно в онлайн игре графика и ФПС (кл-во кадров в секунду) имеют преимущество над теми игроками у которых все на максимуме и имеет даже средний фпс. Быстрее реакция стрельба или удар, лучше обзор если нет каких то отвлекающих визуальных эффектов (дым, огонь, дождь, пыль брызги и тд.)
Во многих онлайн играх ограниченный набор изменений графики в игре, но в большинстве случаев можно изменить некоторые параметры графики через конфигурационные файлы движка игры. Узнайте какой движок у вашей онлайн игры, погуглите конфиг файлы для изменении графики. Есть очень даже читерные конфигурации такие как например ускорение действий (speedhack) персонажа, или видеть сквозь какие то части текстур. Самое что интересное за такое не будут банить если только вы явно это не покажите кому либо и он пожалуется на вас разработчикам.
Возможности cheat engine
- Сделать вашего персонажа в любой игре бессметным и полностью неуязвимым.
- Добавить любое количество игровой валюты в зависимости от игры это могут быть кристаллы, монеты, золото, кредиты и другое.
- Если вы играете в стрелялку то с легкостью сделаете бесконечными патроны и вообще говоря любые снаряды.
- В игре танки онлайн-читы на кристаллы вы можете не использовать, а с помощью данной программы накрутить их любое количество.
- В различных приложения как, например, блокада онлайн вы сможете добавить себе все вещи и зачислить любое количество монет.
- Кто играет в известную игру аватария то в ней так же можно с помощью cheat engine добавить бесплатно любое количество монет как золотых, так и серебряных.
Как видите,возможности у программы просто огромные. Теперь перейдем ко второй части это к созданию собственных тренеров cheat engine.Вы сможете самостоятельно создавать с помощью специального конструктора свои программы и хвалиться ими перед друзьями и знакомыми.
Используйте очень удобный lua для создания таблицы cheat engine или чтобы собрать уже готовую к использованию программу.Очень мощный сканер памяти, который мгновенно внедриться в игровой процесс, мгновенно вытащит все нужные данные, например, на бесконечные кристаллы для изменения.
Помимо всего прочего, cheat engine имеет огромное количество сложных функций, с которыми сразу будет непросто разобраться и вот некоторые из них:
- Манипулятор Direct 3D.
- SpeedHack.
- Ассемблер.
- Генератор тренеров и многие другие.
Заключение статьи и вывод
Подведя итог скажу что лучшего и главное простейшего инструмента для изменения параметров в играх вам не найти. Вам представлены все версии cheat engine которые можете скачать на ? странице загрузки а так же используйте меню слева. Именно за качество выполняемых действий все так ценят бесплатную программу Cheat engine.
Как взломать игру на Андроид?
Большинство пользователей Андроид коротают своё время с удовольствием в разнообразных играх. Но заядлые геймеры иногда хотят опробовать новый и платный контент в приложении и на это не всегда хватает денег.
Платный софт в программах порой бывает настолько красивым и великолепным, что можно не удержаться и сорваться, приобрести его за бешеные деньги. А потом, попользовавшись им некоторое время, геймер осознает, что деньги были выброшены на ветер и теперь дорогостоящая программа уже не нужна.
Важно знать. Есть варианты различного взлома игр на телефоне Андроид без рут-прав: вам больше не придётся платить за что-либо или мучиться на каком-нибудь уровне несколько дней, чтобы пройти дальше.
Для того, чтобы осуществить данное действие, нужны специальные программы: без них у вас ничего не получится, тем более если вы хотите вскрыть утилиту без доступа «Root». Как раз в этой статье будет идти речь о программах для корректного взлома игр на смартфоне Андроид без рут-прав.
Существует два типа софта, которые помогут в вскрытии программного обеспечения и получении доступа к любой функции.
- Использование утилит для того, чтобы производить все внутриигровые покупки бесплатно. Самый простой и не требующий много времени вариант, который осуществляется при помощи обхода проверки подлинной лицензии от Play Market и при замене данных во время покупки чего-либо для геймплея.
- Другой способ позволяет менять количество различной валюты. Он более сложный, чем предыдущий из-за того, что вам придётся самому искать и заменять различные цифровые значения. Но после того, как вы уже приобретёте умение пользоваться такой системой, взлом игр на Андроид без рут-прав не вызовет никаких проблем.
Обратите внимание. Существуют специальные улучшенные ограничения, которые не позволяют осуществлять такие действия, потому что разработчики при создании своего контента получают за него деньги, а обход этой системы незаконен и называется пиратством (интернет-мошенничество).
Так как даже с помощью программ не всегда можно взломать игру на Андроид без рут-прав, в этой статье также будет указано, как получить Root-права и что они из себя представляют.
Стоит отметить, что обойти систему можно только для оффлайн-приложения и никак нельзя применить такое действие к играм, которые предусматривают онлайн-геймплей: например, «Clash of Clans». Не сработает это для сетевых программ потому, что они хранят данные на сервере, а взлом игр на Андроид без рут-прав предусматривает изменение параметров на вашем устройстве.
Итак, ниже будет представлен софт, который поможет вам со взломом без рут-доступа.
Идея 1. Подделываем запрос
Самая логичная идея, которая может прийти после описанного выше.
Для того, чтобы подделать запрос, нам нужен оригинал. Вариантов мониторинга трафика много, я выбрал самый простой для себя – пустить трафик через ноут и смотреть на все это с помощью WireShark.
Инструкции для превращения компьютера в точку доступа можно найти вот тут.
Чтобы было меньше лишнего «шума» в логах, закрываем все приложения и отключаем синхронизацию.
Во время загрузки игра подгружает информацию об акциях, партнерах, друзьях из фейсбука – в общем, трафика много, и он идет на разные сервера, поэтому нам не интересен. Заходим в локацию:
С первого взгляда видно, что это Base64. Но вбив текст в первый попавшийся декодер, я получил полную бессмыслицу, хотя ожидал JSON (шучу, это было бы слишком наивно – у приложения 10кк+ загрузок).
We need to go deeper ©
Скачиваем apk игры (вариантов много, я воспользовался этим). APK-файл – это обычный ZIP-архив, в нем находится много всего, но в первую очередь нас интересует файл classes.dex. Это формат Dalvik executable. По сути – скомпилированные Java-классы. Чтобы открыть их, нам понадобятся dex2jar и jd-gui. Первый преобразовывает dex в jar, второй пытается восстановить из jar исходный код.
То, что восстановит jd-gui, выглядит довольно кошмарно и read-only. Вам не стоит пытаться это скомпилировать. Исходники из jd-gui можно сохранить и открыть в вашем любимом редакторе. Я скачал 30-дневный триал IDEA от JetBrains, потому что очень люблю то, как в их продуктах сделан поиск (сам пользуюсь купленными PyCharm и PHPStorm).
Предупреждение для тех, кто предпочтет этот редактор – не выставляйте SDK, вас завалит ошибками.
Из программирования для андроид я знал только азы и не имел особого понятия, с чего мне начать свои поиски. Поэтому я запустил поиск «base64» по проекту, и нашел класс, реализующий Base64 decode и encode. Этому я очень удивился, потому что эти методы не были просто оберткой для библиотечных, а, судя по коду, действительно реализовывали кодирование и декодирование Base64.
Первая мысль, которая мне пришла – создатели написали что-то свое, что похоже на Base64, но кодируется по-другому. Так как код выглядит кошмарно (методы по тысячи строк, goto’s, инструкции в методах сразу после return и прочие радости жизни), то переписать это я бы не смог. Потом я вспомнил, что сервер написан на PHP, и решил не отчаиваться, потому что содержать две собственных реализации Base64 на двух очень разных платформах довольно накладно для разработки. Чуть позже я загуглил Base64 на Java и понял, что в стандартных Java библиотеках (6 и 7 версии) base64 кодирования нет, что окончательно отогнало мои страхи по поводу альтернативной реализации.
Поискав использование этого класса, я вышел на другой – StringEncrypter, который реализовывал несколько методов, но основные – decrypt и encrypt. Бегло просмотрев метод decrypt я понял, что это то, что мне нужно. Данные расшифровывались из base64, прогонялись через AES/CBC/PKCS7Padding и возвращались. Оставалось только найти ключ, который использовался для Cipher и начальный вектор (Initialization vector).
Для этого я начал искать использование этих методов. И обнаружил, что класс StringEncrypter нигде не используется. Это сильно меня удивило, но я подумал, что это огрехи jd-gui.
Я начал поиск по проекту заново, в этот раз я сразу искал Cipher. Результатов было много, и, бродя по ним, я наткнулся на файл, исходный код которого, видимо, восстановить не получилось. Вместо кода висело «INTERNAL ERROR». Запустив поиск этой самой «INTERNAL ERROR» по проекту, я получил 55 результатов. Стало понятно, почему я не мог найти использование некоторых классов. Среди этих файлов нашелся один с интересным названием ActiveUserNetwork.
We need to go deeper ©
Я догадывался, что дальше – только ассемблер. Так и получилось.
У Dalvik VM есть множество оп-кодов, и, на самом деле, smali код довольно user-friendly для чтения, особенно, если вы ковырялись в ассемблере.
В этот раз нам понадобятся smali и baksmali. Backsmali преобразовывает файл classes.dex в папку с исходным кодом, при этом сохраняя иерархию и имена папок и файлов. На первых порах будет гораздо проще разбираться в smali коде, открыв этот же файл java (если, конечно, jd-gui смог его декомпилировать). В интернете хватает ресурсов, где можно найти примеры кода, вот тут, например, показывается, как выглядят массивы в smali и инструкции for/switch.
Но вернемся к нашей игре, а конкретно к заинтересовавшему меня файлу ActiveUserNetwork. Тут нашлось всё – Cipher, методы encrypt и decrypt, Base64, (кстати, тут он использовался из библиотеки android.utils) и даже константа «http://***.com/gateway.php». Да, это не /api/gateway.php, но хоть что-то. Кстати, поиск «api/gateway.php» даже по smali коду не давал ничего, но я не особо расстраивался, потому что видел, что частенько используется StringBuilder.
Подсветки smali кода на хабре нет (будем откровенны, она вообще мало где есть), поэтому большие куски этого кода я буду выкладывать скриншотами.
Итак, метод decrypt :
Пояснения по коду: в первой строчке идет стандартное описание метода: что он принимает и что возвращает. Метод принимает 2 параметра – строку и байт-массив (тут он выглядит как [B). Возвращает байт-массив.
Директива .locals указывает на количество регистров, которые будет использовать метод, не считая своих параметров. Помимо этой директивы, есть похожая, которая называется .registers, она определяет количество регистров, которые используются методом, включая параметры метода. Т.е. в общем виде, .registers = .locals + params. При этом, если вы объявляете количество регистров через директиву .registers, параметры метода попадают в последние регистры. Доступ к регистрам осуществляется через v0, v1, v2 и так далее, к параметрам – p0, p1 и так далее.
Данный метод статический и вызывается без объекта, в противном случае тут было бы 3 параметра, первым из них был бы объект, для которого вызывается метод (this). Следующие две директивы могут отсутствовать, это названия параметров. Директива .annotaions объявляет дополнительную информацию о методе, в данном случае – выбрасываемое исключение. Директива .prologue говорит о том, что дальше идет тело метода.
Учитывая все это, первые 11 строк преобразовываются в одну строчку Java кода:
Заглядывая в таблицу оп-кодов и помня, что в invoke-virtual первым параметром всегда передается сам объект, в отличие от invoke-static, «дословно» переписываем метод на Java:
Здесь spec – статическая переменная класса ActiveUserNetwork, она инициализируется в конструкторе класса
Я заменил этот код конструктора на метод getSpec . Приводим метод decrypt к нормальному виду:
Итак, надо осталось разобраться с методами createSecretKey и getSpec .
Это преобразованный код из конструктора. Дело было уже ночью, и число 0x10 мой мозг перевел в десятичную систему как «10». Хорошо, что я решил перепроверить в калькуляторе, а то дальше ждало бы сплошь разочарование 🙂
Метод createSecretKey (тут, кстати, опечатка в названии, ее мы тоже поправим)
Метод совсем простой, преобразовывается в
Отлично, осталось только выяснить, что же передается в метод ключом и данными.
За это отвечает метод processNetworkTask , который одновременно и отправляет запрос (с encrypt и Base64 encode), и получает ответ. Метод объемный (1к строк), поэтому выложу только сборку интересующих нас кусков ( v18 – объект класса org.apache.http.HttpResponse )
Вкратце:
Берется значение хедера REQ-TIMESTAMP , вызывается метод createHash(«MD5», header_value) . Из возвращаемой строки получаем подстроку с первого символа по шестнадцатый, и эта подстрока передается в метод decrypt ключом. Данными передается байт-массив из Base64.decode() .
Итак, на руках у нас все есть, кроме метода createHash .
smali код:
Этот метод уже потяжелее для восприятия: тут есть и цикл, и исключения, и условия. А ошибаться в криптографических методах нельзя. Одна эта конструкция чего стоит:
А превращается она в банальное Byte v9 = mdByte[i];
В качестве подсказки: почти всегда, когда вы видите инкремент ( add-int/lit8 v1, v1, 0x1 ) перед goto – это цикл for. Финальный код Java:
Собираем все воедино. Я создал новое приложение и закинул все в MainActivity:
Теперь вернемся к тому, зачем мы все это делаем. Внимательный читатель мог заметить, что в ни в ответе, ни в запросе, которые были приведены выше, не было хедера REQ-TIMESTAMP. Однако, там и запрос идет к /gateway, а не к /api/gateway. Запросы к /gateway идут во время инициализации приложения. Их всего два, расшифровав их, я получил… ничего. Нет, там были данные об устройстве, MAC-адресе и даже о том, рутован ли планшет. Но ничего стоящего я не получил. Запросы к /api/gateway шли откуда-то еще и никак не были связаны с /gateway.
Пока я разбирался со smali кодом, я сделал еще несколько попыток в разных направлениях, прежде чем пришел к решению разобраться со всеми методами и переписать их на Java.
Попытка 1: не искать то, как генерируется ключ, а просто сделать запрос с ним на свой сервер. Smali код можно изменить и скомпилировать обратно, так что идея была проста – перед методом decrypt делаем запрос на свой сервер, передав ключ как GET параметр, а потом смотрим логи веб-сервера.
В поисках как скомпилировать smali код я нашел apktool. Этот инструмент умеет разбирать apk файл сразу же на smali код, а также собирать все это обратно в apk.
Но когда вы попытаетесь установить новое приложение, вы получите ошибку:
На stackoverflow советуют удалить приложение вручную, а потом еще раз установить, но и это меня не спасло. Делаем новый ключ, для этого нам понадобятся keytool и jarsigner (входят в пакет openjdk)
Важное замечание – jarsigner ведет себя по-разному в 6 и 7 версии jdk, и на 7 версии команда ругнется на alias. Я не нашел решения этой проблемы и установил себе дополнительно 6 версию.
После этого установка приложения пройдет. Но, к сожалению, приложение (даже если его не изменять, а просто декомпилировать-компилировать-подсписать-установить) сразу же вылетало. Догадываюсь, что сервер как-то проверяет подписи, но буду рад, если кто-то в комментариях уточнит. Эту идею пришлось оставить.
Попытка 2: если нет желания ковыряться в smali коде (а у меня его не было, я думал, что это задачка на ~5 часов), то можно поступить проще. В своем приложении создаете пустой метод с таким же интерфейсом, что и у того, который хотите скопировать, создаете apk, декомипилируете, копируете тело метода, собираете обратно. Каждая такая итерация отнимает довольно много времени. Поэтому быстрее будет изучить оп-коды. При этом понятно, что открыть исходный код собранного приложения вы уже не сможете.
Эта статья писалась не за один день, и это замечание я пишу через неделю после абзаца выше. Способ описания интерфейса и копирования smali кода в тело метода очень мне помог, когда я так и не смог восстановить исходный код метода генерации ключа. Чтобы упростить себе жизнь и сократить время итерации можно объединить все в одну команду