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 Temas
Páginas: 1 2 [3] 4 5 6 7 8 9 10
21  Programación / Ingeniería Inversa / [TUTORIAL] WPE Pro - Captura, modifica y envia paquetes TCP (cheats, juegos...) en: 18 Diciembre 2013, 16:19 pm
Bueno, tras el éxito del tutorial sobre edición de memoria local usando Cheat Engine, os traigo una nueva herramienta que nos permitirá interceptar (sniffer) modificar y enviar packetes TCP entre un cliente y un servidor externo. El programa se llama WPE Pro y en éste tutorial usaremos la versión 0.9a mod.

Para hacerlo todo más fácil, os enseñaré a trabajar con WPE mostrando un caso real (programado por mí), para que podáis tocar, editar y probar con vuestras manos. Empecemos...

Primero de todo os dejo un link donde encontraréis el WPE Pro 0.9a mod y mi ejemplo práctico que usaremos para enseñar éste sistema:


En su interior encontraremos lo siguiente:


wpepro09mod = Carpeta que contiene el WPE
CLIENTE.exe = Mi ejemplo para poner en practica éste tutorial
SERVIDOR.exe = Mi ejemplo para poner en practica éste tutorial

En la carpeta de wpepro hay una carpeta filtros con mi ejemplo ya  resuelto. Por si lo quieres ver o por si te atascas.

TEORÍA Y EXPLICACIÓN DE LAS PARTES

Abrimos el WPE, estaréis en la ventana principal, a continuación os dejo un esquema y os explicaré las partes importantes. Por favor, anotad los nombres de los botones ya que me referiré a ellos durante todo el tutorial:


1) Target Program: Nos permite seleccionar el proceso (cliente) que queremos monitorizar.
2) Trace Controls: Nos permite iniciar, pausar y detener la captura (sniffer) de paquetes. Abajo en los contadores sale el número de paquetes capturados
3) Action Console: Nos permite crear filtros y enviar paquetes modificados.

A continuación os muestro una ventana con 4 paquetes capturados. Aún no he explicado como se captura, pero primero quiero que veáis que datos nos muestra y que significa cada cosa:


1) Contador: Muestra el número de paquetes capturados en una sesión
2) Paquetes: Indicador numérico de los paquetes recibidos
3) Source / Destination: Aparece la IP y puerto del cliente y del servidor
4) Tamaño: Indica el tamaño del paquete (número de offsets)
5) Tipo de paquete: Puede ser Send o Recv. Nos indica si es un paquete de entrada o salida
6) Datos: Nos muestra en HEX y ASCII los datos del paquete.

A modo de resumen, en la imagen de ejemplo se ven 4 paquetes capturados, 2 de Envío (send) y 2 de respuesta (Recv). Fácil, no? Ahora os enseñaré que pinta tiene el editor de paquetes (filtros), no os asustéis, es más sencillo de lo que parece:


1) Datos el filtro: Indicamos el patrón de offsets que buscamos y los offsets que modificamos
2) Tipo de filtro: En el ejemplo; Normal

Éste tipo de filtro (normal) no me gusta usarlo, a continuación os enseño el avanzado:


1) Datos el filtro: Indicamos el patrón de offsets que buscamos y los offsets que modificamos
2) Filtrar en: Indicamos que tipo de paquetes serán afectados por éste filtro (en el ejemplo; los de tipo Recv
3) Tipo de modificación: Indicamos si modificaremos todo el paquete o desde el offset encontrado

Bien, hasta aquí ya conocéis y podéis identificar las principales partes del programa, ahora vamos a practicar con un ejemplo, para ello ejecutamos el CLIENTE y SERVIDOR que hay en la carpeta (los he programado yo). Básicamente pretende ser un videojuego muy sencillo que permite abrir cofres y comprar objetos (items), aquí os dejo la ventana del CLIENTE y del SERVIDOR:



