Il gioco Android continua a venire hackerato [chiuso]


143

Quindi ci siamo passati diverse volte, rilasciamo un gioco (a buon mercato) e qualcuno lo hackera e lo mette su uno specchio. Abbiamo impostato Google Alert per tutte le nostre app, quindi ogni giorno ci viene detto chi sta facendo l'hacking. Finora, abbiamo implementato il servizio di licenza come suggerito da Google, il nostro salt viene effettuato casualmente ogni volta che la licenza viene avviata con l'ID dispositivo univoco. Eseguiamo il servizio di controllo una volta, quando l'applicazione viene avviata per la prima volta. Generiamo quindi un hash di 512 caratteri per la chiave e il valore memorizzato che viene confrontato in SharedPreferences da lì in poi.

Ora, so che il controllo una volta è probabilmente dove l'applicazione viene bloccata. Molto probabilmente il nostro bytecode è stato esaminato e ricompilato senza la riga che avvia il controllo.

Da qui, non voglio offuscare il nostro codice come ho visto prima rotto. Voglio qualcosa di un po 'più solido e voglio anche imparare a farlo correttamente. Sono più interessato a imparare che a fare soldi a questo punto poiché solo il 2% delle persone cercherà mai una versione compromessa.

Finora, da solo, ho ideato un generatore di numeri casuali che si trova in diverse aree di avvio del gioco. Quando avviata (diciamo, 1 su 50 volte) la licenza viene controllata. So che questo renderebbe più difficile l'hacking perché il cracker dovrebbe eliminare ogni caso, compilare, eliminare, compilare. Questo metodo, tuttavia, è ancora crackabile ... quindi cosa suggerite voi ragazzi? Ancora una volta, sono davvero interessato a questo processo di sicurezza, quindi per favore educa, non trasformarlo in una discussione sull'offuscamento o sul controllo periodico basato su un timestamp.

Grazie


27
Se non ti fossi detto che sei più interessato all'apprendimento che a fare soldi, la mia risposta sarebbe semplicemente "non vale il mal di testa". Dato che sei interessato al mal di testa stesso, dico di andare avanti (ma non ho una risposta per te, seguirò questa domanda come tutti gli altri).
Thiago Arrais,

4
Se lo stesso gioco continua a essere violato, sei sicuro di non avere problemi con il personale? Non è la cosa più bella da considerare, ma può succedere
Phil Lello,

3
Sebbene siano oltre 20k righe di codice, gestisco l'intero processo da solo.
BajaBob,

3
@BajaBob allora sei la talpa: D
Sulfkain,

Risposte:


117

La mia idea non è a prova di hacker, ma potrebbe rimuovere parte dell'interesse per l'hacking del gioco.

Modello Freemium

1) Rendi gratuiti i primi 5-10 livelli in modo che le persone possano imparare il gioco e divertirsi senza pagare. Meno vorrà hackerare il primo livello e il gioco si diffonderà ulteriormente con il modello Freemium.

Levelware shareware / cluster

2) Lascia che parte dei livelli di gioco o della logica rimangano online. Per esempio. quando raggiungi il livello 5 o 10 o 15, quindi scarica piccole parti del gioco e ogni volta invia il registro di avanzamento del gioco e convalida questo valore rispetto a possibili valori + hashcodes. Ciò potrebbe forse rendere possibile la chiusura automatica degli account compromessi.

Protezione da imbroglione invisibile

3) Potresti anche contare solo "piccole bandiere di avvertimento" che metti in gioco. Non limitarti a controllare la "convalida" all'inizio, non inserire questi flag nella logica di gioco stessa. Non farlo spezzare il gameplay, perché nessuno lo cercherà. Quindi quando l'utente raggiunge la fine del mostro di livello, controlla se ci sono bandiere di avvertimento registrate. Questi non verranno visualizzati all'interno del gioco, quindi l'utente inconsapevole con un'edizione compromessa potrebbe giocare per ore / giorni e rendersi improvvisamente conto che non potrebbe finire il gioco o passare al livello successivo, perché il gioco aveva un "bug". Quello che l'utente non sapeva era che questo errore si verifica solo su client compromessi.

Conclusione

Sii più intelligente dei cracker. Falli credere che il lavoro sia stato fatto. Crea una protezione dalla copia e sappi che i cracker più avanzati saranno in grado di rimuoverlo. Ma probabilmente non vogliono giocare a 50 livelli per verificare se il crack funziona anche fino in fondo.

