Игру для Android продолжают взламывать

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

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

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

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

Спасибо


person BajaBob    schedule 08.04.2011    source источник
comment
Если бы вы сами не сказали, что вас больше интересует обучение, чем зарабатывание денег, мой ответ был бы просто: это не стоит головной боли. Так как вас интересует сама головная боль, то говорю давай (но у меня нет для тебя ответа, просто буду следить за этим вопросом, как и все остальные).   -  person Thiago Arrais    schedule 08.04.2011
comment
Если одну и ту же игру продолжают взламывать, уверены ли вы, что у вас нет проблемного сотрудника? Не самая приятная вещь для рассмотрения, но это может случиться   -  person Phil Lello    schedule 09.04.2011
comment
Хотя это более 20 тысяч строк кода, я сам управляю всем процессом.   -  person BajaBob    schedule 06.05.2011
comment
@BajaBob, тогда ты крот :D   -  person Sulfkain    schedule 06.05.2015


Ответы (11)


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

Фримиум-модель

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

Условно-бесплатные/кластеризованные пакеты уровней

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

Скрытая защита от мошенников

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

Заключение

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

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

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

person BerggreenDK    schedule 08.04.2011
comment
Вау, классные идеи. Очень ценю все это, никогда даже не думал о создании уровней и размещении их на сервере и проверке по ним. Версонинг... отличная идея. Держите всех в курсе, сделайте взлом необоснованным. Большое спасибо, это займет меня на некоторое время! - person BajaBob; 09.04.2011
comment
Эх, жаль, что нельзя поставить +2 за ответ :) Один комментарий: Как показать, что проблема в пиратской игре? Если в пиратской копии игра глючит/странно, люди могут подумать, что это баг, и ругать игру на форумах. Я не думаю, что это такая уж большая проблема на Android, так как не так много форумов с большой аудиторией, но мне интересно, имеет ли смысл заранее предупреждать, что пиратские копии могут работать неправильно. - person EboMike; 09.04.2011
comment
Я помню игру 1978 года на TRS80, которая начинала действовать случайным образом, если снять защиту от копирования. Была только одна проверка достоверности, и ее удаление означало, что вы могли свободно копировать игру, но странные ошибки игрового процесса возникали не на легальных копиях, а только на взломанных копиях. Никто не думал, что это вина разработчика... мы знали, в чем дело. - person Fixee; 09.04.2011
comment
@EboMike Я думаю, что сильная часть моей идеи защиты от копирования состоит в том, чтобы действовать как можно более нормально, даже не давая взломщикам намека на то, какие неприятные схемы защиты ждут впереди. Это просто заставит более любопытных из них охотиться за защитой. Просто для удовольствия. Помните, что многие из них делают это не из-за денег, а просто потому, что могут похвастаться. Так что не соблазняйте их. Просто ведите себя непринужденно. :о) Будь умнее их. - person BerggreenDK; 09.04.2011
comment
@BerggreenDK: Опять же, возникает вопрос — как убедить пирата купить игру? Если игра работает несколько минут, а затем явно ломается из-за вашей проверки, они могут подумать о покупке игры (есть определенная группа пиратов, которые так делают). Если ваша игра просто странная, они могут подумать, что игра отвратительная, и у них будет причина не покупать ее. Помните - есть крошечная группа людей, которые взламывают игры, 99% пиратов - это люди, которые просто скачивают игру с варезных сайтов. - person EboMike; 09.04.2011
comment
@EboMike Как я уже говорил в своем первом предложении (не пытаясь быть умным здесь: o)), моя идея не является безотказной, но модель Freemium позволит пирату играть, например. первые 10 уровней бесплатно и они должны работать без ошибок. Ошибки не должны быть представлены позже +, если обновления будут продолжать поступать, это нарушит их прогресс / учетную запись. - person BerggreenDK; 10.04.2011
comment
@EboMike Наконец, меня не волнует, не нравится ли пиратам моя игра. Если они хотят играть в нее бесплатно с Warez, то они в любом случае не мои клиенты, так что, честно говоря, мне плевать :о) если они везде на форумах говорят, что моя игра дерьмовая, тогда меньше пиратов захотят мою игру. Я сосредоточусь на разработке крутых и веселых игр, и тогда я уверен, что настоящие клиенты захотят платить. Иначе моя игра дерьмо. :o) (и это тоже может быть сделка) - person BerggreenDK; 10.04.2011
comment
должен быть принятым ответом. Удивительный! - person Snake; 19.09.2013
comment
@Fixee и другие В недавней игре Batman Arkham Asylum было что-то похожее: в пиратских копиях решающий ход терпел неудачу и застревал в игре довольно рано. Затем, когда кто-то жаловался на ошибку на форумах, разработчик мог ухмыльнуться и сказать, что это не ошибка в игре, а ошибка в вашем моральном кодексе. - person Nzall; 07.11.2013
comment
Ответ изменен на этот. Сейчас работаю над своей 12-й игрой. Чем больше я читаю на эту тему, тем больше я согласен с этим ответом (думаю, сообщество тоже согласится). Самое главное, с тех пор, как я задал этот вопрос, рынок сместился в сторону модели freemium. Люди просто не платят за игры столько, сколько раньше, со всеми доступными в настоящее время бесплатными опциями. Я полностью согласен с тем, что злоумышленник не может мгновенно сообщить, были ли его попытки взломать игру успешными. - person BajaBob; 07.05.2015
comment
Большое спасибо. Очень признателен. - person BerggreenDK; 09.05.2015

