Гра в Android продовжує хакнути [закрито]


143

Тож ми вже кілька разів переживали це, ми випускаємо гру (для дешевих), і хтось її зламає і ставить на дзеркало. Ми налаштовуємо Google Alerts для всіх наших додатків, тому нам щодня повідомляють, хто робить злом. Поки ми впровадили сервіс ліцензування, як запропонував Google, наша сіль робиться випадковим чином щоразу, коли ліцензія починається з унікального ідентифікатора пристрою. Ми запускаємо службу перевірки один раз, коли програма запущена вперше. Потім ми генеруємо хеш 512 символів для ключа і збереженого значення, яке порівнюється з SharedPreferences звідти.

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

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

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

Дякую


27
Якби ти сам не сказав, що тобі більше цікаво вчитися, ніж заробляти гроші, моя відповідь була б просто "це не варто головного болю". Оскільки вас цікавить сам головний біль, я кажу, що вперед (але я не маю відповіді за вас, я просто слідую за цим питанням, як і всі інші).
Тіаго Аррайз

4
Якщо та сама гра продовжує зламатись, ви впевнені, що у вас немає проблемного персоналу? Не найприємніше, що варто врахувати, але це може статися
Філ Лелло

3
Хоча це понад 20 тис. Рядків коду, я керую усім процесом сам.
BajaBob

3
@BajaBob, то ти моль: D
Sulfkain

Відповіді:


117

Моя ідея не є хакерським доказом, але може зняти частину інтересу до злому гри.

Модель Freemium

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

Shareware / кластеризовані рівні

2) Нехай частина рівнів гри або логіка залишається в Інтернеті. Напр. коли ви досягаєте рівня 5 або 10 або 15, тоді завантажуйте невеликі частини для гри, і кожен раз надсилайте журнал прогресу з гри та підтверджуйте це щодо можливих значень + хеш-кодів. Можливо, це може зробити можливим автоматичне закриття зламаних облікових записів.

Захист шахрайського захисту

3) Ви також можете просто порахувати "маленькі попереджувальні прапори", які ви розміщуєте в грі. Не перевіряйте на "перевірку" на початку, не вбудовуйте ці прапори в саму логіку гри. Не змушуйте його порушувати геймплей, бо тоді його ніхто не буде шукати. Потім, коли користувач дійшов до кінця монстра рівня, перевірте, чи не було зареєстрованих попереджуваних прапорів. Вони не відображатимуться у грі, тому невідомий користувач із зламаним виданням може грати годинами / днями і раптом зрозуміти, що він / вона не може закінчити гру або перейти на наступний рівень, тому що в грі був "помилка". Користувач не знав, що ця помилка виникає лише на злому клієнтах.

Висновок

Будь розумнішим від сухарів. Обдурити їх, думаючи, що робота виконана. Зробіть захист від копіювання і знайте, що більш досконалі сухарі зможуть її видалити. Але вони, ймовірно, не хочуть грати 50 рівнів, щоб перевірити, чи тріщина також працює до кінця.

Як тільки вони зрозуміють цю проблему, вони також можуть почати її ламати. Але якщо розбити гру на рівні пакети, ви все одно можете перевірити між кожним завантаженням пакета. Отож, як тільки ви отримаєте злому даних хеш-клієнта, тоді просто виконайте exeception і розбийте гру на клієнті. Уопс гра розбився. Не кажіть, тому що його зламали. Помилка програми може статися. :-)

Знову ж таки, це не хакерське підтвердження. Але це може їх дратувати досить, щоб перейти до наступної гри. Нарешті, ви також можете випускати регулярні оновлення для гри, і лише остання версія повинна мати можливість "розміщувати записи" тощо, щоб активні користувачі повинні були оновлюватись, щоб зберігати в циклі.


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

