Program RetoWEP; Uses strings, crt, Dos, getopts; const CantComandosRoot=6; CantComandosNoRoot=5; CantComandos= CantComandosRoot + CantComandosNoRoot; CantAtribPerm=8; CantMaxMon=20; {+1} DireccionMac='E0:91:93:4F:82:7E'; CantAtribAirod=6; {Cantidad atributos posibles en airodump} ApCh='8'; {chanel del AP} ApMac='E0:91:93:4F:82:7E';{MAC del AP} type Tmono=Array[0..CantMaxMon] of boolean; TAtributos=Array[1..CantAtribPerm] of string[50]; TComandos=Array[1..CantComandos] of string; TComandosRoot=Array[1..CantComandosRoot] of string; TComandosNoRoot=Array[1..CantComandosNoRoot] of string; TAtributosAirodump=Array[1..CantAtribAirod] of string; TCadenas = record {Para almacenar las cadenas que marcan la introduccion al reto} Cadena:string; Marca:integer; end; const Comandos : TComandos = ('kill','airmon-ng','airodump-ng','aircrack-ng','iwconfig','help','su','clear','ifconfig','exit','explicacion'); ComandosRoot : TComandosRoot = ('kill','airmon-ng','airodump-ng','aircrack-ng','iwconfig','ifconfig'); ComandosNoRoot : TComandosNoRoot = ('help','su','clear','exit','explicacion'); AtributosAirodump:TAtributosAirodump = ('-w','--write','-c','--channel','--bssid','-ivs'); var Atributos:TAtributos; {atributos introducidos} mono:Tmono; {Interfaces creadas} root:boolean; {es root o no el usuario} KeyLog:string; {Lo introducido por el usuario pero sin separar} i,y:integer;{Variable para for inicializar} E925,E935,E1112:boolean; {Aplicaciones molestas corriendo} salir:boolean; {Salida del programa} Beacons:integer; Data:integer; archivoEscritura:string; function SoloNumeros (cadena:string):boolean; {verifica si el string posee solo numeros} var x,numeros:integer; begin numeros:=0; {Inicializo} SoloNumeros:=false; {Inicializo} for x:=1 to length(cadena) do {Leo toda la cadena} begin if (cadena[x]>='0') and (cadena[x]<='9') then {veo la cantidad de numeros que hay en la cadena} begin numeros:=numeros+1; end; end; if numeros=length(cadena) then {Si la cantidad de numeros es igual a la cantidad de caracteres} begin SoloNumeros:=true; end; end; procedure CapturarAtributos (KeyLog:string; var Atributos:TAtributos); {Separar atributos del comando introducido por el usuario} var y:integer; aux:string; begin y:=1; while pos(' ',KeyLog)<>0 do begin if pos(' ',KeyLog)<>0 then {Si hay un espacio} begin aux:=copy(KeyLog,1,(pos(' ',KeyLog) - 1)); {Copio la primera palabra} Atributos[y]:=aux; KeyLog:=copy(KeyLog,(pos(' ',KeyLog) + 1),length(KeyLog)); {Copio desde el primer lugar que sigue del espacio hasta el final de la cadena} if aux<>'' then begin y:=y+1; end; end; end; Atributos[y]:=KeyLog; {Guardo la ultima palabra} end; procedure DesplazarComentario (Cadenas:TCadenas); {Escribe la cadena letra por letra como si se tratase de una animación} var x:integer; begin x:=1; {asigno} repeat write(Cadenas.Cadena[x]); {Imprimo la letra} delay(200); {Retraso medio segundo la ejecucion del programa} x:=x+1; {Paso a la siguiente letra} until x= Cadenas.Marca; {Hasta que haya vacio (marca real)} end; procedure Explicacion; {Pequeña explicacion del reto} Const Bienvenido:TCadenas = (Cadena:'¡Bienvenido al reto!'; Marca:22); Simulacion:TCadenas = (Cadena:'Este programa simula que estás trabajando en una terminal. Puedes introducir los comandos que desees siempre y cuando estos estén habilitados y tengas los permisos para ello. Para ver la lista de comandos disponibles puedes utilizar el comando help.'; Marca:252); Objetivo:TCadenas = (Cadena:'Para completar el reto debes obtener la clave WEP de la red llamada TP_Link utilizando la suit aircrack-ng de auditoria wirless.';Marca:129); Importante:TCadenas = (Cadena:'Importante! La contraseña del usuario de ID 0 es "www.hackxcrack.es" (sin comillas)';Marca:84); Ahora:TCadenas = (Cadena:'Ahora... A trabajar! :D'; Marca:23); ComandoHelp:TCadenas = (Cadena:'Puedes introducir el comando help para ver una lista de comandos disponibles';Marca:77); var x:integer; begin ClrScr; x:=1; repeat case x of {Lo hago así para que si el usuario presiona una tecla salga del programa al terminar el case actual} 1 : begin DesplazarComentario(Bienvenido); writeLn; writeLn; end; 2 : begin DesplazarComentario(Simulacion); writeLn; writeLn; end; 3 : begin DesplazarComentario(Objetivo); writeLn; writeLn; end; 4 : begin DesplazarComentario(Importante); writeLn; writeLn; end; 5 : begin DesplazarComentario(Ahora); writeLn; writeLn; end; 6 : begin DesplazarComentario(ComandoHelp);writeLn;writeLn;end end; x:=x+1; {Por si el usuario decide salir antes, limpio la pantalla y escribo tódo junto} until (x>=7) or (keypressed); ClrScr; writeLn(Bienvenido.Cadena); writeLn; writeLn(Simulacion.Cadena); writeLn; writeLn(Objetivo.Cadena); writeLn; writeLn(Importante.Cadena); writeLn; writeLn(Ahora.Cadena); writeLn; writeLn(ComandoHelp.Cadena); writeLn; readKey;readKey; {Pongo dos veces por que sino lo saltaba por el buffer del teclado} ClrScr; end; procedure prompt (root:boolean); {Linea de comandos} begin if root=false then begin write('User@hackxcrack:~/home$ '); readLn(KeyLog); end; if root=true then begin write('Root@hackxcrack:~/home# '); readLn(KeyLog); end; end; procedure clear (Atributos:TAtributos);{Limpiar pantalla} begin if Atributos[2]='' then begin ClrScr; end else begin writeLn('arguments wrong'); end; end; procedure kill (Atributos:TAtributos; var E925,E935,E1112:boolean); var accion:integer; begin accion:=0;{Inicilaizo la accion} if (Atributos[2]='925') and (E925=true) then {Si elije matar al primer programa} accion:=1; if (Atributos[2]='935') and (E935=true) then {Si elije matar al segundo programa} accion:=2; if (Atributos[2]='1112') and (E1112=true) then {Si elije matar al tercer programa} accion:=3; if accion=0 then {Si no introdujo un ID correcto o ya lo habia matado antes} begin if SoloNumeros(Atributos[2])=true then {Si solo posee numeros} begin accion:=4; end else accion:=5; {Si posee algun caracter que no es numero} end; {1=925 - 2=935 - 3=1112 - 4=ID - 5=Atributo} case accion of 1 : E925:=false; 2 : E935:=false; 3 : E1112:=false; 4 : writeLn('El proceso no existe'); 5 : writeLn('arguments must be process or job IDs'); end; end; function PedirContrasena:string; var contrasena:string; c:char; x:integer; begin x:=1; contrasena:=''; c:=' '; {Inicializo} write('Contraseña: '); while c<>#13 do {mientras sea diferente de espacio} begin c:=readKey; if c<>#13 then begin if c=#8 then {Si usa el backspace} begin contrasena[x]:=' '; x:=x-1; end else begin contrasena:= contrasena + c; {Agrego el nuevo caracter a la cadena} x:=x+1; end; end; end; writeLn;{Para que haga un espacio luego de terminar de escribir la contaseña} PedirContrasena:=contrasena; end; procedure su (var root:boolean;Atributos:TAtributos); begin if root=false then begin if Atributos[2]='' then begin if PedirContrasena='www.hackxcrack.es' then begin root:=true; end else begin writeLn('Contraseña incorrecta'); end; end else writeLn('arguments wrong'); end else writeLn('You are already root'); end; function ComandoCorrecto(Atributos:TAtributos;Comandos:TComandos):boolean; var i:integer; correcto:boolean; begin correcto:=false; {Inicializo} for i:=1 to CantComandos do {Recorro la lista de comandos} begin if Atributos[1]=Comandos[i] then correcto:=true; end; if correcto=true then ComandoCorrecto:=true; if correcto=false then ComandoCorrecto:=false; end; function ComandoRoot(Atributos:TAtributos;ComandosRoot:TComandosRoot):boolean; {Devuelve true si el comando introducido requiere root} begin ComandoRoot:=false; for i:=1 to CantComandosRoot do {hacer de nuevo con busqueda} begin if Atributos[1]=ComandosRoot[i] then ComandoRoot:=true end; end; function ComandoNoRoot(Atributos:TAtributos;ComandosNoRoot:TComandosNoRoot):boolean; {Devuelve true si el comando introducido no requiere root} begin ComandoNoRoot:=false; for i:=1 to CantComandosNoRoot do begin if Atributos[1]=ComandosNoRoot[i] then ComandoNoRoot:=true end; end; procedure exit (Atributos:TAtributos; var root,salir:boolean); begin if root=true then root:=false else salir:=true; end; procedure iwconfig (Atributos:TAtributos;mono:Tmono); begin if Atributos[2]='' then {Si no posee atributos} begin writeLn('lo no wireless extensions.'); writeLn; writeLn('eth0 no wireless extensions.'); writeLn; writeLn('wlan0 IEEE 802.11bgn ESSID:off/any'); writeLn(' Mode:Managed Access Point: Not-Associated Tx-Power=off'); writeLn(' Retry long limit:7 RTS thr:off Fragment thr:off'); writeLn(' Encryption key:off'); writeLn(' Power Management:off'); writeLn; for i:=0 to CantMaxMon do {Leer todos los mon activos} begin if mono[i]=true then begin writeLn('mon',i,' IEEE 802.11bgn Mode:Monitor Tx-Power=14 dBm'); writeLn(' Retry long limit:7 RTS thr:off Fragment thr:off'); writeLn(' Power Management:on'); writeLn; end; end; end else begin writeLn('arguments wrong'); end; end; procedure ifconfig (Atributos:TAtributos;mono:Tmono); begin if Atributos[2]='' then {Si no posee atributos} begin writeLn('eth0 Link encap:Ethernet HWaddr E0:69:9F:E4:AC:F5 '); writeLn(' UP BROADCAST MULTICAST MTU:1500 Metric:1'); writeLn(' RX packets:0 errors:0 dropped:0 overruns:0 frame:0'); writeLn(' TX packets:0 errors:0 dropped:0 overruns:0 carrier:0'); writeLn(' collisions:0 txqueuelen:1000'); writeLn(' RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)'); writeLn(' Interrupt:45'); writeLn; writeLn('lo Link encap:Local Loopback'); writeLn(' inet addr:127.0.0.1 Mask:255.0.0.0'); writeLn(' inet6 addr: ::1/128 Scope:Host'); writeLn(' UP LOOPBACK RUNNING MTU:16436 Metric:1'); writeLn(' RX packets:676429 errors:0 dropped:0 overruns:0 frame:0'); writeLn(' TX packets:676429 errors:0 dropped:0 overruns:0 carrier:0'); writeLn(' collisions:0 txqueuelen:0'); writeLn(' RX bytes:330843279 (315.5 Mb) TX bytes:330843279 (315.5 Mb)'); writeLn; writeLn('wlan0 Link encap:Ethernet HWaddr ',DireccionMac); writeLn(' inet6 addr: fe80::2c0:dfff:fef9:ea73/64 Scope:Link'); writeLn(' UP BROADCAST MULTICAST MTU:1500 Metric:1'); writeLn(' RX packets:789658 errors:0 dropped:0 overruns:0 frame:0'); writeLn(' TX packets:483056 errors:0 dropped:0 overruns:0 carrier:0'); writeLn(' collisions:0 txqueuelen:1000'); writeLn(' RX bytes:1079073403 (1029.0 Mb) TX bytes:61078984 (58.2 Mb)'); writeLn; for i:=0 to CantMaxMon do {Leer todos los mon activos} begin if mono[i]=true then {Muestra por cada mono activo} begin writeLn('mon',i,' Link encap:UNSPEC HWaddr E0-',DireccionMac,'-00-00-00-00-00-00-00-00-00-00');{Separo en 2 por que la cadena es muy larga y no compila} writeLn(' UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1'); writeLn(' RX packets:136 errors:0 dropped:138 overruns:0 frame:0'); writeLn(' TX packets:0 errors:0 dropped:0 overruns:0 carrier:0'); writeLn(' collisions:0 txqueuelen:1000'); writeLn(' RX bytes:27266 (26.6 Kb) TX bytes:0 (0.0 b)'); writeLn; end; end; end else begin writeLn('arguments wrong'); end; end; function PrivilegiosNecesarios(Atributos:TAtributos;root:boolean):boolean;{Devuelve true si tiene los privilegios necesarios} begin if ((ComandoRoot(Atributos,ComandosRoot)=true) and (root=true)) or ComandoNoRoot(Atributos,ComandosNoRoot)=true then begin PrivilegiosNecesarios:=true; end else begin PrivilegiosNecesarios:=false; end; end; procedure InterfaceCorrecto (Atributos:TAtributos;posInt:integer;mono:Tmono;var NumMon:integer;var correcto:boolean); var incorrecto:integer; aux:string; begin correcto:=false; if copy(Atributos[PosInt],1,3)='mon' then {Si empieza con mon} begin aux:= copy(Atributos[PosInt],4,(pos(' ',KeyLog) - 1)); {Desde la primera letra despues de mon hasta el final de la primera palabra} val(aux,NumMon,incorrecto); {Almaceno la cadena como integer en NumMon. Si habian letras en la cadena y por lo tanto da error, en incorrecto se almacena la posicion de la letra} if (incorrecto=0) and (mono[NumMon]=true) then Correcto:=true; end; if Atributos[PosInt]='wlan0' then Correcto:=true; end; procedure airmonStart (Atributos:TAtributos; var mono:Tmono); const PosInt=3; var x,y:integer; NumMon:integer; MonCorrecto:boolean; begin InterfaceCorrecto(Atributos,PosInt,mono,NumMon,MonCorrecto); if (MonCorrecto=true) and (Atributos[4]='') then {Si la interface existe y no hay un cuarto atributo} begin if (E925=true) or (E935=true) or (E1112=true) then {Si alguna de las aplicaciones conflictivas sigue on entonces indica que las cierre} begin writeLn('Found 3 processes that could cause trouble.'); writeLn('you may want to kill them!'); writeLn; writeLn('PID Name'); if (E925=true) then {Si no se mató, lo muestra} writeLn('925 avahi-daemon'); if (E935=true) then {Si no se mató, lo muestra} writeLn('935 NetworkManager'); if (E1112=true) then {Si no se mató, lo muestra} writeLn('1112 wpa_supplicant'); writeLn; end else begin {Si no hay aplicaciones molestando} writeLn('Interface Chipset Driver'); writeLn; writeLn('wlan0 Atheros ath9k - [phy0]'); for y:=0 to CantMaxMon do {Imprimo interfaces existentes} begin if mono[y]=true then writeLn('mon',y,' Atheros ath9k - [phy0]'); end; {Creo la nueva interface----------->} x:=0; while (x<=CantMaxMon) and (x<>-1) do begin if mono[x]=false then {Si la interface no está creada} begin mono[x]:=true; writeLn(' (monitor mode enabled on mon',x,')'); writeLn; x:=-1; {Para que salga del bucle al crear la interface} {Pongo -1 para así diferenciar que ese valor significa se creó la interface} end else x:=x+1; {paso al siguiente elemento} end; if x=CantMaxMon+1 then {Si la interface no se creó, significa que no habian mas lugares} writeLn('Ya has creado demasiadas interfaces. Prueba quitar alguna con: airmon-ng stop '); end; {fin else "si no hay aplicaciones molestando"} end else begin{Interface incorrecta o cuarto atributo existente} if atributos[4]='' then begin writeLn('La interface introducida no existe'); end else writeLn('arguments wrong.'); end; end; procedure airmonStop (Atributos:TAtributos; var mono:Tmono); const PosInt=3; var NumMon:integer; MonCorrecto:boolean; x:integer; begin InterfaceCorrecto(Atributos,PosInt,mono,NumMon,MonCorrecto); if (MonCorrecto=true) and (Atributos[4]='') then begin writeLn('Interface Chipset Driver'); writeLn; writeLn('wlan0 Atheros ath9k - [phy0]'); for x:=0 to CantMaxMon do begin if x<>NumMon then begin if mono[x]=true then writeLn('mon',x,' Atheros ath9k - [phy0]'); end else begin {Si es el mon que se queria remover} mono[NumMon]:=false; writeLn('mon',x,' Atheros ath9k - [phy0] (removed)'); end; end; end else begin {Si hay un cuarto atributo o si el mon no existe} if Atributos[4]<>'' then writeLn('arguments wrong.'); if MonCorrecto=false then writeLn('La interface introducida no existe'); end; end; procedure JustAirmon (Atributos:TAtributos;mono:Tmono); var x:integer; begin writeLn('Interface Chipset Driver'); writeLn; writeLn('wlan0 Atheros ath9k - [phy0]'); for x:=0 to CantMaxMon do {Imprimo interfaces existentes} begin if mono[x]=true then writeLn('mon',x,' Atheros ath9k - [phy0]'); end; writeLn; end; procedure airmon (Atributos:TAtributos; var mono:Tmono); begin if Atributos[2]='start' then airmonStart(Atributos,mono); if Atributos[2]='stop' then airmonStop(Atributos,mono); if Atributos[2]='' then JustAirmon(Atributos,mono); if (Atributos[2]<>'') and (Atributos[2]<>'stop') and (Atributos[2]<>'start') then writeLn('Arguments wrong'); end; function UltimoAtrib (Atributos:TAtributos):integer; {Ultimo atributo ingresado (contando interface como uno)} var x:integer; begin x:=1; while x <= CantAtribPerm do {Recorro los atributos} begin if Atributos[x]='' then {Cuando encuentre el primer vacio} begin UltimoAtrib:=x-1; {La posicion anterior es la ultima} x:=CantAtribPerm; {Salgo del bucle} end; x:=x+1 end; end; function BuscarAtributo(Atributos:TAtributos;Cadena:string):boolean; {Le paso como parametro el atributo que va a buscar en la cadena} var x:integer; begin BuscarAtributo:=false; {Inicializo} if (Cadena='-w') or (Cadena='--write') then {si busco el write write} begin for x:=1 to UltimoAtrib(Atributos) do begin if (Atributos[x]=Cadena) and (x < UltimoAtrib(Atributos)-1) and (Atributos[x-1]<>'-c') and (Atributos[x-1]<>'-channel') then {Antes no puede estar el channel Despues de -w debe estar el nombre del archivo y despues de este la interface} BuscarAtributo:=true; {encontró el atributo que buscaba y también tenia el nombre con que se iba a guardar} end; end; if (Cadena='-c') or (Cadena='--channel') then {Si busco el channel} begin for x:=1 to UltimoAtrib(Atributos) do begin if (Atributos[x]=Cadena) and (Atributos[x-1]<>'-w') and (Atributos[x-1]<>'-write') and (x < UltimoAtrib(Atributos)-2) then {Antes no puede estar el write y reviso que despues de -w debe estar el nombre del archivo y despues de este la interface} BuscarAtributo:=true; end; end; if (Cadena='--bssid') then {Si busco el bssid} begin for x:=1 to UltimoAtrib(Atributos) do begin if (Atributos[x]=Cadena) and (Atributos[x-1]<>'-w') and (Atributos[x-1]<>'-write') and (Atributos[x-1]<>'-c') and (Atributos[x-1]<>'-channel') then {Si lo que le sigue es una mac y antes no tiene al write (ya que lo tomaria como el nombre del archivo a guardar)} BuscarAtributo:=true; end; end; end; function AtributosCorrectos(Atributos:TAtributos; AtributosAirodump:TAtributosAirodump):boolean; {Solo sirve para el coamando airodump, lo que hace es revisar que todos los atributos ingresados sean correctos} var x,y:integer; begin x:=2; y:=1; AtributosCorrectos:=true; {Inicializo} while (x <= UltimoAtrib(Atributos)-1) and (AtributosCorrectos=true) do {Si encuentra un atributo falso sale sin revisar los que siguen} begin AtributosCorrectos:=false; {Inicializo por cada vez que se repite el bucle} y:=1; while y<=CantAtribAirod do begin if Atributos[x]=AtributosAirodump[y] then {Si no encuentra un atributo verdadero se va a quedar en false y va a salir del bucle} begin {Me fijo que no sea anulado por un comando anterior} if (((Atributos[x]='-w') or (Atributos[x]='--write')) and (Atributos[x-1]<>'-c') and (Atributos[x-1]<>'--channel') and (Atributos[x-1]<>'--bssid')) or (((Atributos[x]='-c') or (Atributos[x]='--channel')) and (Atributos[x-1]<>'-w') and (Atributos[x-1]<>'--write') and (Atributos[x-1]<>'--bssid')) or ((Atributos[x]='--bssid') and (Atributos[x-1]<>'-c') and (Atributos[x-1]<>'--channel') and (Atributos[x-1]<>'-w') and (Atributos[x-1]<>'--write')) then begin {Si es cualquiera de estos atrib salteo el que les sigue por que es parametro del anterior} if UltimoAtrib(Atributos) >= x+2 then {Me fijo que tenga lugar para la interface y el valor del atributo} begin x:=x+2; y:=0; AtributosCorrectos:=true; end; end; if Atributos[x]='-ivs' then AtributosCorrectos:=true; end; y:=y+1; end; x:=x+1; end; end; function CtrlC:boolean; begin CtrlC:=false; {Inicializo} if keypressed=true then if readKey=#3 then {#3 = ctrl + C} CtrlC:=true; end; procedure BuscarRedes (var Beacons:integer; var Data:integer); var S:integer; Hr,Min,Seg,Seg100:word; PWR:integer; DataAux:integer; begin {Inicializo en 0 segundos, capturas, beacons, etc} S:=0; Beacons:=0; DataAux:=0; Data:=0; PWR:=80; {Inicializo PWR en 80} repeat ClrScr; GetTime (Hr,Min,Seg,Seg100);{Tomo la hora local y la coloco en esas variables} writeLn(' CH 6 ][ Elapsed: ',S,' s ][',Hr,':',Min,':',Seg,']'); S:=S+1; {Aumento en 1 los segundos} writeLn; writeLn('BSSID PWR Beacons #Data, #/s CH MB ENC CIPHER AUTH ESSID'); writeLn; writeLn(ApMac,' -',PWR,' ',Beacons,' ',Data,' ',DataAux,' ',ApCh,' 54e. WEP WEP TP-LINK-AFCFCA'); writeLn; writeLn('BSSID STATION PWR Rate Lost Packets Probes'); writeLn('B0:48:7A:AF:CF:CA C8:AA:21:D7:AA:97 ',PWR,' 3 0 ',Beacons,' 11 '); writeLn; repeat PWR:=random(101); until PWR>85; Beacons:=Beacons + random(6); DataAux:=random(30); Data:=Data + DataAux; delay(1000); {Demoro 1000 milisegundos la ejecucio del programa} until CtrlC=true; end; procedure SinRedes; var S:integer; Hr,Min,Seg,Seg100:word; begin {Inicializo en 0 segundos, capturas, beacons, etc} S:=0; repeat ClrScr; GetTime (Hr,Min,Seg,Seg100);{Tomo la hora local y la coloco en esas variables} writeLn(' CH 6 ][ Elapsed: ',S,' s ][',Hr,':',Min,':',Seg,']'); S:=S+1; {Aumento en 1 los segundos} writeLn; writeLn('BSSID PWR Beacons #Data, #/s CH MB ENC CIPHER AUTH ESSID'); writeLn; writeLn; writeLn('BSSID STATION PWR Rate Lost Packets Probes'); writeLn; delay(1000); {Demoro 1000 milisegundos la ejecucio del programa} until CtrlC=true; end; function CanalIntro (Atributos:TAtributos):string; var x,aux:integer; begin for x:=1 to UltimoAtrib(Atributos) do begin if (Atributos[x]='-c') or (Atributos[x]='--channel') then aux:=x+1; end; CanalIntro:=Atributos[aux]; end; function BssidIntro (Atributos:TAtributos):string; var x,aux:integer; begin for x:=1 to UltimoAtrib(Atributos) do begin if Atributos[x]='--bssid' then aux:=x+1; end; BssidIntro:=Atributos[aux]; end; function NombreEscritura (Atributos:TAtributos):string; var x:integer; begin x:=1; while (x'-w') and (Atributos[x]<>'--write') do begin x:=x+1 end; if x'' then begin BuscarRedes(Beacons,Data); end else writeLn('Nombre de archivo para escritura invalido'); {No reinicio por que -w está habilitado} end; if (escritura=false) and (canal=true) and (bssid=false) then begin if CanalIntro(Atributos)=ApCh then begin BuscarRedes(Beacons,Data); Beacons:=0; Data:=0; {Reinicio por que -w está deshabilitado} end else begin SinRedes; end; end; if (escritura=false) and (canal=false) and (bssid=true) then begin if BssidIntro(Atributos)=ApMac then begin BuscarRedes(Beacons,Data); Beacons:=0; Data:=0; {Reinicio por que -w está deshabilitado} end else begin SinRedes; end; end; if (escritura=true) and (canal=true) and (bssid=false) then begin archivoEscritura:=NombreEscritura(Atributos); if archivoEscritura<>'' then begin if CanalIntro(Atributos)=ApCh then begin BuscarRedes(Beacons,Data); {No reinicio por que -w está habilitado} end else SinRedes; end else writeLn('Nombre de archivo para escritura invalido'); end; if (escritura=true) and (canal=false) and (bssid=true) then begin archivoEscritura:=NombreEscritura(Atributos); if archivoEscritura<>'' then begin if BssidIntro(Atributos)=ApMac then begin BuscarRedes(Beacons,Data); {No reinicio por que -w está habilitado} end else SinRedes; end else writeLn('Nombre de archivo para escritura invalido'); end; if (escritura=false) and (canal=true) and (bssid=true) then begin if (BssidIntro(Atributos)=ApMac) and (CanalIntro(Atributos)=ApCh) then begin BuscarRedes(Beacons,Data); Beacons:=0; Data:=0; {Reinicio por que -w está deshabilitado} end else begin SinRedes; end; end; if (escritura=true) and (canal=true) and (bssid=true) then begin archivoEscritura:=NombreEscritura(Atributos); if archivoEscritura<>'' then begin if (BssidIntro(Atributos)=ApMac) and (CanalIntro(Atributos)=ApCh) then begin BuscarRedes(Beacons,Data); {No Reinicio por que -w está habilitado} end else SinRedes; end else writeLn('Nombre de archivo para escritura invalido'); end; end else begin {Aplicaciones no cerradas} writeLn('failed: Device or resource busy'); writeLn('3 processes could cause trouble.'); writeLn('you may want to kill them!'); writeLn; writeLn('PID Name'); if (E925=true) then {Si no se mató, lo muestra} writeLn('925 avahi-daemon'); if (E935=true) then {Si no se mató, lo muestra} writeLn('935 NetworkManager'); if (E1112=true) then {Si no se mató, lo muestra} writeLn('1112 wpa_supplicant'); writeLn; end; end else {Interface incorrecta} begin if UltimoAtrib(Atributos) <> 1 then {Si hay un segundo atributo, por lo tanto escribó una interface (aunque incorrecta)} begin writeLn('La interface introducida no existe'); end else {Si no hay un segundo atributo, solo el airodump-ng} begin writeLn; writeLn('usage: airodump-ng '); writeLn; writeLn('Options:'); writeLn(' --ivs : Save only captured IVs'); writeLn(' --write : Dump file prefix'); writeLn(' -w : same as --write'); writeLn; writeLn('Filter options:'); writeLn(' --bssid : Filter APs by BSSID'); writeLn(' --channel : Capture on specific channels'); writeLn(' -c : same as --channel'); end; end; end else {Atributos incorrectos} writeLn('Arguments wrong.'); end; function ExaRandom:string; var aux:integer; begin aux:=random(16); case aux of 0 : ExaRandom:='0'; 1 : ExaRandom:='1'; 2 : ExaRandom:='2'; 3 : ExaRandom:='3'; 4 : ExaRandom:='4'; 5 : ExaRandom:='5'; 6 : ExaRandom:='6'; 7 : ExaRandom:='7'; 8 : ExaRandom:='8'; 9 : ExaRandom:='9'; 10: ExaRandom:='A'; 11: ExaRandom:='B'; 12: ExaRandom:='C'; 13: ExaRandom:='D'; 14: ExaRandom:='E'; 15: ExaRandom:='F'; end; end; function MemoRandom:string; var aux:integer; begin aux:=random(6); case aux of 0 : MemoRandom:='256'; 1 : MemoRandom:='512'; 2 : MemoRandom:='1024'; 3 : MemoRandom:='696'; 4 : MemoRandom:='1280'; 5 : MemoRandom:='768'; end; end; procedure aircrackConData(Data:integer); var S:integer; DataReaded:integer; begin {Inicializo} DataReaded:=0; S:=0; {Primera Parte} ClrScr; writeLn('Opening ',archivoEscritura,'.cap'); writeLn('Reading packets, please wait...'); delay(10000); {Segunda Parte} ClrScr; writeLn('Opening ',archivoEscritura,'.cap'); writeLn('Read ',Data,' packets.'); writeLn; writeLn(' # BSSID ESSID Encryption'); writeLn; writeLn(' 1 ',ApMac,' TP-LINK-AFCFCA WEP (',Data,' IVs)'); writeLn; writeLn('Choosing first network as target.'); writeLn; writeLn('Opening ',archivoEscritura,'.cap'); writeLn('Reading packets, please wait...'); {Tercera Parte} repeat ClrScr; writeLn(' Aircrack-ng 1.1'); writeLn; writeLn(' [',S,' s] Tested ',DataReaded,' keys (got ',Data,' IVs)'); writeLn; writeLn(' KB depth byte(vote)'); writeLn(' 0 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' 1 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' 2 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' 3 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' 4 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' 5 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' 6 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' 7 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' 8 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' 9 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' 10 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' 11 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' 12 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); DataReaded:=DataReaded + random (5000); delay(1000); S:=S+1; until (DataReaded>=Data) or (CtrlC); if DataReaded>=Data then begin {Cuarta Parte} ClrScr; writeLn(' Aircrack-ng 1.1'); writeLn; writeLn(' [',S,' s] Tested ',DataReaded,' keys (got ',Data,' IVs)'); writeLn; writeLn(' KB depth byte(vote)'); writeLn(' 0 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' 1 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' 2 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' 3 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' 4 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' KEY FOUND! [ 46:35:33:33:35 ] (ASCII: ThisIsThePasword )'); writeLn(' Decrypted correctly: 100%'); end; end; procedure aircrackSinData(Data:integer); var S:integer; DataReaded:integer; begin {Inicializo} DataReaded:=0; S:=0; {Primera Parte} ClrScr; writeLn('Opening ',archivoEscritura,'.cap'); writeLn('Reading packets, please wait...'); delay(10000); {Segunda Parte} ClrScr; writeLn('Opening ',archivoEscritura,'.cap'); writeLn('Read ',Data,' packets.'); writeLn; writeLn(' # BSSID ESSID Encryption'); writeLn; writeLn(' 1 ',ApMac,' TP-LINK-AFCFCA WEP (',Data,' IVs)'); writeLn; writeLn('Choosing first network as target.'); writeLn; writeLn('Opening ',archivoEscritura,'.cap'); writeLn('Reading packets, please wait...'); {Tercera Parte} repeat ClrScr; writeLn(' Aircrack-ng 1.1'); writeLn; writeLn(' [',S,' s] Tested ',DataReaded,' keys (got ',Data,' IVs)'); writeLn; writeLn(' KB depth byte(vote)'); writeLn(' 0 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' 1 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' 2 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' 3 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' 4 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' 5 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' 6 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' 7 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' 8 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' 9 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' 10 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' 11 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' 12 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); DataReaded:=DataReaded + random (5000); delay(1000); S:=S+1; until (DataReaded>=Data) or (CtrlC); {Cuarta Parte} ClrScr; writeLn(' Aircrack-ng 1.1'); writeLn; writeLn(' [',S,' s] Tested ',DataReaded,' keys (got ',Data,' IVs)'); writeLn; writeLn(' KB depth byte(vote)'); writeLn(' 0 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' 1 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' 2 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' 3 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' 4 ',random(2),'/ ',random(3),' ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,') ',ExaRandom,ExaRandom,'( ',MemoRandom,')'); writeLn(' Failed. Next try with 20000 IVs.'); end; procedure help; begin writeLn; writeLn('Comandos disponibles'); writeLn('explicacion : Despliega una expliacion del reto'); writeLn('help : Despliega este mensaje'); writeLn('clear : Limpia la pantalla'); writeLn('kill : Cierra un programa'); writeLn('airmon-ng : Colocar tarjeta en modo monitor'); writeLn('airodump-ng : Programa para capturar paquetes transmitidos a travez del protocolo 802.1'); writeLn('aircrack-ng : Crackea pasword de los paquetes capturados'); writeLn('iwconfig : Muestra información de las interfaces de red disponibles'); writeLn('ifconfig : Parecido a iwconfig'); writeLn; end; procedure aircrack (Atributos:TAtributos;archivoEscritura:string;Data:integer); begin if Atributos[2]=archivoEscritura then begin if Atributos[3]='' then begin if Data >= 20000 then aircrackConData(Data); if Data < 20000 then aircrackSinData(Data); end else {Si hay tercer atributo} writeLn('Arguments wrong'); end else {Si introdujo mal el nombre del archivo} writeLn('Ruta o archivo inexistente'); end; begin Explicacion; {--------------Comienzo inicializacion--------------} for y:=0 to CantMaxMon do {Arreglo de interfaces} begin mono[y]:=false; end; E925:=true; E935:=true; E1112:=true; {Inicializo procesos que molestan y deben ser cerrados} root:=false; {-----------------Fin inicializacion-----------------} repeat {--------------Comienzo inicializacion--------------} for i:=1 to CantAtribPerm do {Arreglo atributos vacio} begin Atributos[i]:=''; end; {-----------------Fin inicializacion-----------------} prompt (root); CapturarAtributos(KeyLog,Atributos); if ComandoCorrecto(Atributos,comandos)=true then {Si el comando es correcto} begin if PrivilegiosNecesarios(Atributos,root)=true then {Si tiene privilegios para ese comando} begin if Atributos[1]='su' then su (root,Atributos); if Atributos[1]='clear' then clear(Atributos); if Atributos[1]='kill' then kill (Atributos,E925,E935,E1112); if Atributos[1]='exit' then exit (Atributos,root,salir); if Atributos[1]='iwconfig' then iwconfig (Atributos,mono); if Atributos[1]='ifconfig' then ifconfig (Atributos,mono); if Atributos[1]='airmon-ng' then airmon(Atributos,mono); if Atributos[1]='airodump-ng' then airodump(Atributos,Beacons,Data,E925,E935,E1112,archivoEscritura); if Atributos[1]='aircrack-ng' then aircrack(Atributos,archivoEscritura,Data); if Atributos[1]='help' then help; if Atributos[1]='explicacion' then Explicacion; end else {Si no tiene privilegios necesarios} writeLn('Absolute path to ',Atributos[1],' is /usr/sbin/',Atributos[1],', so running it may require superuser privileges (eg. root).'); end else {Si el mensaje introducido fue incorrecto} writeLn(Atributos[1],' is not a typo you can use command help to lookup the commands available'); until salir=true; end.