Una volta compreso questo problema, potrebbero anche iniziare a risolverlo. Ma se si interrompe il gioco in pacchetti di livelli, è comunque possibile convalidare tra il download di ciascun pacchetto. Quindi, una volta ricevuti i dati di hash del client compromesso, esegui semplicemente un'esecuzione e blocca il gioco sul client. Whoops il gioco si è bloccato. Non dirlo perché è hackerato. Un errore del programma può accadere. :-)

Ancora una volta, non è a prova di hacker. Ma potrebbe infastidirli abbastanza per passare al gioco successivo. Infine, potresti anche pubblicare aggiornamenti regolari per il gioco e solo l'ultima versione dovrebbe essere in grado di "pubblicare i record" ecc. In modo che gli utenti attivi debbano aggiornare per rimanere aggiornati.


5
Wow, idee fantastiche. Apprezzo molto tutto ciò, non ho mai nemmeno considerato di fare i livelli e di pubblicarli su un server e di convalidarli. Verso ... ottima idea. Mantieni tutti aggiornati, rendi irragionevole il crack. Grazie mille, questo mi terrà occupato per un po '!
BajaBob,

12
Sospiro, peccato che non puoi +2 una risposta :) Un commento: come puoi dimostrare che il problema sta nel gioco piratato? Se il gioco diventa bizzarro / strano su una copia pirata, la gente potrebbe pensare che sia un bug e buca il gioco nei forum. Non penso che questo sia un grosso problema su Android poiché non ci sono tanti forum con un vasto pubblico, ma mi chiedo se abbia senso avere una dichiarazione di non responsabilità che "le copie dei pirati potrebbero non funzionare bene".
EboMike

3
Ricordo un gioco del 1978 sul TRS80 che avrebbe funzionato casualmente se la protezione dalla copia fosse stata rimossa. C'era solo 1 controllo di validità e rimuoverlo significava che potevi copiare liberamente il gioco, ma gli strani errori di gioco non si sarebbero verificati su copie legittime, solo su copie compromesse. Nessuno pensava che fosse colpa dello sviluppatore ... sapevamo cosa stava succedendo.
Fixee,

1
@EboMike Penso che la parte forte della mia idea di protezione dalla copia sia quella di "agire il più normale possibile", non dare nemmeno ai cracker un indizio su quali brutti schemi di protezione ci attendono. Questo renderebbe i più curiosi a cacciare la protezione. Solo per divertimento. Ricorda, molti di loro non lo fanno per i soldi, ma solo perché possono metterlo in mostra. Quindi non tentarli. Basta agire in modo informale. : o) Sii più intelligente di loro.
BerggreenDK

2
@Fixee e altri Il recente gioco di Batman Arkham Asylum aveva qualcosa di simile a questo: sulle copie piratate, una mossa cruciale sarebbe svanita e ti avrebbe bloccato abbastanza presto nel gioco. Quindi, quando qualcuno si è lamentato del "bug" nei forum, lo sviluppatore potrebbe sorridere e dire "non è un bug nel gioco, è un bug nel tuo codice morale".
Nzall

20

Ho fatto un po 'di decompilazione e hacking dell'apk per un po' (non warez, ma mod e hack principalmente per le app di Google e il framework Android, rispettando sempre le politiche degli sviluppatori xda).

Una volta che impari a leggere smali, è quasi come leggere il codice java originale (ma con molti più LOC). Pertanto, qualsiasi codice aggiunto per verificare la presenza di chiavi può essere trovato, eliminato o sostituito. Non è nemmeno necessario ricompilare ogni volta per eliminare più di uno (alcune ricerche fanno miracoli per trovare parti di codice simili) e, anche se per trovarli sono necessari cicli di compilazione / ricompilazione, è solo questione di uno o due minuti decompilare: tutto è automatizzato da apktool e ancora di più da apkmanager.

Detto questo, il mio suggerimento è quello di implementare una sorta di tabella di punteggio online o simile, e quando l'utente guarda la tabella dei punteggi online, puoi controllare il codice hash che hai implementato e confrontarlo con l'account gmail associato. In questo modo puoi segnalare l'hacking a google e inviare un brutto messaggio all'utente di warez, spiegando perché ciò è illegale.