Некоторое время я занимался декомпиляцией и взломом apk (не варез, а моды и хаки, в основном для приложений Google и платформы Android, всегда соблюдая политику xda-developers).

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

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

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

Удачи.


Обновить

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

person Aleadam    schedule 08.04.2011
comment
Я должен упомянуть, что у многих людей есть проблема с приложениями, звонящими домой. Лично это глупо — Android-телефон «звонит домой» во многих отношениях так часто, что это не имеет большого значения, и в чем проблема с анонимной проверкой лицензии? Все еще хотел выбросить это - некоторые люди поднимают большую вонь из-за звонка домой, особенно когда это не разглашается. - person EboMike; 09.04.2011
comment
Что ж, понятно, что у людей могут возникнуть проблемы, если приложение «звонит домой» и не сообщает пользователю об этом. Но веб-таблица результатов решает эту проблему, поскольку пользователь, который добровольно подключается - person Aleadam; 09.04.2011
comment
Верно, но как только вы используете соединение, которое должно было анонимно загружать результаты и отправлять хэш учетной записи Gmail, это другая проблема. Еще раз: не ко мне. Я бы подумал, что это совершенно разумно, и у меня лично возникло бы искушение реализовать эту схему в моем собственном приложении. Людей, которые жалуются, будет меньшинство (и, скорее всего, они все равно купят приложение). - person EboMike; 09.04.2011
comment
Зачем вам декомпилировать фреймворк вместо загрузки исходного кода? - person Phil Lello; 09.04.2011
comment
@Phil, у вас нет доступа к исходному коду сенсорного или сенсорного FW, поэтому, если вы хотите модифицировать конкретный телефон, иногда проще всего декомпилировать его и изменить smalis. - person Aleadam; 09.04.2011

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

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

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

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

РЕДАКТИРОВАТЬ:

Примечания к презентации из раздела Уклонение от пиратов и остановка вампиров

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

person TryTryAgain    schedule 17.03.2012
comment
Ссылки выше, похоже, не всегда ведут на связанную страницу ... кажется, что они работают только иногда и в некоторой степени зависят от ОС и браузера. Итак, обратите внимание на окончание #%3ar.page.15 в URL-адресах. Если вы не перенаправлены на эту страницу автоматически, обязательно посмотрите на ссылку, чтобы увидеть, где/какую страницу вы должны просматривать. - person TryTryAgain; 05.04.2012
comment
Хороший! Я вижу, что они также верят в Freemium и в сокрытие некоторых ошибок в игре (просто используя технику лицензий). Я хотел бы кроссплатформенное решение вместо сервера лицензий только для Android. Но тоже интересно. - person BerggreenDK; 17.04.2013
comment
Кстати. смешно, у этого ответа 15 лайков, мой уже перевалил за 90 и не считается правильным ответом :-) - person BerggreenDK; 12.11.2014

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

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

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

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

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

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

person olivierg    schedule 15.04.2011
comment
все, что можно прочитать, также можно декомпилировать, это всего лишь вопрос мощности процессора и упрямства. Обфускация по-прежнему позволяет коду работать, поэтому при декомпиляции/деобфускации кода взломщик все еще может сравнивать текущую версию с оригиналом. Это может задержать взломщика или остановить менее опытного взломщика, но это вовсе не отказоустойчиво. - person BerggreenDK; 29.04.2015

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

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

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

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

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

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

person Margus    schedule 08.04.2011

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

person rook    schedule 08.04.2011

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

person George Freeman    schedule 08.04.2011
comment
На сегодняшний день приложение Lucky Patcher также взломало Amazon DRM! Помимо ProGuard, другим решением может быть DexGuard. Но покупка DexGuard стоит несколько сотен евро, но нельзя быть уверенным, что даже он сможет защитить ваши коды от пиратства... - person ChuongPham; 16.11.2012

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

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

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

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

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

person EboMike    schedule 08.04.2011

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

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

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

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

person MByD    schedule 08.04.2011
comment
Сбой вашего приложения, когда вы обнаружите, что оно было пиратским, может иметь неприятные последствия, если только вы не сделаете явным образом причину сбоя. Я помню, как читал о некоторых разработчиках игр, которые приводили к сбою игры через случайный период времени, если она не прошла проверку на пиратство. Конечно, многие люди пиратили его, но не понимали, что сбои были из-за того, что они использовали пиратскую версию. Это вызвало негативную реакцию разработчиков и, возможно, сказалось на их продажах. - person Mitch Lindgren; 09.04.2011
comment
@ Митч - согласен. Я привел это как одну из возможностей, но, возможно, лучшая техническая стратегия, вероятно, не лучшая бизнес-стратегия. - person MByD; 09.04.2011

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

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

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

person yetimoner    schedule 19.12.2012
comment
Уточнение: хотя вы можете получить root права на любую платформу, только небольшой процент пользователей IOS на самом деле будет это делать, опасаясь, что установка не будет выполнена. Кроме того, во многих частях мира трудно или невозможно заплатить за приложение для Android, что способствует пиратству. - person yetimoner; 19.12.2012
comment
На самом деле это была одна из идей моего ответа от 2011 года ... зачем публиковать это снова? - person BerggreenDK; 17.04.2013

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

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

person Techinator    schedule 04.07.2017