Runtime Attacks Repackaging Automated DRT Decompilation-Reassembly Tools Code Injection Patches Either root-based or repackaged Data Editing Either external or internal (root)
Runtime Attacks Repackaging Automated DRT Decompilation-Reassembly Tools Code Injection Patches Either root-based or repackaged Data Editing Either external or internal (root) Root Access Piracy Abuse
Runtime Attacks Repackaging Automated DRT Decompilation-Reassembly Tools Code Injection Patches Either root-based or repackaged Data Editing Either external or internal (root) Root Access Piracy Abuse
your app requires to be true in order to work properly. It is your security policy specification. The set of security countermeasures employed by your software to physically check the conditions of the security environment. It is the security policy implementation. •No Pirate Apps Installed •No Emulator •No Custom OS
• No IAP/Subscriptions (offline) Chess Analyzer • No Endpoints (local value) • Paid Download • No IAP/Subscriptions Task Manager • Service Endpoints (aggregated value) • Free Download • In App Purchase for Pro Version ♫ Streaming Service • Service + API Endpoints (aggregated value) • Free Download • Subscription + Ads ⇒ Zero protection ⇒ Low protection ⇒ Medium protection ⇒ High protection
of attacks Binary Binary Binary too little protection too much protection nailed it •Overprotection: your security environment is stricter than what it would need to be (for your app to operate successfully).
time and potentially network/storage) • Infrastructure (your application becomes more complex and/or depends on external services) • Negative feedback (your users may find the protection mechanisms unfair)
Runtime Attacks Repackaging Automated DRT Decompilation-Reassembly Tools Code Injection Patches Either root-based or repackaged Data Editing Either external or internal (root) Root Access Piracy Abuse
String = … // Create an instance of a manager. val integrityManager = IntegrityManagerFactory.create(applicationContext) // Request the integrity token by providing a nonce. val integrityTokenResponse: Task<IntegrityTokenResponse> = integrityManager.requestIntegrityToken( IntegrityTokenRequest.builder() .setNonce(nonce) .build())
application from the ground up. The building blocks of the application are made with security in mind, so that the final binary is robust against a variety of attacks. Active runtime capabilities to intercept and respond to malicious attacks, interference or tampering attempts as they happen. • Code obfuscation • Encrypted data storage • Secure data transitions • Dynamic code loading