Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Mad Antrax

#511
Bueno, llegados a éste punto, toca explicar uno de los puntos más divertidos de Cheat Engine, diseccionar estructuras.

El problema que comenta nuestro amigo nanduky por desgracia es muy común en los juegos actuales. Imaginemos que encontramos la dirección de memoria donde el juego almacena nuestra vida, usamos un "find out what writes to this address" y obtenemos una dirección similar a la siguiente:

SUB [EAX+10],1

Esa línea, cada vez que es ejecutada, resta 1 a la dirección de EAX+10. Una primera tentación que podemos tener es NOPEAR esa línea o cambiarla por un

ADD [EAX+10],1

Consiguiendo así que cada vez que nos golpeen en el juego, la vida aumentará. El problema viene cuando la línea de ADD [EAX+10],1 que has modificado también se ejecuta sobre las direcciones de memoria que almacenan la vida de los ENEMIGOS (que horror! hemos hecho un cheat que pone a nuestros enemigos invencibles!!)

Eso ocurre porque el programador del juego utiliza la misma función para modificar la vida tanto del PLAYER como de los ENEMIGOS, lo que hemos de hacer en éste caso es:


  • Obtener los registros bases de las estructuras
  • Diseccionar las estructuras
  • Buscar un offset que identifique cada estructura
  • Montar un script en ASM que me permita condicionar el cheat

Como se hace? bueno, lo mejor es explicarlo con un ejemplo REAL. Iniciamos nuestro Cheat Engine 6.3, en la ventana principal pulsamos HELP -> TUTORIAL



Ésto cargará un tutorial la mar de chulo que sirve para practicar, tiene 9 pruebas (recomiendo hacerlas todas) pero como no tenemos tiempo, usaremos el botón SKIP para ir directo a la prueba número 9:





Como podéis ver, el tutorial simula un videojuego con 4 jugadores, 2 AMIGOS y 2 ENEMIGOS. Curiosamente la vida de los AMIGOS es 100 y los ENEMIGOS 500. Para completar el tutorial tenemos que pulsar el botón RESTAR GAME AND AUTOPLAY y conseguir que ganen los AMIGOS. El sistema de autoplay es una lucha por turnos, en cada turno se resta un punto. Si lo intentas a la primera, verás que nuestros jugadores (Player1 y Player 2) se quedan sin vida mientras los enemigos tienen 400 puntos restantes...

Lo primero que hay que hacer es obtener las 4 direcciones que corresponde a la VIDA de cada uno de los jugadores, ya os avanzo que la vida es del tipo FLOAT, aquí os dejo un pantallazo con mis 4 direcciones, he editado el nombre a p1, p2, p3, p4 para que se vea fácil:



Una vez que las tenemos, hacemos click derecho sobre la dirección p1 (Player 1) y seleccionamos "find out what writes to this address", aceptamos el mensaje del debugger y a continuación pulsamos en ATTACK del Player1 para que la vida disminuya, automáticamente el debugger nos soltará que instrucción ha modificado la vida de Player1:



Vamos a observar mi ejemplo:

3349BC = Dirección vida p1
EBX = 3349B8

La instrucción mov [ebx+04],eax mueve el contenido de EAX a la dirección 3349B8+04 (Esa dirección es igual a 3349BC, mi vida!).

Está clarisimo que esa instrucción es la que modifica la vida de p1. Si yo ahora nopeo esa instrucción o la modifico, conseguiré que p1 sea invencible, el problema es que esa misma instrucción tambien modifica las vidas de p2, p3 y p4, por lo que TODOS los 4 jugadores serían invencibles. Ahora la pregunta del día:

Como saber si una instrucción modifica más de una dirección de memoria?

Hay 2 respuestas, una sería modificando (o nopeando) la instrucción y probar a ver que ocurre, la otra es usar una herramienta de cheat engine que te avisa. Para ello pulsamos el botón SHOW DISSAMBLER, automáticamente se abre el código desensamblado y nos señala nuestra instrucción. Pulsamos botón derecho y seleccionamos: Find out what addresses this instruction accesses



Nos aparece una ventana pequeña vacía, seleccionar abajo del todo el tipo de dirección, en nuestro caso os recuerdo que son FLOAT, ahora volvemos al juego (tutorial) y pulsamos 1 vez sobre los 4 botones de ATTACK, para que la vida se modifique en los 4 Players, al volver a la ventanita nueva observaremos lo siguiente:



wooow! Que significa? Pues es sencillo, CE me ha dicho las direcciones de memoria que han sido modificadas por la instrucción mov [ebx+04],eax Bien, aquí tenemos un problema, como solucionamos ésto? Vamos a diseccionar las 4 estructuras:

Abrid un notepad o Bloc de Notas y apuntar el nombre de las 4 variables (p1, p2, p3, p4) y al lado la dirección de memoria de cada una de ellas. Ahora volvemos a la ventanita y pulsamos botón derecho en el primer registro, seleccionamos la primera opción SHOW REGISTER STATES (Ctrl+R), aparece la siguiente ventana:



Miramos la instrucción maldita mov [ebx+04],eax está claro que la estructura es EBX, copiamos el valor de EBX (puedes hacer click derecho y se copia), lo pegamos en el Bloc de Notas, al lado de p1

Repetimos el proceso para los 4 registros, en cada uno de ellos obtenemos el valor EBX y lo copiamos en el Bloc de Notas tal que así:



La primera columna es el nombre, la segunda es la dirección de cada jugador y la tercera columna es el valor EBX de cada jugador. Pulsamos en STOP y CLOSE para cerrar la ventanita, volveremos a la ventana grande de DISSEMBLER. Seleccionamos TOOLS -> DISSECT DATA / STRUCTURES



Aparece una ventana más grande, vacía con una dirección de ejemplo en la parte superior:



Utilizando el primer menú FILE, añadimos un GRUPO, en cada GRUPO añadimos 2 direcciones de memoria. Puedes asignar nombres a los grupos, así es más sencillo todo. Cada grupo representa los AMIGOS y ENEMIGOS, en total tenemos 4 direcciones, 2 direcciones de cada TIPO/GRUPO:



Ahora, en esas 4 cajas de texto, introducimos los valores del Bloc de Notas, introducimos los valores EBX. Los valores EBX de p1 y p2 los pones en el mismo grupo, y el resto (p3, p4) los pones en el segundo grupo, así:



Pulsamos menú STRUCTURE -> DEFINE NEW, puedes ponerle el nombre que quieras, en mi caso VIDA, el resto de opciones las he dejado por defecto:







Alaaaaaa, ésto que es? Bueno, ésta maravillosa herramienta nos ha diseccionado las 4 estructuras, el hecho de haber utilizado GRUPOS para separar los diferentes tipos de jugadores nos permite analizar la disección con algo de ventaja, miremos el código de colores:



Según la instrucción [ebx+04] es donde se guarda la vida. Si miramos en la disección, en la línea +0004 aparece la vida de los 4 jugadores. Si miramos más, en +0015 se almacena el nombre de cada uno. Bien!! Ahora miraremos los registros morados, ya que según el código de color, el morado diferencia los GRUPOS, curiosamente +0010 tiene el valor 1 si es AMIGO y el 2 si es ENEMIGO. Está claro que éste juego utiliza EBX+10 para saber si esa estructura (Player) es un jugador real o un Mob (enemigo). Ahora cerramos todo, generamos un AA Script y lo modificamos tal que así:



No voy a entrar a explicar ASM, pero el razonamiento es sencillo. Ejecuto un CMP para comparar EBX+10, si es 1 (significa que es una estructura de Player AMIGO) salto a la zona FRIEND (la zona friend establece la vida a 100 siempre), si EBX+10 no es 1, continuo hasta la zona ORIGINAL (restar vida). Guardo el script, lo activo, le doy a AUTOPLAY y compruebo que el cheat funciona a la perfección.

================================

Bueno, pues hasta aquí la explicación de hoy. Como podéis ver CE tiene herramientas MUY divertidas que permiten al cracker poder solventar los problemas más "raros" en un juego. Ésta teoría la he usado para hacer cheats en juegos como FTL y Roger Legacy, por ejemplo.

Por favor, intentad realizar el tutorial 9 tal y como he explicado, si algo no os sale o no se entiende me avisáis y lo explico de nuevo, me duelen ya los dedos después de picar todo éste texto, fotos y colores, pero si surgen dudas os las resolveré.

Saludos :D
#512
Bueno, llegado a éste punto os voy a indicar algún hint para que podáis generar el keygen, la idea es la siguiente:

Como ya se ha dicho, la generación del HW-fingerprint tiene en cuenta la ruta del ejecutable, partiendo de éste punto, el keygen constará de 2 partes que se complementan, la primera parte (y la más importante) es poder generar un serial válido a partir de un HW-fingerprint inventado por ti mismo. La segunda parte del keygen deberá poder generar la ruta del ejecutable que permita generar el HW-fingerprint que se haya calculado en la primera parte del keygen, en resumen:

1) keygen genera un HW-fingerprint y su serialcode correcto correspondiente (El HW-fingerprint lo establece el propio keygen, será inventado).
2) keygen calcula la ruta exacta que deberá tener el programa para que el crackme genere el HW-fingerprint "inventado" del punto anterior.

Ejemplo práctico inventado:

1) El keygen sabe que el HW-fingerprint = "123456789" tiene el serialcode = ABCEDFGH
2) El keygen sabe que el programa tiene que tener la ruta C:\POIUYTR321\crackme.exe para que su HW-fingerprint calculado sea igual a "123456789"
3) Movemos el crackme a la ruta calculada C:\POIUYTR321\crackme.exe, se ejecuta el crackme, el HW-fingerprint calculado es "123456789" por lo que conocemos su serialcode ABCDEFGH
4) Crackme solucionado

Se entiende? Ahora a programar! :P

==========================

Resumen: No podemos hacer un keygen que genere un serialcode para cualquier HW-fingerprint, verdad? Pues la única solución es forzar al crackme a que genere un HW-fingerprint que SÍ sepamos su serialcode correcto

==========================

PD: COmo ya se dijo, éste crackme no es tan "easy" como su nombre indica...
#513
Ingeniería Inversa / Easy Serialme by MadAntrax
26 Agosto 2013, 21:48 PM
Buenas a todos (de nuevo)

Os dejo otra de mis creaciones para que podáis practicar, jugar, destripar y aprender. Ésta vez os dejo una versión modificada de mi ultimo crackme, se trata de un sencillo serialme o keygenme. Se ha añadido una pequeña comprobación anti-debug y un pequeño packer bastante conocido.




  • No se puede parchear
  • Hay que encontrar un serial válido a partir de un username
  • Se puede programar un Keygen si lo deseas

El método anti-debug es conocido y sencillo, incluso con plugins de Ollydbg podrás saltarlo sin problemas.
La compresión (packer) usado también es sencillo y bastante conocido. No obstante si no logras desempackar el ejecutable te puedo postear una versión "normal" para que trabajes el algoritmo directamente
La rutina principal del serialme no utiliza las funciones típicas de MSVBVM60.DLL (rtcMsgBox, .__vbaStrCmp, etc).

Podéis usar el hilo para postear info si lo deseáis, disfrutad: http://www.mediafire.com/?yvr756x7x44nm4b
#514
Cita de: 79137913 en 26 Agosto 2013, 16:56 PM
HOLA!!!

Mad, me pasas el codigo del vortice espacial de estrellas? XD

GRACIAS POR LEER!!!

Está posteada en la sección de VB6, lo curioso es que tú ya leíste en su día ese hilo jeje. Aquí lo tienes:

http://foro.elhacker.net/programacion_visual_basic/source_efectos_para_una_bonita_interfaz_gui-t383746.0.html

CitarEn realidad ya tengo una especie de keygen (tengo el algo del HW, he reverseado todas las funciones y tengo las opuestas de las mismas).

Pero cuando intento generar el HW usando el inverso de la segunda función (la del NOT), no obtengo un serial "intermedio" válido. Llamo serial intermedio al que sale despues de los DIVs por diez, que tiene largo <= 10... [STOP]

No quiero poner mucha info para no arruinarles el juego a los demás.

Pero, como puse antes, si no hay movimiento en unos dias, pongo todo lo que he visto, a modo de tutorial online...

Saludos!

No te cortes en publicar info del algoritmo en el hilo. Vas muy bien encaminado, por lo que veo creo que ya lo has destripado por completo, solo te falta hallar una coincidencia. Si aceptas una recomendación: Programa un keygen automático que por fuerza bruta consiga una coincidencia, suena bestia pero creo que terminarás antes. Está claro que un keygen válido no te saldrá, pero hallarás una combinación correcta.
#515
Si, VB6 ya huele un poco mal de lo viejo que está, pero a mis años no voy a ponerme con otro lenguaje jeje.

A ver si alguien lo resuelve pronto, no he querido ni añadir anti-debugg ni tampoco compresiones (pack), solo quiero que os centréis en destripar el algoritmo del programa.

