SlideShare a Scribd company logo
1 of 36
Download to read offline
Защита мобильных игр
от типичных хаков
Алексей Чубарь
ведущий разработчик, BIT.GAMES
The face of evil
The face of evil
Защита целостности
Патчи Android-приложений
● Удаление рекламы
● Удаление проверок безопасности
● Удаление/добавление локализаций
● Удаление отладочной информации
● Подмена аккаунта Google
● Подмена идентификаторов (Android ID, IMEI, ...)
● Модификации конкретных игр (разблокировка
контента, подмена характеристик игрока, ...)
Патчи Android-приложений
Добавление/удаление/замена файлов и их модификация с помощью
регулярных выражений.
Патчи Android-приложений
Удаление рекламы патчем xml-файлов, описывающих UI.
Рекламным блокам выставляется нулевая высота и невидимость:
Патчи Android-приложений
Удаление рекламы патчем smali-файлов, содержащих байт-код.
Стираются все URL’ы рекламных сетей:
Патчи Android-приложений
DLL, содержащие байт-код .NET уязвимы для аналогичных патчей.
.dll
Подпись приложения
Hacker’s
private
key
Hacker’s
public
key
Проверка подписи
проходит успешно
при установке с
неизвестного сайта
Hacked
Unsigned
APK
Хакер скачивает и
изменяет приложение
Подписывает своим ключом
Signed
APK
Hacker’s
public
key
Hacked
Signed
APK
Подпись приложения: runtime-проверка
Signed APK
Public
key
final String
expectedPrints[] =
{“1ceb00b5”,…};
Подпись приложения: runtime-проверка
Вместо обращения к PackageManager вставляются обращения к
классу-заглушке Fix. Он возвращает оригинальные подписи, и наша
проверка проходит:
Hacker’s
public
key
Hacked
Signed
APK
1ceb00b5
Fix:
1ceb00b5
Подпись приложения: проверка в нативном коде
● Используя JNI, проверку можно вынести в С++. Машинный код
сложнее модифицировать, чем smali- и dll-файлы.
● Можно проверять в коде С# и выбрать Scripting Backend: IL2CPP.
string pkid = "your.package.id";
int flags = 0x00000040;//GET_SIGNATURES
using(var up = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
using(var ca = up.GetStatic<AndroidJavaObject>("currentActivity"))
using(var pm = ca.Call<AndroidJavaObject>("getPackageManager"))
using(var pi = pm.Call<AndroidJavaObject>("getPackageInfo", pkid, flags))
{
var signatures = pi.Get<AndroidJavaObject[]>("signatures");
…
Подпись приложения: проверка в нативном коде
● Простота
● Нет зависимостей от сторонних библиотек и сервисов
● Работает без интернета
● Сборка С++ отдельно под каждую архитектуру (ARM, x86, MIPS)
● Не панацея - машинный код можно дизассемблировать
bit.ly/PatchingBin
● На некоторых площадках нельзя заранее знать подписи:
○ Google Play при использовании Google Play App Signing
○ Amazon AppStore
Защита целостности: сторонние сервисы
SafetyNet - утилита Play Services для выявления угроз безопасности.
Onegini “Mobile Security Platform”
● Высокая степень защиты
● Широкий спектр доступных проверок
● Сложнее в реализации
● Зависимость от Google Play Services и/или других SDK
● Требуется доступ в интернет
● Не панацея, а дополнительное средство защиты
Защита целостности: обфускаторы
● Встроенные: Proguard
○ бесплатно
○ доступно в Android Studio, Unity, …
● Коммерческие:
● DexGuard, DexProtector, DashO
● iXGuard
○ стоят денег
○ много умеют
Манипуляции с данными приложения
Манипуляции с RAM: поиск и отсев
int money = 19;
21.4 2453 7997 19 691.5 9797 321
19.0 9941 2180 214 986 86 19
Манипуляции с RAM: поиск и отсев
SpendMoney(1);
//money == 18
21.4 2453 7997 19 691.5 9797 321
19.0 9941 2180 214 986 86 19
18
21
Манипуляции с RAM: поиск и отсев
SpendMoney(1);
//money == 17
21.4 2453 7997 19 691.5 9797 321
19.0 9941 2180 214 986 86 19
17
21
999
Манипуляции с RAM: заморозка
21
SpendMoney(15);
//money still == 17,
//not 2 as expected
21.4 2453 7997 19 691.5 9797 321
19.0 9941 2180 214 986 86 19
17
21
Манипуляции с RAM: групповой поиск
21.411 57600 7997 250000 691.5
Обфускация данных в RAM
2347 3143
5760
● Числа в виде строк
● Числа в виде (перемешанного) массива байтов
● Произвольная арифметика над числами
● ...
“5”=53 “7”=55 “6”=54 “0”=48
5760
5 0 6 7
5760
Обфускация в RAM: v1 (Anti-Cheat Toolkit)
struct ObscuredInt {
private int bait, hiddenVal, key = 8713;
public void set(int value) {
bait = value;
hiddenVal = value XOR key;
}
public int get() {
int value = hiddenVal XOR key;
if(value != bait)
error(“Not so fast, dirty cheater!”)
return value;
}
...
Обфускация в RAM: v40968623587
struct ObscuredInt {
private static Random rnd = new Random();
//now static; new random key each session
private static int key = rnd.NextInt();
//split value in 2 memory cells, added checksum
private int hiddenVal0, hiddenVal1, checksum;
//random split on each “set” call:
private int storeHiddenVal(int val) {
int part = rnd.Range(0, val);
hiddenVal0 = part;
hiddenVal1 = val - part;
checksum = crc32(mem0, mem1);
}
Обфускация данных в RAM: v40968623587
● Значение “наживки”, которое видно пользователю (в окрестности
которого есть реальные данные), больше не используется.
● Отсев невозможен, так как каждое присвоение значения меняет
разбиение между ячейками и контрольную сумму случайным
образом.
● Ключ лежит в другой области данных.
● Каждую сессию создаётся новый ключ.
● Сохраняется возможность обнаружить изменение ячейки путём
проверки контрольной суммы.
● Хорошая производительность.
Манипуляции с сохранёнными данными
Сохранённые локально данные приложения на Android-устройствах
можно найти и модифицировать/заменить даже без root-доступа. Их
стоит шифровать.
Пример пути: /storage/emulated/0/Android/data/app.package.id/files
Game
Money = 100
Save
Editor
Money = 999
Edit
Game
Money = 999
Load
Манипуляции с сохранёнными данными
Unity-класс PlayerPrefs позволяет хранить данные между сессиями
● SharedPreferences /data/data/pkg_id/shared_prefs/pkg_id.xml
● plist file /Apps/app_folder/Library/Preferences/app_name.plist
● Нет доступа извне без root/jailbreak.
● Удобно пользоваться
● Только некоторые типы данных: int, float, string, bool*, string array*
● Редко: спонтанная очистка SharedPreferences при обновлении
игры или ОС
Манипуляции с сохранёнными данными
Игровые сервисы торговых площадок предоставляют API для
защищённого облачного хранения данных:
● Google Play Games (Saved Games API, Games.Snapshots)
● iOS Game Center/GameKit (GKSavedGame)
● Amazon GameCircle (Whispersync)
● Защита
● Возможность восстановления прогресса из облака
● Интеграция с Unity и другими платформами для разработки
● Зависимость от сервисов каждой конкретной платформы
Защита от перевода часов
Пользователи могут переводить
время или изменять часовой пояс
на устройстве, чтобы пропустить
ожидание в игре.
Защита от перевода часов: монотонные часы
Time server
Valid current time
GetUptime()
- Uptime delta
1. Sync
rebooted?
2. Get time
GetUptime()
Yes
No
Time
+
● SystemClock.elapsedRealtime()
● sysctl call
● “Time-cheat prevention by Vasilij", etc...
Защита от перевода часов: монотонные часы
rebooted?
2. Get time
HackedUptime()
No
Time + 10h
+Uptime delta
Хакер может вмешаться в работу монотонных
часов на устройстве и перемотать время
Итоги
1. Модификация и перепаковка приложений. Проверка подписей и
другой критичный функционал - в нативном коде. Сервисы
проверки целостности.
Итоги
1. Модификация и перепаковка приложений. Проверка подписей и
другой критичный функционал - в нативном коде. Сервисы
проверки целостности.
2. Манипуляции с данными приложения. Шифрование сохраняемых
данных. Облачное сохранение. Обфускация данных в памяти.
Итоги
1. Модификация и перепаковка приложений. Проверка подписей и
другой критичный функционал - в нативном коде. Сервисы
проверки целостности.
2. Манипуляции с данными приложения. Шифрование сохраняемых
данных. Облачное сохранение. Обфускация данных в памяти.
3. Манипуляции со временем и перевод часов. Использовать
монотонные часы и синхронизацию.
Спасибо за внимание
bit.ly/minskhax
lenchez@bit-creative.com

More Related Content

Similar to Protecting your mobile game from the most common hacks

20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonovComputer Science Club
 
Статический анализ Си++ кода
Статический анализ Си++ кодаСтатический анализ Си++ кода
Статический анализ Си++ кодаTatyanazaxarova
 
ADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаAndrey Karpov
 
"Погружение в Robolectric" Дмитрий Костырев (Avito)
"Погружение в Robolectric"  Дмитрий Костырев (Avito)"Погружение в Robolectric"  Дмитрий Костырев (Avito)
"Погружение в Robolectric" Дмитрий Костырев (Avito)AvitoTech
 
NetworkUA - 2012 - Introduction TypeScript
NetworkUA - 2012 - Introduction TypeScript NetworkUA - 2012 - Introduction TypeScript
NetworkUA - 2012 - Introduction TypeScript Dmytro Mindra
 
Ciklum .NET Saturday - Introduction to TypeScript
Ciklum .NET Saturday - Introduction to TypeScriptCiklum .NET Saturday - Introduction to TypeScript
Ciklum .NET Saturday - Introduction to TypeScriptDmytro Mindra
 
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON
 
Mobile Fest#spb 2012
Mobile Fest#spb 2012Mobile Fest#spb 2012
Mobile Fest#spb 2012dmalykhanov
 
#MBLTdev: Знакомство с codesign (e-Legion)
#MBLTdev: Знакомство с codesign (e-Legion)#MBLTdev: Знакомство с codesign (e-Legion)
#MBLTdev: Знакомство с codesign (e-Legion)e-Legion
 
GAE - плюсы/минусы/подводные камни
GAE - плюсы/минусы/подводные камниGAE - плюсы/минусы/подводные камни
GAE - плюсы/минусы/подводные камниYehor Nazarkin
 
Windows Phone 7 Game Development
Windows Phone 7 Game DevelopmentWindows Phone 7 Game Development
Windows Phone 7 Game DevelopmentSergii Lutai
 
История из жизни. Демонстрация работы реального злоумышленника на примере ата...
История из жизни. Демонстрация работы реального злоумышленника на примере ата...История из жизни. Демонстрация работы реального злоумышленника на примере ата...
История из жизни. Демонстрация работы реального злоумышленника на примере ата...Dmitry Evteev
 
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеШкола-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеГлеб Тарасов
 
Е. Фиделин Безопасность Drupal сайтов
Е. Фиделин Безопасность Drupal сайтовЕ. Фиделин Безопасность Drupal сайтов
Е. Фиделин Безопасность Drupal сайтовAlbina Tiupa
 
Безопасность Drupal сайтов
Безопасность Drupal сайтовБезопасность Drupal сайтов
Безопасность Drupal сайтовEugene Fidelin
 
Windbg: когда у нас не воспроизводится. Александр Головач ➠ CoreHard Autumn ...
Windbg: когда у нас не воспроизводится. Александр Головач ➠  CoreHard Autumn ...Windbg: когда у нас не воспроизводится. Александр Головач ➠  CoreHard Autumn ...
Windbg: когда у нас не воспроизводится. Александр Головач ➠ CoreHard Autumn ...corehard_by
 
Иструментарий для быстрой разработки игр с 2 d физикой
Иструментарий для быстрой разработки игр с 2 d физикойИструментарий для быстрой разработки игр с 2 d физикой
Иструментарий для быстрой разработки игр с 2 d физикойakimovpro
 
Positive Hack Days. Терешкин. "Злая горничная" атакует PGP
Positive Hack Days. Терешкин. "Злая горничная" атакует PGPPositive Hack Days. Терешкин. "Злая горничная" атакует PGP
Positive Hack Days. Терешкин. "Злая горничная" атакует PGPPositive Hack Days
 
КРИ 2010. Разработка технологической платформы в условиях временного прессинга
КРИ 2010. Разработка технологической платформы в условиях временного прессингаКРИ 2010. Разработка технологической платформы в условиях временного прессинга
КРИ 2010. Разработка технологической платформы в условиях временного прессингаKirill Lebedev
 
Interactive Lab: Разработка Flash игр на Unity3D
Interactive Lab: Разработка Flash игр на Unity3DInteractive Lab: Разработка Flash игр на Unity3D
Interactive Lab: Разработка Flash игр на Unity3DDevGAMM Conference
 

Similar to Protecting your mobile game from the most common hacks (20)

20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
 
Статический анализ Си++ кода
Статический анализ Си++ кодаСтатический анализ Си++ кода
Статический анализ Си++ кода
 
ADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кодаADD 2011: Статический анализ Си++ кода
ADD 2011: Статический анализ Си++ кода
 
"Погружение в Robolectric" Дмитрий Костырев (Avito)
"Погружение в Robolectric"  Дмитрий Костырев (Avito)"Погружение в Robolectric"  Дмитрий Костырев (Avito)
"Погружение в Robolectric" Дмитрий Костырев (Avito)
 
NetworkUA - 2012 - Introduction TypeScript
NetworkUA - 2012 - Introduction TypeScript NetworkUA - 2012 - Introduction TypeScript
NetworkUA - 2012 - Introduction TypeScript
 
Ciklum .NET Saturday - Introduction to TypeScript
Ciklum .NET Saturday - Introduction to TypeScriptCiklum .NET Saturday - Introduction to TypeScript
Ciklum .NET Saturday - Introduction to TypeScript
 
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
 
Mobile Fest#spb 2012
Mobile Fest#spb 2012Mobile Fest#spb 2012
Mobile Fest#spb 2012
 
#MBLTdev: Знакомство с codesign (e-Legion)
#MBLTdev: Знакомство с codesign (e-Legion)#MBLTdev: Знакомство с codesign (e-Legion)
#MBLTdev: Знакомство с codesign (e-Legion)
 
GAE - плюсы/минусы/подводные камни
GAE - плюсы/минусы/подводные камниGAE - плюсы/минусы/подводные камни
GAE - плюсы/минусы/подводные камни
 
Windows Phone 7 Game Development
Windows Phone 7 Game DevelopmentWindows Phone 7 Game Development
Windows Phone 7 Game Development
 
История из жизни. Демонстрация работы реального злоумышленника на примере ата...
История из жизни. Демонстрация работы реального злоумышленника на примере ата...История из жизни. Демонстрация работы реального злоумышленника на примере ата...
История из жизни. Демонстрация работы реального злоумышленника на примере ата...
 
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеШкола-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
 
Е. Фиделин Безопасность Drupal сайтов
Е. Фиделин Безопасность Drupal сайтовЕ. Фиделин Безопасность Drupal сайтов
Е. Фиделин Безопасность Drupal сайтов
 
Безопасность Drupal сайтов
Безопасность Drupal сайтовБезопасность Drupal сайтов
Безопасность Drupal сайтов
 
Windbg: когда у нас не воспроизводится. Александр Головач ➠ CoreHard Autumn ...
Windbg: когда у нас не воспроизводится. Александр Головач ➠  CoreHard Autumn ...Windbg: когда у нас не воспроизводится. Александр Головач ➠  CoreHard Autumn ...
Windbg: когда у нас не воспроизводится. Александр Головач ➠ CoreHard Autumn ...
 
Иструментарий для быстрой разработки игр с 2 d физикой
Иструментарий для быстрой разработки игр с 2 d физикойИструментарий для быстрой разработки игр с 2 d физикой
Иструментарий для быстрой разработки игр с 2 d физикой
 
Positive Hack Days. Терешкин. "Злая горничная" атакует PGP
Positive Hack Days. Терешкин. "Злая горничная" атакует PGPPositive Hack Days. Терешкин. "Злая горничная" атакует PGP
Positive Hack Days. Терешкин. "Злая горничная" атакует PGP
 
КРИ 2010. Разработка технологической платформы в условиях временного прессинга
КРИ 2010. Разработка технологической платформы в условиях временного прессингаКРИ 2010. Разработка технологической платформы в условиях временного прессинга
КРИ 2010. Разработка технологической платформы в условиях временного прессинга
 
Interactive Lab: Разработка Flash игр на Unity3D
Interactive Lab: Разработка Flash игр на Unity3DInteractive Lab: Разработка Flash игр на Unity3D
Interactive Lab: Разработка Flash игр на Unity3D
 

More from DevGAMM Conference

The art of small steps, or how to make sound for games in conditions of war /...
The art of small steps, or how to make sound for games in conditions of war /...The art of small steps, or how to make sound for games in conditions of war /...
The art of small steps, or how to make sound for games in conditions of war /...DevGAMM Conference
 
Breaking up with FMOD - Why we ended things and embraced Metasounds / Daniel ...
Breaking up with FMOD - Why we ended things and embraced Metasounds / Daniel ...Breaking up with FMOD - Why we ended things and embraced Metasounds / Daniel ...
Breaking up with FMOD - Why we ended things and embraced Metasounds / Daniel ...DevGAMM Conference
 
How Audio Objects Improve Spatial Accuracy / Mads Maretty Sønderup (Audiokine...
How Audio Objects Improve Spatial Accuracy / Mads Maretty Sønderup (Audiokine...How Audio Objects Improve Spatial Accuracy / Mads Maretty Sønderup (Audiokine...
How Audio Objects Improve Spatial Accuracy / Mads Maretty Sønderup (Audiokine...DevGAMM Conference
 
Why indie developers should consider hyper-casual right now / Igor Gurenyov (...
Why indie developers should consider hyper-casual right now / Igor Gurenyov (...Why indie developers should consider hyper-casual right now / Igor Gurenyov (...
Why indie developers should consider hyper-casual right now / Igor Gurenyov (...DevGAMM Conference
 
AI / ML for Indies / Tyler Coleman (Retora Games)
AI / ML for Indies / Tyler Coleman (Retora Games)AI / ML for Indies / Tyler Coleman (Retora Games)
AI / ML for Indies / Tyler Coleman (Retora Games)DevGAMM Conference
 
Agility is the Key: Power Up Your GameDev Project Management with Agile Pract...
Agility is the Key: Power Up Your GameDev Project Management with Agile Pract...Agility is the Key: Power Up Your GameDev Project Management with Agile Pract...
Agility is the Key: Power Up Your GameDev Project Management with Agile Pract...DevGAMM Conference
 
New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...
New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...
New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...DevGAMM Conference
 
Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...
Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...
Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...DevGAMM Conference
 
Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...
Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...
Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...DevGAMM Conference
 
From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)
From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)
From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)DevGAMM Conference
 
Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)
Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)
Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)DevGAMM Conference
 
Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...
Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...
Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...DevGAMM Conference
 
How to increase wishlists & game sales from China? Growth marketing tactics &...
How to increase wishlists & game sales from China? Growth marketing tactics &...How to increase wishlists & game sales from China? Growth marketing tactics &...
How to increase wishlists & game sales from China? Growth marketing tactics &...DevGAMM Conference
 
Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)
Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)
Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)DevGAMM Conference
 
Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...
Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...
Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...DevGAMM Conference
 
Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...
Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...
Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...DevGAMM Conference
 
The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...
The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...
The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...DevGAMM Conference
 
Branded Content: How to overcome players' immunity to advertising / Alex Brod...
Branded Content: How to overcome players' immunity to advertising / Alex Brod...Branded Content: How to overcome players' immunity to advertising / Alex Brod...
Branded Content: How to overcome players' immunity to advertising / Alex Brod...DevGAMM Conference
 
Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...
Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...
Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...DevGAMM Conference
 
How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...
How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...
How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...DevGAMM Conference
 

More from DevGAMM Conference (20)

The art of small steps, or how to make sound for games in conditions of war /...
The art of small steps, or how to make sound for games in conditions of war /...The art of small steps, or how to make sound for games in conditions of war /...
The art of small steps, or how to make sound for games in conditions of war /...
 
Breaking up with FMOD - Why we ended things and embraced Metasounds / Daniel ...
Breaking up with FMOD - Why we ended things and embraced Metasounds / Daniel ...Breaking up with FMOD - Why we ended things and embraced Metasounds / Daniel ...
Breaking up with FMOD - Why we ended things and embraced Metasounds / Daniel ...
 
How Audio Objects Improve Spatial Accuracy / Mads Maretty Sønderup (Audiokine...
How Audio Objects Improve Spatial Accuracy / Mads Maretty Sønderup (Audiokine...How Audio Objects Improve Spatial Accuracy / Mads Maretty Sønderup (Audiokine...
How Audio Objects Improve Spatial Accuracy / Mads Maretty Sønderup (Audiokine...
 
Why indie developers should consider hyper-casual right now / Igor Gurenyov (...
Why indie developers should consider hyper-casual right now / Igor Gurenyov (...Why indie developers should consider hyper-casual right now / Igor Gurenyov (...
Why indie developers should consider hyper-casual right now / Igor Gurenyov (...
 
AI / ML for Indies / Tyler Coleman (Retora Games)
AI / ML for Indies / Tyler Coleman (Retora Games)AI / ML for Indies / Tyler Coleman (Retora Games)
AI / ML for Indies / Tyler Coleman (Retora Games)
 
Agility is the Key: Power Up Your GameDev Project Management with Agile Pract...
Agility is the Key: Power Up Your GameDev Project Management with Agile Pract...Agility is the Key: Power Up Your GameDev Project Management with Agile Pract...
Agility is the Key: Power Up Your GameDev Project Management with Agile Pract...
 
New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...
New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...
New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...
 
Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...
Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...
Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...
 
Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...
Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...
Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...
 
From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)
From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)
From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)
 
Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)
Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)
Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)
 
Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...
Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...
Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...
 
How to increase wishlists & game sales from China? Growth marketing tactics &...
How to increase wishlists & game sales from China? Growth marketing tactics &...How to increase wishlists & game sales from China? Growth marketing tactics &...
How to increase wishlists & game sales from China? Growth marketing tactics &...
 
Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)
Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)
Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)
 
Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...
Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...
Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...
 
Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...
Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...
Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...
 
The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...
The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...
The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...
 
Branded Content: How to overcome players' immunity to advertising / Alex Brod...
Branded Content: How to overcome players' immunity to advertising / Alex Brod...Branded Content: How to overcome players' immunity to advertising / Alex Brod...
Branded Content: How to overcome players' immunity to advertising / Alex Brod...
 
Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...
Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...
Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...
 
How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...
How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...
How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...
 

Protecting your mobile game from the most common hacks

  • 1. Защита мобильных игр от типичных хаков Алексей Чубарь ведущий разработчик, BIT.GAMES
  • 2. The face of evil
  • 3. The face of evil
  • 5. Патчи Android-приложений ● Удаление рекламы ● Удаление проверок безопасности ● Удаление/добавление локализаций ● Удаление отладочной информации ● Подмена аккаунта Google ● Подмена идентификаторов (Android ID, IMEI, ...) ● Модификации конкретных игр (разблокировка контента, подмена характеристик игрока, ...)
  • 6. Патчи Android-приложений Добавление/удаление/замена файлов и их модификация с помощью регулярных выражений.
  • 7. Патчи Android-приложений Удаление рекламы патчем xml-файлов, описывающих UI. Рекламным блокам выставляется нулевая высота и невидимость:
  • 8. Патчи Android-приложений Удаление рекламы патчем smali-файлов, содержащих байт-код. Стираются все URL’ы рекламных сетей:
  • 9. Патчи Android-приложений DLL, содержащие байт-код .NET уязвимы для аналогичных патчей. .dll
  • 10. Подпись приложения Hacker’s private key Hacker’s public key Проверка подписи проходит успешно при установке с неизвестного сайта Hacked Unsigned APK Хакер скачивает и изменяет приложение Подписывает своим ключом Signed APK Hacker’s public key Hacked Signed APK
  • 11. Подпись приложения: runtime-проверка Signed APK Public key final String expectedPrints[] = {“1ceb00b5”,…};
  • 12. Подпись приложения: runtime-проверка Вместо обращения к PackageManager вставляются обращения к классу-заглушке Fix. Он возвращает оригинальные подписи, и наша проверка проходит: Hacker’s public key Hacked Signed APK 1ceb00b5 Fix: 1ceb00b5
  • 13. Подпись приложения: проверка в нативном коде ● Используя JNI, проверку можно вынести в С++. Машинный код сложнее модифицировать, чем smali- и dll-файлы. ● Можно проверять в коде С# и выбрать Scripting Backend: IL2CPP. string pkid = "your.package.id"; int flags = 0x00000040;//GET_SIGNATURES using(var up = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) using(var ca = up.GetStatic<AndroidJavaObject>("currentActivity")) using(var pm = ca.Call<AndroidJavaObject>("getPackageManager")) using(var pi = pm.Call<AndroidJavaObject>("getPackageInfo", pkid, flags)) { var signatures = pi.Get<AndroidJavaObject[]>("signatures"); …
  • 14. Подпись приложения: проверка в нативном коде ● Простота ● Нет зависимостей от сторонних библиотек и сервисов ● Работает без интернета ● Сборка С++ отдельно под каждую архитектуру (ARM, x86, MIPS) ● Не панацея - машинный код можно дизассемблировать bit.ly/PatchingBin ● На некоторых площадках нельзя заранее знать подписи: ○ Google Play при использовании Google Play App Signing ○ Amazon AppStore
  • 15. Защита целостности: сторонние сервисы SafetyNet - утилита Play Services для выявления угроз безопасности. Onegini “Mobile Security Platform” ● Высокая степень защиты ● Широкий спектр доступных проверок ● Сложнее в реализации ● Зависимость от Google Play Services и/или других SDK ● Требуется доступ в интернет ● Не панацея, а дополнительное средство защиты
  • 16. Защита целостности: обфускаторы ● Встроенные: Proguard ○ бесплатно ○ доступно в Android Studio, Unity, … ● Коммерческие: ● DexGuard, DexProtector, DashO ● iXGuard ○ стоят денег ○ много умеют
  • 18. Манипуляции с RAM: поиск и отсев int money = 19; 21.4 2453 7997 19 691.5 9797 321 19.0 9941 2180 214 986 86 19
  • 19. Манипуляции с RAM: поиск и отсев SpendMoney(1); //money == 18 21.4 2453 7997 19 691.5 9797 321 19.0 9941 2180 214 986 86 19 18 21
  • 20. Манипуляции с RAM: поиск и отсев SpendMoney(1); //money == 17 21.4 2453 7997 19 691.5 9797 321 19.0 9941 2180 214 986 86 19 17 21 999
  • 21. Манипуляции с RAM: заморозка 21 SpendMoney(15); //money still == 17, //not 2 as expected 21.4 2453 7997 19 691.5 9797 321 19.0 9941 2180 214 986 86 19 17 21
  • 22. Манипуляции с RAM: групповой поиск 21.411 57600 7997 250000 691.5
  • 23. Обфускация данных в RAM 2347 3143 5760 ● Числа в виде строк ● Числа в виде (перемешанного) массива байтов ● Произвольная арифметика над числами ● ... “5”=53 “7”=55 “6”=54 “0”=48 5760 5 0 6 7 5760
  • 24. Обфускация в RAM: v1 (Anti-Cheat Toolkit) struct ObscuredInt { private int bait, hiddenVal, key = 8713; public void set(int value) { bait = value; hiddenVal = value XOR key; } public int get() { int value = hiddenVal XOR key; if(value != bait) error(“Not so fast, dirty cheater!”) return value; } ...
  • 25. Обфускация в RAM: v40968623587 struct ObscuredInt { private static Random rnd = new Random(); //now static; new random key each session private static int key = rnd.NextInt(); //split value in 2 memory cells, added checksum private int hiddenVal0, hiddenVal1, checksum; //random split on each “set” call: private int storeHiddenVal(int val) { int part = rnd.Range(0, val); hiddenVal0 = part; hiddenVal1 = val - part; checksum = crc32(mem0, mem1); }
  • 26. Обфускация данных в RAM: v40968623587 ● Значение “наживки”, которое видно пользователю (в окрестности которого есть реальные данные), больше не используется. ● Отсев невозможен, так как каждое присвоение значения меняет разбиение между ячейками и контрольную сумму случайным образом. ● Ключ лежит в другой области данных. ● Каждую сессию создаётся новый ключ. ● Сохраняется возможность обнаружить изменение ячейки путём проверки контрольной суммы. ● Хорошая производительность.
  • 27. Манипуляции с сохранёнными данными Сохранённые локально данные приложения на Android-устройствах можно найти и модифицировать/заменить даже без root-доступа. Их стоит шифровать. Пример пути: /storage/emulated/0/Android/data/app.package.id/files Game Money = 100 Save Editor Money = 999 Edit Game Money = 999 Load
  • 28. Манипуляции с сохранёнными данными Unity-класс PlayerPrefs позволяет хранить данные между сессиями ● SharedPreferences /data/data/pkg_id/shared_prefs/pkg_id.xml ● plist file /Apps/app_folder/Library/Preferences/app_name.plist ● Нет доступа извне без root/jailbreak. ● Удобно пользоваться ● Только некоторые типы данных: int, float, string, bool*, string array* ● Редко: спонтанная очистка SharedPreferences при обновлении игры или ОС
  • 29. Манипуляции с сохранёнными данными Игровые сервисы торговых площадок предоставляют API для защищённого облачного хранения данных: ● Google Play Games (Saved Games API, Games.Snapshots) ● iOS Game Center/GameKit (GKSavedGame) ● Amazon GameCircle (Whispersync) ● Защита ● Возможность восстановления прогресса из облака ● Интеграция с Unity и другими платформами для разработки ● Зависимость от сервисов каждой конкретной платформы
  • 30. Защита от перевода часов Пользователи могут переводить время или изменять часовой пояс на устройстве, чтобы пропустить ожидание в игре.
  • 31. Защита от перевода часов: монотонные часы Time server Valid current time GetUptime() - Uptime delta 1. Sync rebooted? 2. Get time GetUptime() Yes No Time + ● SystemClock.elapsedRealtime() ● sysctl call ● “Time-cheat prevention by Vasilij", etc...
  • 32. Защита от перевода часов: монотонные часы rebooted? 2. Get time HackedUptime() No Time + 10h +Uptime delta Хакер может вмешаться в работу монотонных часов на устройстве и перемотать время
  • 33. Итоги 1. Модификация и перепаковка приложений. Проверка подписей и другой критичный функционал - в нативном коде. Сервисы проверки целостности.
  • 34. Итоги 1. Модификация и перепаковка приложений. Проверка подписей и другой критичный функционал - в нативном коде. Сервисы проверки целостности. 2. Манипуляции с данными приложения. Шифрование сохраняемых данных. Облачное сохранение. Обфускация данных в памяти.
  • 35. Итоги 1. Модификация и перепаковка приложений. Проверка подписей и другой критичный функционал - в нативном коде. Сервисы проверки целостности. 2. Манипуляции с данными приложения. Шифрование сохраняемых данных. Облачное сохранение. Обфускация данных в памяти. 3. Манипуляции со временем и перевод часов. Использовать монотонные часы и синхронизацию.