Naturalmente, un nuovo hack potrebbe essere implementato per eliminare la tabella dei punteggi, ma ciò ridurrebbe l'interesse per il warez.

In bocca al lupo.


Aggiornare

Dopo aver cercato di rispondere a questa domanda: Iniettare codice in APK (in realtà sul meccanismo Amazon DRM), posso dire un po 'su come Amazon protegge le app: include metodi per verificare la validità dell'installazione ovunque (puoi vedere un esempio di come lo fanno nella mia risposta a quella domanda). Ciò renderà qualsiasi tentativo di hackerare un'app non molto difficile, ma estremamente noioso. Credo che sia un punto di forza: gli hacker non vorranno passare così tanto tempo a svolgere così tante attività ripetitive: non è impegnativo ed è noioso. Il principale difetto che vedo in questo approccio è la possibilità di hackerare l'app Amazon stessa per restituire sempre una risposta valida, ovviamente. Ma, se mescoli i tuoi attuali controlli hash con una sorta di controllo online sparso tra i tuoi metodi, credo che le possibilità che venga violato potrebbero essere drasticamente ridotte.


3
Devo dire che molte persone hanno un problema con le app "telefonando a casa". Personalmente, è stupido: un telefono Android "telefona a casa" in così tanti modi così spesso, non importa davvero, e qual è il problema con un controllo di verifica della licenza anonimo? Volevo ancora buttarlo fuori - alcune persone lanciano una grande puzza di "telefonare a casa", specialmente quando non viene divulgato.
EboMike

3
Bene, è comprensibile che le persone possano avere un problema se l'app "telefona a casa" e non lo fa sapere all'utente. Ma una tabella dei punteggi basata sul web risolve il fatto che dal momento che è l'utente che si collega volontariamente
Aleadam

È vero, ma una volta utilizzata la connessione che avrebbe dovuto caricare "anonimamente" i punteggi e inviare l'hash dell'account Gmail, è un problema diverso. Ancora: non per me. Penso che questo sia perfettamente ragionevole e sarei personalmente tentato di implementare questo schema nella mia app. Le persone che si lamentano saranno in minoranza (e, molto probabilmente, acquisteranno l'app indipendentemente).
EboMike

Perché dovresti decompilare il framework, invece di scaricare il codice sorgente?
Phil Lello,

1
@Phil non hai accesso al codice sorgente per il touchwiz o rileva i FW, quindi se vuoi modificare un determinato telefono a volte il modo più semplice è decompilarlo e cambiare gli smalis.
Aleadam,

20

Tratto dalla mia soluzione da questo post Evita l'apk incrinato

Implementa la tua libreria di licenze

Ti farei anche riferimento per verificarlo dalla registrazione YouTube di Google I / O 2011:

Evadere i pirati e fermare i vampiri

MODIFICARE:

Le note di presentazione di Evading Pirates e Stopping Vampires

Alcuni punti chiave di base


I collegamenti sopra sembrano non sempre andare alla pagina collegata ... sembra funzionare solo a volte e in qualche modo dipendente dal sistema operativo e dal browser. Quindi, prendi nota della fine #%3ar.page.15negli URL. Se non vieni reindirizzato automaticamente a quella pagina, assicurati di guardare il link per vedere dove / quale pagina dovresti guardare.
Prova TryAgain

1
Bello! Vedo che credono anche in Freemium e nascondono alcuni "errori" all'interno del gioco (usando solo una tecnica di licenza). Vorrei una soluzione multipiattaforma anziché un server di licenza solo Android. Ma anche interessante.
BerggreenDK,

btw. è divertente, questa risposta ha 15 pollici in su, il mio ha già attraversato 90 e non è considerata la risposta giusta :-)
BerggreenDK

8

So che non ti piace davvero l'offuscamento, ma ho davvero bisogno di reagire a questo:

Da qui, non voglio offuscare il nostro codice come ho visto prima rotto. Voglio qualcosa di un po 'più solido e voglio anche imparare a farlo correttamente.

ProGuard è molto affidabile nella mia esperienza, e anche se uso un paio di funzionalità avanzate come AIDL e un codice nativo che chiama il metodo Java. Ci vuole un po 'di lavoro per leggere la documentazione e fare le cose correttamente, ma una volta che sei lì ProGuard è estremamente affidabile e ottimizza anche la tua app.

