Сайты для отслеживания взлома игр

Здравствуйте, в этой статье мы постараемся ответить на вопрос: «Сайты для отслеживания взлома игр». Также Вы можете бесплатно проконсультироваться у юристов онлайн прямо на сайте.

Перед тем как это делать, нужно получить соответствующее разрешение. Там четко указано, что они являются частью общей жилой площади. Общая площадь квартиры определение.

Denuvo vs хакеры — топ самых быстрых взломов игр

Сегодня редакция VGTimes решила вспомнить игры, защита которых пала в рекордно короткие сроки. Отметим, что мы выступаем резко против действий пиратов и призываем вас уважать труд разработчиков.

Microsoft Flight Simulator. Несколько часов на взлом

Пожалуй, настоящими профессионалами своего дела можно считать хакерскую группировку HOODLUM. Им удалось взломать Microsoft Flight Simulator всего за несколько часов с момента релиза. И это при том, что игра была защищена не одной, а сразу тремя защитами: Arxan, XboxLive и Steam.

Однако, остался открытым вопрос, как будет работать загрузка новых фрагментов карт, которые в лицензионной версии стримятся с серверов Azure. Недоработочка!

Star Wars: Jedi Fallen Order. 4 дня на взлом

4 дня. Именно столько понадобилась хакерам из CODEX, чтобы взломать Star Wars: Jedi Fallen Order, о чем они сразу же сообщили в своем тематическом блоге на Reddit. Стоит отметить, что игра была защищена последней версией Denuvo и Origin.

Впрочем, даже с учетом взлома, за два месяца с момента релиза проект разошелся тиражом в 8 миллионов копий и принес разработчикам не один миллион долларов.

Code Vein. 5 дней на взлом

Еще одной игрой, пострадавшей от той же команды, стала Code Vein. Экшен типа souls-like, вышедший в сентябре 2019, в котором игрокам было необходимо сбежать из ада, пал через 5 дней с момента релиза.

Правда, на этот раз погорели и сами хакеры: CODEX поторопились, не дождавшись обновления. Спустя несколько дней после релиза игры, разработчики из Bandai Namco выпустили апдейт 1.03. И игра снова перестала работать.

Trials of Mana. 45 дней на взлом

И последней игрой в подборке, взломом которой занимались CODEX, стала Trials of Mana, появившаяся в Steam в апреле 2020 года. Игра представляет собой ремейк RPG Seiken Densetsu 3, вышедший в 1995.

Как ни странно, ключом стала демоверсия экшена, которая появилась вместе с полноценной игрой. В файлах игры хакерам удалось найти доступ к полной версии. Square Enix незамедлительно среагировала и удалила бесплатную версию, пообещав вернуть ее после добавления новой защиты. Но игра всё же успела попасть на торренты.

Assassin’s Creed Odyssey. Месяц на взлом

Не устоял перед хакерами и последний вышедший на данный момент проект про ассасинов. В ноябре 2018 года в сети появилась информация, что итальянская команда хакеров CPY смогла обойти защиту игры через месяц после ее релиза. А уже в апреле 2020 стало известно, что хакер под ником 0xEMPRESS смог взломать последнее дополнение The Fate of Atlantis. На это он также потратил около месяца.

Кем бы ни был этот таинственный любитель бесплатных игр, свое дело он знает. Хакер-выскочка заявил, что собирается обойти Denuvo в каждой игре, обладающей этой защитой. А еще он говорит, что занимается взломом не ради личной выгоды, но тем не менее активно принимает пожертвования от пользователей и ищет человека, который стал бы его спонсировать.

Shadow of the Tomb Raider. Чуть больше 2 месяцев на взлом

Традиционно информация об обнаруженной уязвимости сперва появилась в тематическом блоге на Reddit.

Need for Speed: Heat. 49 дней на взлом

Правда, хакеры взломали незаконченную версию игры, которую разработчики собирались «допиливать». При этом, в своем посте они в деталях описали все лазейки, которыми пользовались для обхода защиты. Остается надеяться, что разработчики усвоили этот урок, а в дальнейшем будут тщательнее подходить к вопросам безопасности.

И ещё раз. Любой труд должен оплачиваться. Поэтому мы призываем вас всегда покупать лицензионные версии игр.

  • Хакеры взломали Red Dead Redemption 2

