$nicething = '-'x60; #el signo - multiplicado por 60system('cls');#hace un cls (clear screen em MSDOS) en unix clearprint "\t".$nicething."\n";#inprime \t(quire decit Tab) el valor de $nicething y \n (nueva linea)print "\t".' Obscure'."\n";#imprimt \t Obscure\nprint "\t".$nicething."\n";if (@ARGV) {$passwd = $ARGV[0]} else {print "\t\t usage: MDecode.pl userlist.dat\n\n";exit;}#esto es la opcion de ejecute de programa, el else inprime usage: MDecode.pl userlist.dat y se sale del programa si no se cumplen las espesificaciones del ifsub decode{#pre declaracion $decoded = '';#valor escalar predeclarado $f = '';#valor escalar predeclarado ($y) = @_;#valor escalar predeclarado con un listado de escalares(@_) use MIME::Base64;#usa la libreria MIME::Base64(Encuentra informacion de este en search.cpan.org $decoded = decode_base64($y);#codofica $y en 64 bits $a = unpack("H*",$decoded);#creo que desempaqueta cada cractel ## this is the offset hex table ## this simple encryption just adds/subtracts a certain value ## for each character. @off = (54,68,65,20,73,65,74,75,70,20,70,72,'6f',63,65,'9f');#arriba lo dice $w = 0;#el objeto $w vale 0 foreach $love (@off){#para cada cosa de @off en $love haga... $h = substr($a,$w,2);#saque $a, $w, 2(de $love) $d = hex $h;#creo que es una referencia exadecimal, no se $l = hex $love; $letter = $d - $l; #$letter equivale a $d menos $l $aa = pack("I*",$letter);#enpaqueta en codigo I* $q = substr($aa,0,1); $f = $f.$q; $w = $w + 2; } $f = substr($f,0,length($decoded)); return $f;}if (open (PASSF,$passwd)){#abre el archivo $passwd while (<PASSF>){#cuando lo abra aga.... $dom = substr ($_,0,45); $dom =~ s/ //g;#esto es para remover o remplazar lo subtr $user = substr ($_,45,30); $user =~ s/ //g; $enc = substr ($_,195,19); $enc =~ s/ //g; push(@enc,$enc);#agrega a @enc el array $enc push(@user,$user); push(@dom,$dom); } close(PASSF);#cierra el archivo $x = 0; while ($x != $#enc+1){#esto es como un if(sie $x equivale a $#enc mas 1.... print "\t\t".$user[$x].'@'.$dom[$x]."\t-->\t".&decode($enc[$x])."\n";#imprime lo que esta en "" y corre la sub funcion de decode con el parametro $enc[$x] $x++;#autoincrementacion de $x }} else {print "\t\t\tCould not open $passwd"};#si no cumple el if de la linea 37 imprime lo que esta en ""