EMPEZAMOS CON EL TUTORIAL PRACTICO
CAPTURAR PAQUETES

Ejecutad el WPE, el CLIENTE y el SERVIDOR, seguid los siguientes pasos:

- Pulsar START SERVER en la ventana SERVIDOR
- Pulsar CONECTAR en la ventana CLIENTE

Si lo habéis hecho bien, os aparecerán los siguientes mensajes:


Bien, el ejemplo que he programado es sencillo. El CLIENTE se conecta al SERVIDOR y envía una serie de paquetes, el SERVIDOR los comprueba y devuelve una respuesta, así de sencillo. En la ventana del CLIENTE, pulsa el botón abrir cofre y comprar item:


Podrás observar como el cliente envía la petición de abrir un cofre y el servidor la procesa (genera entre 1 y 5 monedas) y las envía al cliente.

En el caso de comprar item... tenemos 500 monedas y el item cuesta 2300, así que el servidor nos deniega la compra :(

Bien, ya tenemos nuestro juego ejecutándose y ya sabes como funciona, ahora vamos a empezar con lo bueno: capturar paquetes y engañar al servidor jeje. Pulsamos en WPE el botón de TARGET y seleccionamos el proceso del CLIENTE:


Una vez hecho ésto, pulsamos el botón de PLAY del TRACE CONTROL, así iniciaremos la captura de paquetes. Mientras esté el botón de PLAY pulsado, WPE irá capturando todos los paquetes que se envíen y reciban.

Nos situamos en el CLIENTE y pulsamos 1 vez en abrir cofre y 1 vez en comprar item, debería ocurrir lo siguiente:


Si lo has hecho bien, habrás capturado 4 paquetes (fíjate en el contador de paquetes). Ahora pulsa en el botón STOP para detener el sniffer y automáticamente veremos la ventana de paquetes capturados:


Bieeeeen!! acabas de capturar tus primeros 4 paquetes!! Tómate tu tiempo para ver que has capturado, intenta entender el formato de los paquetes. Para éste tutorial lo he hecho MUY sencillo. Si te fijas, se trata de una comunicación entre el CLIENTE y el SERVIDOR; cuando has pulsado en abrir cofre, el cliente ha mandado (send) un paquete cuyo mensaje es OpenChest#1 y automáticamente el servidor ha devuelto un paquete cuyo mensaje es GetCoins#3 (en mi caso he obtenido 3, tu puedes obtener entre 1 y 5, en un número random).

Se entiende? Creo que es bastante sencillo.

ENVIAR PAQUETES CAPTURADOS

Ahora que tenemos capturado el paquete que indica la acción de abrir un cofre, lo añadiremos a WPE para poder enviarlo de forma abusiva jeje, hacemos lo siguiente:

Pulsamos botón derecho sobre el primer paquete (send) y seleccionamos Add to Send List:


Ahora vuelve a hacer click derecho y selecciona la última opción Set Send List with this socket ID:


Éste paso es importante, ya que le estaremos indicando a WPE que utilice el mismo ID de socket para mandar el paquete. Si lo hemos hecho bien, en nuestra Action Console aparecerá el paquete. Recuerda marcar la pestaña Send en la Action Console:


Marcamos el paquete tal y como se ve en la foto y pulsamos en el lápiz para editar el paquete:


Ésta ventana nos muestra el paquete, aparece el tamaño (11) y el contenido en HEX y ASCII. Pulsamos QUIT ya que no queremos modificar el paquete (solo os quería enseñar como ver el contenido de un paquete antes de ser enviado). Ahora indicaremos a WPE que envíe ese paquete como si lo estuviera haciendo el propio cliente de forma legítima.

Pulsamos el boton PLAY en la ACTION CONSOLE (el botón de abajo que hay lado del lápiz) y aparece la siguiente ventana:


Debería estar configurada tal y como se ve en la foto, es decir:

- Enviar 1 vez
- Utilizar el socket abierto
- Open Socket ID: Éste es el ID del socket, debería tener un número ya escrito.

Pulsamos PLAY en ésta ventana para enviar nuestro paquete 1 vez, si lo hemos hecho bien el cliente recibirá las monedas como si hubiera abierto el cofre:


Ves que fácil? Ahora vamos a investigar un poco más: Vuelve a enviar el paquete pero ésta vez ponlo en 5 (mira la foto):


Pulsa PLAY y observa que ocurre en el CLIENTE y en el SERVIDOR:


Puedes observar como WPE ha enviado 5 veces el paquete de abrir un cofre y el servidor nos ha obsequiado con 5 respuestas (y sus respectivas monedas) jajaja

Ahora, si has sido lo suficientemente curioso... te habrás preguntado porque el paquete que envía el cliente es OpenChest#1, no? Que pasaría si cambio el último número? Para ello pulsa el lápiz para editar el paquete y cambia el último offset:


Pon un nombre al paquete para que recuerdes que lo has modificado y envíalo 1 sola vez, observamos que ocurre:



CHAN!! Acabas de engañar al servidor haciendo creer que has abierto 5 cofres, el servidor recibe OpenChest#5 y te envía 5 veces el paquete de obtener monedas. GENIAL!!

Bien, acabamos de llegar al final de la explicación sobre como enviar paquetes, es muy sencillo.

FILTAR & MODIFICAR PAQUETES

Ahora os explicaré como modificar los paquetes entrantes (recv), capturando los que cumplan un filtro y modificar dichos paquetes antes de que el CLIENTE los reciba, volvemos a nuestra captura de paquetes y nos fijamos en el primer paquete de tipo Recv:


Ese paquete es la respuesta que nos devuelve el SERVER cuando le enviamos el comando OpenChest#1, es decir, lo podemos traducir de la siguiente forma:

CLIENTE dice OpenChest#1
SERVER responde GetCoins#0X (X puede ser cualquier número del 1 al 5)

No hay que ser un superdotado para descubrir que GetCoins es la función de dar monedas y los número de detrás del # son la cantidad de monedas... pues vamos a modificarlo para que el servidor nos devuelva SIEMPRE 99 monedas. Para ello seleccionamos el contenido Hexadecimal del paquete tal y como se ve en la foto anterior y hacemos click derecho y seleccionamos Copy.

Nos vamos a nuestra Action Console (pestaña Filters), seleccionamos el primer filtro y lo editamos con el botón del lápiz:


- En la ventana del filtro, cambiamos el modo a ADVANCED
- En la parte superior, en los offsets de SEARCH hacemos click derecho y seleccionamos PASTE para pegar los datos de nuestro paquete
- Hacemos lo mismo en los offsets de MODIFY (click derecho y PASTE)

En la foto veréis que he cambiado los offsets 10 y 11. Ahora os explicaré el motivo, de momento modificarlo también (igual que la foto). Ponerle un nombre al filtro y seleccionar el tipo Recv. Pulsamos Apply

Una vez hecho ésto, marcamos el filtro y pulsamos el botón ON:


En éste estado, WPE capturará todos los paquetes de tipo Recv y los comparará con los offsets que hemos puesto en SEARCH, es decir:

47 65 74 43 6F 69 6E 73 23 = GetCoins#

Si esa comparación se cumple, modificará el paquete por los offsets de MODIFY:

47 65 74 43 6F 69 6E 73 23 39 39 = GetCoins#99

Pulsamos varias veces sobre el botón de abrir cofre en el CLIENTE y observamos que ocurre:


Como puedes observar, el servidor recibe nuestro OpenChest#1, el servidor devuelve unas cuantas monedas (1, 2, 5, 3, etc...) pero en nuestro cliente obtenemos 99 monedas todo el rato jejeje

Bien, así de sencillo es aplicar filtros. Solo tenemos que tener muy claro que offsets buscamos y que offsets hay que modificar, luego WPE trabajará solo. Para desactivar el filtro hay que quitar el botón ON.

ENVIAR PAQUETES MODIFICADOS

Ahora explicaré como solventar el tema de comprar items. (Enviar un paquete modificado)

Ya has visto que el cliente envía BuyItem#500 y el servidor responde BuyDennied#0 (es decir, que no nos permite comprar porque nos falta dinero), vamos a engañar al servidor, jeje.

Nos vamos a nuestra captura y seleccionamos el paquete de comprar BuyItem#500, hacemos click derecho y lo enviamos a nuestro Send List:


Marcamos el nuevo paquete y lo editamos:


Vamos a cambiar el número 500 por el número 2800, verás que no lo puedes cambiar de golpe. Primero tienes que aumentar el tamaño a 12 y luego escribir el nuevo valor:


Guarda el paquete modificado y envíalo 1 vez usando el botón PLAY (ya deberías saber hacerlo), si lo has hecho bien obtendrás lo siguiente:


Ya tienes tu item gratis!! :)