Источник: https://vgtimes.ru/articles/71391-denuvo-vs-hakery-top-samyh-bystryh-vzlomov.html

Возможен ли взлом онлайн игр

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

Изменить данные в компьютерных играх можно было с помощью секретных кодов или специальных программ, однако, онлайн-приложения хранят всю информацию на сервере и для ее редактирования нужно разрешение, поэтому такой способ не подходит. Теоретически никаких ограничений на взлом не существует, но современные системы безопасности очень надежны и обойти их крайне сложно. Чаще всего для накрутки различных показателей используются боты, автоматизирующие некоторые игровые процессы.

Часто в интернете можно увидеть объявления о программах для взлома, которые можно скачать бесплатно. Скорее всего, за ними скрываются вирусы, которые стремятся завладеть личной информацией пользователя, или внести изменения в работу компьютера, например, отправлять спам с его адреса. Универсального способа обхода защиты онлайн игр не существует, если игру и можно взломать, то она должна быть не онлайн а оффлайн и таких прог кстати достаточно например программа для взлома игр Артмани PRO может с этим справится легко.

Другим способом обмана является продажа подобных приложений, разумеется, они не работают, и хорошо, если в них не требуется вводить никаких паролей. Не стоит доверять скриншотам, на которых изображены внушительные цифры, чаще всего они обработаны в графическом редакторе.

Взлом онлайн игр на компьютере:

Онлайн игры в большинстве случаев имеют свои защиты от читерских программ типа артмани или читэнжин многие знают EAC (Easy Anti Cheat), при запуске лицензионной игры сначала запускается защитник потом процесс игры. Если вы серьезно настроены на читы и найдете общедоступные то вас может забанить система защиты, не пустить в игру, испортить репутацию в Steam и тд. если уж использовать читы то приватные которые стоят денег, и то даже таких порой дефицит.

Взлом игр подменой сейвов (сохранений):

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

Данный метод может не сработать так как популярные онлайн игры постепенно переносят сейвы игроков на свои сервера и замена сейвов на компьютере не заменит сохранения на серверах так как они синхронизируются в процессе игры.

Используйте легкое преимущество в место взлома игр:

Использовать легкое преимущество, очень многие используют данный метод, так как он безопасный, в чем он заключается?

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

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

Взлом онлайн игр на Android:

Взлом подобных игр возможен но тут все индивидуально, но то что обязательным должно быть это РУТ права и программы поиска значений в приложениях. Пользователи ПК знают наверное программы Artmoney и Cheat Engine, вот подобные программы есть на андройд. Получение РУТ прав для каждого устройства индивидуально это вам нужно искать в поиске конкретно получение прав по вашему устройству. Мне нравится на андройд программа Game Guardian и GameCIH, их можно скачать в Плей маркете.

В чем подвох взлома онлайн игр на Android:

Популярные онлайн игры основные значения такие как значение монет или алмазов, держат на своих серверах и когда вы измените значения локально у вас на Андройде с помощью программ описанных выше, при обновлении они синхронизируются онлайн и значение будет выставлено с сервера, лично сталкивался как пример игра Hungry Shark.

Выход есть и есть способ взломать игры онлайн на Android:

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

И так что же в этом способе особенного?

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

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

Другой пример, акула стоит 500 000 монет, ищем это значение в игре их не так много, после отсеивания останется например 10 значений измените все на 1, измените вкладку, например перелистните на другую акулу-предмет и назад должно обновится цифра либо попробуйте купить. Таким образом можно купить предмет по гораздо меньшей стоимости чем заявлено)) в данный момент хранить абсолютно все значения на серверах игры проблематично и разработчики хранят только важные и взламываемые.

Демонстрация взлома игры для Андройд которая синхронизирует сохранения

Источник: https://artmoney-se-rus.ru/vozmozhen-li-vzlom-onlajn-igr/

Взломать мобильную онлайн игру? Легко!.

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

Однажды, дождливым летним вечером мы с моей девушкой искали чем себя занять. Фильм смотреть не хотелось, но и вылезать из постели желания не было. Выбор пал на мобильную игрушку. Основных требований к игре было не слишком много:

  • должна поддерживать iOS и Android;
  • должна иметь единый сервер для обеих платформ;
  • должна быть совместная игра, чтобы был смысл играть вдвоем.