12
Зітхніть, дуже погано, що ви не можете +2 відповісти :) Один коментар: Як ви можете показати, що проблема полягає в тому, що гра піратська? Якщо гра потрапляє на піратську копію, то люди можуть подумати, що це помилка та гра на форумах. Я не думаю, що це настільки велика проблема в Android, оскільки не так багато форумів з великою аудиторією, але мені цікаво, чи має сенс передбачити відмову від того, що "піратські копії можуть працювати не так".
EboMike

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

1
@EboMike Я думаю, що сильна частина моєї ідеї щодо захисту від копіювання полягає в тому, щоб "діяти якомога нормальніше", навіть не давати розбійникам поняття про те, які неприємні схеми захисту стоять попереду. Це просто зробило б більш цікавим з них полювати на захист. Просто заради задоволення. Пам'ятайте, багато хто з них цього не роблять за гроші, але тільки тому, що можуть це показати. Тож не спокушайте їх. Просто дійте випадково. : o) Будь розумнішим від них.
BerggreenDK

2
@Fixee та інші Нещодавня гра Batman Arkham Asylum мала щось подібне до цього: у піратських копіях вирішальний крок зіпсується і змусить вас затриматися досить рано в грі. Потім, коли хтось скаржився на "помилку" на форумах, розробник міг посміхнутися і сказати "це не помилка в грі, це помилка у вашому моральному кодексі".
Nzall

20

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

Після того, як ви навчитеся читати смалі, це майже як читання оригінального коду Java (але з набагато більшою мірою LOC). Отже, будь-який код, який ви додали, щоб перевірити наявність ключів, можна знайти та видалити або замінити. Вам навіть не потрібно перекомпілювати щоразу, щоб усунути більше одного (деякі пошуки роблять чудеса, щоб знайти подібні фрагменти коду), і навіть якщо для їх пошуку потрібні цикли компіляції / перекомпіляції, це лише питання однієї чи двох хвилин декомпілювати: все автоматизовано apktool і навіть більше apkmanager.

Сказавши це, я пропоную вам реалізувати якусь таблицю підрахунків в Інтернеті чи подібну, і коли користувач перегляне таблицю результатів в Інтернеті, ви можете перевірити хеш-код, який ви застосували, і порівняти його з пов’язаним обліковим записом gmail. Таким чином ви можете повідомити про хак в Google і надіслати неприємне повідомлення користувачеві warez, пояснивши, чому це незаконно.

Звичайно, можна було б застосувати новий хак, щоб ліквідувати таблицю балів, але це знизило б інтерес до виробу.

Удачі.


Оновлення

Після дослідження відповіді на це запитання: Впорскування коду в APK (справді про механізм DRM Amazon), я можу трохи розповісти про те, як Amazon захищає додатки: він включає методи перевірки дійсності установки скрізь (ви можете побачити приклад як вони це роблять у моїй відповіді на це питання). Це зробить будь-яку спробу зламати додаток не дуже складно, але надзвичайно виснажливо. Я вважаю, що це є важливим моментом: хакери не захочуть витрачати стільки часу, роблячи так багато повторюваних завдань: це не складно і це нудно. Основний недолік, який я бачу в такому підході, - це можливість зламати додаток Amazon, щоб завжди повертати дійсну відповідь. Але, якщо ви змішите свої поточні хеш-чеки з якоюсь онлайн-чек, розкиданою серед ваших методів, я вважаю, що шанси на її злом можуть різко зменшитися.


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

3
Що ж, зрозуміло, що у людей можуть виникнути проблеми, якщо додаток "телефонує додому" і не повідомляє користувача про це. Але веб-таблиця оцінок вирішує, що оскільки користувач охоче підключається
Алеадам

Щоправда, але коли ви використовуєте з'єднання, яке повинно було "анонімно" завантажувати бали та надсилати хеш облікового запису gmail, це вже інша проблема. Знову: Не для мене. Я думаю, що це цілком розумно, і я особисто спокусився б реалізувати цю схему у власному додатку. Люди, які скаржаться, будуть у меншості (і, швидше за все, придбати додаток незалежно).
EboMike

