Ho creato questa semplice app, la versione Android del tool Alicekeygen. Esattamente come la versione desktop questa applicazione permette il recupero immediato della password wifi per le reti del tipo Alice-xxxxxxxx. I router supportati sono quelli della famiglia con firmware AGPF.
L’applicazione è stata realizzata con AndroidStudio, l’IDE ufficiale Google per lo sviluppo su piattaforma Android. L’algoritmo del tool originale è scritto in C, il porting in Java ha prodotto un algoritmo identico per funzionalità anche se differente nella forma (in Java mancano i puntatori, regole di casting diverse, etc..etc..).
Il tool originale era una semplice applicazione da riga di comando: per recuperare la password occorreva specificare l’SSID della rete, il MAC address della rete stessa e il file dei magic number. Utilizzare questa app è invece molto più semplice e intuitivo: le reti rilevate vengono semplicemente elencate nella schermata principale.
Le reti del tipo “Alice-xxxxxxxx” vengono colorate di rosso ad indicare che sono quelle supportate dall’applicazione. Selezionando una di esse verrà aperta la schermata delle password candidate da provare per quella rete:
Per provare una password è sufficiente copiarla nella clipboard (cliccandoci sopra) ed aprire le impostazioni di rete per effettuare l’accesso.
L’app è gratuita e disponibile in Google Play
Algoritmo in Java
Questo il porting Java dell’algoritmo originale:
String seriesXserial = "" + String.format("%05d", series) + "X" + String.format("%07d", serialsSet[j]); /* calcola l'hash SHA256(fixedPadding + serie-X-seriale + MAC) */ try { MessageDigest digest = MessageDigest.getInstance("SHA-256"); digest.update(fixedPadding, 0, fixedPadding.length); digest.update(seriesXserial.getBytes(), 0, seriesXserial.getBytes().length); digest.update(macAddr, 0, macAddr.length); byte[] hash = digest.digest(); char[] wpa = new char[24]; StringBuilder sb = new StringBuilder(); for (int i = 0; i < 24; i++) { int s = hash[i] & 0xFF; wpa[i] = charset[s]; sb.append(wpa[i]); } if (passwordList.contains(sb.toString()) == false) { passwordList.add(sb.toString()); } } catch(Exception e) { return false; }
Leave a Reply