Pastebin is 300% more awesome when you are logged in. Sign Up, it's FREE!
Guest

Reto Obtener Clave WEP

By: a guest on Sep 23rd, 2012  |  syntax: Pascal  |  size: 55.64 KB  |  hits: 81  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Program RetoWEP;
  2.  
  3. Uses strings, crt, Dos, getopts;
  4.  
  5. const
  6.   CantComandosRoot=6;
  7.   CantComandosNoRoot=5;
  8.   CantComandos= CantComandosRoot + CantComandosNoRoot;
  9.   CantAtribPerm=8;
  10.   CantMaxMon=20; {+1}
  11.   DireccionMac='E0:91:93:4F:82:7E';
  12.   CantAtribAirod=6; {Cantidad atributos posibles en airodump}
  13.   ApCh='8'; {chanel del AP}
  14.   ApMac='E0:91:93:4F:82:7E';{MAC del AP}
  15. type
  16.   Tmono=Array[0..CantMaxMon] of boolean;
  17.   TAtributos=Array[1..CantAtribPerm] of string[50];
  18.   TComandos=Array[1..CantComandos] of string;
  19.   TComandosRoot=Array[1..CantComandosRoot] of string;
  20.   TComandosNoRoot=Array[1..CantComandosNoRoot] of string;
  21.   TAtributosAirodump=Array[1..CantAtribAirod] of string;
  22.   TCadenas = record {Para almacenar las cadenas que marcan la introduccion al reto}
  23.     Cadena:string;
  24.     Marca:integer;
  25.   end;
  26.  
  27. const
  28.   Comandos : TComandos = ('kill','airmon-ng','airodump-ng','aircrack-ng','iwconfig','help','su','clear','ifconfig','exit','explicacion');
  29.   ComandosRoot : TComandosRoot = ('kill','airmon-ng','airodump-ng','aircrack-ng','iwconfig','ifconfig');
  30.   ComandosNoRoot : TComandosNoRoot = ('help','su','clear','exit','explicacion');
  31.   AtributosAirodump:TAtributosAirodump = ('-w','--write','-c','--channel','--bssid','-ivs');
  32.  
  33. var
  34.   Atributos:TAtributos; {atributos introducidos}
  35.   mono:Tmono; {Interfaces creadas}
  36.   root:boolean; {es root o no el usuario}
  37.   KeyLog:string; {Lo introducido por el usuario pero sin separar}
  38.   i,y:integer;{Variable para for inicializar}
  39.   E925,E935,E1112:boolean; {Aplicaciones molestas corriendo}
  40.   salir:boolean; {Salida del programa}
  41.   Beacons:integer;
  42.   Data:integer;
  43.   archivoEscritura:string;
  44.  
  45. function SoloNumeros (cadena:string):boolean; {verifica si el string posee solo numeros}
  46. var x,numeros:integer;
  47. begin
  48.   numeros:=0; {Inicializo}
  49.   SoloNumeros:=false; {Inicializo}
  50.   for x:=1 to length(cadena) do {Leo toda la cadena}
  51.   begin
  52.     if (cadena[x]>='0') and (cadena[x]<='9') then {veo la cantidad de numeros que hay en la cadena}
  53.     begin
  54.       numeros:=numeros+1;
  55.     end;
  56.   end;
  57.   if numeros=length(cadena) then {Si la cantidad de numeros es igual a la cantidad de caracteres}
  58.   begin
  59.     SoloNumeros:=true;
  60.   end;
  61. end;
  62.  
  63.  
  64. procedure CapturarAtributos (KeyLog:string; var Atributos:TAtributos); {Separar atributos del comando introducido por el usuario}
  65. var
  66.    y:integer;
  67.    aux:string;
  68. begin
  69.   y:=1;
  70.   while pos(' ',KeyLog)<>0 do
  71.   begin
  72.     if pos(' ',KeyLog)<>0 then {Si hay un espacio}
  73.     begin
  74.       aux:=copy(KeyLog,1,(pos(' ',KeyLog) - 1)); {Copio la primera palabra}
  75.       Atributos[y]:=aux;
  76.       KeyLog:=copy(KeyLog,(pos(' ',KeyLog) + 1),length(KeyLog)); {Copio desde el primer lugar que sigue del espacio hasta el final de la cadena}
  77.       if aux<>'' then
  78.       begin
  79.         y:=y+1;
  80.       end;
  81.     end;
  82.   end;
  83.   Atributos[y]:=KeyLog; {Guardo la ultima palabra}
  84. end;
  85.  
  86. procedure DesplazarComentario (Cadenas:TCadenas); {Escribe la cadena letra por letra como si se tratase de una animación}
  87. var
  88.   x:integer;
  89. begin
  90.   x:=1; {asigno}
  91.   repeat
  92.     write(Cadenas.Cadena[x]); {Imprimo la letra}
  93.     delay(200); {Retraso medio segundo la ejecucion del programa}
  94.     x:=x+1; {Paso a la siguiente letra}
  95.   until x= Cadenas.Marca; {Hasta que haya vacio (marca real)}
  96. end;
  97.  
  98. procedure Explicacion; {Pequeña explicacion del reto}
  99. Const
  100.   Bienvenido:TCadenas = (Cadena:'¡Bienvenido al reto!'; Marca:22);
  101.   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);
  102.   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);
  103.   Importante:TCadenas = (Cadena:'Importante! La contraseña del usuario de ID 0 es "www.hackxcrack.es" (sin comillas)';Marca:84);
  104.   Ahora:TCadenas = (Cadena:'Ahora... A trabajar! :D'; Marca:23);
  105.   ComandoHelp:TCadenas = (Cadena:'Puedes introducir el comando help para ver una lista de comandos disponibles';Marca:77);
  106. var
  107.   x:integer;
  108. begin
  109.   ClrScr;
  110.   x:=1;
  111.   repeat
  112.     case x of {Lo hago así para que si el usuario presiona una tecla salga del programa al terminar el case actual}
  113.       1 : begin DesplazarComentario(Bienvenido); writeLn; writeLn; end;
  114.       2 : begin DesplazarComentario(Simulacion); writeLn; writeLn; end;
  115.       3 : begin DesplazarComentario(Objetivo); writeLn; writeLn; end;
  116.       4 : begin DesplazarComentario(Importante); writeLn; writeLn; end;
  117.       5 : begin DesplazarComentario(Ahora); writeLn; writeLn; end;
  118.       6 : begin DesplazarComentario(ComandoHelp);writeLn;writeLn;end
  119.     end;
  120.     x:=x+1; {Por si el usuario decide salir antes, limpio la pantalla y escribo tódo junto}
  121.   until (x>=7) or (keypressed);
  122.   ClrScr;
  123.   writeLn(Bienvenido.Cadena); writeLn;
  124.   writeLn(Simulacion.Cadena); writeLn;
  125.   writeLn(Objetivo.Cadena); writeLn;
  126.   writeLn(Importante.Cadena); writeLn;
  127.   writeLn(Ahora.Cadena); writeLn;
  128.   writeLn(ComandoHelp.Cadena); writeLn;
  129.   readKey;readKey; {Pongo dos veces por que sino lo saltaba por el buffer del teclado}
  130.   ClrScr;
  131. end;
  132.  
  133. procedure prompt (root:boolean); {Linea de comandos}
  134. begin
  135.   if root=false then
  136.   begin
  137.     write('User@hackxcrack:~/home$ ');
  138.     readLn(KeyLog);
  139.   end;
  140.   if root=true then
  141.   begin
  142.     write('Root@hackxcrack:~/home# ');
  143.     readLn(KeyLog);
  144.   end;
  145. end;
  146.  
  147. procedure clear (Atributos:TAtributos);{Limpiar pantalla}
  148. begin
  149.   if Atributos[2]='' then
  150.   begin
  151.     ClrScr;
  152.   end
  153.   else begin
  154.     writeLn('arguments wrong');
  155.   end;
  156. end;
  157.  
  158. procedure kill (Atributos:TAtributos; var E925,E935,E1112:boolean);
  159. var accion:integer;
  160. begin
  161.   accion:=0;{Inicilaizo la accion}
  162.   if (Atributos[2]='925') and (E925=true) then {Si elije matar al primer programa}
  163.     accion:=1;
  164.   if (Atributos[2]='935') and (E935=true) then {Si elije matar al segundo programa}
  165.     accion:=2;
  166.     if (Atributos[2]='1112') and (E1112=true) then  {Si elije matar al tercer programa}
  167.     accion:=3;
  168.   if accion=0 then {Si no introdujo un ID correcto o ya lo habia matado antes}
  169.   begin
  170.     if SoloNumeros(Atributos[2])=true then {Si solo posee numeros}
  171.     begin
  172.       accion:=4;
  173.     end
  174.     else
  175.       accion:=5; {Si posee algun caracter que no es numero}
  176.   end;
  177. {1=925  -  2=935  -  3=1112  -  4=ID  -  5=Atributo}
  178.  
  179.   case accion of
  180.     1 : E925:=false;
  181.     2 : E935:=false;
  182.     3 : E1112:=false;
  183.     4 : writeLn('El proceso no existe');
  184.     5 : writeLn('arguments must be process or job IDs');
  185.   end;
  186. end;
  187.  
  188. function PedirContrasena:string;
  189. var contrasena:string;
  190.     c:char;
  191.     x:integer;
  192. begin
  193.   x:=1;
  194.   contrasena:='';
  195.   c:=' '; {Inicializo}
  196.   write('Contraseña: ');
  197.   while c<>#13 do {mientras sea diferente de espacio}
  198.   begin
  199.     c:=readKey;
  200.     if c<>#13 then
  201.     begin
  202.       if c=#8 then {Si usa el backspace}
  203.       begin
  204.         contrasena[x]:=' ';
  205.         x:=x-1;
  206.       end
  207.       else begin
  208.         contrasena:= contrasena + c; {Agrego el nuevo caracter a la cadena}
  209.         x:=x+1;
  210.       end;
  211.     end;
  212.  
  213.   end;
  214.   writeLn;{Para que haga un espacio luego de terminar de escribir la contaseña}
  215.   PedirContrasena:=contrasena;
  216. end;
  217.  
  218. procedure su (var root:boolean;Atributos:TAtributos);
  219. begin
  220.   if root=false then
  221.   begin
  222.     if Atributos[2]='' then
  223.     begin
  224.       if PedirContrasena='www.hackxcrack.es' then
  225.       begin
  226.         root:=true;
  227.       end
  228.       else begin
  229.         writeLn('Contraseña incorrecta');
  230.       end;
  231.     end
  232.     else
  233.       writeLn('arguments wrong');
  234.   end
  235.   else
  236.     writeLn('You are already root');
  237. end;
  238.  
  239. function ComandoCorrecto(Atributos:TAtributos;Comandos:TComandos):boolean;
  240. var i:integer;
  241.     correcto:boolean;
  242. begin
  243.   correcto:=false; {Inicializo}
  244.   for i:=1 to CantComandos do {Recorro la lista de comandos}
  245.   begin
  246.     if Atributos[1]=Comandos[i] then
  247.       correcto:=true;
  248.   end;
  249.   if correcto=true then
  250.     ComandoCorrecto:=true;
  251.   if correcto=false then
  252.     ComandoCorrecto:=false;
  253. end;
  254.  
  255. function ComandoRoot(Atributos:TAtributos;ComandosRoot:TComandosRoot):boolean; {Devuelve true si el comando introducido requiere root}
  256. begin
  257.   ComandoRoot:=false;
  258.   for i:=1 to CantComandosRoot do    {hacer de nuevo con busqueda}
  259.   begin
  260.     if Atributos[1]=ComandosRoot[i] then
  261.         ComandoRoot:=true
  262.   end;
  263. end;
  264.  
  265. function ComandoNoRoot(Atributos:TAtributos;ComandosNoRoot:TComandosNoRoot):boolean; {Devuelve true si el comando introducido no requiere root}
  266. begin
  267.   ComandoNoRoot:=false;
  268.   for i:=1 to CantComandosNoRoot do
  269.   begin
  270.     if Atributos[1]=ComandosNoRoot[i] then
  271.         ComandoNoRoot:=true
  272.   end;
  273. end;
  274.  
  275. procedure exit (Atributos:TAtributos; var root,salir:boolean);
  276. begin
  277.   if root=true then
  278.     root:=false
  279.   else
  280.     salir:=true;
  281. end;
  282.  
  283. procedure iwconfig (Atributos:TAtributos;mono:Tmono);
  284. begin
  285.   if Atributos[2]='' then {Si no posee atributos}
  286.   begin
  287.     writeLn('lo        no wireless extensions.');
  288.     writeLn;
  289.     writeLn('eth0      no wireless extensions.');
  290.     writeLn;
  291.     writeLn('wlan0     IEEE 802.11bgn  ESSID:off/any');
  292.     writeLn('          Mode:Managed  Access Point: Not-Associated   Tx-Power=off');  
  293.     writeLn('          Retry  long limit:7   RTS thr:off   Fragment thr:off');
  294.     writeLn('          Encryption key:off');
  295.     writeLn('          Power Management:off');
  296.     writeLn;
  297.     for i:=0 to CantMaxMon do {Leer todos los mon activos}
  298.     begin
  299.       if mono[i]=true then
  300.       begin
  301.         writeLn('mon',i,'      IEEE 802.11bgn  Mode:Monitor  Tx-Power=14 dBm');
  302.         writeLn('          Retry  long limit:7   RTS thr:off   Fragment thr:off');
  303.         writeLn('          Power Management:on');
  304.         writeLn;
  305.       end;
  306.     end;
  307.   end
  308.   else begin
  309.     writeLn('arguments wrong');
  310.   end;
  311. end;
  312.  
  313. procedure ifconfig (Atributos:TAtributos;mono:Tmono);
  314. begin
  315.   if Atributos[2]='' then {Si no posee atributos}
  316.   begin
  317.     writeLn('eth0      Link encap:Ethernet  HWaddr E0:69:9F:E4:AC:F5 ');
  318.     writeLn('          UP BROADCAST MULTICAST  MTU:1500  Metric:1');
  319.     writeLn('          RX packets:0 errors:0 dropped:0 overruns:0 frame:0');
  320.     writeLn('          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0');
  321.     writeLn('          collisions:0 txqueuelen:1000');
  322.     writeLn('          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)');
  323.     writeLn('          Interrupt:45');
  324.     writeLn;
  325.     writeLn('lo        Link encap:Local Loopback');
  326.     writeLn('          inet addr:127.0.0.1  Mask:255.0.0.0');
  327.     writeLn('          inet6 addr: ::1/128 Scope:Host');
  328.     writeLn('          UP LOOPBACK RUNNING  MTU:16436  Metric:1');
  329.     writeLn('          RX packets:676429 errors:0 dropped:0 overruns:0 frame:0');
  330.     writeLn('          TX packets:676429 errors:0 dropped:0 overruns:0 carrier:0');
  331.     writeLn('          collisions:0 txqueuelen:0');
  332.     writeLn('          RX bytes:330843279 (315.5 Mb)  TX bytes:330843279 (315.5 Mb)');
  333.     writeLn;
  334.     writeLn('wlan0     Link encap:Ethernet  HWaddr ',DireccionMac);
  335.     writeLn('          inet6 addr: fe80::2c0:dfff:fef9:ea73/64 Scope:Link');
  336.     writeLn('          UP BROADCAST MULTICAST  MTU:1500  Metric:1');
  337.     writeLn('          RX packets:789658 errors:0 dropped:0 overruns:0 frame:0');
  338.     writeLn('          TX packets:483056 errors:0 dropped:0 overruns:0 carrier:0');
  339.     writeLn('          collisions:0 txqueuelen:1000');
  340.     writeLn('          RX bytes:1079073403 (1029.0 Mb)  TX bytes:61078984 (58.2 Mb)');
  341.     writeLn;
  342.  
  343.     for i:=0 to CantMaxMon do {Leer todos los mon activos}
  344.     begin
  345.       if mono[i]=true then {Muestra por cada mono activo}
  346.       begin
  347.         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}
  348.         writeLn('          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1');
  349.         writeLn('          RX packets:136 errors:0 dropped:138 overruns:0 frame:0');
  350.         writeLn('          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0');
  351.         writeLn('          collisions:0 txqueuelen:1000');
  352.         writeLn('          RX bytes:27266 (26.6 Kb)  TX bytes:0 (0.0 b)');
  353.         writeLn;
  354.       end;
  355.     end;
  356.   end
  357.   else begin
  358.     writeLn('arguments wrong');
  359.   end;
  360. end;
  361.  
  362. function PrivilegiosNecesarios(Atributos:TAtributos;root:boolean):boolean;{Devuelve true si tiene los privilegios necesarios}
  363. begin
  364.   if ((ComandoRoot(Atributos,ComandosRoot)=true) and (root=true)) or ComandoNoRoot(Atributos,ComandosNoRoot)=true then
  365.   begin
  366.     PrivilegiosNecesarios:=true;
  367.   end
  368.   else begin
  369.     PrivilegiosNecesarios:=false;
  370.   end;
  371. end;
  372.  
  373. procedure InterfaceCorrecto (Atributos:TAtributos;posInt:integer;mono:Tmono;var NumMon:integer;var correcto:boolean);
  374. var incorrecto:integer;
  375.     aux:string;
  376. begin
  377.   correcto:=false;
  378.   if copy(Atributos[PosInt],1,3)='mon' then {Si empieza con mon}
  379.   begin
  380.     aux:= copy(Atributos[PosInt],4,(pos(' ',KeyLog) - 1)); {Desde la primera letra despues de mon hasta el final de la primera palabra}
  381.     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}
  382.     if (incorrecto=0) and (mono[NumMon]=true) then
  383.         Correcto:=true;
  384.   end;
  385.  
  386.   if Atributos[PosInt]='wlan0' then
  387.     Correcto:=true;
  388.  
  389. end;
  390.  
  391. procedure airmonStart (Atributos:TAtributos; var mono:Tmono);
  392. const
  393.   PosInt=3;
  394. var
  395.   x,y:integer;
  396.   NumMon:integer;
  397.   MonCorrecto:boolean;
  398. begin
  399.   InterfaceCorrecto(Atributos,PosInt,mono,NumMon,MonCorrecto);
  400.  
  401.   if (MonCorrecto=true) and (Atributos[4]='') then {Si la interface existe y no hay un cuarto atributo}
  402.   begin
  403.     if (E925=true) or (E935=true) or (E1112=true) then {Si alguna de las aplicaciones conflictivas sigue on entonces indica que las cierre}
  404.     begin
  405.       writeLn('Found 3 processes that could cause trouble.');
  406.       writeLn('you may want to kill them!');
  407.       writeLn;
  408.       writeLn('PID        Name');
  409.       if (E925=true) then {Si no se mató, lo muestra}
  410.         writeLn('925      avahi-daemon');
  411.       if (E935=true) then {Si no se mató, lo muestra}
  412.         writeLn('935      NetworkManager');
  413.       if (E1112=true) then {Si no se mató, lo muestra}
  414.         writeLn('1112     wpa_supplicant');
  415.       writeLn;
  416.     end else
  417.     begin {Si no hay aplicaciones molestando}
  418.       writeLn('Interface          Chipset         Driver');
  419.       writeLn;
  420.       writeLn('wlan0              Atheros         ath9k - [phy0]');
  421.       for y:=0 to CantMaxMon do {Imprimo interfaces existentes}
  422.       begin
  423.         if mono[y]=true then
  424.           writeLn('mon',y,'               Atheros         ath9k - [phy0]');
  425.       end;
  426.      
  427.       {Creo la nueva interface----------->}
  428.       x:=0;
  429.       while (x<=CantMaxMon) and (x<>-1) do
  430.       begin                      
  431.         if mono[x]=false then {Si la interface no está creada}
  432.         begin
  433.           mono[x]:=true;
  434.           writeLn('                                     (monitor mode enabled on mon',x,')');
  435.           writeLn;
  436.           x:=-1; {Para que salga del bucle al crear la interface} {Pongo -1 para así diferenciar que ese valor significa se creó la interface}
  437.         end else
  438.           x:=x+1; {paso al siguiente elemento}
  439.       end;
  440.       if x=CantMaxMon+1 then {Si la interface no se creó, significa que no habian mas lugares}
  441.               writeLn('Ya has creado demasiadas interfaces. Prueba quitar alguna con:  airmon-ng stop <interface>');
  442.  
  443.     end; {fin else "si no hay aplicaciones molestando"}
  444.    
  445.   end
  446.   else begin{Interface incorrecta o cuarto atributo existente}
  447.     if atributos[4]='' then
  448.     begin
  449.       writeLn('La interface introducida no existe');
  450.     end else
  451.       writeLn('arguments wrong.');
  452.   end;
  453.  
  454.  
  455. end;
  456.  
  457. procedure airmonStop (Atributos:TAtributos; var mono:Tmono);
  458. const
  459.   PosInt=3;
  460. var
  461.   NumMon:integer;
  462.   MonCorrecto:boolean;
  463.   x:integer;
  464. begin
  465.   InterfaceCorrecto(Atributos,PosInt,mono,NumMon,MonCorrecto);
  466.  
  467.   if (MonCorrecto=true) and (Atributos[4]='') then
  468.   begin
  469.     writeLn('Interface          Chipset         Driver');
  470.     writeLn;
  471.     writeLn('wlan0              Atheros         ath9k - [phy0]');
  472.     for x:=0 to CantMaxMon do
  473.     begin
  474.       if x<>NumMon then
  475.       begin
  476.         if mono[x]=true then
  477.           writeLn('mon',x,'               Atheros         ath9k - [phy0]');
  478.       end
  479.       else begin {Si es el mon que se queria remover}
  480.         mono[NumMon]:=false;
  481.         writeLn('mon',x,'               Atheros         ath9k - [phy0] (removed)');
  482.       end;
  483.     end;
  484.   end
  485.   else begin {Si hay un cuarto atributo o si el mon no existe}
  486.     if Atributos[4]<>'' then
  487.       writeLn('arguments wrong.');
  488.     if MonCorrecto=false then
  489.       writeLn('La interface introducida no existe');
  490.   end;
  491. end;
  492.  
  493. procedure JustAirmon (Atributos:TAtributos;mono:Tmono);
  494. var x:integer;
  495. begin
  496.   writeLn('Interface          Chipset         Driver');
  497.   writeLn;
  498.   writeLn('wlan0              Atheros         ath9k - [phy0]');
  499.  
  500.   for x:=0 to CantMaxMon do {Imprimo interfaces existentes}
  501.   begin
  502.     if mono[x]=true then
  503.       writeLn('mon',x,'               Atheros         ath9k - [phy0]');
  504.   end;
  505.   writeLn;
  506. end;
  507.  
  508. procedure airmon (Atributos:TAtributos; var mono:Tmono);
  509. begin
  510.   if Atributos[2]='start' then
  511.     airmonStart(Atributos,mono);
  512.   if Atributos[2]='stop' then
  513.     airmonStop(Atributos,mono);
  514.   if Atributos[2]='' then
  515.     JustAirmon(Atributos,mono);
  516.   if (Atributos[2]<>'') and (Atributos[2]<>'stop') and (Atributos[2]<>'start') then
  517.     writeLn('Arguments wrong');
  518. end;
  519.  
  520. function UltimoAtrib (Atributos:TAtributos):integer; {Ultimo atributo ingresado (contando interface como uno)}
  521. var x:integer;
  522. begin
  523.   x:=1;
  524.   while x <= CantAtribPerm do {Recorro los atributos}
  525.   begin
  526.     if Atributos[x]='' then {Cuando encuentre el primer vacio}
  527.     begin
  528.       UltimoAtrib:=x-1; {La posicion anterior es la ultima}
  529.       x:=CantAtribPerm; {Salgo del bucle}
  530.     end;
  531.     x:=x+1
  532.   end;
  533. end;
  534.  
  535. function BuscarAtributo(Atributos:TAtributos;Cadena:string):boolean; {Le paso como parametro el atributo que va a buscar en la cadena}
  536. var
  537.   x:integer;
  538. begin
  539.     BuscarAtributo:=false; {Inicializo}
  540.     if (Cadena='-w') or (Cadena='--write')  then {si busco el write write}
  541.     begin
  542.       for x:=1 to UltimoAtrib(Atributos) do
  543.       begin
  544.         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}
  545.                 BuscarAtributo:=true; {encontró el atributo que buscaba y también tenia el nombre con que se iba a guardar}
  546.       end;
  547.     end;
  548.  
  549.     if (Cadena='-c') or (Cadena='--channel') then {Si busco el channel}
  550.     begin
  551.             for x:=1 to UltimoAtrib(Atributos) do
  552.         begin
  553.               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}
  554.                 BuscarAtributo:=true;
  555.         end;
  556.     end;
  557.     if (Cadena='--bssid') then {Si busco el bssid}
  558.     begin
  559.       for x:=1 to UltimoAtrib(Atributos) do
  560.             begin
  561.               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)}
  562.                 BuscarAtributo:=true;
  563.             end;
  564.     end;
  565. end;
  566.  
  567. 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}
  568. var x,y:integer;
  569. begin
  570.   x:=2;
  571.   y:=1;
  572.   AtributosCorrectos:=true; {Inicializo}
  573.   while (x <= UltimoAtrib(Atributos)-1) and (AtributosCorrectos=true) do {Si encuentra un atributo falso sale sin revisar los que siguen}
  574.   begin
  575.     AtributosCorrectos:=false; {Inicializo por cada vez que se repite el bucle}
  576.     y:=1;
  577.     while y<=CantAtribAirod do
  578.     begin
  579.       if Atributos[x]=AtributosAirodump[y] then {Si no encuentra un atributo verdadero se va a quedar en false y va a salir del bucle}
  580.       begin
  581.         {Me fijo que no sea anulado por un comando anterior}
  582.         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
  583.               begin {Si es cualquiera de estos atrib salteo el que les sigue por que es parametro del anterior}
  584.           if UltimoAtrib(Atributos) >= x+2 then {Me fijo que tenga lugar para la interface y el valor del atributo}
  585.           begin
  586.               x:=x+2;
  587.               y:=0;
  588.               AtributosCorrectos:=true;
  589.           end;
  590.             end;
  591.             if Atributos[x]='-ivs' then
  592.                 AtributosCorrectos:=true;
  593.                
  594.       end;
  595.       y:=y+1;
  596.     end;
  597.     x:=x+1;
  598.   end;
  599. end;
  600.  
  601. function CtrlC:boolean;
  602. begin
  603.   CtrlC:=false; {Inicializo}
  604.   if keypressed=true then
  605.     if readKey=#3 then {#3 = ctrl + C}
  606.       CtrlC:=true;  
  607. end;
  608.  
  609. procedure BuscarRedes (var Beacons:integer; var Data:integer);
  610. var
  611.   S:integer;
  612.   Hr,Min,Seg,Seg100:word;
  613.   PWR:integer;
  614.   DataAux:integer;
  615. begin
  616. {Inicializo en 0 segundos, capturas, beacons, etc}
  617.   S:=0; Beacons:=0; DataAux:=0; Data:=0;
  618.   PWR:=80; {Inicializo PWR en 80}
  619.   repeat
  620.     ClrScr;
  621.     GetTime (Hr,Min,Seg,Seg100);{Tomo la hora local y la coloco en esas variables}
  622.     writeLn(' CH  6 ][ Elapsed: ',S,' s ][',Hr,':',Min,':',Seg,']');
  623.     S:=S+1; {Aumento en 1 los segundos}
  624.     writeLn;
  625.     writeLn('BSSID              PWR    Beacons      #Data,   #/s    CH    MB     ENC    CIPHER   AUTH   ESSID');
  626.     writeLn;
  627.     writeLn(ApMac,'  -',PWR,'    ',Beacons,'            ',Data,'     ',DataAux,'     ',ApCh,'      54e.     WEP     WEP     TP-LINK-AFCFCA');
  628.     writeLn;
  629.     writeLn('BSSID                STATION              PWR    Rate     Lost    Packets    Probes');
  630.     writeLn('B0:48:7A:AF:CF:CA    C8:AA:21:D7:AA:97    ',PWR,'     3         0     ',Beacons,'       11    ');
  631.     writeLn;
  632.     repeat
  633.       PWR:=random(101);
  634.     until PWR>85;
  635.     Beacons:=Beacons + random(6);
  636.     DataAux:=random(30);
  637.     Data:=Data + DataAux;
  638.     delay(1000); {Demoro 1000 milisegundos la ejecucio del programa}
  639.  
  640.   until CtrlC=true;
  641.  
  642. end;
  643.  
  644. procedure SinRedes;
  645. var
  646.   S:integer;
  647.   Hr,Min,Seg,Seg100:word;
  648. begin
  649. {Inicializo en 0 segundos, capturas, beacons, etc}
  650.   S:=0;
  651.   repeat
  652.     ClrScr;
  653.     GetTime (Hr,Min,Seg,Seg100);{Tomo la hora local y la coloco en esas variables}
  654.     writeLn(' CH  6 ][ Elapsed: ',S,' s ][',Hr,':',Min,':',Seg,']');
  655.     S:=S+1; {Aumento en 1 los segundos}
  656.     writeLn;
  657.     writeLn('BSSID              PWR    Beacons      #Data,   #/s    CH    MB     ENC    CIPHER   AUTH   ESSID');
  658.     writeLn;
  659.     writeLn;
  660.     writeLn('BSSID                STATION              PWR    Rate     Lost    Packets    Probes');
  661.     writeLn;
  662.     delay(1000); {Demoro 1000 milisegundos la ejecucio del programa}
  663.  
  664.   until CtrlC=true;
  665. end;
  666.  
  667. function CanalIntro (Atributos:TAtributos):string;
  668. var
  669.   x,aux:integer;
  670. begin
  671.   for x:=1 to UltimoAtrib(Atributos) do
  672.   begin
  673.     if (Atributos[x]='-c') or (Atributos[x]='--channel') then
  674.       aux:=x+1;
  675.   end;
  676.   CanalIntro:=Atributos[aux];
  677. end;
  678.  
  679. function BssidIntro (Atributos:TAtributos):string;
  680. var
  681.   x,aux:integer;
  682. begin
  683.   for x:=1 to UltimoAtrib(Atributos) do
  684.   begin
  685.     if Atributos[x]='--bssid' then
  686.       aux:=x+1;
  687.   end;
  688.   BssidIntro:=Atributos[aux];
  689. end;
  690.  
  691.  
  692. function NombreEscritura (Atributos:TAtributos):string;
  693. var
  694.   x:integer;
  695. begin
  696.   x:=1;
  697.   while (x<UltimoAtrib(Atributos)) and (Atributos[x]<>'-w') and (Atributos[x]<>'--write') do
  698.   begin
  699.     x:=x+1
  700.   end;
  701.   if x<UltimoAtrib(Atributos) then
  702.   begin
  703.     if (Atributos[x+1]='-c') or (Atributos[x+1]='--channel') then
  704.     begin
  705.       NombreEscritura:='';
  706.     end else
  707.       NombreEscritura:=Atributos[x+1];
  708.   end else
  709.     writeLn('Ha habido un problema durante la ejecucion del programa, porfavor pongase en contaco con el servicio tecnico (osea yo XD) (osea Facu de Hackxcrack) jaja');
  710. end;
  711.  
  712.  
  713.  
  714. procedure airodump (Atributos:TAtributos;var Beacons:integer;var Data:integer; E925,E935,E1112:boolean; var archivoEscritura:string);
  715. var
  716.   NumMon:integer;
  717.   MonCorrecto:boolean;
  718.   escritura,canal,bssid:boolean;
  719. begin
  720.   escritura:=false; {Inicializo}
  721.   canal:=false;
  722.   bssid:=false;
  723.  
  724.   InterfaceCorrecto(Atributos,UltimoAtrib(Atributos),mono,NumMon,MonCorrecto); {Lo busco en el ultimo atributo}
  725.  
  726.   if AtributosCorrectos(Atributos,AtributosAirodump)=true then {Atributos correctos}
  727.   begin
  728.     if MonCorrecto=true then {Interface Correcta}
  729.     begin
  730.       if (E925=false) and (E935=false) and (E1112=false) then {Aplicaciones cerradas}
  731.       begin
  732.         {Convierto en variable para no desperdiciar recursos llamando tantas veces la funcion}
  733.         if (BuscarAtributo (Atributos,'-w')=true) or (BuscarAtributo (Atributos,'--write')=true) then
  734.           escritura:=true;
  735.          
  736.         if (BuscarAtributo (Atributos,'-c')=true) or (BuscarAtributo (Atributos,'--channel')=true) then
  737.           canal:=true;
  738.          
  739.         if (BuscarAtributo (Atributos,'--bssid')=true) then
  740.           bssid:=true;
  741.        
  742.         {Si no tiene ninguno de los atributos (exeptuando -ivs que no importa si está o nó, por que no hace nada en la ejecucion del algoritmo}
  743.         if (escritura=false) and (canal=false) and (bssid=false) then
  744.         begin
  745.           BuscarRedes(Beacons,Data);
  746.           Beacons:=0; Data:=0; {Reinicio por que -w está deshabilitado}
  747.         end;  
  748.        
  749.         if (escritura=true) and (canal=false) and (bssid=false) then
  750.         begin
  751.           archivoEscritura:=NombreEscritura(Atributos);
  752.           writeLn(archivoEscritura);
  753.           if archivoEscritura<>'' then
  754.           begin
  755.             BuscarRedes(Beacons,Data);
  756.           end else
  757.             writeLn('Nombre de archivo para escritura invalido');
  758.           {No reinicio por que -w está habilitado}
  759.         end;
  760.        
  761.         if (escritura=false) and (canal=true) and (bssid=false) then
  762.         begin
  763.           if CanalIntro(Atributos)=ApCh then
  764.           begin
  765.             BuscarRedes(Beacons,Data);
  766.             Beacons:=0; Data:=0; {Reinicio por que -w está deshabilitado}
  767.           end else
  768.           begin
  769.             SinRedes;
  770.           end;
  771.         end;
  772.        
  773.         if (escritura=false) and (canal=false) and (bssid=true) then
  774.         begin
  775.           if BssidIntro(Atributos)=ApMac then
  776.           begin
  777.             BuscarRedes(Beacons,Data);
  778.             Beacons:=0; Data:=0; {Reinicio por que -w está deshabilitado}
  779.           end else
  780.           begin
  781.             SinRedes;
  782.           end;
  783.         end;
  784.        
  785.         if (escritura=true) and (canal=true) and (bssid=false) then
  786.         begin
  787.           archivoEscritura:=NombreEscritura(Atributos);
  788.           if archivoEscritura<>'' then
  789.           begin
  790.             if CanalIntro(Atributos)=ApCh then
  791.             begin
  792.               BuscarRedes(Beacons,Data);
  793.               {No reinicio por que -w está habilitado}
  794.             end else
  795.               SinRedes;
  796.            end else
  797.              writeLn('Nombre de archivo para escritura invalido');
  798.         end;        
  799.        
  800.         if (escritura=true) and (canal=false) and (bssid=true) then
  801.         begin
  802.           archivoEscritura:=NombreEscritura(Atributos);
  803.           if archivoEscritura<>'' then
  804.           begin  
  805.             if BssidIntro(Atributos)=ApMac then
  806.             begin
  807.               BuscarRedes(Beacons,Data);
  808.               {No reinicio por que -w está habilitado}
  809.             end else
  810.               SinRedes;
  811.           end else
  812.             writeLn('Nombre de archivo para escritura invalido');
  813.         end;
  814.        
  815.         if (escritura=false) and (canal=true) and (bssid=true) then
  816.         begin
  817.           if (BssidIntro(Atributos)=ApMac) and (CanalIntro(Atributos)=ApCh) then
  818.           begin
  819.             BuscarRedes(Beacons,Data);
  820.             Beacons:=0; Data:=0; {Reinicio por que -w está deshabilitado}
  821.           end else
  822.           begin
  823.             SinRedes;
  824.           end;
  825.         end;
  826.        
  827.         if (escritura=true) and (canal=true) and (bssid=true) then
  828.         begin
  829.           archivoEscritura:=NombreEscritura(Atributos);
  830.           if archivoEscritura<>'' then
  831.           begin
  832.             if (BssidIntro(Atributos)=ApMac) and (CanalIntro(Atributos)=ApCh) then
  833.             begin
  834.               BuscarRedes(Beacons,Data);
  835.               {No Reinicio por que -w está habilitado}
  836.             end else
  837.               SinRedes;
  838.            end else
  839.              writeLn('Nombre de archivo para escritura invalido');
  840.         end;
  841.        
  842.       end else
  843.       begin {Aplicaciones no cerradas}
  844.         writeLn('failed: Device or resource busy');
  845.         writeLn('3 processes could cause trouble.');
  846.         writeLn('you may want to kill them!');
  847.         writeLn;
  848.         writeLn('PID        Name');
  849.         if (E925=true) then {Si no se mató, lo muestra}
  850.           writeLn('925      avahi-daemon');
  851.         if (E935=true) then {Si no se mató, lo muestra}
  852.           writeLn('935      NetworkManager');
  853.         if (E1112=true) then {Si no se mató, lo muestra}
  854.           writeLn('1112     wpa_supplicant');
  855.         writeLn;
  856.       end;      
  857.     end else {Interface incorrecta}
  858.     begin
  859.       if UltimoAtrib(Atributos) <> 1 then {Si hay un segundo atributo, por lo tanto escribó una interface (aunque incorrecta)}
  860.       begin
  861.         writeLn('La interface introducida no existe');
  862.       end else {Si no hay un segundo atributo, solo el airodump-ng}
  863.       begin
  864.         writeLn;
  865.         writeLn('usage: airodump-ng <options> <interface>');
  866.         writeLn;
  867.         writeLn('Options:');
  868.         writeLn('     --ivs               : Save only captured IVs');
  869.         writeLn('     --write    <prefix> : Dump file prefix');        
  870.         writeLn('     -w                  : same as --write');
  871.         writeLn;
  872.         writeLn('Filter options:');
  873.         writeLn('     --bssid     <bssid> : Filter APs by BSSID');
  874.         writeLn('     --channel <channels>: Capture on specific channels');
  875.         writeLn('     -c                  : same as --channel');
  876.       end;
  877.     end;
  878.   end else {Atributos incorrectos}
  879.     writeLn('Arguments wrong.');
  880.  
  881. end;
  882.    
  883.  
  884.    
  885. function ExaRandom:string;
  886. var
  887.   aux:integer;
  888. begin
  889.   aux:=random(16);
  890.   case aux of
  891.     0 : ExaRandom:='0';
  892.     1 : ExaRandom:='1';
  893.     2 : ExaRandom:='2';
  894.     3 : ExaRandom:='3';
  895.     4 : ExaRandom:='4';
  896.     5 : ExaRandom:='5';
  897.     6 : ExaRandom:='6';
  898.     7 : ExaRandom:='7';
  899.     8 : ExaRandom:='8';
  900.     9 : ExaRandom:='9';
  901.     10: ExaRandom:='A';
  902.     11: ExaRandom:='B';
  903.     12: ExaRandom:='C';
  904.     13: ExaRandom:='D';
  905.     14: ExaRandom:='E';
  906.     15: ExaRandom:='F';
  907.   end;
  908. end;
  909.  
  910. function MemoRandom:string;
  911. var
  912.   aux:integer;
  913. begin
  914.   aux:=random(6);
  915.   case aux of
  916.     0 : MemoRandom:='256';
  917.     1 : MemoRandom:='512';
  918.     2 : MemoRandom:='1024';
  919.     3 : MemoRandom:='696';
  920.     4 : MemoRandom:='1280';
  921.     5 : MemoRandom:='768';
  922.   end;
  923. end;
  924.  
  925.  
  926.    
  927.    
  928.  
  929. procedure aircrackConData(Data:integer);
  930. var
  931.   S:integer;
  932.   DataReaded:integer;
  933. begin
  934.   {Inicializo}
  935.   DataReaded:=0;
  936.   S:=0;
  937.  
  938.   {Primera Parte}
  939.   ClrScr;
  940.   writeLn('Opening ',archivoEscritura,'.cap');
  941.   writeLn('Reading packets, please wait...');
  942.   delay(10000);
  943.  
  944.   {Segunda Parte}
  945.   ClrScr;
  946.   writeLn('Opening ',archivoEscritura,'.cap');
  947.   writeLn('Read ',Data,' packets.');
  948.   writeLn;
  949.   writeLn(' #  BSSID              ESSID                     Encryption');
  950.   writeLn;
  951.   writeLn(' 1 ',ApMac,'   TP-LINK-AFCFCA                      WEP (',Data,' IVs)');
  952.   writeLn;
  953.   writeLn('Choosing first network as target.');
  954.   writeLn;
  955.   writeLn('Opening ',archivoEscritura,'.cap');
  956.   writeLn('Reading packets, please wait...');
  957.  
  958.  
  959.   {Tercera Parte}
  960.   repeat
  961.     ClrScr;
  962.     writeLn('                                            Aircrack-ng 1.1');
  963.     writeLn;
  964.     writeLn('                               [',S,' s] Tested ',DataReaded,' keys (got ',Data,' IVs)');
  965.     writeLn;
  966.     writeLn('   KB    depth   byte(vote)');
  967.     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,')');
  968.     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,')');
  969.     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,')');
  970.     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,')');
  971.     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,')');
  972.     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,')');
  973.     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,')');
  974.     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,')');
  975.     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,')');
  976.     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,')');
  977.     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,')');
  978.     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,')');
  979.     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,')');
  980.     DataReaded:=DataReaded + random (5000);
  981.     delay(1000);
  982.     S:=S+1;
  983.   until (DataReaded>=Data) or (CtrlC);
  984.  
  985.   if DataReaded>=Data then
  986.   begin
  987.     {Cuarta Parte}
  988.     ClrScr;
  989.     writeLn('                                            Aircrack-ng 1.1');
  990.     writeLn;
  991.     writeLn('                               [',S,' s] Tested ',DataReaded,' keys (got ',Data,' IVs)');
  992.     writeLn;
  993.     writeLn('   KB    depth   byte(vote)');
  994.     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,')');
  995.     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,')');
  996.     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,')');
  997.     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,')');
  998.     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,')');
  999.     writeLn('                     KEY FOUND! [ 46:35:33:33:35 ] (ASCII: ThisIsThePasword )');
  1000.     writeLn('  Decrypted correctly: 100%');
  1001.   end;
  1002.  
  1003. end;
  1004.  
  1005. procedure aircrackSinData(Data:integer);
  1006. var
  1007.   S:integer;
  1008.   DataReaded:integer;
  1009. begin
  1010.   {Inicializo}
  1011.   DataReaded:=0;
  1012.   S:=0;
  1013.  
  1014.   {Primera Parte}
  1015.   ClrScr;
  1016.   writeLn('Opening ',archivoEscritura,'.cap');
  1017.   writeLn('Reading packets, please wait...');
  1018.   delay(10000);
  1019.  
  1020.   {Segunda Parte}
  1021.   ClrScr;
  1022.   writeLn('Opening ',archivoEscritura,'.cap');
  1023.   writeLn('Read ',Data,' packets.');
  1024.   writeLn;
  1025.   writeLn(' #  BSSID              ESSID                     Encryption');
  1026.   writeLn;
  1027.   writeLn(' 1 ',ApMac,'   TP-LINK-AFCFCA                      WEP (',Data,' IVs)');
  1028.   writeLn;
  1029.   writeLn('Choosing first network as target.');
  1030.   writeLn;
  1031.   writeLn('Opening ',archivoEscritura,'.cap');
  1032.   writeLn('Reading packets, please wait...');
  1033.  
  1034.  
  1035.   {Tercera Parte}
  1036.   repeat
  1037.     ClrScr;
  1038.     writeLn('                                            Aircrack-ng 1.1');
  1039.     writeLn;
  1040.     writeLn('                               [',S,' s] Tested ',DataReaded,' keys (got ',Data,' IVs)');
  1041.     writeLn;
  1042.     writeLn('   KB    depth   byte(vote)');
  1043.     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,')');
  1044.     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,')');
  1045.     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,')');
  1046.     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,')');
  1047.     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,')');
  1048.     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,')');
  1049.     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,')');
  1050.     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,')');
  1051.     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,')');
  1052.     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,')');
  1053.     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,')');
  1054.     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,')');
  1055.     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,')');
  1056.     DataReaded:=DataReaded + random (5000);
  1057.     delay(1000);
  1058.     S:=S+1;
  1059.   until (DataReaded>=Data) or (CtrlC);
  1060.  
  1061.  
  1062.   {Cuarta Parte}
  1063.   ClrScr;
  1064.   writeLn('                                            Aircrack-ng 1.1');
  1065.   writeLn;
  1066.   writeLn('                               [',S,' s] Tested ',DataReaded,' keys (got ',Data,' IVs)');
  1067.   writeLn;
  1068.   writeLn('   KB    depth   byte(vote)');
  1069.   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,')');
  1070.   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,')');
  1071.   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,')');
  1072.   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,')');
  1073.   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,')');
  1074.   writeLn('  Failed. Next try with 20000 IVs.');
  1075.  
  1076.  
  1077. end;
  1078.  
  1079. procedure help;
  1080. begin
  1081.   writeLn;
  1082.   writeLn('Comandos disponibles');
  1083.   writeLn('explicacion  :    Despliega una expliacion del reto');
  1084.   writeLn('help         :    Despliega este mensaje');
  1085.   writeLn('clear        :    Limpia la pantalla');
  1086.   writeLn('kill         :    Cierra un programa');
  1087.   writeLn('airmon-ng    :    Colocar tarjeta en modo monitor');
  1088.   writeLn('airodump-ng  :    Programa para capturar paquetes transmitidos a travez del protocolo 802.1');
  1089.   writeLn('aircrack-ng  :    Crackea pasword de los paquetes capturados');
  1090.   writeLn('iwconfig     :    Muestra información de las interfaces de red disponibles');
  1091.   writeLn('ifconfig     :    Parecido a iwconfig');
  1092.   writeLn;
  1093. end;    
  1094.    
  1095. procedure aircrack (Atributos:TAtributos;archivoEscritura:string;Data:integer);
  1096. begin
  1097.   if Atributos[2]=archivoEscritura then
  1098.   begin
  1099.     if Atributos[3]='' then
  1100.     begin
  1101.       if Data >= 20000 then
  1102.         aircrackConData(Data);
  1103.        
  1104.       if Data < 20000 then
  1105.         aircrackSinData(Data);
  1106.    
  1107.  
  1108.     end else {Si hay tercer atributo}
  1109.       writeLn('Arguments wrong');
  1110.   end else {Si introdujo mal el nombre del archivo}
  1111.     writeLn('Ruta o archivo inexistente');
  1112. end;
  1113.  
  1114.  
  1115.  
  1116.  
  1117. begin
  1118.   Explicacion;
  1119. {--------------Comienzo inicializacion--------------}
  1120.   for y:=0 to CantMaxMon do {Arreglo de interfaces}
  1121.   begin
  1122.     mono[y]:=false;
  1123.   end;
  1124.   E925:=true; E935:=true; E1112:=true; {Inicializo procesos que molestan y deben ser cerrados}
  1125.   root:=false;
  1126. {-----------------Fin inicializacion-----------------}
  1127.  
  1128.  
  1129.  
  1130.  repeat
  1131. {--------------Comienzo inicializacion--------------}
  1132.     for i:=1 to CantAtribPerm do {Arreglo atributos vacio}
  1133.     begin
  1134.       Atributos[i]:='';
  1135.     end;
  1136. {-----------------Fin inicializacion-----------------}
  1137.     prompt (root);
  1138.     CapturarAtributos(KeyLog,Atributos);
  1139.  
  1140.     if ComandoCorrecto(Atributos,comandos)=true then {Si el comando es correcto}
  1141.     begin
  1142.       if PrivilegiosNecesarios(Atributos,root)=true then {Si tiene privilegios para ese comando}
  1143.       begin
  1144.         if Atributos[1]='su' then
  1145.           su (root,Atributos);
  1146.         if Atributos[1]='clear' then
  1147.           clear(Atributos);
  1148.         if Atributos[1]='kill' then
  1149.           kill (Atributos,E925,E935,E1112);
  1150.         if Atributos[1]='exit' then
  1151.           exit (Atributos,root,salir);
  1152.         if Atributos[1]='iwconfig' then
  1153.           iwconfig (Atributos,mono);
  1154.         if Atributos[1]='ifconfig' then
  1155.           ifconfig (Atributos,mono);
  1156.         if Atributos[1]='airmon-ng' then
  1157.                 airmon(Atributos,mono);
  1158.         if Atributos[1]='airodump-ng' then
  1159.                 airodump(Atributos,Beacons,Data,E925,E935,E1112,archivoEscritura);
  1160.         if Atributos[1]='aircrack-ng' then
  1161.           aircrack(Atributos,archivoEscritura,Data);
  1162.         if Atributos[1]='help' then
  1163.           help;
  1164.         if Atributos[1]='explicacion' then
  1165.           Explicacion;        
  1166.       end
  1167.       else {Si no tiene privilegios necesarios}
  1168.         writeLn('Absolute path to ',Atributos[1],' is /usr/sbin/',Atributos[1],', so running it may require superuser privileges (eg. root).');
  1169.  
  1170.     end
  1171.     else {Si el mensaje introducido fue incorrecto}
  1172.       writeLn(Atributos[1],' is not a typo you can use command help to lookup the commands available');
  1173.  
  1174.   until salir=true;
  1175. end.