Таким образом, мы нашли игру из топа Google Play. Чтобы не раскрывать имен, назовем ее игрой N. Правда, как оказалось позже, третий пункт из списка выше там реализован чуть более, чем никак.

Ниже я спрятал под спойлер краткое описание игры, читать его необязательно, но для полноты картины будет полезно.

Игра основывается на монстрах. Вы их призываете, качаете их и их спеллы, надеваете им руны, которые апают различные статы. У монстров, помимо привычных уровней (levels), существует еще и градация по звездам:

1 star – max level 15
2 star – max level 20
3 start – max level 25

и так далее до 6 звезд и максимального уровня 40. Достигнув максимального уровня, вы можете поднять монстру количество звезд, при этом его уровень сбросится до первого. Этот процесс в игре называется «Evolve». Чтобы это сделать, вам придется «съесть» других определенных монстров, например:

для эволва одного монстра 2s -> 3s, вам надо съесть 2 уже существующих монстра 2s.
4s -> 5s – надо поглотить 4 монстра 4s
5s -> 6s – 5 монстров 5s – это очень трудозатратно по меркам игры.

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

  1. выбить в локации (максимально 3s, шанс довольно мал)
  2. свитки призыва 1-3 (1s-3s, соответственно. 95%, что с призыва вы получите 1s или 2s. Тут стоит уточнить, что монстры 1s-2s – шлак, и в 99% случаях идут в расход, т.к. по статам сильно проигрывают. Падают свитки очень часто, в день без особого задротства можно получать по 20-30 штук);
  3. свитки призыва 3-5 (

90-95%, что вы получите 3s, 4s падают редко, 5s монстры мне никогда не падали с этих свитков. Свитки можно в неограниченных количествах покупать за красные кристаллы. Падают очень редко)

Энергия – нужна для походов в PvE локации и данжи. Расход – от 3 до 8 в зависимости от локации. Копится по одной в 5 минут, часто падает прямо с убитых мобов. Существует потолок энергии, который увеличивается с уровнем игрока (не путать с уровнем монстров) и с помощью специального здания.

Арена энергия – используется для походов на арену, «PvP». О том, почему PvP в кавычках, вы узнаете чуть ниже. 1 поход на арену тратит 1 единицу арена энергии, максимум – 10, накапливается по одной раз в полчаса.

Синие кристаллы – основная валюта игры. На нее покупаются вещи из магазина, большинство зданий. Накапливается различными зданиями, падает с убитых мобов, дают в качестве награды за задания.

Красные кристаллы – второстепенная валюта, которую можно купить за реальные деньги. Их можно тратить на те самые свитки 3-5, на обновление энергии и арена энергии и покупать за них синие кристаллы. Очень редко они падают с убитых мобов или на арене. В день их можно заработать около 30-40, к слову, один свиток 3-5 стоит 75.

Очки славы – валюта, которую дают за победу на арене. За нее покупается очень много интересных зданий и предметов. Эту валюту нельзя приобрести за какую-либо другую или за донат.

Донатом в игре не давят. Все хорошо и спокойно проходится/покупается без вливания денег. Донат, по сути, дает вам только больше свитков, шансы получить бесполезных монстров с них те же. Приобрести конкретного монстра за донат нельзя (да и вообще никак нельзя).

Система боя напоминает Final Fantasy 7-10 или, если хотите, HoMM – пошаговый бой, на выбор 2-4 спелла. В подземельях от 3 до 10 уровней (чаще всего 3 или 5), на каждом уровне стоит пачка мобов, убиваете – проходите дальше, не убиваете – получаете все то, что успели заработать (кристаллы, энергия, опыт).

По поводу «PvP» и «совместной игры». Как оказалось, возможности играть вместе с человеком или против человека у вас нет. Играешь либо сам, либо на «автоатаке» и всегда против компьютера. Поэтому PvP тут довольно скучное. Заключается оно в следующем: каждый игрок выставляет на деф 4 монстра и покупает башни для защиты. Попадая на арену, вы деретесь против ИИ, который довольно глуп. Чтобы уравновесить это, через некоторое время по вам начинают палить те самые башни, с каждым разом все чаще и чаще.

Я – программист-удаленщик, поэтому работаю дома. А дома всегда хороший wi-fi, и я особо не задумывался, как и когда игра взаимодействует с сервером.