Como lo llevas? Has podido sacar alguna coincidencia? Piensa que el algoritmo que genera el HW-fingerprint y el algoritmo que valida el serial es exactamente igual, solo que uno de los saltos condicionales está con NOT

Saludos!!

PD: Tengo en la recámara otro crackme para que juguéis con él, pero antes quiero ver los "puntos flacos" de éste crackme para "solucionarlos"
#516
Cita de: MCKSys Argentina en 26 Agosto 2013, 03:29 AM
Bueno, hace unas horas bajé el proggie y acabo de mirarlo. Si bien ya he visto cómo funciona toda la cosa, no he podido generar un serial válido aún (maldito NOT!).

De todas formas, si no hay mucha participación, posteo lo que pude encontrar en este tiempo (y quizas tenga una posible solucion para entonces).

Saludos!

PD: Este keygenme no es tan easy como parece, pero lo veo muy útil para los que están comenzando...

Eiii, no esperaba menos de ti, siempre destripas mis creaciones :(

Una pregunta, el hecho de incluir parte del código en una DLL ActiveX te ha dificultado el trabajo? Si hubiera incluído el algoritmo del cálculo del Hardware Fingerprint en la DLL (en lugar del EXE) te hubiera provocado algún dolor de cabeza adicional?

Te hago éstas preguntas principalmente porque no tengo ni idea hasta que punto el código de una DLL ActiveX pueda aumentar o no la dificultad.

Por otra parte, y como bien dices, el algoritmo del keygen/serial no es muy complicado, pero ese NOT del final lo complica todo :)

Ánimo, si alguien es capaz de sacar un keygen de éste crackme seguro que tú estás entre ellos.
#517
Disculpad, me he dejado un pequeño paso para que la DLL se registre en el sistema:


  • Descomprimir el crackme
  • Copiar en fichero madantrax.dll en la carpeta C:\
  • Ejecuta una ventana de comandos CMD
  • Ejecuta el comando regsvr32 C:\madantrax.dll



Es una DLL ActiveX de VB6 y se tiene que registrar en el sistema para poder utilizarla. A partir de ahí podréis ejecutar el easycrackme.exe sin problemas.
#518
Olvidad usar CE para modificar variables tipo oro, vida, puntos, experiencia, etc... de cualquier juego online, son server-sided.

Las pocas variables de los juegos online que están en client-sided suele ser las coordenadas de la posición de tu personaje (teleport hack) o los timers que controlan los contadores de velocidad de movimiento, velocidad de ataque etc (speed hack). Pero ojo, ésto no es extrapolable al 100% de los juegos online... lo normal, si hablamos de juegos online "famosos y caros" como podría ser league of legends, WoW, etc... tienes el 100% de las variables en server-side.

Un ejemplo de juego conline que almacena variables en local? Cube World :P
#519
Hola a todos

Después de unos aburridos días de Agosto, he decidido programar un nuevo crackme para la gente del foro, se llama easycrackme




  • Autor: MadAntrax
  • Tipo: Keygen Me
  • Packed: NO
  • Programado: VB6 (Native + P-Code + ActiveX DLL)
  • Protección: Ofuscación de Strings

No se hacen referencias a __vbaStrCmp ni MSVBVM60.rtcMsgBox :)

INSTRUCCIONES PARA QUE EL CRACKME FUNCIONE

Como has podido observar, el crackme tiene un fichero DLL llamado madantrax.dll, para que funcione todo correctamente hay que registrar la DLL en el sistema, sigue los siguientes pasos:


  • Descomprimir el crackme
  • Copiar en fichero madantrax.dll en la carpeta C:\
  • Ejecuta una ventana de comandos CMD
  • Ejecuta el comando regsvr32 C:\madantrax.dll



Es una DLL ActiveX de VB6 y se tiene que registrar en el sistema para poder utilizarla. A partir de ahí podréis ejecutar el easycrackme.exe sin problemas.

El crackme es muy sencillo, tienes que encontrar el serial code correcto que se corresponde el hardware fingerprint generado.

No se puede parchear

Para lograr susperar el crackme necesitas encontrar el serial code correcto. Si lo consigues puedes programar un keygen. Si no sabes programar un keygen o no tienes tiempo, envíame tu fingerprint y el código correcto. Si puedes escribe un tutorial explicando como resolviste el crackme.

http://www.mediafire.com/?jb1idzxb2268qe2
#520
uy, no creo que lo puedas utilizar a día de hoy. Debe estar hyper-detectado por cualquier AV :P