Android-игра продолжает взломать

Итак, мы прошли через это несколько раз, мы выпустили игру (для дешевых), а кто-то взломал ее и выставил на зеркало. Мы настраиваем оповещения Google для всех наших приложений, поэтому ежедневно получаем сообщение о том, кто делает взлом. До сих пор мы реализовали лицензионную услугу, предложенную Google, наша соль произвольно создается каждый раз, когда лицензия инициируется с уникальным идентификатором устройства. Мы запускаем службу проверки один раз, когда приложение запускается в первый раз. Затем мы генерируем хеш-символ в 512 символов для ключа и хранимое значение, которое сравнивается с ним в SharedPreferences.

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

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

До сих пор, сам по себе, я придумал генератор случайных чисел, который размещен в нескольких зонах запуска игры. Когда инициировано (скажем, 1 из 50 раз), лицензия проверяется. Я знаю, что это затруднит взломать, потому что взломщик должен будет устранить каждый случай, скомпилировать, устранить, скомпилировать. Этот метод, однако, все еще взломан... так что вы предлагаете? Опять же, меня действительно интересует этот процесс безопасности, поэтому, пожалуйста, просветите, не превращайте это в дискуссию об обфускации или периодически проверяйте на основе временной метки.

Спасибо

+140
источник поделиться
11 ответов

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

Модель Фремиума

1) Сделайте первые 5-10 уровней свободными, чтобы люди могли научиться игре и повеселиться, не платя. Меньше будет хотеть взломать первый уровень, и игра будет распространяться еще дальше по модели Freemium.

Shareware/clustered levelpacks

2) Пусть часть игровых уровней или логика остается в сети. Например. при достижении уровня 5 или 10 или 15, загрузите мелкие части для игры и каждый раз отправляйте журнал прогресса из игры и проверяйте это на возможные значения + хэш-коды. Возможно, это позволит автоматически закрыть взломанные учетные записи.

Защита Stealth cheater

3) Вы также можете просто посчитать "маленькие предупреждающие флаги", которые вы размещаете в игре. Не просто проверяйте "валидацию" в начале, не стройте эти флаги в самой логике игры. Не заставляйте его ломать геймплей, потому что тогда никто его не будет искать. Затем, когда пользователь достиг конца монстра уровня, проверьте, были ли какие-либо зарегистрированные флаги предупреждения. Они не будут отображаться внутри игры, поэтому незнакомый пользователь с взломанной версией может играть часами/днями и скудно понимать, что он/она не смог закончить игру или перейти на следующий уровень, потому что в игре была "ошибка". То, что пользователь не знал, было то, что эта ошибка возникает только на взломанных клиентах.

Заключение

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

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

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

+111
источник

Я некоторое время декомпилировал и взломал apk (а не warez, но моды и хаки в основном для приложений google и рамки Android, всегда соблюдая политики xda-разработчиков).

Как только вы научитесь читать smali, это почти так же, как чтение исходного кода Java (но с большим количеством LOC). Таким образом, любой код, который вы добавляете для проверки ключей, можно найти и удалить или заменить. Вам даже не нужно перекомпилировать каждый раз, чтобы устранить более одного (некоторые поиски делают чудеса, чтобы найти похожие фрагменты кода), и даже если циклы компиляции/перекомпиляции необходимы для их поиска, это всего лишь вопрос одной или двух минут декомпилировать: все автоматизировано apktool и даже больше apkmanager.

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

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

Удачи.


Обновление

После исследования, чтобы ответить на этот вопрос: Ввод кода в APK (на самом деле о механизме DRM Amazon), я могу немного рассказать о том, как Amazon защищает приложения: он включает методы проверки достоверности установки во всем мире (вы можете увидеть пример того, как они это делают в моем ответе на этот вопрос). Это сделает любую попытку взломать приложение не очень сложно, но очень утомительно. Я считаю, что это сильный момент: хакеры не захотят тратить так много времени на выполнение множества повторяющихся задач: это не сложно, а скучно. Главный недостаток, который я вижу в этом подходе, - это возможность взломать приложение Amazon, чтобы всегда возвращать действительный ответ, конечно. Но если вы смешиваете текущие хеш-чеки с какой-то онлайн-проверкой, разбросанной среди ваших методов, я считаю, что шансы на ее взлома могут быть резко сокращены.

