Ho una domanda su come proteggere un programma dalle modifiche se quel programma è in grado di comunicare con un server di convalida remoto. Più in particolare sto chiedendo il file APK per Android, ma può anche andare a qualsiasi altro programma.
Immagino il seguente scenario ipotetico:
C'è un file di installazione APK che l'utente sta scaricando e installando sul suo dispositivo. L'applicazione, dopo essere stata installata e utilizzata, invia " alcune informazioni " sulla sua integrità a un server remoto. Il server sta confermando che il programma è OK o è stato modificato dagli hacker.
Dato questo scenario e il fatto che gli APK sono scritti in Java, quali sono alcuni modi in cui uno sviluppatore può usare per generare un valore hash dei suoi file di applicazione, quindi più tardi questo hash può essere inviato a un server remoto che a sua volta essere in grado di convalidare hash hash su file di dimensioni o qualche altro tipo di struttura?
Sono interessato ad alcuni modi per generare quel " alcune informazioni " che viene inviato al server di convalida.
Per favore correggimi se la domanda non è stata formulata correttamente, in quanto questo scenario non è così chiaro per me e forse ci sono altri modi in cui questo può essere ottenuto più facilmente. Grazie mille!
--- ESTENSIONE ---
Ciao e grazie mille per le risposte!
Sono sorpreso dalle risposte un po ', perché non pensavo troppo al problema e ho pensato che ci sarebbe stato un meccanismo semplice per farlo :) Ma ora sento che anche i TPM non possono garantire il 100% protezione ...
Come un lamerino sull'argomento, vorrei chiedere qualcosa di più. Non voglio proteggere il programma dalla ridistribuzione, come un meccanismo di protezione dalla copia. Voglio che il programma venga testato di volta in volta tramite il server di convalida, che non venga modificato.
Questo è lo scenario:
Il server che sta distribuendo l'applicazione (fornendo il download) calcola un hash del programma con qualche algoritmo strano, se esiste. Più tardi il programma utilizza lo stesso algoritmo strano per calcolare un hash di se stesso e inviarlo al server. Il server confronta quindi i due hash. Se qualcuno ha modificato un file, ad esempio un'istruzione JMP, l'hash dovrebbe essere diverso e l'app considerata compromessa. Quali sono i difetti in questo scenario? Che qualcuno sarà in grado di dissimulare l'algoritmo per calcolare l'hash dal programma e successivamente modificare il programma per inviare lo stesso valore al server?
E anche se questo è il caso, pensi che sia ancora molto lavoro da fare per qualcuno, e potrebbe non valerne la pena?