I trucchi di sicurezza / crittografia personalizzati sono buoni, ma senza offuscamento è come lanciare una pietra nell'acqua secondo la mia modesta opinione.

Ho usato ProGuard in produzione per molti mesi e funziona perfettamente.

Se stai imparando, leggi attentamente il manuale di ProGuard, sperimentalo e controlla i suoi registri di output.


tutto ciò che può essere letto può anche essere decompilato, è solo una questione di potenza della CPU e testardaggine. L'offuscamento consente comunque l'esecuzione del codice, quindi durante la decompilazione / deobfusione del codice, il cracker può ancora confrontare la versione in esecuzione con l'originale. Potrebbe ritardare il cracker o arrestare il cracker meno esperto, ma non è affatto sicuro.
BerggreenDK

4

La probabilità che ci siano programmatori più talentuosi di TE (vale per tutti i programmatori) è del 100%. E se questo è vero, non puoi correggere l'hacking. Ma puoi spendere tutto il tempo e gli sforzi per fallire.

Se vuoi fare un po 'di soldi seri devi fare qualche ricerca sul tuo gruppo di utenti target e scienza comportamentale. Devi fare in modo che gli utenti che giocano che portano nuovi soldi, e questo è tutto.

Inoltre, hai sbagliato tutto. Gli hacker sono membri più attivi della tua base di utenti, ti comporti semplicemente in un modo che non avevi previsto.

Prendi ad esempio i giochi Zynga su Facebook, pensi di essere violato? - Certo, e circa +100000 giocatori giocano solo, perché puoi usare i robot, che automatizzano tutto.

Avere un'enorme botnet di utenti attivi di persone reali, fa sì che i giocatori di tipo archiver vogliano giocare al gioco - e se il tuo gioco, e sembra bello, allora Avarage Joe vorrà anche giocare. Se Avarage Joe suona, allora i suoi amici potrebbero voler giocare, e probabilmente ai tuoi non piacerà nient'altro, quindi essere migliore del suo amico, ammazzare il tempo o avere qualcosa di cui parlare. Avarage Joe sarà probabilmente disposto a pagare per essere migliore di Joe, ma piuttosto i tuoi vorrebbero investire in qualcosa che li rende capaci di essere migliori.

Inoltre, se il valore reale è giocare gratuitamente, gli utenti che usano la versione hackerata gratuita non lo pagheranno molto probabilmente. Ma i tuoi sono Avarage Joes e i loro amici potrebbero. Quindi questo è come lo spot più economico che puoi avere. Se vuoi guadagnare con la tua grande base di utenti, crea semplicemente nuove versioni del gioco con piccole modifiche ai livelli e alla grafica.



2

Che domanda interessante e inquietante. :-) Come esercizio, potresti provare a rilasciare un'app tramite Amazon; hanno il loro meccanismo DRM; Mi chiedo se funzioni meglio di ProGuard ...


1
Ad oggi, l'app Lucky Patcher ha anche risolto Amazon DRM! A parte ProGuard, un'altra soluzione potrebbe essere DexGuard. Ma DexGuard costa qualche centinaio di euro per l'acquisto, ma non si può essere sicuri che anche questo possa proteggere i tuoi codici dall'essere piratati ...
ChuongPham,

2

Uno degli elementi chiave secondo me è distribuire il codice in modo che non sia tutto in un unico posto. Se si dispone di una funzione chiamata LicenseChecker.checkLicense () che recupera la licenza e la controlla, si può essere certi che verrà disabilitata prontamente.

L'unico vantaggio che hai è che i cracker non possono vedere i commenti del tuo codice (e, se offuschi, i metodi / i nomi delle variabili), quindi escono con qualcosa di strano. Nel onCreate () di un'attività, ottieni l'ID licenza. In onResume (), ottieni un altro valore per verificarlo. Forse creare un thread e fare alcuni controlli lì. E poi, qualche altro pezzo di codice irrilevante (forse il controllo del giocatore) potrebbe raccogliere il valore e confrontarlo e archiviare il risultato da qualche parte. Quindi tre altri pezzi di codice irrilevanti controlleranno indipendentemente quel valore e disabiliteranno l'applicazione se non corrisponde.

