Sto lavorando a un progetto Android il cui obiettivo è identificare quali funzioni Java o native devono essere agganciate e monitorate in fase di esecuzione per verificare se l'applicazione contiene comportamenti dannosi o pratiche di programmazione deboli.
Ad esempio, l'hooking connect () consente di accedere alle informazioni sulla porta e di rilevare le connessioni che utilizzano http (80) invece di https (443), che è sicuramente una pratica di programmazione debole.
modifica: a quanto pare, il controllo del numero di porta non è sufficiente per sapere se è http o https, e sarebbe necessaria un'analisi del traffico (grazie a André Borie).
Ho identificato molti altri comportamenti potenzialmente dannosi e pratiche di programmazione deboli, e ho preparato strutture di hooking simili. Volevo chiederti quali funzioni vuoi collegare per verificare se l'app tenta di:
1) accede alla scheda SD,
2) rileva il GPS,
3) accede alla videocamera o al microfono,
4) chiama i numeri premium.
Inoltre, l'utilizzo di metodi deprecati è potenzialmente pericoloso per motivi di sicurezza. Pertanto, voglio verificare se l'app sta utilizzando qualsiasi. Quello che sto pensando è usare una lista nera di tutti i metodi deprecati noti e quindi scansionare il codice dell'app per cercare i metodi di quella lista. Saresti d'accordo con questo? (considera uno scenario in cui non vi è alcuna offuscazione del codice). Stessa cosa per le deboli API di crittografia (ad esempio MD5?): Come individuarle?
modifica: riconosco il fatto che non tutti i metodi deprecati sono deprecati per motivi di sicurezza (grazie a @CommonsWare), ma alcuni di essi lo sono. Come separeresti i metodi che sono stati deprecati per i noti problemi di sicurezza degli altri? Sarebbe bello avere un elenco completo.