2011-12-23 10 views
25

Ho appena rilasciato un'app, un'app a pagamento, 4 giorni dopo un utente mi ha detto che c'è un altro sito web in Cina che ospita la mia app. L'ho scaricato da lì e funziona perfettamente sul mio dispositivo!Pirateria, pirateria, pirateria. Cosa posso fare?

Qui ci sono post che dicono che le persone possono cambiare il nome del pacchetto e ripubblicare un apk. Ma questo non è il mio caso, la versione crackata usa ancora lo stesso nome del pacchetto. Nel programma ho utilizzato Android Vending Licensing, ma la versione crackata non esegue affatto il controllo delle licenze. Ho usato ProGuard per offuscarlo, ma ciò non scoraggia gli hacker.

Domanda n. 1: ho firmato il file apk in base alle istruzioni di Google. Ma ancora, hanno modificato il codice e preso la parte di controllo delle licenze. Ho torto che firmare un file apk è progettato per impedire alle persone di manomettere il contenuto del file?

Domanda n. 2: per i programmi Win32 .exe, ho utilizzato un checksum per determinare se il file è stato modificato. Ecco come funziona: quando viene creato un file .exe, ho usato uno strumento per calcolare la somma dei contenuti del byte del file, quindi inserirli in qualche parte del file, ad esempio, 4 byte dopo uno schema di testo "MY SIGNATURE" . Quindi, in fase di esecuzione, il programma apre il file .exe e calcola la somma dei byte, confrontandola con il numero intero dopo la firma.

Qualcuno ha provato questo approccio sui file apk? Vuoi condividere le tue esperienze?

risposta

28

In definitiva la protezione integrata delle app in Android è molto scarsa. Ecco le tue migliori pratiche.

1) Sì, la raccomandazione di Google di utilizzare l'offuscazione del codice, firmata in codice e il relativo server di verifica della licenza è progettata per impedire il furto del software. La loro implementazione è tuttavia altamente difettosa. L'unico requisito che deve essere eseguito da un APK è che sia firmato. Non importa chi ha firmato però. Non ci sono controlli che la tua firma sia quella con cui è stata firmata. Quindi per crearlo basta rimuovere il controllo della licenza e ri-firmare con qualunque certificato tu voglia. Quindi un utente può caricarlo sul proprio telefono con "Consenti app non di mercato" selezionate.

Non utilizzare la licenza di Google così com'è. Modifica il codice pesantemente. Aggiungi alcuni nuovi parametri da utilizzare durante la generazione delle chiavi. Sposta il codice intorno/ri-architetta. Non includere la libreria di licenze di Google come progetto di libreria. Mettilo direttamente nel tuo codice. Rendi il codice spindly e kludgy il più possibile. Aggiungi funzioni che non fanno nulla, ma modificano i valori al volo. Crea altre funzioni in seguito per riconvertirle. Verifica della licenza di diffusione nell'intero codice base.

Se non si eseguono questi passaggi, il codice può essere risolto automaticamente. Facendo questi passaggi, almeno il cracker ha bisogno di prendersi il tempo per crearlo. Probabilmente ci vorranno solo poche ore al massimo. Ma poche ore sono molto più tempo di un istantaneo cracking del livello standard delle licenze di Google. Ci sono strumenti di cracker che in realtà scaricheranno automaticamente i pacchetti Android appena rilasciati e, se usano le licenze standard di Android, li violano e caricano gli APK incrinati in questi tipi di siti web. Rendendo la tua implementazione non l'implementazione della vaniglia, rendi le cose molto più difficili, con solo poche ore di sforzi da parte tua.

2) Questa è una tecnica anti-crack comune. Puoi farlo su Android se vuoi. Ma può essere rotto in circa 5 minuti. Se tu Google ci sono tutorial su come rompere questa tecnica specifica. Fondamentalmente basta cercare la chiamata CRC nel codice e rimuovere il controllo dopo che il CRC è tornato.

Android non ha alcuna sicurezza intrinseca. Puoi effettuare il root di qualsiasi telefono e scaricare l'APK. Puoi facilmente modificare un APK per abilitare il debug e semplicemente inserire il codice per vedere le chiavi che hai memorizzato nel codice. Quindi alla fine non spenderei troppo tempo su questo. È impossibile proteggere un'app per Android.Vorrei solo fare le cose di buon senso nella lista sopra e andare avanti.

3) Se sei veramente paranoico, puoi implementare la tua licenza sul tuo server di licenze. Questo è l'approccio che ho preso, ma non tanto per proteggere l'app per il furto, quanto per darmi un meccanismo per vendere le app direttamente dal mio sito Web, così gli utenti che non dispongono di Google Play potrebbero comunque acquistare le mie app.

+0

grande discussione ragazzi .... – himanshu

+0

@metalideath bella risposta ....... + 1. –

+0

+1 bella informazione ... –

0

La mia comprensione derivante dalla revisione dei termini del mercato Google è che non è possibile vendere la tua app direttamente dal proprio sito in quanto viola le condizioni del mercato dell'app Google. Penso che implementare protezioni personalizzate nel tuo codice sia il modo migliore per andare. I metodi standard non sono efficaci in quanto il codice può essere facilmente smontato

+2

Benvenuti in StackOverflow! Cerca di evitare affermazioni come "la mia comprensione" e cerca invece di collegarti a dichiarazioni di fatto reali o documentazione di supporto. – ajacian81

+1

Ti riferisci alla parte relativa al fatto di non essere in grado di collegarsi a un'app da Google Market/Play Store che non dà loro un taglio delle entrate. Se non vuoi dare una commissione a Google, puoi semplicemente fare come Amazon App Store e impostare la tua distribuzione sul tuo sito senza collegarla alla tua app su Google Play. Quindi se non dipendi da Google Play Store per essere scoperto, la tua app non viola nessuno dei loro termini. –

