Игра для Android продолжает быть взломанной [закрыто]


143

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

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

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

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

Спасибо


27
Если бы вы сами не сказали, что вы больше заинтересованы в обучении, чем в зарабатывании денег, мой ответ был бы просто «это не стоит головной боли». Так как вас интересует сама головная боль, я говорю: продолжайте (но у меня нет ответа для вас, я просто буду следовать этому вопросу, как и все остальные).
Thiago Arrais

4
Если эту игру продолжают взламывать, уверены ли вы, что у вас нет проблемных сотрудников? Не самая хорошая вещь, чтобы рассмотреть, но это может случиться
Фил Лелло

3
Хотя это более 20 тысяч строк кода, я управляю всем процессом самостоятельно.
BajaBob

3
@BajaBob тогда ты крот: D
Sulfkain

Ответы:


117

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

Freemium модель

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

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

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

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

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

Вывод

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

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

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


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

12
Вздох, слишком плохо, ты не можешь +2 ответить :) Один комментарий: Как ты можешь показать, что проблема заключается в пиратской игре? Если на пиратской копии игра становится глючной / странной, люди могут подумать, что это ошибка, и ругают игру на форумах. Я не думаю, что это такая большая проблема на Android, так как не так много форумов с большой аудиторией, но мне интересно, имеет ли смысл иметь предварительный отказ от ответственности, что «пиратские копии могут работать неправильно».
EboMike

3
Я могу вспомнить игру 1978 года на TRS80, которая работала в случайном порядке, если была снята защита от копирования. Была только 1 проверка достоверности, и удаление ее означало, что вы могли свободно копировать игру, но странные ошибки в игровом процессе не возникали на легальных копиях, только на взломанных копиях. Никто не думал, что это вина разработчика ... мы знали, что случилось.
Fixee

1
@EboMike Я думаю, что сильная часть моей идеи защиты от копирования - «действовать как можно более нормально», даже не дает взломщикам понять, какие гадкие схемы защиты еще впереди. Это только заставило бы более любопытных из них охотиться на защиту. Просто для удовольствия. Помните, что многие из них делают это не за деньги, а только потому, что могут это показать. Так что не искушай их. Просто действуй случайно. : o) Будь умнее их.
BerggreenDK

2
@Fixee и другие В недавней игре Batman Arkham Asylum было что-то похожее: на пиратских копиях решающий шаг мог бы сорваться и застрял бы в начале игры. Затем, когда кто-то жаловался на «ошибку» на форумах, разработчик мог ухмыльнуться и сказать: «Это не ошибка в игре, а ошибка в вашем моральном кодексе».
Nzall

20

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

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

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

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

Удачи.


Обновить

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


3
Я должен упомянуть, что у многих людей есть проблема с приложениями "звонить домой". Лично это глупо - телефон Android «звонит домой» так часто, это не имеет значения, и в чем проблема с проверкой анонимной проверки лицензии? Все еще хотел выбросить это - некоторые люди воняют по поводу "звонка домой", особенно когда это не раскрыто.
EboMike

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

Это правда, но как только вы используете соединение, которое должно было «анонимно» загрузить результаты и отправить хэш аккаунта gmail, это другая проблема. Опять же: не для меня. Я бы подумал, что это совершенно разумно, и лично я бы испытал желание реализовать эту схему в своем собственном приложении. Люди, которые жалуются, будут в меньшинстве (и, весьма вероятно, приобретут приложение независимо).
EboMike

Зачем вам декомпилировать фреймворк вместо загрузки исходного кода?
Фил Лелло

1
@ Если у вас нет доступа к исходному коду для TouchWiz или нет смысла в FW, поэтому, если вы хотите изменить какой-то конкретный телефон, иногда проще всего декомпилировать его и изменить smalls.
Алеадам

20

Взято из моего решения из этого поста Избегайте apk cracked

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

Я также рекомендую вам проверить это по записи Google I / O 2011 на YouTube:

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

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

Презентационные заметки от уклоняющихся пиратов и останавливающих вампиров

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


Похоже, что приведенные выше ссылки не всегда ведут на связанную страницу ... кажется, что она работает только иногда и в некоторой степени зависит от ОС и браузера. Итак, обратите внимание на окончание #%3ar.page.15в URL. Если вы не будете автоматически перенаправлены на эту страницу, обязательно посмотрите ссылку, чтобы увидеть, где и на какой странице вы должны смотреть.
TryTryAgain

1
Ницца! Я вижу, что они также верят во Freemium и скрывают определенные «ошибки» в игре (просто используя технику лицензий). Я бы хотел кроссплатформенное решение вместо сервера лицензий только для Android. Но тоже интересно.
BerggreenDK

Кстати. забавно, этот ответ имеет 15 больших пальцев, мой уже перешагнул 90 и не считается правильным ответом :-)
BerggreenDK

8

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

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

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

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

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

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


все, что может быть прочитано, также может быть декомпилировано, это просто вопрос мощности процессора и упрямства. Запутывание по-прежнему позволяет запускать код, поэтому во время декомпиляции / деобфускации кода взломщик все равно может сравнить работающую версию с оригинальной. Это может задержать взломщик или остановить менее опытного взломщика, но это вовсе не отказоустойчиво.
BerggreenDK

4

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

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

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

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

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

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



2

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


1
На сегодняшний день приложение Lucky Patcher взломало Amazon DRM! Помимо ProGuard, другим решением может быть DexGuard. Но DexGuard стоит несколько сотен евро на покупку, но нельзя быть уверенным, что даже он сможет защитить ваши коды от пиратского ...
ChuongPham,

2

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

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

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

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

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


1

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

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

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

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


7
Выключение вашего приложения, когда вы обнаружите, что оно было пиратским, может иметь неприятные последствия, если только вы не сделаете слишком явное объяснение того, почему оно рухнуло. Я помню, как читал о некоторых разработчиках игр, которые делали свои игры аварийными после случайного периода времени, если он не прошел проверку на пиратство. Конечно, сотни людей пиратствовали на нем, но не понимали, что сбои были из-за того, что они использовали пиратскую версию. Это привело к плохой прессе для разработчиков и, возможно, повредило их продажам.
Митч Линдгрен

3
@ Митч - я согласен. Я назвал это одной из возможностей, но, возможно, «лучшая» техническая стратегия, возможно, не самая лучшая «деловая» стратегия.
MByD

0

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

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

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


Пояснение: хотя вы можете получить root права на любую платформу, на самом деле только небольшой процент пользователей IOS будут опасаться потерять установку. Кроме того, во многих частях мира трудно или невозможно платить за приложение для Android, что подпитывает пиратство.
Yetimoner

Это была одна из идей моего ответа от 2011 года ... зачем публиковать его снова?
BerggreenDK

0

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.