RESUMEN FINAL

Bueno, por hoy me detengo ya. Espero que os animéis con WPE ya que es un programa muy divertido. Ésta teoría se puede aplicar en juegos multiplayer actuales para dupear items, recibir dinero/monedas/gold, hacer tradehacks y un sinfín de cosas más. Se pued eutilizar para juegos tipo Starbound, Diablo II o para juegos Flash de navegador como PokerStar o cualquier juego tipo Ogame, etc...

La dificultad reside en que no hay una forma fija para capturar y modificar un paquete. Cada juego utiliza su protocolo y su sintaxis. Lo complicado es capturar el paquete deseado y saber modificarlo. Algunos paquetes estarán cifrados o con comprobaciones de CRC, pero eso ya lo veremos más adelante...

Saludos!! :D
22  Programación / ASM / Ayuda con fadd qword ptr [xxxxxx] en: 1 Diciembre 2013, 18:45 pm
Buenas a todos

A ver, no estoy acostumbrado a trabajar con ASM y tengo una duda que no puedo resolver xD

Estoy trabajando con una variable de tiplo single (float) y he llegado a la instrucción que modifica dicha variable:

fadd qword ptr [Project1.exe+10A0]
fstp dword ptr [esi+34]


La primera instrucción me añade (fadd) el valor de Project1.exe+10A0 (que tiene un valor de 0.25). Luego la segunda instrucción almacena el valor en la variable esi+34 ¿lo digo bien? Bueno, pues yo quiero aumentar 0.75 en lugar de 0.25, he probado lo siguiente:

