Co můžeme ochránit?● Technický prostředek chránící například:● omezení redistribuce● dodržení zkušební lhůty zdarma● omezení funkcionality aplikace po uplynutí zkušební lhůty● ochrana kódu hry proti cheaterům
Jiné způsoby● Copyright
– Jedna z netechnických možností ochrany– V praxi nevynutitelný – morálka
● Software jako služba– kód je na serveru
● Free to play– nejdřív hraj, potom plať (nákupy v aplikaci)
● Reklama v aplikaci– cílená na uživatele
Motivace● Kvůli pirátství unikají peníze
– hausnumero: $63 miliard v roce 2014– 2 z 5 kopií jsou pirátské
● Ochrana know-how (algoritmy, kód)● Ochrana důvěryhodnosti● Studium protektorů ukazuje rovněž techniky používané i malwarem● Copy protection je prý nesmysl
Životnost protekce● Životní cyklus klientského SW je krátký● Např. mobilní hry 3-4 měsíce● Největší prodeje těsně po vydání nové verze SW● Za úspěch se považuje, pokud protekce vydrží několik měsíců
Dvojsečnost● Prodražení deploymentu a supportu● Zneužívání malwarem● Antiviry mají problém s protektory a packery
Software Taggant System● Umožňuje protektoru podepsat ochráněný program● Standard IEEE z roku 2011● IEEE v systému funguje jako root of trust, uznávající producenty protektorů● Antiviry díky podpisu rozeznají, že jde o "program ze známého zdroje"
Taggant vs. Authenticode● Authenticode: ověření vydavatele softwaru a neporušenost souboru● Navzájem se nevylučují● Taggant hash by měl být rychlejší● Taggant system je určený producentům protektorů, samotní uživatelé protektorů to nemusí řešit
Intel Tamper Protection● Toolkit● Má chránit "kritický kód a hodnotná data" před reverzováním a manipulací● Windows a Android binárky (.DLL a .SO soubory)● Obfuskátor umožňuje silnou obfuskaci: techniky sebemodifikujícího a zašifrovaného kódu
Protektory pro Windows● Tradiční: packer (kompresor) s přidanou funkcionalitou● S použitím VM● S aktivními prvky● Bez aktivních prvků
Rozšířená funkcionalita● API: např. ověření, že protekce nebyla odstraněna● Integrace licenčního manageru (DRM)● Kontejner obsahující soubory aplikace● HW dongle● Kontrola integrity
Metody● Obrana proti disassemblingu a dekompilaci:
– obfuskace, transformace do vlastního bytekódu, šifrování, komprese kódu● Detekce debuggeru (dynamická analýza)● Detekce virtualizovaného OS a emulátoru● Šifrování datových sekcí a resources● Skrytí importů● Přesun kódu aplikace (do loaderu či jinam)
Tradiční protektory● Transformují originální soubor a obalují ho● Protektorem přidaný kód („loader”) postupně dešifruje originální kód a spouští ho● ASProtect● DotFix NiceProtect● Enigma Protector
S použitím VM● Převede původní kód do vlastního bytekódu, kterému rozumí jenom přidaný virtuální stroj● Začíná být běžnou součástí všech protektorů● Zpomalení kódu ve virtualizační vrstvě● VMProtect● Denuvo
S aktivními prvky● S instalací ochráněné aplikace dojde k nainstalování systémového driveru● StarForce: nechvalně se proslavil jako aktivní ochrana pro hry: systém driverů kontrolujících čtení a zápis na disk na nejnižší úrovni vedl k poškození dat
Bez aktivních prvků● Pasivní ochrana:● Staví hradbu s různorodými obrannými mechanismy, nepoužívá „zvědy v terénu”
Android Java aplikace● Dá se snadno získat přímo ze zařízení● Soubor <apk>/classes.dex● DEX dekompilery (JEB, JADX), ● .dex → .class a pak Java dekompilery● Java (DEX) bytecode se dá jednoduše dekompilovat do původní podoby – do zdrojového kódu● Menšina aplikací také v C/C++ a C#
Android C/C++ aplikace● Standardní JNI – nativní kód se natahuje jako shared library● Jde vytvořit i čistě nativní app (android:hasCode="false")● Soubory <apk>/lib/lib*.so● Disassembling, dekompilace:
tradiční nástroje pro nativní kód jako objdump, IDA, gdb
Android C# aplikace● Mono runtime (Xamarin) jako knihovna
<apk>/lib/<jméno>.so● CLI (ECMA-335) standard● Opět jednoduše dekompilovatelný bytecode● Dekompilace: bězné CLI dekompilery:● dotPeek, ILSpy, dnSpy, ...
Android App Encryption● Google● Android 4.1 (Jelly Bean, vydán 2012)● Ochrana proti kopírování: placená aplikace se nainstaluje jenom na konkrétní zařízení● Během instalace dojde k dešifrování APK a jeho instalaci do /mnt/asec/ ("encrypted container")
Android App Encryption● Systém se ale pokoušel některé aplikace (např. služby) spouštět dřív, než došlo k mountnutí /mnt/asec/● Reakce: nejdřív Google Play app "dočasně" vypnula instalace do /mnt/asec/● Celá technologie potichu skončila
Protektory pro Android● Vesměs pasivní● DexGuard (vymakaná verze ProGuard z Android SDK)● Arxan● DexProtector● SecNeo (Bangcle)
Metody● Java obfuskátory:● Obfuskace kódu● Reflection namísto přímého volání metod● Dynamické načítání „schovaných” tříd● Přejmenování názvů tříd, metod a proměnných● Odstraňování debug info● Šifrování řetězců
Specificky pro Android● Obfuskace AndroidManifest● Testování „rootnutého” zařízení● Testování běhu na emulátoru● Certificate pinning – podepisovací certifikát apk
Zvláštní pozornost● DexProtector
– umožňuje chránit i nativní kód– skrývá kód jeho přesunutím z classes.dex do jiného souboru
● SecNeo (Bangcle)– původní kód schovává do nativních knihoven libsecexe a libsecmain
Závěr● Existuje poptávka po SW protektorech● Nezanedbatelné množství Windows aplikací nějakou ochranu používá● Android aplikace se dají snadno cracknout● Jenom minimum Android aplikací používá ochranu