Чому б ви декомпілювали фреймворк замість завантаження вихідного коду?
Філ Лелло

1
@ Якщо ви не отримаєте доступ до вихідного коду для сенсорного або сенсорного FW, тому якщо ви хочете модифікувати певний телефон, іноді найпростішим способом є його декомпіляція та зміна смалісу.
Алеадам

20

Взяте з мого рішення з цієї публікації. Уникайте, щоб APK не тріснув

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

Я також попросив вас перевірити це з запису YouTube на YouTube I / O 2011:

Ухиляючись від піратів і зупиняючи вампірів

Редагувати:

Презентаційні записки від ухилення піратів і зупинки вампірів

Деякі основні ключові моменти


Наведені вище посилання, здається, не завжди переходять на пов’язану сторінку ... це, здається, працює лише іноді і дещо залежить від ОС та браузера. Отже, врахуйте закінчення #%3ar.page.15в URL-адресах. Якщо вас автоматично не переспрямовують на цю сторінку, обов'язково перегляньте посилання, щоб побачити, де / яку сторінку ви повинні шукати.
TryTryAgain

1
Приємно! Я бачу, що вони також вірять у Freemium і приховують певні "помилки" в грі (просто використовуючи техніку ліцензій). Мені хотілося б рішення для кросплатформних платформ замість сервера ліцензій лише для Android. Але цікаво теж.
BerggreenDK

btw. це смішно, ця відповідь має 15 великих пальців, моя вже перетнула 90 і не вважає правильною відповіддю :-)
BerggreenDK

8

Я знаю, що ти насправді не заплутався, але мені реально потрібно реагувати на це:

Звідси я не хочу придушувати наш код, як я бачив його порушеним раніше. Я хочу чогось більш твердого, і я також хочу навчитися це правильно робити.

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

Користувальницькі прийоми безпеки / криптографії - це добре, але без обдумування це моє скромне переконання, як кинути камінь у воду.

Я використовував ProGuard у виробництві багато місяців, і він просто працює бездоганно.

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


все, що можна прочитати, також можна скомпілювати, це лише питання потужності процесора та впертості. Обфускування все ще дозволяє запустити код, тому під час декомпіляції / знешкодження коду, зломщик все ще може порівнювати запущену версію з оригіналом. Це може затримати зломщик або зупинити менш досвідчений зломщик, але це зовсім небезпечно.
BerggreenDK

4

Шанс, що є більше талановитих програмістів, ніж ВАС (стосується всіх програмістів), становить 100%. І якщо це правда, ви не можете виправити злому. Але ви можете витратити на це стільки часу і сил, щоб збанкрутувати.

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

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

Наприклад, візьміть ігри Zynga у Facebook, чи вважаєте ви, що вас зламають? - Впевнений, і близько 100000 гравців грають лише тому, що ти можеш використовувати ботів, які автоматизують все.

Маючи величезну активну базу користувачів користувачів реальних людей, змушує геймерів типу архіватора захотіти пограти в гру - і якщо ваша гра, і це виглядає круто, то Avarage Joe теж захоче пограти. Якщо Avarage Joe грає, то його друзі, можливо, захочуть пограти, і тобі, мабуть, не буде байдуже нічого іншого, тоді буде краще, ніж його / її друг, вбиваючи час або мати про що поговорити. Друзі Avarage Joe, швидше за все, будуть готові платити, щоб бути кращим, ніж Джо, але, скоріше, твій хотів би вкласти гроші в те, що робить їх здатними бути кращими.

Крім того, якщо справжня цінність грає безкоштовно, то користувачі, які використовують безкоштовну злому версію, швидше за все, ніколи б не заплатили за неї. Але твої - це Авараж Джос та їхні друзі. Тож це як найдешевша реклама, яку ти можеш мати. Якщо ви хочете заробити на великій базі користувачів, тоді просто робіть нові версії гри з невеликими змінами рівнів та графіки.