1

Mi sono messo in contatto con Google e sono stato indirizzato a un discorso molto utile su come modificare la licenza di base LVL. Scopri this talk da Google I/O 2011.

10

passivo/aggressivo affondamento

Sono d'accordo con @metalideath che offuscando e cludging il codice di licenza non è infallibile.

Ecco una tecnica facilmente nascosta che chiamo 'scuttling' che funziona per le app distribuite su Google e Amazon. Scuttling è il rilevamento della pirateria front-end dall'app. Cosa fare una volta rilevato è nel processo del creatore dell'app.

  • Screzionamento aggressivo: ad es. Terminazione e/o allarmi su app pirata. Comunicazione di rete non necessariamente richiesta.
  • Scorrimento passivo: nessuna modifica dell'app. Per esempio. abilita il tracciamento.
  • Scorrimento passivo/aggressivo: modifica dell'app sottile. Per esempio. disabilitare silenziosamente le funzionalità chiave. Conduci il pirata a pensare che abbiano ingannato e a non pubblicare l'app pirata.

Se la vostra applicazione è stato rinominato e/o installato da qualsiasi fonte diversa da Google o Amazon, affondare() restituisce true.

// Dont just copy/paste this code - that is what automated crackers look for - cludge it! 
// No network communication is required at runtime. 
// myPackageName should decode at runtime to "com.yourpackagename" 
// google  should decode at runtime to "com.android.vending"; 
// amazon  should decode at runtime to "com.amazon.venezia"; 

public boolean scuttle(Context context, String myPackageName, String google, String amazon) 
{ 
    //Scallywags renamed your app? 

    if (context.getPackageName().compareTo(myPackageName != 0) 
    return true; // BOOM! 

    //Rogues relocated your app? 

    String installer = context.getPackageManager().getInstallerPackageName(myPackageName); 

    if (installer == null) 
    return true; // BOOM! 

    if (installer.compareTo(google) != 0 && installer.compareTo(amazon) != 0) 
    return true; // BOOM! 

    return false; 
} 

RISULTATI

La seguente immagine è stata presa da google analisi mostra un'applicazione gratuita cingolato pirata da playstore (com.android.vending) che ridistribuita con affondamento aggressivo (non playstore installa rilevato e terminato) . Il monitoraggio non playstore (non impostato) diminuisce. Il tracciamento non era richiesto, ma abilitato per queste misurazioni.

enter image description here

DISCUSSIONE

servizio Nota firma svolge un ruolo nella naufragare: Il gestore di pacchetti impone nomi dei pacchetti unici con firme uniche.

Questo presenta la domanda su cosa fare quando l'app viene sottoposta ad affondamento (pirata rilevata dall'app). La pirateria è una forma di viralizzazione (distribuzione incontrollata) della tua app. È già rilevabile abilitando il back-end di tracciamento dell'analisi. Scuttling consente all'autore della app di personalizzare una risposta front-end con o senza tracciamento.

L'affondamento aggressivo è ovviamente rilevabile dai pirati (BOOM!). Ciò incoraggia ulteriormente il cracking. L'affondamento passivo è molto meno ovvio, ma può implicare il tracciamento.

La pirateria potrebbe non essere prevenibile ma è prevedibile, rilevabile e tracciabile.

Il monitoraggio può presentare problemi insormontabili ai pirati, ma presenta anche i suoi problemi etici.

Lo scappamento passivo/aggressivo che non richiede alcuna comunicazione di rete come descritto sopra è forse la soluzione migliore. È facilmente nascosto (a differenza delle licenze) e può essere adattato per essere il meno ovvio possibile.

+2

+1 per l'illustrazione degli effetti speciali. –

+1

La migliore risposta che ho letto da tanto tempo! Dovresti chiamarlo "Ramming" come stai dicendo "vuoi la mia app? Qui!" –

+0

Come accennato, lo scuttling consente al progettista dell'app di essere passivo e/o aggressivo al rilevamento di un pirata. Dal momento che la pirateria è anche un canale di distribuzione virale, qualche pensiero dovrebbe andare nelle azioni intraprese. Forse il reindirizzamento al sito web del creatore o alla pagina PlayStore è il migliore ... –

0

La cosa migliore da fare non è preoccuparsi. Le persone che la stanno piratando in Cina non sono i tuoi clienti e non lo saranno mai. Se non fosse disponibile una versione pirata, non ti pagherebbero comunque una copia, con ogni probabilità. Inoltre, se la tua app diventa popolare, verrà comunque clonata, proprio come le app iOS. I sistemi di sicurezza che hai già implementato sono tutto ciò di cui hai bisogno in quanto impediscono alla maggior parte degli utenti di piratare l'app.

Provare a rendere la prova della pirateria della tua app danneggerà solo la base di codice e renderà più difficile la manutenzione, oltre a introdurre potenziali problemi per i tuoi veri clienti paganti. Concentrati invece sulla promozione della tua app e facilita i pagamenti e l'utilizzo da parte dei clienti. Rispondendo alle richieste di funzionalità e alle segnalazioni di bug si aggiunge valore che le persone sono disposte a pagare, piuttosto che cercare una copia scansa di un sito Web cinese che sia probabilmente un trojan.

Infine, segnalare le copie dei pirati ai fornitori di antivirus. Fornire copie dell'APK. Aggiungeranno firme ai loro database in modo che vengano contrassegnati come potenzialmente pericolosi.

Problemi correlati