Ora dovrei dire in anticipo che questo può causare mal di testa per te stesso - ovviamente, il codice disordinato e disgustoso è più difficile da debug e incline a causare errori. Nel peggiore dei casi, crei falsi positivi in ​​applicazioni acquistate legittimamente.

E, naturalmente, tutto può essere retroingegnerizzato: una volta che i cracker trovano il posto in cui l'app è disabilitata, rintracciano il valore che viene letto. Potrebbero quindi risalire al punto in cui vengono archiviati e rintracciarlo ..... o, molto più facilmente, possono semplicemente disabilitare il controllo finale (motivo per cui ho raccomandato 3 diversi luoghi, tutti con trigger ritardati). La sicurezza è valida solo come l'anello più debole.

Non sarai in grado di fermare la pirateria. La soluzione migliore è ritardare la diffusione di una copia piratata fino a quando la campagna pubblicitaria iniziale sulla tua app non si sarà calmata.


1

Innanzitutto, NON mi considero un professionista nel campo della sicurezza SW, ma:

Penso che una cosa importante sia lasciare che l'applicazione dipenda in alcune parti dal controllo della firma. Non lasciare che influisca immediatamente, ma lascia che imposti alcuni flag o cambi alcuni valori. in seguito, usa quei flag, controllali, lascia che l'assenza / erroneità di essi provochi un'eccezione di qualche tipo che potrebbe chiudere l'applicazione forse. Finché il controllo della firma è rilevante solo al momento, è facile aggirarlo, rimuovere la linea, una volta che tocca più aree del codice, l'applicazione diventa più difficile (o meno facile ...) da hackerare. Inoltre, per come la vedo io, non tutti i controlli dovrebbero chiamare la stessa routine per la sanzione, perché ciò faciliterà anche la ricerca del meccanismo di protezione e la sua risoluzione.

Naturalmente, la sanzione da adottare in caso di SW illegale può variare, potresti voler bloccare l'applicazione quando utilizzata illegalmente, ma potresti anche volerla mantenere in esecuzione e inviare solo un messaggio che chiede all'utente di acquistare una copia legale dell'applicazione.

Se questo è proprio quello che non volevi sentire, allora mi dispiace per il tuo tempo :)


7
Rendere la tua app bloccata quando rilevi che è stata piratata può ritorcersi contro, a meno che tu non lo renda molto esplicito per questo motivo. Ricordo di aver letto di alcuni sviluppatori di giochi che hanno bloccato il gioco dopo un periodo di tempo casuale se non ha superato un controllo antipirateria. Certo, tonnellate di persone hanno piratato ma non si sono resi conto che gli incidenti erano dovuti alla versione piratata. Ciò ha provocato molta cattiva stampa per gli sviluppatori e potrebbe aver danneggiato le loro vendite.
Mitch Lindgren,

3
@Mitch - Sono d'accordo. L'ho dato come una possibilità, ma la strategia tecnica "migliore" forse, probabilmente non è la migliore strategia "aziendale".
MByD

0

Gli utenti Android avranno appena accettato il dolore delle case telefoniche costanti. L'unica app Android sicura è un'app Android sempre connessa.

Ciò è dovuto in gran parte al rifiuto di Google di bloccare l'installazione, come ha fatto Apple. Su IOS devi effettuare il jailbreak del telefono. Su Android puoi caricare qualsiasi APK su uno stock, installazione di fabbrica.

Conserva alcuni / quasi / tutti i tuoi contenuti sul server; consegnarlo a pezzi; convalidare la licenza / sessione per ogni chiamata.


Chiarimento: mentre è possibile eseguire il root su entrambe le piattaforme, solo una piccola percentuale di utenti IOS effettivamente temerà di interrompere l'installazione. Anche in molte parti del mondo è difficile o impossibile pagare per un'app Android, alimentando la pirateria.
Yetimoner il

Questa è stata in realtà una delle idee della mia risposta del 2011 ... perché postarla di nuovo?
BerggreenDK,

0

Sarà incredibilmente difficile inibire questo tipo di comportamento. Tutto ciò che viene gestito sul lato client è hackerabile tramite decompilazione e modding APK, modifica della memoria con software come Game Guardian ect.

L'unico modo in cui posso vedere quanto parzialmente aggirarlo, sarebbe invece creare un gioco online. Oppure gestisci determinate funzioni online. O se la crittografia anti-manomissione come denuvo è mai disponibile per Android / iOS.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.