elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


  Mostrar Mensajes
Páginas: 1 ... 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 [600] 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 ... 620
5991  Programación / .NET (C#, VB.NET, ASP) / Re: necesito ayuda para terminar un juego de ajedrez en: 22 Diciembre 2009, 17:32 pm
Hola!

Pues esto está en C, pero podrías sacar la "idea" de la función:
Código:
TChessBoard::VerifyMove(TMove Move)
{
// The purpose is to determine whether the move is legal or not
// by verifying correct movement of the piece and whether the
// resulting position leaves the mover in check.
int i, Piece, diff;
int From, To;
int Checked;
TMoveList List;
From=Move.From;
To=Move.To;
if (From/10<1 || From/10>8 || From%10<1 || From%10>8) return 299;
if (To/10<1 || To/10>8 || To%10<1 || To%10>8) return 300;
Piece=Square[From];
if (From==To) return 301;
if (Piece<EMPTY && Square[MOVER]==BLACK) return 302;
if (Piece>EMPTY && Square[MOVER]==WHITE) return 303;
if (Piece==EMPTY) return 304;
if (Square[MOVER]==WHITE && Square[To]<EMPTY) return 305;
if (Square[MOVER]==BLACK && Square[To]>EMPTY) return 306;
switch(Piece)
{
  case WK : if ((abs(GetX(To)-GetX(From))>1 || abs(GetY(To)-GetY(From))>1) && !(From==51 && (To==71 || To==31))) return 1;
if (From==51 && To==71)
{
  if (Square[61]!=EMPTY || Square[71]!=EMPTY) return 13;
  if (Square[WROOK8MOVED]==TRUE) return 3;
  if (Square[WKINGMOVED]==TRUE) return 4;
  if (IsCheck()) return 22;
  Square[61]=WK; Square[51]=EMPTY;
  if (IsCheck()) {
Square[51]=WK; Square[61]=EMPTY;
return 21;
  }
  Square[51]=WK; Square[61]=EMPTY;
}
if (From==51 && To==31)
{
  if (Square[41]!=EMPTY || Square[31]!=EMPTY || Square[21]!=EMPTY) return 13;
  if (Square[WROOK1MOVED]==TRUE) return 3;
  if (Square[WKINGMOVED]==TRUE) return 4;
  if (IsCheck()) return 22;
  Square[41]=WK; Square[51]=EMPTY;
  if (IsCheck()) {
Square[51]=WK; Square[41]=EMPTY;
return 21;
  }
  Square[51]=WK; Square[41]=EMPTY;
}
break;
  case BK : if ((abs(GetX(To)-GetX(From))>1 || abs(GetY(To)-GetY(From))>1) && !(From==58 && (To==78 || To==38))) return 1;
if (From==58 && To==78)
{
  if (Square[68]!=EMPTY || Square[78]!=EMPTY) return 13;
  if (Square[BROOK8MOVED]==TRUE) return 3;
  if (Square[BKINGMOVED]==TRUE) return 4;
  if (IsCheck()) return 22;
  Square[68]=BK; Square[58]=EMPTY;
  if (IsCheck()) {
Square[58]=BK; Square[68]=EMPTY;
return 21;
  }
  Square[58]=BK; Square[68]=EMPTY;
}
if (From==58 && To==38)
{
  if (Square[48]!=EMPTY || Square[38]!=EMPTY || Square[28]!=EMPTY) return 13;
  if (Square[BROOK1MOVED]==TRUE) return 3;
  if (Square[BKINGMOVED]==TRUE) return 4;
  if (IsCheck()) return 22;
  Square[48]=BK; Square[58]=EMPTY;
  if (IsCheck()) {
Square[58]=BK; Square[48]=EMPTY;
return 21;
  }
  Square[58]=BK; Square[48]=EMPTY;
}
break;
  case WR : if (GetX(From)!=GetX(To) && GetY(From)!=GetY(To)) return 6;
if (GetX(From)==GetX(To)) {
  if (GetY(To)>GetY(From)) {
  for (i=From+1; i<=To; i++) if (Square[i]<10) return 14; else if (Square[i]>100 && i!=To) return 14;
  } else {
  for (i=From-1; i>=To; i--) if (Square[i]<10) return 14; else if (Square[i]>100 && i!=To) return 14;
  }
} else {
  if (GetX(To)>GetX(From)) {
  for (i=From+10; i<=To; i+=10) if (Square[i]<10) return 14; else if (Square[i]>100 && i!=To) return 14;
  } else {
  for (i=From-10; i>=To; i-=10) if (Square[i]<10) return 14; else if (Square[i]>100 && i!=To) return 14;
  }
}
break;
  case BR : if (GetX(From)!=GetX(To) && GetY(From)!=GetY(To)) return 6;
if (GetX(From)==GetX(To)) {
  if (GetY(To)>GetY(From)) {
  for (i=From+1; i<=To; i++) if (Square[i]>100) return 14; else if (Square[i]<10 && i!=To) return 14;
  } else {
  for (i=From-1; i>=To; i--) if (Square[i]>100) return 14; else if (Square[i]<10 && i!=To) return 14;
  }
} else {
  if (GetX(To)>GetX(From)) {
  for (i=From+10; i<=To; i+=10) if (Square[i]>100) return 14; else if (Square[i]<10 && i!=To) return 14;
  } else {
  for (i=From-10; i>=To; i-=10) if (Square[i]>100) return 14; else if (Square[i]<10 && i!=To) return 14;
  }
}
break;
  case WQ : if (!
  (
(From>To && (From-To)%9==0 && GetY(To)>GetY(From)) ||
(From>To && (From-To)%11==0 && GetY(From)>GetY(To)) ||
(To>From && (To-From)%11==0 && GetY(To)>GetY(From)) ||
(To>From && (To-From)%9==0 && GetY(From)>GetY(To)) ||
(GetX(From)==GetX(To)) ||
(GetY(From)==GetY(To))
  )
  ) return 7;
if (GetX(From)==GetX(To) && To>From) for (i=From+1; i<=To; i++) if (Square[i]<10 || (Square[i]>100 && i!=To)) return 20;
if (GetX(From)==GetX(To) && From>To) for (i=From-1; i>=To; i--) if (Square[i]<10 || (Square[i]>100 && i!=To)) return 20;
if (GetY(From)==GetY(To) && To>From) for (i=From+10; i<=To; i+=10) if (Square[i]<10 || (Square[i]>100 && i!=To)) return 20;
if (GetY(From)==GetY(To) && From>To) for (i=From-10; i>=To; i-=10) if (Square[i]<10 || (Square[i]>100 && i!=To)) return 20;
if (From>To && (From-To)%11==0) for (i=From-11; i>=To; i-=11) if (Square[i]<10 || (Square[i]>100 && i!=To)) return 20;
if (To>From && (To-From)%11==0) for (i=From+11; i<=To; i+=11) if (Square[i]<10 || (Square[i]>100 && i!=To)) return 20;
if (From>To && (From-To)%9==0) for (i=From-9; i>=To; i-=9) if (Square[i]<10 || (Square[i]>100 && i!=To)) return 20;
if (To>From && (To-From)%9==0) for (i=From+9; i<=To; i+=9) if (Square[i]<10 || (Square[i]>100 && i!=To)) return 20;
break;
  case BQ : if (!
  (
(From>To && (From-To)%9==0 && GetY(To)>GetY(From)) ||
(From>To && (From-To)%11==0 && GetY(From)>GetY(To)) ||
(To>From && (To-From)%11==0 && GetY(To)>GetY(From)) ||
(To>From && (To-From)%9==0 && GetY(From)>GetY(To)) ||
(GetX(From)==GetX(To)) ||
(GetY(From)==GetY(To))
  )
  ) return 7;
if (GetX(From)==GetX(To) && To>From) for (i=From+1; i<=To; i++) if (Square[i]>100 || (Square[i]<10 && i!=To)) return 20;
if (GetX(From)==GetX(To) && From>To) for (i=From-1; i>=To; i--) if (Square[i]>100 || (Square[i]<10 && i!=To)) return 20;
if (GetY(From)==GetY(To) && To>From) for (i=From+10; i<=To; i+=10) if (Square[i]>100 || (Square[i]<10 && i!=To)) return 20;
if (GetY(From)==GetY(To) && From>To) for (i=From-10; i>=To; i-=10) if (Square[i]>100 || (Square[i]<10 && i!=To)) return 20;
if (From>To && (From-To)%11==0) for (i=From-11; i>=To; i-=11) if (Square[i]>100 || (Square[i]<10 && i!=To)) return 20;
if (To>From && (To-From)%11==0) for (i=From+11; i<=To; i+=11) if (Square[i]>100 || (Square[i]<10 && i!=To)) return 20;
if (From>To && (From-To)%9==0) for (i=From-9; i>=To; i-=9) if (Square[i]>100 || (Square[i]<10 && i!=To)) return 20;
if (To>From && (To-From)%9==0) for (i=From+9; i<=To; i+=9) if (Square[i]>100 || (Square[i]<10 && i!=To)) return 20;
break;
  case WP : if (GetY(From)>GetY(To)) return 16; // moving backwards?
// attempting capture?
if (Square[To]>100)
  if (To-From!=11 && From-To!=9) return 9; else break;
// attempting 2 squares?
if (GetY(To)-GetY(From)==2 && (GetX(To)==GetX(From))) {
if (GetY(From)!=2) return 10; // not on correct rank
else if (Square[From+1]!=EMPTY) return 17; // attempted jump
else break;
}
// attempting to move diagonally (if for capture, would not get this far)
if (GetX(From)!=GetX(To)) {
if (To-From==11 || From-To==9) { // No enemy, en-passant perhaps?
if (GetX(To)==Square[ENPAWN] && GetY(To)==6) break;
else return 18;
} else
return 8;
} else {  // must now be going straight forward, no capturing and no 2-square attempt
if (GetY(To)-GetY(From)>1) return 8; else
if (Square[To]>100) return 11; else // can't capture like this
break;
}
  case BP : if (GetY(From)<GetY(To)) return 16;  // moving backwards?
// attempting capture?
if (Square[To]<10)
  if (From-To!=11 && To-From!=9) return 9; else break;
// attempting 2 squares?
if (GetY(From)-GetY(To)==2 && (GetX(To)==GetX(From))) {
if (GetY(From)!=7) return 10; // not on correct rank
else if (Square[From-1]!=EMPTY) return 17; // attempted jump
else break;
}
// attempting to move diagonally (if for capture, would not get this far)
if (GetX(From)!=GetX(To)) {
if (From-To==11 || To-From==9) { // No enemy, en-passant perhaps?
if (GetX(To)==Square[ENPAWN] && GetY(To)==3) break;
else return 18;
} else
return 8;
} else {  // must now be going straight forward, no capturing and no 2-square attempt
if (GetY(From)-GetY(To)>1) return 8; else
if (Square[To]<10) return 11; else // can't capture like this
break;
}
  case WB : if ((To>From) && GetY(To)>GetY(From)) { // North-East
  if (abs(From-To)%11!=0) return 12;
  for (i=From+11; i<=To; i+=11) if (Square[i]<10) return 15; else if (Square[i]>100 && i!=To) return 15;
} else
if ((To>From) && GetY(To)<GetY(From)) { // South-East
  if (abs(From-To)%9!=0) return 12;
  for (i=From+9; i<=To; i+=9) if (Square[i]<10) return 15; else if (Square[i]>100 && i!=To) return 15;
} else
if ((To<From) && GetY(To)>GetY(From)) { // North-West
  if (abs(From-To)%9!=0) return 12;
  for (i=From-9; i>=To; i-=9) if (Square[i]<10) return 15; else if (Square[i]>100 && i!=To) return 15;
} else
if ((To<From) && GetY(To)<GetY(From)) { // South-West
  if (abs(From-To)%11!=0) return 12;
  for (i=From-11; i>=To; i-=11) if (Square[i]<10) return 15; else if (Square[i]>100 && i!=To) return 15;
} else return 12;
break;
  case BB : if ((To>From) && GetY(To)>GetY(From)) { // North-East
  if (abs(From-To)%11!=0) return 12;
  for (i=From+11; i<=To; i+=11) if (Square[i]>100) return 15; else if (Square[i]<10 && i!=To) return 15;
} else
if ((To>From) && GetY(To)<GetY(From)) { // South-East
  if (abs(From-To)%9!=0) return 12;
  for (i=From+9; i<=To; i+=9) if (Square[i]>100) return 15; else if (Square[i]<10 && i!=To) return 15;
} else
if ((To<From) && GetY(To)>GetY(From)) { // North-West
  if (abs(From-To)%9!=0) return 12;
  for (i=From-9; i>=To; i-=9) if (Square[i]>100) return 15; else if (Square[i]<10 && i!=To) return 15;
} else
if ((To<From) && GetY(To)<GetY(From)) { // South-West
  if (abs(From-To)%11!=0) return 12;
  for (i=From-11; i>=To; i-=11) if (Square[i]>100) return 15; else if (Square[i]<10 && i!=To) return 15;
} else return 12;
break;
  case WN : diff=abs(From-To);
if (diff!=12 && diff!=8 && diff!=21 && diff!=19) return 5;
break;
  case BN : diff=abs(From-To);
if (diff!=12 && diff!=8 && diff!=21 && diff!=19) return 5;
break;
}
// Is the mover in check once this move is made?
check_for_check:
// BackUpBoard(BACKUP);
memcpy(BackUpSquare, Square, sizeof(int)*89);
MakeMove(Move, FALSE);
if (Square[MOVER]==WHITE) Square[MOVER]=BLACK; else Square[MOVER]=WHITE; // Want to see check from point of view on non-Square[MOVER]
Checked=IsCheck();
memcpy(Square, BackUpSquare, sizeof(int)*89);
// BackUpBoard(RESTORE);
if (Checked) return 2;
else return 0;
} // end of TChessBoard::VerifyMove(TMove)

Código fuente del juego completo:
Código:
http://www.redhotpawn.com/rival/download/downloader.php?file=rival-source-1.8.28.zip

Saludos!

5992  Programación / Ingeniería Inversa / Re: ayuda como descompilar en: 20 Diciembre 2009, 21:49 pm
Hola!

Si está en VC7, no está empacado (al parecer). Ese es el compilador que se usó para crear el EXE.

Usa Olly para depurarlo. Tambien con IDA y el plugin XRays vas a sacar mucho.

Saludos!


5993  Programación / Ingeniería Inversa / Re: ayuda con crackme sensillisimo (pami no) en: 18 Diciembre 2009, 22:50 pm
Hola!

Aqui hay una versión del SmartCheck:
Código:
http://ricardonarvaja.info/WEB/OTROS/HERRAMIENTAS/Q-R-S-T-U/

Saludos!

5994  Programación / Programación Visual Basic / Re: Como calcular el hash de las secciones de un Ejecutable? en: 17 Diciembre 2009, 21:28 pm
Hola!

Me parece que la lógica sería:

1) Obtener la ImageBase.
2) Sacar los datos de las secciones del PE Header.
3) Recorrerlas y sacarle el CRC/Hash que quieras usar.

Creo que no me olvidé de nada.... no?

Saludos!


5995  Programación / Ingeniería Inversa / Re: Tutorial Cracking Basico by n0sEcReT en: 16 Diciembre 2009, 18:48 pm
Fijate la fecha del post...  :huh:
5996  Programación / Ingeniería Inversa / Re: Sabéis que es esto? SkD Undetectabler 2.0(BETA) en: 14 Diciembre 2009, 23:24 pm
Pues, Gracias!  :)

Fíjate que también estoy en CLS...  ;) (Bah, en realidad, vengo de ahi...  :xD)

Saludos!
5997  Programación / Programación Visual Basic / Re: Como hacer que no se salga la linea en visual basic en: 13 Diciembre 2009, 03:44 am
Cita de la MSDN:

Round (Función)

Descripción

Devuelve un número redondeado en el número especificado de lugares decimales.

Sintaxis

Round(expresión [, númLugaresDecimales])

La sintaxis de la función Round consta de las siguientes partes:

Parte Descripción
expresión Requerido. La expresión numérica que se redondea.
númLugaresDecimales Opcional. Un número que indica cuántos lugares a la derecha del decimal se incluyen en el redondeo. Si se omite, la función Round devuelve enteros.


Saludos!

5998  Programación / Ingeniería Inversa / Re: Sabéis que es esto? SkD Undetectabler 2.0(BETA) en: 13 Diciembre 2009, 03:40 am
Hola!

Puedes probar poniendole un BP a CreateFileA. Normalmente, se usa esta API (con ReadFile) para abrir el EXE y verificar que el contenido del mismo no haya sido modificado. Podrías hacer un inline para modificar el parámetro que el EXE le pasa a la API y redireccionarlo al EXE original (Por ej. si copias el EXE original, pero con la extension .ext, en el parametro, sólo debes cambiar la e final por una t)

Saludos!


5999  Programación / Programación Visual Basic / Re: Avira me borra mis proyectos en Visual basic en: 11 Diciembre 2009, 21:28 pm
No estará el compilador infectado?????
6000  Programación / Programación Visual Basic / Re: Crasheando un Proceso. en: 11 Diciembre 2009, 00:51 am
Je,je,je,je... Muy Bueno!!!  ;-)

PD: BADC0DE es otra dirección bonita para empezar el thread...  :)

Saludos!
Páginas: 1 ... 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 [600] 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 ... 620
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines