Si esto me torturo hasta dejarme sangrado y por eso les voy a decir como lo hice yo de lo enjado y furioso que estoy por haber perdido mucho tiempo.
Veamos el codigo fuente:
<html>
<head>
<title>Zona 0</title>
</head>
<body>
<br><br>
Tu mision en el dia de hoy no es nada mas que entrar al area restringida de Zona 0. Como recuerdan estamos en una Zona de Guerra y tenemos que atacar a los enemigos. Se dice que hay una informacion que nos dara una gran ventaja en esta batalla. Nuestros espias nunca se equivocan y por eso necesitamos que tu entres a este lugar y nos saque la informacion. El problema es que solamente permiten a personas autorizadas con un codigo especial y un codigo solo sirve para una vez. Asi que intenta de entrar a la area restringida con algun codigo no usado previamente.<br><br>
Suerte,<br>
Torre de Comando
<script src="javascript"></script>
<br><br>
Codigo de Acceso:
<form name="shit" action="ver.php" method="GET">
<input type="text" name="cob">
<input type="submit" OnClick="ver(document.forms[0].cob.value)" value="Entrar">
</form>
<!--No intentes engañar el sistema-->
</body>
</html>
Para nosotros lo mas importante es javascript. Asi que vamos alla.
function ver (cod) {
if (cod.length != 16){
alert("Codigo No Valido");
return false;
}
var codx =new Array(cod);
var chk = '';
var tmp;
var cvs;
var cvd;
cvd = cod.substr(15,1);
cod = cod.substr(0,15);
if (cod.length != 15 || IsNumeric(cod) == false){
alert("Codigo No Valido");
return false;
}
for (i=0;i<cod.length;i++){
if (i%2 == 0){
tmp = cod.substring(i,i+1) * 1;
}
else{
tmp = cod.substring(i,i+1) * 2;
}
if (tmp >= 10){
tmp = tmp.toString();
tmp = tmp.substr(0,1) + tmp.substr(1,1);
}
chk = chk.concat(tmp);
}
tmp = '';
for (i=0;i<chk.length;i++){
tmp = (tmp*1) + (chk.charAt(i)*1);
}
tmp = tmp.toString();
chk = (tmp.substr(0,1)*1) + (tmp.substr(1,1)*1);
chk = chk * 10;
chk = (chk*1) - (tmp*1);
cvs = chk % 10;
if (cvs == cvd){
return true;
}
else{
alert("Codigo No Valido");
return false;
}
}
function IsNumeric(sText)
{
var ValidChars = "0123456789.";
var IsNumber=true;
var Char;
for (i = 0; i < sText.length && IsNumber == true; i++)
{
Char = sText.charAt(i);
if (ValidChars.indexOf(Char) == -1)
{
IsNumber = false;
}
}
return IsNumber;
}
Analizemos esta linea:
Eso significa que nuestro numero tiene que tener 16 digitos.
Analizemos esta linea:
Eso significa que aprobaremos la prueba solamente si cvs es igual a cvd. Ahora bien, que es cvd? Veamos:
Ahi vemos que es el ultimo digito de nuestro numero. Asi que, sea el numero que sea (tiene que tener 16 digitos), solo tendremos que cambiar el ultimo digito hasta que pasemos la prueba.