До тех пор, пока я не решил зайти в игру с мобильного интернета. Пробежав все уровни в очередном подземелье, я получил сообщение «Network connection is delayed. Resend Battle Results? (If Battle Results are not sent, the battle will count as loss.)». После того как я нажал на кнопку «Yes», результаты все же ушли на сервер.

Если вы прочитали описание игры, то и для вас многое встало на свои места: почему нет нормального PvP или игры вдвоем – игра связывается с сервером редко, скорее всего по HTTP, никаких сокетов. И самое главное — судя по всему, в этой игре клиент высчитывает результаты боя, а сервер их только получает.

Сразу же поэкспериментировав с отключением интернета в различные моменты игры, я выяснил следующее:

  • при заходе в локацию вы отправляете запрос на сервер. Если он проходит, и вы получили ответ – начинается загрузка в локацию;
  • сервер не контролирует ваши перемещения между уровнями локации;
  • когда вы убиваете финальный пак мобов, отправляется еще один запрос. В ответе приходит ваш лут.
  • если вы сможете отправить результаты боя, но не сможете получить ответ – вам покажут то же самое сообщение – «Network connection is delayed. ». Но если вы попытаетесь сделать это еще раз (и запрос-ответ пройдут), вы получите сообщение «Can’t find match data». Это наводит на мысли, что при загрузке в локацию вам в ответе отправляют id вашего боя, который в конце подземелья используется для отправки его результатов.
  • как я говорил в описании, с мобов падают не только синие кристаллы. Довольно часто падает энергия и изредка красные кристаллы, причем вы видите, что и сколько упало при убийстве моба. И вот тут возникает мысль: неужели клиент решает, сколько и чего упадет, а потом отправляет на сервер? Если так, то отправив «правильный» запрос, мы не только сможем «выиграть» подземелье, которое нам не по зубам, но еще и забрать с него пару-тройку сотен красных кристаллов и энергии.
  • при всем этом, можно не опасаться за дальнейшее прохождение отряда по подземелью. Закончив прохождение (так или иначе), мы просто получим сообщение «Can’t find match data», результаты-то уже отправлены.

Самая логичная идея, которая может прийти после описанного выше.
Для того, чтобы подделать запрос, нам нужен оригинал. Вариантов мониторинга трафика много, я выбрал самый простой для себя – пустить трафик через ноут и смотреть на все это с помощью WireShark.

Инструкции для превращения компьютера в точку доступа можно найти вот тут.
Чтобы было меньше лишнего «шума» в логах, закрываем все приложения и отключаем синхронизацию.
Во время загрузки игра подгружает информацию об акциях, партнерах, друзьях из фейсбука – в общем, трафика много, и он идет на разные сервера, поэтому нам не интересен. Заходим в локацию:

С первого взгляда видно, что это Base64. Но вбив текст в первый попавшийся декодер, я получил полную бессмыслицу, хотя ожидал JSON (шучу, это было бы слишком наивно – у приложения 10кк+ загрузок).

Скачиваем 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.

Я догадывался, что дальше – только ассемблер. Так и получилось.

У 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 кода на хабре нет (будем откровенны, она вообще мало где есть), поэтому большие куски этого кода я буду выкладывать скриншотами.

Пояснения по коду: в первой строчке идет стандартное описание метода: что он принимает и что возвращает. Метод принимает 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 кода в тело метода очень мне помог, когда я так и не смог восстановить исходный код метода генерации ключа. Чтобы упростить себе жизнь и сократить время итерации можно объединить все в одну команду