fadd qword ptr [0.75] = Ya se que eso no funciona, pero tenía que probarlo
fadd qword ptr 0.75 = Tampoco funciona
mov [esi+34],0.75 = Tampoco funciona

Como podéis observar, lo estoy haciendo fatal, jaja. Cual es la instrucción que me permite añadir el valor que yo quiera a mi variable de tiplo Single (float)?

Saludos y gracias
23  Foros Generales / Foro Libre / Soy Programador (video Oficial) en: 25 Noviembre 2013, 10:14 am


Ojo que el vídeo es oficial del Ministerio de Educación, Cultura y Deporte de España. Vergüenza ajena.
24  Programación / Programación Visual Basic / [APP & SOURCE] Smart Updater - Añade un auto-actualizador a tus programas FACIL en: 15 Octubre 2013, 23:51 pm
Bueno, tal y como prometí, os presento mi proyecto de Actualizador de Aplicaciones

El programa es muy básico pero cumple correctamente su función sin necesidad de complicar al usuario ni al programador. La herramienta está tan bien programada que no es necesario ni que accedáis al source del Smart Updater para implementar su función en tu aplicación.

Dada la propia naturaleza de Smart Updater, se puede utilizar como WebInstaller (es decir, un programa que descarga e instala desde 0 tu aplicación en un PC), así como para mantener siempre actualizados los ficheros del programa en cualquier equipo. Veamos como funciona:


Smart Updater solo necesita un fichero de configuración para que pueda encontrar el listado actualizado de los ficheros de tu programa, ese listado se llama updater.lst y estará colgado en la carpeta FTP/WEB junto a la copia de tu programa actualizado, para que se entienda os voy a poner un ejemplo práctico:

http://cactus-software.elhacker.net/EJEMPLO.zip

Descarga éste ejemplo de Smart Updater ya compilado, descomprime smart_updater.exe y smart.cfg en una misma carpeta. El contenido del smart.cfg es mi aplicación de ejemplo que será instalada/actualizada en tu PC:

Contenido del smart.cfg
Código:
http://cactus-software.elhacker.net/MyApp/

El contenido de cactus-software.elhacker.net/MyApp/ es el siguiente:

Se puede ver distintos ficheros y carpetas de ejemplo, además del mencionado updater.lst. Smart Updater buscará el fichero updater.lst y descargará/actualizará todos los ficheros que aparezcan listados.

Bueno, ahora ejecuta el fichero Smart_Updater.exe y pulsa el botón UPDATE, verás como la aplicación descarga el updater.lst, comprueba los ficheros locales y los ficheros del listado y si no coinciden lo descargan. Fácil, verdad?

Para generar un fichero updater.lst válido sobre cualquier carpeta o aplicación, solo tienes que descargar el siguiente programa: http://cactus-software.elhacker.net/Smart_Updater_Maker.zip

El programa es sencillo, lo ejecutas y seleccionas la carpeta de tu aplicación. El programa generará un updater.lst con el contenido de la carpeta (y subcarpetas) que has seleccionado. El fichero updater.lst se almacena al lado del Smart Updater Maker.exe, dicho fichero lo tienes que subir a tu FTP/WEB junto a la aplicación, tal y como se puede ver en la foto anterior de mi ejemplo.

El source de la aplicación también lo publico, pero no es necesario para añadirlo a una aplicación existente: http://cactus-software.elhacker.net/SmartUpdater_Engine.zip

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

Si alguien tiene dudas o preguntas... que pregunte!! No es fácil explicar el funcionamiento de éste programa de forma escrita, así que si hay dudas me avisáis :)
25  Programación / Ingeniería Inversa / VB6 - Custom Funtion Descriptions para OllyDbg 1.10 en: 12 Octubre 2013, 17:24 pm
Buenas a todos

Basándome en una de las lecciones de Ricardo Narvaja, descubri un buen truco para reforzar nuestro OllyDbg. Concretamente es la lección 116 del curso nuevo de Ricardo Narvaja. En dicha lección se menciona un fichero llamado "common.arg" en el que podremos personalizar el análisis de las funciones de un módulo. He cogido la idea y la he ampliado añadiendo las principales funciones de Visual Basic 6.0, así como una extensa información adicional que encontré en un foro. El resultado es divertido.

Nuestro OllyDbg 1.10 por defecto no analiza correctamente las funciones propias de MSVBVM60.DLL, éste es el aspecto del análisis de un ejecutable típico en VB6:


Se pueden ver las llamadas a las funciones en la mayoría de casos, y también nos muestra algunas cadenas en UNICODE y argumentos de la llamada de la API/función, pero si utilizamos el fichero "common.arg" el resultado es MUY distinto:


Además, y haciendo referencia a la lección original de Ricardo Narvaja, podremos poner Conditional BP en la API que queramos para poder logear y dumpear con un solo click todos los string's y argumentos.

Para crear éste fichero he tenido que generar un ejecutable que he llamado dumper.exe con el siguiente código:

Código
  1. Private Sub Command1_Click()
  2.    Dim A() As String
  3.    Dim B As String
  4.    Dim C As Long
  5.    Dim D1, D2 As Integer
  6.    Dim E As Double
  7.    Dim X As Variant
  8.  
  9.    Exit Sub
  10.    Command1.Enabled = False
  11.  
  12.    B = "####### START DEBUGGING HERE PLEASE #######"
  13.    On Error Resume Next
  14.    A() = Split("THIS IS MY SPLIT STR", " ")
  15.    B = Join(A(), ",")
  16.  
  17.    B = "strCAT1" & "strCAT2"
  18.  
  19.    Open "C:\test.txt" For Output As #1
  20.        Print #1, "PRINT EXAMPLE"
  21.        Write #1, "WRITE EXAMPLE"
  22.    Close #1
  23.  
  24.    MsgBox "MSG_BOX_TEXT", vbOKOnly, "MSG_BOX_CAPTION"
  25.    If "strCMP1" = "strCMP2" Then
  26.        End
  27.    End If
  28.    FileCopy "C:\test.txt", "C:\FILECOPY.TXT"
  29.    C = FileLen("C:\test.txt")
  30.    Kill "C:\test.exe"
  31.    Kill "C:\FILECOPY.TXT"
  32.    MkDir "TEST_DIR"
  33.    RmDir "TEST_DIR"
  34.    If InStr("INSTR EXAMPLE1", "INSTR EXAMPLE2") <> 0 Then DoEvents
  35.    C = Len("LEN STR")
  36.    C = LenB("LENB STR")
  37.    B = Mid("THIS IS A MID STR", 5, 2)
  38.  
  39.    If "LIKE STR" Like "LIKE STR2" Then DoEvents
  40.    D1 = 10
  41.    D2 = 5 + 10
  42.    D2 = D1 + D1
  43.    D2 = 5 / 2
  44.    D2 = 5 * 2
  45.    D2 = 5 - 2
  46.    D2 = -D2
  47.    D2 = 5 Mod 2
  48.    D2 = 5 Xor 2
  49.    D2 = Not 5
  50.    D2 = 5 And 2
  51.    D2 = 5 Or 2
  52.    D2 = Sin(50)
  53.    D2 = Cos(50)
  54.    D2 = Tan(50)
  55.    D2 = Atn(50)
  56.    D2 = Exp(50)
  57.    D2 = Log(50)
  58.    X = Hex(500)
  59.    X = Oct(600)
  60.    X = Asc("Q")
  61.    X = Chr(255)
  62.    Form1.ForeColor = QBColor(3)
  63.    Form1.ForeColor = RGB(255, 200, 150)
  64.    Randomize 50
  65.    D2 = Rnd
  66.    B = InputBox("INPUTBOX_PROMPT", "INPUTBOX_TITLE", "INPUTBOX_DEFAULT")
  67.    SendKeys "SENKEYS STR"
  68.    Shell "cmd.exe", vbMaximizedFocus
  69.    For i = 1 To 10 Step 2
  70.        If i Mod 2 = 0 Then DoEvents
  71.    Next i
  72.    B = Environ("USERNAME")
  73.    B = Command$
  74.    B = Replace("MY REPLACE STR", "FIND STR", "REPLACE STR")
  75.    B = StrReverse("REVERSE STR")
  76.    Command1.Enabled = True
  77.    B = "####### STOP DEBUGGING HERE PLEASE #######"
  78. End Sub
  79.  

Os dejo a continuación más pantallazos sobre el análisis que conseguiremos con el fichero "common.arg":




Mención especial al análisis de la función RGB() que desglosa al detalle los 3 colores, así como la función StrReplace(). El fichero no está completo, no he podido analizar el 100% de las funciones, así que si alguien puede aportar algo, mejorar o cambiar alguna función... estaría agradecido, ya que el trabajo es algo durillo jeje.


Os dejo un ZIP con el fichero "common.arg", hay que copiarlo en la carpeta de nuestro OllyDbg 1.10, al lado del ollydbg.exe. En la ventana de LOG [L] aparece si se ha cargado correctamente. También os adjunto el dumper.exe que he utilizado para dumpear el análisis correcto de la librería MSVBVM60.DLL, hay que analizar muchas funciones que me he dejado y hay otras que no he sabido como analizarlas. Agradeceré cualquier tipo de colaboración:

http://www.mediafire.com/?dk13l8lh2o9j7k8
26  Programación / Ingeniería Inversa / SpongeBob CRK1 by MadAntrax (éste es de los complicados) en: 12 Octubre 2013, 02:18 am
Hola a todos

Cada día aprendo cosillas nuevas y cada día se me ocurren crackme's diferentes... He diseñado un nuevo crackme que recopila un poco todo lo que he ido aprendiendo, se llama SpongeBob y aquí os presento la versión 1.0:


El crackme está programado en VB6, os dejo una breve descripción:

  • Programado en VB6 Nativo
  • Está empacado y comprimido
  • Está protegido
  • Tiene una VM bastante bestia
  • Tiene comprobaciones de CRC (Anti-Patch)
  • Hay que habilitar un control deshabilitado...
  • Hay que generar un serial válido
  • Si puedes, programa un KeyGen
  • El crackme se reinicia si fallas el serialcode
  • Parchear MSVBVM60.__vbaEnd no sirve de nada
  • La comprobación del serialcode no utiliza MSVBVM60.__vbaStrCmp

Bueno, me he dejado la piel en el crackme. Espero con ansias los primeros reportes de karmany y MCKSys...

http://www.mediafire.com/?3vrbrld8v21fg3u

Buena suerte!! :D
27  Programación / Ingeniería Inversa / Mi primer Tutorial: Desempacando a mano UPX 3.91w (for newbies) en: 10 Octubre 2013, 23:40 pm
Bueeeeeeeeno

Primero de todo quiero avisar que éste es mi primer tutorial que hago sobre Ing. Inv. tengo MUY poca experiencia y todavía me falta mucho por leer, pero me gustaría empezar por algo y como es lógico voy a empezar por lo más básico de todo: Desempacar a mano un UPX

No pretendo enseñar nada nuevo a nadie, digamos que el contenido de éste tutorial es conocido por el 99,9% de la gente que lleva como mínimo 2 días estudiando Ing. Inversa. Tanto el crackme como el tutorial lo he creado yo mismo, así que me gustaría saber opiniones, si está bien redactado, si se entiende, etc... ¡quiero mejorar!

Descarga: http://www.mediafire.com/?2l7w7qwnntscybp

Además, el tutorial viene con un crackme de prueba muy gracioso, ya que está programado con VB6 y no utiliza la función __vbaStrCmp para comparar el serial.

Saludos!! :)
28  Programación / Ingeniería Inversa / Reto (¿crackme?) para CheatEngine o similares. en: 6 Octubre 2013, 18:11 pm
Buenasssss

Como y sabéis, mis principales aficiones son el Cheat Engine y los crackme's, así que he unido los 2 temas para programar un pequeño "crackme" para ser utilizado en Cheat Engine:



Tiene 3 apartados (cada cual más complicado que el anterior), las pruebas 1 y 2 os he dejado un botón de SOLUCIÓN para que podáis descubrir la respuesta. Os ruego que utilicéis la solución cuando ya os deis por vencidos. La prueba 3 no he querido poner la solución, os dejo que la descubráis vosotros mismos.

Para quien necesite un poco de referencias o ayuda: TUTORIAL CHEAT ENGINE

Link de descarga del crackme: AQUI

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

Básicamente tenéis que encontrar la dirección de memoria (variable) donde se almacenan las monedas. No he usado ninguna protección de memoria ni nada similar, sólo ofuscación de datos. Utilizar el hilo para preguntar, dudas, comentar, etc...