2

Яке цікаве та тривожне питання. :-) Як вправу, ви можете спробувати випустити додаток через Amazon; у них є власний механізм DRM; Цікаво, чи працює він краще, ніж ProGuard ...


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

2

Один з ключових елементів, на мою думку, - це розповсюдження коду, щоб не все було в одному місці. Якщо у вас є функція під назвою LicenseChecker.checkLicense (), яка отримує ліцензію та перевіряє її, ви можете бути впевнені, що вона буде негайно відключена.

Єдиною вашою перевагою є те, що сухарики не можуть бачити коментарі вашого коду (і, якщо ви заплутаєте, назви методу / змінних), тож придумайте щось дивне. У onCreate () однієї діяльності ви отримуєте ідентифікатор ліцензії. У onResume () ви отримуєте ще одне значення, щоб перевірити його. Можливо, створіть нитку і зробіть там кілька перевірок. І тоді якийсь інший невідповідний фрагмент коду (можливо, керування програвачем) може забрати значення та порівняти його та десь зберегти результат. Тоді ще три невідповідні частини коду незалежно перевірять це значення та відключать вашу програму, якщо вона не відповідає.

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

І, звичайно, все може бути реверсивним - як тільки сухарі знаходять місце, де додаток вимкнено, вони відстежують значення, з якого читають. Потім вони зможуть простежити назад, де він зберігається, і відстежувати його назад ..... або, що набагато простіше, вони можуть просто відключити остаточну перевірку (саме тому я рекомендував 3 різних місця, і все запуск затримується). Безпека настільки ж хороша, як і найслабша ланка.

Ви не зможете припинити піратство. Ваша найкраща ставка - затримати розповсюдження піратської копії до тих пір, поки початковий галас щодо вашої програми не заспокоїться.


1

По-перше, я НЕ вважаю себе професіоналом у сфері безпеки SW, але:

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

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

Якщо це саме те, що ви не хотіли чути, то вибачте за ваш час :)


7
Збій додатка, коли ви виявите, що він був піратським, може призвести до виникнення негативних наслідків, якщо ви не зробите це явно, що тому воно вийшло з ладу. Пригадую, читав про деяких розробників ігор, які зробили краху своєї гри через випадковий проміжок часу, якщо це не вдалося перевірити проти піратства. Звичайно, багато людей піратствовали це, але не усвідомлювали, що аварії сталися через те, що вони керували піратською версією. Це призвело до багато поганої преси для розробників, і, можливо, зашкодило їхнім продажам.
Мітч Ліндгрен

3
@Mitch - я згоден. Я дав це як одну з можливостей, але, можливо, "найкраща" технічна стратегія, мабуть, не найкраща стратегія "бізнесу".
MByD

0

Користувачі Android просто приймуть біль від постійних телефонних будинків. Єдиний захищений додаток для Android - це завжди підключений додаток для Android.

Це значною мірою пов’язано з відмовою Google відблокувати встановлення, як це має Apple. У IOS вам доведеться втекти з телефону. На Android ви можете завантажити будь-який APK на складі, встановити фабрику.

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


Пояснення: хоча ви можете викорінювати будь-яку платформу, лише невеликий відсоток користувачів IOS насправді буде боятися встановити шланг для встановлення. Також у багатьох куточках світу складно або неможливо заплатити за додаток Android, що підживлює піратство.
щемонінер

Це була насправді одна з ідей моєї відповіді з 2011 року ... навіщо публікувати її знову?
BerggreenDK

0

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

Єдиний спосіб я бачу, як частково обійти його, - це зробити натомість онлайн-гру. Або певні функції обробляються в Інтернеті. Або якщо для Android / iOS доступне шифрування, яке захищається від несанкціонованого захисту, як denuvo.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.