+20
источник

Из моего решения из этого сообщения Избегайте взлома apk

Внедрить собственную библиотеку лицензирования

Я также хотел бы обратиться к вам с помощью записи в Google I/O 2011 YouTube:

Уклонение от пиратов и остановка вампиров

EDIT:

Заметки о презентации от Evading Pirates и Stopping Vampires

Некоторые основные ключевые точки

+20
источник

Я знаю, что ты действительно не впутываешься, но мне действительно нужно реагировать на это:

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

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

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

Я использую ProGuard в производстве в течение многих месяцев, и он просто работает безупречно.

Если вы изучаете, внимательно прочитайте руководство ProGuard, поэкспериментируйте с ним и проверьте его выходные журналы.

+8
источник

Шанс, что есть более талантливые программисты, тогда ВЫ (применяется для всех программистов), составляет 100%. И если это так, вы не можете исправить взлом. Но вы можете потратить на это столько времени и усилий, чтобы обанкротиться.

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

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

Возьмите игры Zynga на Facebook, например, вы считаете, что вас взломали? - Конечно, и около +100000 игроков играют только, потому что твои могут использовать ботов, которые автоматизируют все.

Обладая огромным активным ботнетом реальных пользователей реальных людей, игроки типа архивирования хотят играть в игру - и если ваша игра, и это выглядит круто, то Аваридж Джо тоже захочет сыграть. Если Аваридж Джо играет, то его друзья, возможно, захотят сыграть, и твоя, вероятно, будет безразлично что-то другое, тогда будет лучше, чем его/ее друг, убить время или поговорить о чем-то. Друзья Avarage Joe, скорее всего, захотят заплатить за то, чтобы стать лучше Джо, но скорее вы хотели бы инвестировать в то, что делает их способными быть лучше.

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

+4
источник

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

+3
источник

Какой интересный и тревожный вопрос.:-) В качестве упражнения вы можете попробовать запустить приложение через Amazon; они имеют свой собственный механизм DRM; Интересно, работает ли он лучше, чем ProGuard...

+2
источник

Одним из ключевых элементов, на мой взгляд, является распространение кода, чтобы он не все в одном месте. Если у вас есть функция, называемая LicenseChecker.checkLicense(), которая извлекает лицензию и проверяет ее, вы можете быть уверены, что она будет немедленно отключена.

Единственное, что у вас есть, это то, что крекеры не могут видеть комментарии вашего кода (и, если вы обфускаете, имена методов/переменных), так что придумайте что-то странное. В onCreate() одного действия вы получаете идентификатор лицензии. В onResume() вы получаете другое значение, чтобы проверить его. Возможно, создайте поток и выполните некоторые проверки. И тогда, какой-то другой нерелевантный фрагмент кода (возможно, контроль игрока) может поднять значение и сравнить его и сохранить результат где-то. Затем три других нерелевантных фрагмента кода будут независимо проверять это значение и отключить ваше приложение, если оно не соответствует.

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

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

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

+2
источник

Во-первых, я НЕ считаю себя профессионалом в поле безопасности SW, но:

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

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

Если это именно то, чего вы не хотели слышать, то я сожалею о вашем времени:)

+1
источник

Пользователи Android просто собираются принять боль постоянных телефонных домов. Единственное безопасное приложение для Android - это всегда подключенное приложение для Android.

Это в значительной степени связано с отказом Google заблокировать установку, например, Apple. На IOS вам нужно сделать джейлбрейк телефона. На Android вы можете загрузить любой APK на складе, factory установить.

Сохранять некоторые/самые/все ваши данные на сервере; доставить его в куски; подтвердите лицензию/сеанс для каждого вызова.

0
источник

Было бы невероятно сложно запретить подобное поведение. Все, что обрабатывается на стороне клиента, взломано с использованием декомпиляции и модификации APK, редактирования памяти с помощью программного обеспечения, такого как Game Guardian ect.

Единственный способ увидеть, как частично обойти это, - это сделать онлайн-игру. Или выполняйте определенные функции в режиме онлайн. Или если для Android/iOS доступно анти-несанкционированное шифрование, такое как denuvo.

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос