Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: fary en 5 Abril 2016, 09:01 am



Título: [RETO-CRACKME] Humanoid ASM Keygenme.
Publicado por: fary en 5 Abril 2016, 09:01 am
Bueno, aquí un crackme que me descargue de esta página (http://crackmes.de/users/deurus/humanoid_asm_keygenme). Necesito un seríal, quien es capaz de desguazarlo?  >:D

Es nivel básico.

Descarga:

https://www.sendspace.com/file/vkl4oy

saludos.


Título: Re: [RETO-CRACKME] Humanoid ASM Keygenme.
Publicado por: josue9243 en 5 Abril 2016, 19:17 pm
Facil:

http://prntscr.com/aoid9u

Valen los saltos de linea verdad e.e ?

Modifique el JMZ osea el if del code y lo saltee al msg.


Título: Re: [RETO-CRACKME] Humanoid ASM Keygenme.
Publicado por: engel lex en 5 Abril 2016, 20:06 pm
Facil:

http://prntscr.com/aoid9u

Valen los saltos de linea verdad e.e ?

Modifique el JMZ osea el if del code y lo saltee al msg.

XD tampoco tanto XD por lo menos sacar un serial valido o el algoritmo de generacion


Título: Re: [RETO-CRACKME] Humanoid ASM Keygenme.
Publicado por: fary en 5 Abril 2016, 21:26 pm
Claro hombre, jjejeje, el caso es sacar el un serial válido o el algorítmo.

Ejemplos válidos:

Código:
fary
ajty-691986804

elhacker
FEgjvWF4-1384025832

saludos.


Título: Re: [RETO-CRACKME] Humanoid ASM Keygenme.
Publicado por: Flamer en 5 Abril 2016, 21:26 pm
Fasil 3 minitos me tomo  averiguar  ;-)

Citar
Name:  polo

Serial:  l6j6-692011380


Name:  Flamer
Serial:  aE2RF4-1038004782



Título: Re: [RETO-CRACKME] Humanoid ASM Keygenme.
Publicado por: josue9243 en 6 Abril 2016, 02:13 am
Claro hombre, jjejeje, el caso es sacar el un serial válido o el algorítmo.

Ejemplos válidos:

Código:
fary
ajty-691986804

elhacker
FEgjvWF4-1384025832

saludos.


jeje para que sacar un keygen si podes saltearte a la ejecución del programa, después veo si puedo sacar un serial valido.


Título: Re: [RETO-CRACKME] Humanoid ASM Keygenme.
Publicado por: MCKSys Argentina en 6 Abril 2016, 02:54 am
Keygen en python:

Código
  1. def main():
  2.    base = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  3.    alfaimpar = "AHyukjsdfkjsdfnPQU5xWERY67345aq9nFyR"
  4.    alfapar = "o3zYzaI1982Tv2FasgjkkjhkjlJt5Dpe32Ax"
  5.    nombre = raw_input("Ingresa tu nombre: ")
  6.    if nombre:
  7.        nombre = nombre.upper()
  8.        codigo1 = ""
  9.        DWSUM = 0
  10.        par = True
  11.        for car in nombre:
  12.            if car not in base:
  13.                print "El nombre solo puede contener letras y numeros!"
  14.                return
  15.            if par:
  16.                codigo1 += alfapar[base.find(car)]
  17.            else:
  18.                codigo1 += alfaimpar[base.find(car)]
  19.            par = not par
  20.            DWSUM += (((ord(car) ^ 1) * 1024) ^ 0xa4ed0f7) - 0x29a
  21.        serial = codigo1 + "-" + str(DWSUM)
  22.        if len(serial) > 24:
  23.            print "Nombre muy largo!"
  24.            return
  25.        print "serial: %s" % serial
  26.  
  27. if __name__ == '__main__':
  28.    main()
  29.  

Notar que el keygen verifica que el nombre contenga sólo letras y números (cosa que el crackme no hace). Si quieren ver cosas divertidas, corran el keygen con olly, pongan un BP en 401120 (la parte donde arma la primer parte del serial usando diccionarios) e ingresen caracteres como # ó % o cualquiera que no sean letras o números.

Saludos!

jeje para que sacar un keygen si podes saltearte a la ejecución del programa, después veo si puedo sacar un serial valido.

El crackme viene con reglas, las cuales deberías respetar. Por ser algo tan sencillo, el parcheo está descartado desde el inicio (Además ese no es el espíritu que queremos se propague por quienes aprenden aquí  :P)


Título: Re: [RETO-CRACKME] Humanoid ASM Keygenme.
Publicado por: fary en 6 Abril 2016, 09:28 am
Ahí va mi Keygen:

Código
  1. // KeygenMe Humanoid.
  2. // Juan fary.
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6.  
  7. char * Tabla1 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  8. char * Tabla2 = "AHyukjsdfkjsdfnPQU5xWERY67345aq9nFyR";
  9. char * Tabla3 = "o3zYzaI1982Tv2FasgjkkjhkjlJt5Dpe32Ax";
  10.  
  11. char BufferTabla1[255];
  12.  
  13. void CadenaAMayus(char * Cadena); // Pasa letras minusculas a mayusculas.
  14. void FunTabla1(char * Cadena); // Obtiene primera parte del serial.
  15. void Fun2Parte(char * Cadena); // Obtiene segunda parte del serial.
  16.  
  17. int main()
  18. {
  19. char buffer[255];
  20.  
  21. printf("Introduce usuario: ");
  22. scanf("%s", &buffer);
  23.  
  24. CadenaAMayus(buffer);
  25. FunTabla1(buffer);
  26. Fun2Parte(buffer);
  27.  
  28. system("PAUSE");
  29. return 0;
  30. }
  31.  
  32. void Fun2Parte(char * Cadena)
  33. {
  34. int i = 0;
  35. int a = 0;
  36. int Contador = 0;
  37.  
  38. while(Cadena[i] != 0)
  39. {
  40. a = Cadena[i];
  41. a ^= 0;
  42. a = a << 0xA;
  43. a ^= 0x0A4ED0F7;
  44. a -= 0x29A;
  45. Contador = Contador + a;
  46. i++;
  47. }
  48. printf("-%d\n", Contador);
  49. }
  50.  
  51. void FunTabla1(char * Cadena)
  52. {
  53. int Contador = 0;
  54. int i = 0;
  55. int bandera = 0;
  56.  
  57. while (Cadena[i] != 0)
  58. {
  59. Contador = 0;
  60. while(Cadena[i] != 0)
  61. {
  62.  
  63. if (Tabla1[Contador] == Cadena[i] && bandera == 1)
  64. {
  65. printf("%c", Tabla2[Contador]);
  66. bandera = 0;
  67. break;
  68. }else if (Tabla1[Contador] == Cadena[i] && bandera == 0)
  69. {
  70. printf("%c", Tabla3[Contador]);
  71. bandera = 1;
  72. break;
  73. }
  74. Contador++;
  75. }
  76. i++;
  77. }
  78. }
  79.  
  80. void CadenaAMayus(char * Cadena)
  81. {
  82. int i = 0;
  83.  
  84. while (Cadena[i] != 0)
  85. {
  86. if (Cadena[i] > 96 && Cadena[i] < 123)
  87. {
  88. Cadena[i] -= 0x20;
  89. }
  90. i++;
  91. }
  92. }

saludos  :P