Что ж, если не получается через запрос – пойдем другим путем.
Новые монстры загружаются в игру не через обновление в гуглплей, а через внутреигровой апдейт. Значит, что они хранятся где-то вне apk, и теоретически мы можем их модифицировать.
Долго папку искать не пришлось – /sdcard/Android/data/com.***/files/patch/
Тут нашлись все спрайты и звуки, а самое главное – много файлов с именами монстров и расширением .dat. Открываем hex-редактором и бегло просматриваем – никаких заголовков и строк, за которые бы зацепился взгляд. Я взял первого попавшегося монстра первого уровня, посмотрел его HP и начал искать/заменять эти байты в надежде, что файл не зашифрован. Нашлось 7 совпадений. Последовательно их заменяя, я получил 4 краша игры и 3 «ничего не изменилось». К сожалению, зашифрован.
Но что-то же его должно расшифровывать! Ищем в коде по регэкспу «\.dat\b» (чтобы исключить в результатах методы, начинающиеся с «data»). Находится только файл CommonData.dat. Этот файл прячется в папке /data/data/com.***/ (если в папке /data у вас пусто – вам нужен root-доступ).
Файл зашифрован и имеет размер в 1кб. Понятно, что ничего стоящего там нет, однако, алгоритм шифрования может быть одинаковый. В этот раз код я выкладывать не буду, он занимает около тысячи строк. Самое главное – ключом в decrypt передается строка, основанная на ANDROID_ID. После вскрытия в файле обнаружился MAC-адрес (опять). Испытав тот же алгоритм на файлах монстров, я получил ошибку.
Грусть-тоска.

Однако, в той же папке /data/data/com.***/lib/ я наткнулся на .so библиотеки. Я их уже видел в apk и видел их подключение в MainActivity (честно, я все это время очень надеялся на то, что мне не придется их ковырять). Библиотек было две – libgame.so, libcom***.so. Вторая весила очень мало и не несла для меня никакой ценности. Первую я открыл hex-редактором и через полминуты нашел строку «http://***.com/gateway/api.php».

Надеюсь, вы еще не устали 🙂 Потому что мы начинаем практически с самого начала.
Скажу честно, на этой стадии я потратил около 20-30 часов своего времени. Если вы не знакомы с оп-кодами процессора, регистрами и памятью – вы тоже тут встрянете надолго. Меня спасло только мое упорство и желание доказать, что человек круче какого-то там приложения.
Очень много времени ушло на подбор инструментов и методики. И если оставшаяся статья кому-то сэкономит в дальнейшем несколько часов – это будет замечательно.

Инструментарий.
Ida Pro 6.1+ – основной инструмент для отладки. С версии 6.1 идет в комплекте с файлом android_server и возможностью удаленной отладки андроид приложений.
gdbserver – еще один инструмент для удаленной отладки.
На этом этапе root доступ к устройству обязателен.

Закачиваем оба сервера на устройство:

Настраиваем проброс портов на локалхост:

Основная идея (спасибо этому топику, он сэкономил мне тонну времени):

  1. подключаемся через android_server, находим библиотеку, запоминаем смещение;
  2. загружаем библиотеку в Ida с указанным смещением;
  3. Ida проводит анализ, выставляет имена функций, графики вызовов и даже пытается воспроизвести исходный код;
  4. запускаем приложение на устройстве;
  5. уже проанализированную библиотеку подгружаем в приложение через gdbserver
  6. ставим брекпоинты, анализируем. Если приложение падает – goto 4 .

Почему используются два сервера для удаленной отладки? android_server может «красиво» показывать подгруженные библиотеки и смещение для нужной библиотеки находится в нем очень быстро. Но брейкпоинты в нем не работают. Зато они отлично работают в gdb. Смещения вроде бы можно искать и через gdb клиент с помощью info sharedlibrary , но у меня это не вышло.

Еще один важный момент:
Если приложение упадет – вам (с некоторой вероятностью) придется проделать все шаги с первого. Все дело в технологии ASLR. Чтобы отключить ее, выполните в шелле:

Внимание! Это сильно влияет на безопасность вашего устройства. Не забудьте запомнить значение этого параметра и вернуть его на место после ваших экспериментов.

Итак, более подробный план действий:

    Запускаем android_server:

  • Открываем Ida без загрузки чего-либо, заходим в Debugger > Attach to > Remote ARM/Android Debugger .
  • Выбираем из списка нужное приложение.
  • Ищем нашу библиотеку (вариантов много, но быстрее всего у меня получалось найти ее глазами – прокруткой и просмотром. Поиск работает медленно, jump к метке работает не всегда.
  • Запоминаем смещение библиотеки ( 5D699000 в моем случае).
  • Отключаемся от процесса ( Debugger > Detach from process ). Процесс на устройстве остается жив.
  • Открываем файл, выставляем нужное смещение ( 0:5D699000 в моем случае).
  • Пока Ida анализирует файл, убиваем android_server и подготавливаем gdbserver:

    Теперь, если все сделано правильно, код библиотеки, который проанализировала Ida, встанет на нужное место.

    Изучив перечень функций из библиотеки, я нашел очень занятную группу, которая отвечала за взаимодействие с сервером. Вот некоторые из функций:

    • battleArenaStart
    • battleArenaResult
    • battleDungeonStart
    • battleDungeonList
    • battleDungeonResult

    Все эти функции формировали JSON, заполняли его и вызывали функцию sub_5D839994 . Эта функция – краеугольный камень общения с сервером. Она шифрует строки, запаковывает в base64 и отправляет данные.
    Возиться с криптографией было тяжело даже в более или менее понятном smali коде. Тут же это был сущий ад. Хотя я и нашел ключ, который используется для шифрования, я все равно заблудился в поисках IV.
    Но раз мы уже висим на приложении дебаггером, то нам достаточно перехватить строку перед шифровкой, изменить ее и продолжить работу приложения. И на сервер уйдет модифицированная строка.
    Как я и говорил, эта функция ( sub_5D839994 ) используется везде (или почти везде), где есть общение с сервером, поэтому ставить на нее брейкпоинт почти бесполезно, он сработает сразу же, так как в игре есть чат.
    Немного провозившись, я нашел решение. Я ставил 2 брейкпоинта: один перед вызовом sub_5D839994 в нужной функции, второй, в отключенном виде, – непосредственно перед функцией AESConvertEncode , которая отвечает за шифрование строки.

    Итак, момент истины, заходим на арену против сильного противника. С разгромом ему проигрываем, приложение замирает – сработал брейкпоинт. Отключаем его, включаем брейкпоинт перед AESConvertEncode , запускаем приложение и… Ура! Дебаггер перехватил управление прямо перед шифрованием. Содержимое регистра R0:

    Догадка, в которой я был уверен на 99.(9)%, подтвердилась – в этой игре клиент решает, выигран ли бой, а сервер лишь получает результат.
    Я переключил брейкпоинты обратно и, на всякий случай, не стал ничего менять – здесь присутствовали непонятные мне данные, в частности unit_status . В том бою я успел убить одного из четырех монстров противника, поэтому догадывался, что связка id-result отправляла на сервер данные об убийстве того или иного монстра (2 – мертвый, 1 – живой). Чуть позже я понял, что это верно. Возможно, эти данные используются как дополнительная проверка на победу и поиск злоумышленников, но, видимо, главная их цель – лут с монстров. Если помните, в самом начале я писал следующее:

    как я говорил в описании, с мобов падают не только синие кристаллы. Довольно часто падает энергия и изредка красные кристаллы, причем вы видите, что и сколько упало при убийстве моба. И вот тут возникает мысль: неужели клиент решает, сколько и чего упадет, а потом отправляет на сервер? Если так, то отправив «правильный» запрос, мы не только сможем «выиграть» подземелье, которое нам не по зубам, но еще и забрать с него пару-тройку сотен красных кристаллов и энергии.

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

    По идее, все то, что мы делаем с помощью дебаггера, для игры выглядит вполне законно – победа, все монстры мертвы. Банить нас вроде бы не за что. Однако, чуть позже я выяснил один неприятный момент. Как я говорил, локации делятся на уровни – три или больше. На каждом уровне стоят свои мобы. Для примера представим такую ситуацию:

    Stage 1 – 3 монстра (мы их убили, прошли дальше)
    Stage 2 – 4 монстра (тут мы убили одного и погибли)
    Stage 3 – 3 монстра (в этот уровень мы не зашли, так как погибли раньше)
    Теперь, если мы перехватим JSON перед шифрованием, мы получим примерно такие результаты:

    Как видите, из-за того, что мы не дошли до третьего уровня, мы не загрузили данные о монстрах на нем. Даже если мы изменим запрос на «win» и статусы существующих монстров на «dead», мы все равно не сможем добраться до трех оставшихся мобах на третьем уровне. И для сервера они живы, хоть в ответе и приходит, что мы одержали победу. Теоретически на этом могут поймать и забанить. Но я пока жив 🙂
    В то же время, на арене только один уровень, и запрос с нее выглядит правдивым на 100%.

    Теперь все стало ясно. Хоть и получить неограниченное количество красных кристаллов мы не сможем, зато по-прежнему мы можем выигрывать любое сражение, какое пожелаем. Правда, для этого приходится держать устройство подключенным к компьютеру, постоянно переключать брейкпоинты и вручную переделывать запрос перед шифрованием. Это не очень удобно. По идее, нам надо не слишком много: всегда записывать в «win» единицу, а в «result» двойку для всех мобов.

    Ищем код, который добавляет «win» в JSON. Немного повозившись с брейкпоинтами, я нашел этот кусок.

    Судя по всему, в R6 находится то, что нам нужно – значение победы. Теперь нам надо изменить эту инструкцию на автоматическое присваивание победы.
    Тут стоит отметить, что в игре есть возможность в любой момент выйти из боя, при этом засчитывается поражение. То есть у нас всегда есть возможность получить поражение, и мы можем рассчитывать, что в R6 всегда 2. Но мне было не очень понятно, будет ли там просто 2 (0x2) или «2» (0x32 ASCII).
    Дело за малым – изменить инструкцию. К сожалению, Ida не дает изменять ASM код, поэтому придется менять биты инструкций.

    Вы хотели научиться программировать на нулях и единицах? Их есть у меня!

    Действительно, я получал какое-то особое удовольствие, программируя двумя кнопками и изучая инструкции. Вот тут и тут хорошие материалы и подсказки по инструкциями.
    Переходим в hex-редактор, смотрим как оно все выглядит изнутри.
    MOVS R0, R6 ; 321С
    Переворачиваем инструкцию, получаем 1C32 . В бинарном виде:
    0001 1100 0011 0000
    Как видно, используются двухбайтовые инструкции. Это не ARM (там используются четырехбайтовые), а Thumb или Thumb-2.
    Однако, вы не найдете инструкцию MOVS , которая бы выглядела так. На самом деле, инструкция выглядит как ADDS R0, R6, #0 . Во время анализа Ida преобразовывает инструкции в более удобный вид, из-за чего могут возникнуть небольшие проблемы с редактированием.

    ADDS – эта часть постоянна для этой инструкции
    Imm – immediate value. Непосредственное значение, которое мы хотим прибавить.
    Rn – регистр, к которому мы будем прибавлять.
    Rd – destination register. Регистр, который будет хранить сумму после исполнения инструкции.

    Итак, нам надо заменить эту инструкцию. Из-за того, что я не знал, какая именно двойка используется, я выбрал следующий вариант:
    SUBS R0, R6, #1
    Инструкция SUBS вычтет из R6 единицу и положит результат в R0 . В итоге, какая бы двойка ни была в R6 , в R0 будет находиться нужная единица.
    Переводим в бинарный формат:

    В шестнадцатеричном виде – 1E70 . Переворачиваем – 701E . Теперь заменяем эту инструкцию в библиотеке.
    Было:
    MOVS R0, R6
    Стало:
    SUBS R0, R6, #1

    На всякий случай проверяем с помощью брейкпоинта регистры на входе в функцию AESConvertEncode и убеждаемся, что все верно.

    Осталось заменить только инструкцию, отвечающую за присвоение статуса монстрам.
    Она находится тут же, чуть ниже.

    Здесь идет обход массива в цикле for.

    В R11 хранится длина массива, цикл узнается по трем строкам:

    Нужный нам регистр – R6 . Инструкция LDMIA считывает один байт из R6 , передвигает R6 на один байт дальше и записывает значение полученного байта в R0 . Нам же такие сложности не нужны, нам нужно записать в R0 двойку – MOVS R0, #2

    Hex – 2002 . Переворачиваем ( 0220 ) и заменяем.
    Момент истины: отключаем все брейкпоинты, заходим в подземелье…

    Profit! Самое главное не забывать, что выходить из боя надо всегда. Если случайно одержите победу — на сервер отправится поражение. Теперь можно даже отключить устройство от компьютера. До тех пор, пока приложение не перезапустится, в его памяти будет висеть измененная библиотека.

    Взлом этого приложения стал возможен во многом из-за того, что авторы фактически сами раскрыли, что результат боя они считают на клиенте. В то же время, в мобильной онлайн игре надо соблюсти грань между безопасностью и удобством для пользователя. Если игра будет требовать постоянного подключения, ее аудитория убавится. Разработчики постарались усложнить жизнь потенциальным взломщикам: сделали шифрование данных и вынесли основной код игры в shared object. Но меня смущает одно — почему не обфусцированы имена функций? Я не программировал на C/C++ и не знаю, есть ли такая опция в компиляторе. Но если бы все функции назывались » sub_xxxxxxxx «, то время, потраченное на взлом приложения, выросло бы в разы. Рад буду услышать ответ в коментариях.

    Спасибо тем, кто дочитал до конца.
    О грамматических или орфографических ошибках просьба писать в личку.
    О логических или грубых технических — лучше в комментарии.

    Источник: https://habr.com/ru/post/232531/

    Программы для взлома онлайн и оффлайн игр

    В данной статье я проведу небольшой обзор программ, необходимых для взлома различных онлайн и оффлайн игр (в т.ч. Вконтакте, Одноклассники, Mail.ru и т.д).

    Мануал для работы Charles вы можете скачать тут.
    Сам Charles 3.6.5 скачивайте здесь (Windows 32 bit (msi, 7.4 MB).

    Также на вашем компьютере должна быть установлена JAVA, в противном случае ничего не получится.
    Скачать Java (32-bit)
    Скачать Java (64-bit)

    Смотрите также видео, которое иллюстрирует использования Charles по
    этой ссылке

    Cheat Engine даст вам возможность редактировать всевозможные параметры в различных играх. Таким образом вы получите в свое безраздельное властвование неограниченное количество денег, здоровья, запасов и так далее. Программа сканирует определенные файлы в директории выбранной вами компьютерной игры и производит, непосредственно, процесс взлома. Стоит отметить то, что взлому подвергаются даже те игры, данные которых закодированы или не имеют конкретных числовых значений (например полоска жизни).

    ArtMoney — пожалуй, наиболее известная программа для взлома игр. Она, как и полагается программам подобного типа, ориентирована на поиск\замену определенных игровых параметров(деньги, ресурсы, прочее). Для этого она сканирует игровые файлы, отыскивая среди них нужные значения. Программа работает в два этапа — на первом производится поиск нужных значений, на втором — их фильтрация. Результат работы — точные адреса, изменение ячеек которых приводит к желаемому результату.
    Данная программа умеет работает с компьютерными играми, данные которых закодированы либо представлены не в виде числовых значений.

    UoPilot — уникальная программа, которая поможет вам прокачать своего персонажа в игре. Как она работает? Дело в том, что многие повторяющиеся действия в игре, которые необходимо выполнять для прокачки персонажа, как правило, алгоритмичны и поддаются шаблонизации. Потому несложно на эти действия натаскать программу-робота, которая все сделает за вас. Таким образом, утилита упрощает игровой процесс геймера, ведь в идеале он вообще может не участвовать в прокачке персонажа.

    WPE (Winsock Packet Editor) Pro

    WPE — эта утилита даст вам возможность подменять пакеты в онлайн-играх. С ее помощью геймеры ломают такие широко известные игры как World Of Warcraft, Ragnarok, Ultima и т.п.
    Скачать WPE v1.0.0

    TeamViewer — утилита предоставит вам возможность получения доступа к удаленному компьютеру. (причем IP-адрес удаленного компа знать не обязательно, но на нем тоже должна быть запущена данная программа).

    Традиционно для такого вида программ, кроме возможности передавать файлы, устраивать презентации, общаться во внутреннем чате, вы получите доступ к рабочему столу ОС удаленного компьютера и все права на управление им. Чем можно воспользоваться, например, помогая настроить компьютер своему заокеанскому коллеге.

    Hex Editor — известный редактор Шестнадцатеричных и Бинарных Файлов, который просто обязан быть у каждого, кто собирается копаться в ресурсах игр или любых других приложений. У программы удобный многооконный интерфейс, она обладает широкими возможностями для поиска\замены и просмотра данных, их отладки.

    Источник: http://keke-blog.ru/%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B-%D0%B4%D0%BB%D1%8F-%D0%B2%D0%B7%D0%BB%D0%BE%D0%BC%D0%B0-%D0%BE%D0%BD%D0%BB%D0%B0%D0%B9%D0%BD-%D0%B8-%D0%BE%D1%84%D1%84%D0%BB%D0%B0%D0%B9%D0%BD/


    Похожие записи:

  • Добавить комментарий