Impedire / rendere difficile l'assemblea binaria di patch

Non sono sicuro se la terminologia è corretta quali pratiche di codice si possono utilizzare per rendere difficile per qualcuno modificare il binario / assembly per ignorare un controllo:

ad esempio nel codice sorgente.

  • Interpretare la traccia di performance multicore (Eclipse / Android)
  • Il dispositivo virtuale in esecuzione in Genymotion va in modalità offline in ADB
  • Come impostare la visualizzazione di contenuto di NativeActivity nel componente creato in Java
  • Libgdx SpriteBatch rende la texture
  • Come installare il plugin ButterKnife in Android Studio?
  • Imbottitura ListView Android per i contenuti senza muovere l'altezza ListView?
  • bool verificationResult = verify(); if (verificationResult){ allow_Something(); }else{ prevent_Something(); } 

    Se una persona che esamina la versione di disassemblaggio del codice precedente può modificare i 'jump opcodes (?)' Per eseguire allow_Something anche quando il risultato della verifica è falso.

    Qualcosa di simile è trattato qui http://www.codeproject.com/Articles/18961/Tamper-Aware-and-Self-Healing-Code#pre0

    Nota creo il binario in C + + per essere usato tramite NDK su Android.

  • Errore di applicazione Android - duplica id 0x7f04000f, tag null o id parentesi 0x0 con un altro frammento per com.google.android.gms.maps.SupportMapFragment
  • Imansible trovare il metodo getPackageManager () in android
  • " non sembra iniziare; arrendersi"
  • Google Map v2 non funziona nel negozio di giochi
  • Che cosa è Gradle in Android Studio?
  • Dynamic TextView su ActionBar
  • 4 Solutions collect form web for “Impedire / rendere difficile l'assemblea binaria di patch”

    Dal momento che il consenso generale è finora, è imansible impedire a chiunque abbia l'inferno di "cracking" il tuo APK. Le tecniche di obscurazione aumentano solo la complessità necessaria per "crepa" l'APK una volta. Dopo essere stato caricato nella miriade di siti che offrono gratuitamente APK, è solo una ricerca di Google, anche lontana dal "noob-est" di noobs di Android.

    Anche la sicurezza attraverso l'oscurità non ti farà molto .

    Per quanto riguarda la protezione dell'applicazione APK da parte dell'hacking, raccommand il seguente articolo che illustra lo stato attuale della validation delle licenze di APK su Android . Le tecniche descritte in esso dovrebbero darti un'idea dei comuni vettori di attacco che devi proteggere contro.

    Proguard è un buon posto per iniziare a obfuscare il tuo APK .

    Dopo aver ottenuto un APK obfuscato, farlo eseguire attraverso i seguenti strumenti e osservare la fonte de-compilata. Tutti questi sono strumenti gratuiti e open-source che sono molto popolari e sicuramente sarà la prima cosa che cercherà qualsiasi cracker decente:
    1. baksmali
    2. apktool
    3. Dex2Jar + JD-Gui

    Continuare a aggiungere livelli di obfuscazione al codice finché non si accorga che l'output di questi strumenti è abbastanza complicato per avere senso. (Ancora non sottovalutare ciò che un college-grad armato di coke, pizza e la conoscenza di opcode DVM può realizzare durante un fine settimana).

    Per quanto riguarda le tecniche discusse nel collegamento che hai condiviso, non riesco a vedere come possono essere implementati per proteggere il .dex su Android. E se finisci di implementare la logica di verifica in un separato. Quindi allora tutto il "cracker" dovrebbe fare è patch la chiamata nel tuo codice java alla function verify () all'interno del .so .


    AGGIORNARE:

    Ulteriori passi di obfuscation per proteggere il .so .

    1. NON seguire un path più o less lineare.
    L'aggiunta di salti aggiuntivi in ​​tutto il luogo funziona inondando il "cracker" con tanti bersagli potenziali che devono essere modificati singolarmente e patchati e verificati se la protezione è stata ignorata.

    2. Aggiungere controlli di temporizzazione Questo è principalmente per buttare fuori il "cracker" facendo il codice seguire routes diversi durante il debug e il tempo di esecuzione effettivo. Se il tempo trascorso tra due punti è molto superiore al solito, allora è una chiara indicazione che il programma viene eseguito in debug. cioè il tempo di saltare in quella parte del codice spazzatura che calcola il numero di pianoforti nel mondo.

    3. Scrivere il codice auto modificativo
    Ancora una volta questo ostacola l'analisi statica. Ad esempio se il salto nella function di verifica non esiste nel binario, ma è patchato ovunque come parte di una function init () in .so .

    Tutte le tecniche sopra descritte (e più) sono descritte con gli esempi del seguente articolo sulle tecniche anti-debugging .

    Una guida più completa è l' ultima versione di Debugging di Peter Ferrie .

    Evitare di utilizzare controlli troppo trasparenti. Provare un stream di lavoro di base che oscura (ad esempio il risultato di XOR), questo può aiutare a difendersi dalla semplice sostituzione di opcode. Ma vi assicuro che se qualcuno vuole (molto) molto per farti scoppiare, può farlo a prescindere dalla complessità della tua protezione.

    Dexguard è fatta dalle stesse persone che hanno fatto Proguard, ma permette di get opzioni ancora più raffinate. Detto questo, Proguard è più o less lo standard del settore per l'obfuscation di Android. Anche se, come detto sopra, se qualcuno con il know-how vuole rompere la tua applicazione, non c'è nessuna protezione per avere amore o denaro.

    La semplice verità: non puoi.

    È ansible acquistare utilità per ignorare il codice di object, ma vengono banalmente ignorati da qualsiasi attaccante leggermente motivato. Se il tuo utente può scrivere all'image del programma (sul disco o nella memory), nessuna quantità di obfuscation si difenderà contro di essa.

    Se è estremamente importnte, raccommand di spostare la componente importnte a un dispositivo che controlli e di fornire una qualche forma di codice di risposta-risposta per accedervi. Non impedirà alle persone di rompere, ma può mettere in atto una barriera molto più significativa contro di essa.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.