Que os divirtáis
29  Programación / Programación Visual Basic / [Source] ROX StrEncryption en: 13 Septiembre 2013, 16:41 pm
Os dejo un pequeño código para codificar cadenas de texto, ideal para camuflar string's en nuestros proyectos o para FUDear algún source ajeno.

El algoritmo no es muy complicado, pero cumple 3 requisitos que para mí son indispensables:

  • Se utiliza una key para la codificación. Un mismo texto se puede codificar de infinitas formas distintas.
  • La cadena codificada contiene caracteres imprimibles
  • Si se codifica un texto homogeneo (aaaaaaaaaa) devuelve una cadena heterogenea (7347137;;997<9)

Además, como se puede observar, el algoritmo utiliza la codificación Hexadecimal, pero la cadena final contiene caracteres que no son Hexadecimales. El texto codificado será de tamaño t(i) = t(x) * 2.

Código
  1. '***********************************************
  2. ' Name:     ROX Encryption 1.0
  3. ' Author:   MadAntrax
  4. ' Date:     13/09/2013
  5. ' URL:      foro.elhacker.net
  6. ' Usage:    eROX(string,password) to encrypt text
  7. '           dROX(string,password) to decrypt text
  8. '***********************************************
  9.  
  10. Function eROX(ByVal S As String, ByVal P As Integer) As String
  11.    For i = 1 To Len(S)
  12.        T1 = Hex(Asc(Mid(S, i, 1)))
  13.        If Len(T1) <> 2 Then T1 = Chr(48) & T1
  14.        T2 = T2 & T1
  15.    Next i
  16.    For i = 1 To Len(T2)
  17.        R = R & Chr(Asc(Mid(T2, i, 1)) Xor (i Mod (P + 1)) Xor ((P + 2) Mod i))
  18.    Next i
  19.    eROX = R
  20. End Function
  21.  
  22. Function dROX(ByVal S As String, ByVal P As Integer) As String
  23.    For i = 1 To Len(S)
  24.        R = R & Chr(Asc(Mid(S, i, 1)) Xor (i Mod (P + 1)) Xor ((P + 2) Mod i))
  25.    Next i
  26.    For i = 1 To Len(R) Step 2
  27.        F = F & Chr(Val("&H" & Mid(R, i, 2)))
  28.    Next i
  29.    dROX = F
  30. End Function
  31.  

Os dejo un ejemplo sobre como codificar/decodificar texto:

Código
  1. Private Sub Form_Load()
  2.    MsgBox eROX("elhacker.net", 7)
  3.    MsgBox dROX("765F7=3078<O::9;:N<H::9=", 7)
  4. End Sub
  5.  
30  Programación / Ingeniería Inversa / Crackme: Keyfile_Me by MadAntrax en: 11 Septiembre 2013, 20:05 pm
Hola a todos

Acabo de diseñar un nuevo crackme para el foro, compilado siempre con VB6. Ésta vez se trata de un crackme tipo keyfileMe, el software se activa si encuentra el fichero de licencia correcto. Además para hacerlo más divertido he programado distintos "niveles" de licencia:

  • Single User
  • Developer
  • Enterpise
  • Professional
  • Full





El crackme es algo complejo, no se puede parchear. Utiliza Hardware Fingerprint para generar parte de la licencia. Se considerará la prueba superada si consigues generar un keyfile completamente válido. No importa el nivel de la licencia (User, Pro, Full, etc).

Para demostrar que has logrado superar el reto deberás postear tu keyfile correcto y tu Hardware Fingerprint que ha generado el crackme.

Aviso: No se puede parchear. El crackme está comprimido y protegido. Podéis usar el hilo para compartir info entre vosotros.

DOWNLOAD: LINK
Os dejo una captura del crackme resuelto con mis datos (no os muestro el keyfile):



Saludos!! :D

(Si no podéis superar el reto, os dejo parchear el crackme)
Páginas: 1 2 [3] 4 5 6 7 8 9 10
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines