DCS17 Writeup

Buenas!

Esta entrada la dedicare a explicar como resolver los retos planteados en el CTF de Donostia CyberSec organizado por S21 sec.

Bueno, al lio.

Forense

Mexico – Matryoska (75 Puntos)

Enunciado: La bandera se encuentra en el fichero comprimido adjunto.

Una vez descargamos el adjunto nos encontramos con un fichero aparentemente comprimido que en su interior tiene un archivo de texto donde deberia estar la flag.

4cc6a14c43e23c3f90fdd846dd4aa374

Como no podemos ver el archivo, y captando la pista del nombre del reto “Matryoska” usaremos el comando binwalk -Me fichero, esto nos extraera de forma recursiva todos los archivos que contiene el fichero.

Cuando binwalk termina, nos ha generado una carpeta de output _nombredelfichero, solo tenemos que navegar hasta la ruta _flag_7c7e9a28dd25a2e2f81e1bfe7000aa52(1).txt.gz.extracted/_flag0.txt.extracted/_flag0.txt.extracted/_flag0.txt.extracted/_flag0.txt.extracted/_flag0.txt.extracted/_flag0.txt.extracted/_flag0.txt.extracted para encontrar la flag.

 

Colombia – Phishing (200 puntos)

Enunciado: Los siguientes ficheros forman parte de una campaña de phishing, ¿ Podrías localizar la bandera en su interior ?

los archivos que se nos proporcionan en esta ocasión son 2 del tipo html con un phishing de gmail.

Abrimos el primero y nos encontramos en la siguiente URL

En este punto ahy dos opciones, o vemos el codigo fuente, o si nos damos cuenta de que al final de la url asoma  un ‘<‘ nos desplazamos a ver que contiene.

Como vemos tiene un texto en base64, lo desciframos y obtenemos:

eval(function(p,a,c,k,e,d){e=function(c){return(c<a?”:e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!”.replace(/^/,String)){while(c–){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return’\\w+’};c=1};while(c–){if(k[c]){p=p.replace(new RegExp(‘\\b’+e(c)+’\\b’,’g’),k[c])}}return p}(‘3.2.i=”h g f j k”;n{(m(){5 1=3.2.l(\’1\’);1.d=\’c/x-4\’;1.9=\’8 4\’;1.b=\’\’;5 a=\’o\’;2.z(\’C\’)[0].p(1)}())}B(e){}3.2.E.G=”<6 F=\\”D://A.s–r-q.t\\” u=\\”y: 0;w: 7%;v:7%\\”></6>”;’,43,43,’|link|document|window|icon|var|iframe|100|shortcut|rel|segunda_mitad_flag|href|image|type||been|have|You|title|Signed|out|createElement|function|try|36d185c10a68b42d|appendChild|tmc|google|xn|com|style|height|width||border|getElementsByTagName|accounts|catch|head|http|body|src|outerHTML’.split(‘|’),0,{}))

Un script en JS, no pasa nada por no saber que hace el script, yo, sinceramente no tengo ni idea. La parte que nos interesa es la que esta marcada en rojo. Como vemos nos esta indicando “la segunda mitad de la flag”, como hay dos archivos, lo logico es que la otra mitad este en el otro html que nos dan.

Efectivamente, en el codigo fuente del otro fichero y buscando “flag” encontramos la mitad que nos faltaba

Argentina – TCP (115 Puntos)

Enunciado: Se ha conseguido una captura de tráfico de un equipo comprometido. ¿ Podrías localizar la bandera en dicha captura de tráfico ?

El archivo que nos dan es una captura de trafico, por tanto lo abriremos con wireshark.

Siguiendo la pista “TCP” que nos dan en el titulo del reto, miramos las tramas TCP, y en una de ellas encontramos el siguiente contenido

Etiopia – Forense (50 Puntos)

Enunciado: Estamos realizando una análisis forense de una unidad USB. ¿Cual de los siguientes ficheros ha sido copiado?

La pista que nos dan para este reto es una fotografia del explorador de archivos de windows.

En este caso la fuerza bruta es muy simple, o la respuesta es contactos.txt o servicios.txt, lo que deberia hacer que nos decantasemos por el archivo servicios.txt como respuesta es que la fecha de modificacion/acceso del archivo contactos.txt hace imposible que haya sido copiado a cualquiera de las carpetas mostradas, en cambio el archivo servicios.txt podria haberse copiado perfectamente a la carpeta “Nueva carpeta”.

Grecia – FTP (50 Puntos)

Enunciado. ¿ Cual es la password para acceder a los ficheros de este viejo AS/400 ?

Ahora nos vuelven a dar una captura de trafico, lo abriremos con wireshark.

En las primeras tramas del paquete encontramos una conexion a un servicio que se pone a la espera de un usuario y una contraseña, por tanto en las siguientes tramas debera hacerse el login, y lo que nos estan pidiendo como flag es la contraseña.

Efectivamente, un poco mas abajo tenemos lo que buscamos

Austria – Forense (75 Puntos)

Cameron trabajó en los 80s en una empresa de informatica. Cual era su lema? (En mayusculas y con espacios).

Nos dan un archivo comprimido con 7zip.

Una vez descomprimido el archivo tenemos el archivo card.image, para hacer analizar este fichero usaremos un programa llamado FTK imager.

Una vez abrimos la imagen, encontramos 5 fotografias en la carpeta root, lo que nos da la flag

Suecia -HTTP (125 Puntos)

Enunciado: ¿Sabrias decir el lema de este grupo de hackers? (Minisculas, mayusculas y puntuación tal como lo encuentres).

De nuevo tenemos que hacer un analisi de una captura de trafico, asi que la abriremos con wireshark.

Analizando las primeras tramas vemos que hace una conexion del tipo GET a una imagen y psoteriormente procede a su descarga

Por tanto es facil llegar a la conclusion de que en esa imagen estara la flag. Para ver la imagen ya que la conexion la hizo a una IP interna (192.168.187.1:80/hackers.jpg) es usar network miner a ver si nos la recupera.

Efectivamente nos recupera la imagen que contiene la flag.

Filipinas – Esteganografia (50 Puntos)

Hemos recibido esta imagen de un gran equipo de fútbol. Pero creemos que hay algo raro en ella…

La imagen que nos dan es la siguiente:

 

Real_993d44f0485d956a8d7d931b8d3a8e61.jpg

A simple vista no se ve nada raro en la imagen, por tanto vamos a analizarla mas a fondo.

Si usamos hexdump -C imagen podemos ver que en el EOF tiene algo cifrado en base64

El texto descifrado nos dara la flag.

Chad – Transmision (100 Puntos)

Enunciado: Hemos recibido esta transmisión de algún punto de Chad. ¡Ayúdanos a descifrarla!

Como pista nos dan un fichero de audio .wav con el nombre morse_*.wav por tanto nos dan el trabajo hecho, aunque al reproducirlo se escucha claramente el morse.

Si pasamos el mensaje por un decoder online obtenemos la flag.

Finlandia – Adjuntos en correo electronico.

Enunciado: Se ha recibido un correo electrónico con un fichero adjunto malicioso. En dicho fichero malicioso podrás encontrar la bandera.

Nos dan un archivo .xlsm (excel con macros) para evitar problemas de compatibilidad use el paquete de office para resolverlo.

Una vez lo abrimos y tras habilitar la edicion y habilitar las macros, nos encontramos con una hoja de excel vacia, como es un archivo con macros vamos a ver el codigo de las mismas con alt+f11

Como vemos ejecuta un comando de powershell, lo unico que nos falta es la variable “a”, que esta en la celda AA1 de la hoja ScriptKiddie101.

Como al abrirlo solo veiamos la Sheet1, se deduce que han ocultadola hoja que nos interesa.

Nos fijamos que en la ventana de ropiedades de la sheet que nos interesa, la propiedad “visible” esta marcada en 2 – very hidden, para poder verla y por tanto recuperar el contenido de la celda AA1 que corresponde a la variable “a”, le daremos la propiedad -1.

Si nos desplazamos hacia la derecha nos encontramos con lo siguiente

de la columna Z pasa directamente a la AB, y la que nos interesa es la columna AA y la celda 1. Para resolver este problema hacemos la busqueda de la celda manualmente, donde encontramos el codigo de la variable a

Basta con ejecutar la parte de la variable ‘a’ que esta entre los paréntesis a través del powershell ISE para obtener la flag.

Reversing

Camerún – Reversing

Hemos olvidado la contraseña de este fichero ¿Nos podrías ayudar a recuperarla?

Nos dan el fichero al que tenemos que hacer el reversing para obtener la flag.

Lo primero que tenemos que hacer tras descargar el archivo es darle permisos con chmod +x binario

Ejecutamos para ver el funcionamiento

Ya tenemos localizada la parte del fallo “Fallaste! (-.-)”

A continuación lo abrimos con radare2 y analizamos todo el binario con “aa”, posteriormente  desensamblamos el main con “pdf@sym.main”

Localizamos la zona de fail:

0x08048680      68e7870408     push str.Fallaste____.__ ; str.Fallaste____.__ ; “Fallaste! (-.-)” @ 0x80487e7

Localizamos la zona de contraseña correcta:

0x08048628      68b0870408     push str.Era_co__a._Lo_has_conseguido___Zorionak_ ; str.Era_co__a._Lo_has_conseguido___Zorionak_ ; “Era co..a. Lo has conseguido!! Zorionak!” @ 0x80487b0

Lo de era coña se refiere al contenido de unas posiciones mas arriba donde nos dice:

0x0804860b 689f870408 push str.Otra_vez_sera… ; str.Otra_vez_sera… ; “Otra vez sera…” @ 0x804879f

tras mostrarnos ese mensaje de “error” hace un sleep y posteriormente deberia mostrarnos la flag.

Otras lineas que nos deberian llamar bastante la atencion son:

0x080485e3 68409a0408 push str.DCS2017mola ; obj.paswd ; “DCS2017mola” @ 0x8049a40
| 0x080485e8 e843feffff call sym.imp.strlen
| 0x080485ed 83c410 add esp, 0x10
| 0x080485f0 83ec04 sub esp, 4
| 0x080485f3 50 push eax
| 0x080485f4 68409a0408 push str.DCS2017mola ; obj.paswd ; “DCS2017mola” @ 0x8049a40

Bien, llegados a este punto podriamos deducir que la contraseña es “DCS2017mola”, y efectivamente es esa, aun asi vamos a resolverlo modificando el flujo de ejecuccion (como prueba de concepto).

Para ello y dado que aun soy muy noob con radare, usare GDB con el plugin peda.

Una vez abrimos el programa con “gdb ./binario”, usamos pdisass main para desensamblar el main.

Localizamos la zona donde hace la comprobacion del input con la flag real

0x08048604 <+153>: test   eax,eax

En la linea siguiente y si lso datos no coinciden, salta a la direccion 0x0804867d , justamente la zona donde el programa nos dice que hemos fallado, por tanto vamos a saltarnos esa verificacion.

Para ello colocamos un breakpoint en 0x08048604 con b *main+153 y ejecutamos con run.

Vemos que se ha parado en la comprobacion y esta haciendo un string compare con el caracter “D” y nuestra password “test”. Como evidentemente D != t el salto nos llevaria a la zona de password incorrecta.

Para evitar esto hacemos next instruction (ni) y modificamos el instruction pointer a la siguiente direccion tras el salto que no queremos hacer  (set $eip=0x8048608)

Bien, pasamos la verificacion y nos da la flag, aunque evidentemente esta no es “test” es “DCS2017mola”.

Mauritania – Reversing

Nos ha llegado el siguiente ejecutable con un mensaje protegido por contraseña. ¿Nos podrías ayudar a obtenerlo?

Nos dan de nuevo un binario

Lo primero que hacemos tras descargarlo es darle permisos igual que antes, abrirlo para ver el funcionamiento, que en este caso es exactamente igual que el anterior y abrirlo con radare para analizarlo y desensamblarlo.

Localizamos la zona de chico malo

0x08048553 683c870408 push str.Fallaste____.__ ; str.Fallaste____.__ ; “Fallaste! (-.-)” @ 0x804873c

Y la de chico bueno

0x0804857c 68f4860408 push str.Probaremos_con_un_cifrado_mejor_la_proxima_vez._Zorionak__ ; str.Probaremos_con_un_cifrado_mejor_la_proxima_vez._Zorionak__ ; “Probaremos con un cifrado mejor la proxima vez. Zorionak!!” @ 0x80486f4

Igual que antes una zona nos deberia llamar la atencion

0x08048548      3a91a0990408   cmp dl, byte [ecx + str.A1_C3bK4_2h5f8vE]

En esta comparacion va a comparar nuestro input con el contenido en bytes del registro ecx concatenado con la string “A1_C3bK4_2h5f8vE”, si bien a esta zona en una primera ejecuccion no vamos a llegar, ya que antes nos encontramos con

0x08048543 eb20 jmp 0x8048565

Lo que nos lleva a una zona donde se comprueba de nuevo nuestra password

| | || 0x0804856b 80fa0a cmp dl, 0xa
| | `===< 0x0804856e 75d5 jne 0x8048545
| | | 0x08048570 80b8a0990408. cmp byte [eax + str.A1_C3bK4_2h5f8vE], 0
| | `==< 0x08048577 75cc jne 0x8048545

esta es la zona que tendremos que bypassear, para ello colocaremos igual que antes breakpoints en cada comparacion

0x0804856b

0x08048577

Si alguna de estas comparaciones diese falso saltariamos a la zona antes mencionada, y en caso de que la comprobacion diese falso, continuaria la ejecuccion hasta

0x08048560 eb7f jmp 0x80485e1

donde nos mandaria fuera de la zona de chico bueno.

Recapitulando, que la zona que nos interesa es esta:

Abrimos el binario con gdb y colocamos breakpoints en

0x0804856b y  0x08048577

Ejecutamos y nnos paramos en la primera comparacion

Next instruction, cambiamos el instruction pointer a la direccion 0x8048579 para bypassear la siguiente comprobacion y continuamos obtener la flag

Anuncios

Ingenieria inversa en android | Cap 1

Buenas!

En esta entrada volvemos con reversing después de unas cuantas entradas dedicadas al malware, dado que crackmes.de, la pagina de donde solía sacar los crackmes esta cerrada de forma indefinida, haré ingeniería inversa a un crackme en Android de esta pagina

 

Resolveremos el crackme numero 2, para instalarlo en nuestro emulador usamos el android device bridge

Lo subimos con adb push ‘local’ ‘emulador’

Abrimos shell en el emulador con adb shell

Navegamos hasta el directorio donde hayamos subido el APK

Instalamos con adb install nombre_del_paquete

 

El crackme presenta el siguiente panel de login donde nos pide un email y una contraseña (secret):

Lo siguiente que haremos sera situarnos con la consola del sistema en el directorio donde hayamos instalado el apk y escribir apktool d nombre_del_paquete

Una vez se haya decompilado el apk, entramos en la carpeta que se ha creado y posteriormente en el directorio smali

Una vez estamos en el directorio smali hacemos grep -R -i password

Con este comando buscaremos en todos los directorios de forma recursiva el string password sin case sensitive (-i)

Lo que estamos buscando son cadenas hardcodeadas que contengan password a ver si podemos tirar del hilo a partir de ahí.

Debería llamarnos la atención la siguiente linea

Para ver mas concretamente a que viene esta linea debemos navegar hasta la ruta indicada en morado.

Una vez dentro podemos ver el archivo en código smali

*Nota: el código smali es el punto medio entre el código programado en Java y el código dalvik que es el que “entiende” la maquina virtual de android al ejecutar la aplicación.

En la linea 191 encontramos el string que estábamos buscando, y un poquito mas abajo debería llamarnos bastante la atención la siguiente linea también hardcodeada

const-string v8, “[WARN] Secret didn\’t match b2c4782f0afc0d9ccf21af70ac6c5c7e”

Esto es un mensaje de error de un log generado tras comparar dos hash MD5, este hash que compara es la contraseña (secret) que hemos introducido, así que por pura lógica, si desciframos el hash ya tendremos la contraseña.

Ahora nos falta el email de acceso, pero si en ese mismo archivo buscamos @ saltamos directamente a otra linea hardcodeada con un email.

Ya tenemos el email y la contraseña (secret), probemos a hacer login…

 

Hasta la próxima

 

Crackme | Ensamblador | Medio | Sin resolver |

En esta entrada voy a presentar un crackme de nivel 2 http://crackmes.de/users/fereter/crackme_by_fereter_1./

el objetivo es parchearlo para que acepte cualquier numero de serie, vamos a ver lo primero la gui

1

Vamos a abrirlo en el ollydbg y a buscar all referenced text strings, como siempre.

Y localizamos la linea donde dice correct numner

Si, el creador se ha equivocado y a puesto numner en vez de numBer xD

El caso es que nos manda a la direccion 004032A1

Vemos que en 0040328F tiene un salto JNZ hacia la direccion 004031D0, parte donde esta el mensaje de incorrect number. Osea si el serial introducido no coincide con el valido nos lleva a esa parte.

Ante esto se me ocurren cuatro opciones

-La primera sustituir ese salto condicional en 0040328F por un salto directo a la linea de correct numner.

-La segunda sustituir la direccion  a la que apunta ese salto condicional a la linea de correct numner, asi si el serial no es el que nos piden saltaremos a donde queremos.

-La tercera opcion que se me ocurre es dejar el salto como esta, y en la direccion a la que salta poner un JMP SHORT apuntando a la direccion 004032A1, osea a la zona de chico bueno

-La cuarta, que es la que voy a usar yo ya que es la solucion optima va ser poner un JMP SHORT apuntando a 004032A1.

Ahora vemos que en la direccion 0040328B hay un salto no condicional que nos volveria a mandar hacia arriba, y queremos ir abajo. Simplemente ponemos un breakpoint que es algo rapido .

Tambien hay un salto en la direccion 00403227, del tipo JNZ de nuevo que nos lleva a incorrect number, asique hacemos un JMP SHORT a la direccion donde tenemos el otro, osea a 0040328F

Hacemos lo mismo en 004031FE

Ahora nos fijamos en la direccion 004031DB, aqui el codigo, hace que si el serial es el valido se salta la parte de incorrect number, esto es un problema ya que si no lo cambiamos por un JNE nunca llegaremos al resto de partes, ademas vamos a hacer que este nuevo salto condicional apunte a la direccion 004031FE

 

2

Guardamos y probamos.

 

 

Informe detallado sobre el ransomware “Satana”

**Esta entrada fue publicada originalmente en http://indeseables.github.io/**

Si hay un tipo de malware preferido por los cibercriminales, esa es la familia de los ransomware. Desde la aparicion a finales de 2013 del conocido como “virus de la policia” esta familia de malware no ha parado de crecer, dado que es facil de programar y rentable para los cibercriminales.

A continuacion procederé a analizar detalladamente un nuevo ransomware descubierto a finales de Junio y conocido como “Satana”. Las muestras en las que se basa el análisis de esta entrada son; 46bfd4f1d581d7c0121d2b19a005d3df Como muestra principal

https://virustotal.com/en/file/683a09da219918258c58a7f61f7dc4161a3a7a377cf82a31b840baabfb9a4a96/analysis/

d236fcc8789f94f085137058311e848b Como muestra de malware unpacked

1. Información de versiones

A día de hoy 12 de Julio de 2016, únicamente se ha distribuido una versión del código malicioso Satana.

2. Extensiones a cifrar

Satana cifra los archivos con extensión .bak .doc .jpg .jpe .txt .tex .dbf .db .xls .cry .xml .vsd .pdf . csv .bmp .tif .1cd .tax .gif .gbr .png .mdb .mdf .sdf .dwg .dxf .dgn .stl .gho .v2i .3ds .ma .ppt .acc .vpd .odt .ods .rar .zip .7z .cpp .pas .asm

3. Extension añadida a los archivos cifrados

Tras cifrar los archivos el malware cambia el nombre de los mismos con el formato __

68747470733a2f2f692e6779617a6f2e636f6d2f30346635326430343235313135663963663134303366323537616239643765652e706e67

4. Análisis dinámico del código malicioso

Tras la ejecución del binario malicioso este crea una copia de si mismo en %TEMP% con un nombre aleatorio y posteriormente borra el archivo original. Además crea un archivo de texto bajo el nombre de ¡satana!.txt también en %TEMP%. Una vez terminado este proceso ejecuta el archivo de nombre aleatorio creado en la carpeta temporal, el cual requiere al usuario permisos de ejecución como administrador. Cuando el usuario concede los permisos de ejecución, el malware crea 2 entradas en el registro de Windows.

68747470733a2f2f692e6779617a6f2e636f6d2f37643964663361373963313264663761353333383636623261616362663061342e706e67

La primera bajo el nombre de “BTC” contiene la dirección de bitcoin asociada a la cartera que debe recibir el pago La segunda bajo el nombre de “E-mail” contiene una dirección de E-mail, la misma que se muestra en el nuevo nombre de los archivos cifrados.

68747470733a2f2f692e6779617a6f2e636f6d2f38653163303761643630336339393265363931376434663433643039626637632e706e67

5. Ataque de bajo nivel

Este ransomware no actua en modo kernel, como si lo hacen otros como por ejemplo Petya.

6. Ataque de alto nivel.

Una vez el malware ha sido ejecutado simplemente se instala de forma silenciosa en el equipo y espera al reinicio del equipo (sin forzarlo) para mostrar el siguiente mensaje

68747470733a2f2f692e6779617a6f2e636f6d2f61623637656139333438623561363834346534336539303464653639393739662e706e67

*Es el mismo contenido que el del fichero ¡satana!.txt

7. Metodo de cifrado de archivos.

Satana divide los archivos en partes de 32 bytes que cifra de forma independiente para posteriormente juntarlas usando el método RTDSC (Read Time-Stamp Counter). El algoritmo de cifrado es una modificación de AES 256.

8. Llave de cifrado

Aparentemente la llave de cifrado es siempre la misma. Un mismo archivo siempre devuelve archivos cifrados idénticos.

9. Medidas de protección anti reversing en el payload.

El payload esta empaquetado, pero puede ser fácilmente desempaquetado usando un debugger como OllyDbg, basta con colocar un BP en RtlDecompressBuffer. Tambien impide la restauración del equipo a un punto anterior a la infección.68747470733a2f2f692e6779617a6f2e636f6d2f35383166626631366463366632346166366630613137303630333937376638312e706e67

10. Conexión con el C&C

El malware conecta con el C&C y envía la siguiente información en un paquete sin cifrar. id=7 &code=100 &sdata=5.1.2600 0 1 HOME User 0&name=payload.exe &md5=59E18B50B822020294A8EA0A4154C7597847B3A6359A08194F4865D804BD7E6 &dlen=66ABDE777F35E50F671B6034FA6453AD Este proceso muestra un grave fallo en el payload, ya que si en el momento de la infeccion el C&C esta offline la llave se pierde y los archivos no pueden ser recuperados.

12. Detecion con regla YARA

rule: Satana_Ransomware
{
meta:
Description = “Deteccion de ransomware Satana”
Author = “SadFud”
Date = “12/07/2016”

strings:
$satana = { !satana! } nocase

condition:
$satana
}

11. Conclusion

Observando el funcionamiento del programa y los fallos que tiene, es posible que esta solo sea una versión de prueba y que la verdadera campaña de infección masiva aun no haya comenzado.

12. Descarga de muestras

http://www27.zippyshare.com/v/WjzkYiPy/file.html

Contraseña:indeseables

HonestGamer’s Crackme | .NET | Facil | Keygen

Hola

Hoy vamosa resolver este crackme escrito en .net, lo haremos interpretando el algoritmo de generacion de claves y desarrollaremos nuestro propio keygen.

El crackme nos pide un ID y una password tal que asi:

1

Introduciré reversecoder como ID

Ha crasheado -.-

Vamos a leernos la documentacion

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

The User ID should be an integer that is less than 4 digits.

The User Code should be an integer as well…

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

Vale, tenemos que usar de ID un numero de 4 digitos, usare el 1337

2

Ahora si funciona, fallamos y vemos que nos dice que si queremos probar otra vez.

Empezamos con la ingenieria inversa.

Sabemos que esta escrito en .net asi que lo decompilamos con nuestro ilspy y buscamos como genera las claves. En este caso esta muy claro que debemos mirar donde dice keygen

// Crackme.Keygen
private void Generate()
{
    int num = this.UserID * 786;
    this.ValidCode = num * 17;
    num = this.ValidCode / 12;
    this.ValidCode = num + 1991;
}

Ese es el algoritmo de generacion de claves, parece facilito, vamos a analizarlo

Coge nuestro numero de ID, lo multiplica por 786 y lo almacena en num

Coge el valor de num, lo multiplica por 17 y lo almacena en this.validcode

Coge el valor de this.validcode, lo divide entre 12 y lo almacena en num

Coge el valor de num, le suma 1991 y lo almacena en this.validcode

validcode = clave final

Como dije un algoritmo muy facil.

Ahora que sabemos como funciona vamos a crear un keygen en batch por ejemplo

@echo off
color a
set/p ID=escribe tu ID=
echo password:
set/a pwd=((%ID%*786*17)/12)+1991
echo.
echo %pwd%
pause>nul

Lo probamos con 1337

3

Testeamos en el crackme:

4

Listo, resuelto.

Dejo tambien un keygen en vb 6

5

Eso es todo

Hasta la proxima.

 

 

MLGCrax’s Linch’s Premium CrackMe | BATCH | FACIL

Buenas, despues de tiempo sin escribir vuelvo con un crackme un poco raro, esta hecho en batch. crack me

Lo primero que pense al ser un crackme hecho en batch fue, sera tan simple como boton derecho editar?

Pero no, viene el archivo convertido a exe

Vamos a ver que estructura tiene

1

Pide usuario y contraseña, si hay error dice que no se activa y se cierra.

Como esta en formate .exe vamos a ver si esta empaquetado con el rdgmax

2

Nos detecta Asprotect y tambien por algun extraño motivo nos dice que esta escrito en C++, error por parte del detector.

Vamos a abrirlo en el olly para desempacarlo

3

Aqui hay algo que deberia llamarnos la atencion, empieza por un MOV DWORD, cuando en el 95% de los casos si hay compresion el codigo empieza con un push, sera otro fallo del rdgmax packer detector? Buscamos una segunda opinion con el peid 4

Parece que efectivamente el rdgmax packer detector ha fallado en esta ocasion y no esta empaquetado con asprotector ni con nada,

Vamos por tanto a ir pulsando F8 en olly a ver que es lo que hace el programita

5

En esta zona encontramos algo que quizas sea interesante, de momento solo ha habido algunas variaciones en los registros, vamos a  seguir con F8

7

Esta linea nos da informacion valiosa y voy a explicar por que

En primer lugar, y esto es algo que es facil pasarlo por alto, esa cadena

Arg1 = 0040D08D ASCII “b2eargs”

Vamos a dividirla

En primer lugar tenemos b2eIntuitivamente sabiendo que el crackme esta desarrollado en batch y que esta convertido a formato exe podemos interpretar esas tres letras del siguiente modo

Bat 2 (to) exe 

*converter

bat2exe converter

Y en segundo lugar vemos que la instruccion donde esta es un PUSH, tipico en packers como dije al principio

Por ultimo la cadena args:

Argumentos

Osea que a partir de aqui el programa empieza a leer los argumentos del archivo batch original

De este modo tiene mucho sentido las lineas de debajo

6

Mirad que interesante esa linea, pone el tipico comando en batch para que no se muestre el nombre de las instrucciones “@echo off” y tambien el titulo, puede que en siguientes instrucciones encontremos mas pistas.

00401C94 . FF35 B0E44000 PUSH DWORD PTR DS:[40E4B0] ; /Path = “C:\Users\reversecoder\AppData\Local\Temp\ED26.tmp

Ahi vemos que el funcionamiento de este ejecutable es basicamente el siguiente:

1 Desempaqueta el archivo bat original en C:\Users\reversecoder\AppData\Local\Temp\ED26.tmp

2 Ejecuta el archivo con la informacion que tiene almacenada en los siguientes argumentos

00401D8E . 68 C5D14000 PUSH CrackMe.0040D1C5 ; |Arg1 = 0040D1C5 ASCII “b2eprogramname”

00401DD7 . 68 87D14000 PUSH CrackMe.0040D187 ; |Arg1 = 0040D187 ASCII “b2eprogramfilename”

00401E20 . 68 FFD14000 PUSH CrackMe.0040D1FF ; |Arg1 = 0040D1FF ASCII “b2eprogrampathname”

00401E59 . 68 FCD04000 PUSH CrackMe.0040D0FC ; |Arg1 = 0040D0FC ASCII “b2eprogramshortname”

00401E9F . 68 74D04000 PUSH CrackMe.0040D074 ; |Arg1 = 0040D074 ASCII “b2eincfilepath”

00401ECA . 68 32D14000 PUSH CrackMe.0040D132 ; |Arg1 = 0040D132 ASCII “b2eincfilecount”

00401EEA . 68 A4D04000 PUSH CrackMe.0040D0A4 ; |Arg1 = 0040D0A4 ASCII “b2etempfile”

Bueno ahora que sabemos donde droppea el archivo bat, vamos a ira ver como funciona

 

8

Que raro, nos esta devolviendo un archivo vacio, vamos a ejecutarlo directamente sin el olly a ver que pasa

Efectivamente de nuevo droppea en una nueva carpeta, en este caso la llama FD3.tmp

9

Ahora si tenemos el archivo buscado, tenemos el usuario y la contraseña correctos en texto plano.

Hacemos unos ligeros cambios para logearnos como reversecoder y…

0

 

Hasta la proxima.

 

 

x-LOCKS Crackme | C++ | Facil

En esta ocasion resolvere un crackme que tenia en el disco duro desde hace unos meses, es especial ya que no debemos parchear un serial o combinacion de nombre + contraseña, si no que debemos hacer que cambie la informacion del textbox que nos dice unregistered a registered, qui estan las instrucciones que nos enseña el crackme.

1

Eso lo muestra en el boton “about/rules”, si pulsamos OK simplemente se cierra, asique de entrada no tenemos referencias sobre la zona que buscamos.

Vamos a abrirlo en el ollydbg y nos fijamos que esta comentado el codigo, esto nos facilita mucho las cosas

Esta zona nos interesa

0040109D . 68 33344000 PUSH X-LOCK~1.00403433 ; ASCII “Here starts the test for the registration”
004010A2 . 8D05 10304000 LEA EAX,DWORD PTR DS:[403010]
004010A8 . 3D 12304000 CMP EAX,X-LOCK~1.00403012
004010AD . 74 0A JE SHORT X-LOCK~1.004010B9
004010AF . C705 0C304000 >MOV DWORD PTR DS:[40300C],0
004010B9 > 68 5D344000 PUSH X-LOCK~1.0040345D ; ASCII “Here ends the test for the registration”

Nos dice que ahi esta el test de registro y vemos que en 004010AD tenemos un salto condicional de si es equivalente… Vamos a cambiarlo por un JNE.

Otra zona que nos interesa es esta ya que vemos en la zona ASCII que si pasamos por 004010F6 nos deberia cambiar el texto a “fullversion”. Como tiene un salto condicional tipo JNE (JNZ) que hace que nos lo pasemos le cambiaremos la direccion del salto a 004010F6

004010EE . 75 15 JNZ SHORT X-LOCK~1.00401105
004010F0 . 8D05 35304000 LEA EAX,DWORD PTR DS:[403035]
004010F6 . 50 PUSH EAX ; /Text => “Fullversion”
004010F7 . FF35 4C304000 PUSH DWORD PTR DS:[40304C] ; |hWnd = NULL
004010FD . 8D05 C8114000 LEA EAX,DWORD PTR DS:[4011C8] ; |
00401103 . FFD0 CALL EAX ; \SetWindowTextA
00401105 > A1 0C304000 MOV EAX,DWORD PTR DS:[40300C]

Asi deberia quedar:

004010EE 75 06 JNZ SHORT X-LOCK~1.004010F6

Sigue el codigo y nos encontramos con otro salto JNE

0040110D . 75 15 JNZ SHORT X-LOCK~1.00401124
0040110F . 8D05 41304000 LEA EAX,DWORD PTR DS:[403041]
00401115 . 50 PUSH EAX ; /Text => “Registered”
00401116 . FF35 50304000 PUSH DWORD PTR DS:[403050] ; |hWnd = NULL
0040111C . 8D05 C8114000 LEA EAX,DWORD PTR DS:[4011C8] ; |
00401122 . FFD0 CALL EAX ; \SetWindowTextA

0040110D . 75 15 JNZ SHORT X-LOCK~1.00401124 Esta linea nos dice que si no es equivalente se salte a 00401124 y no cambie el valor de la caja de texto de Unregistered A registered, y nosotros queremos que precisamente  haga eso, asi que redireccionamos el salto a 00401115

Seguimos bajando y nos encontramos las siguientes lineas

00401124 > EB 78 JMP SHORT X-LOCK~1.0040119E
00401126 > 837D 0C 10 CMP DWORD PTR SS:[EBP+C],10
0040112A . 75 07 JNZ SHORT X-LOCK~1.00401133
0040112C . E8 2A000000 CALL X-LOCK~1.0040115B
00401131 . EB 6B JMP SHORT X-LOCK~1.0040119E
00401133 > 837D 10 65 CMP DWORD PTR SS:[EBP+10],65
00401137 . 75 1C JNZ SHORT X-LOCK~1.00401155
00401139 . 6A 00 PUSH 0 ; /Style = MB_OK|MB_APPLMODAL
0040113B . 8D05 19304000 LEA EAX,DWORD PTR DS:[403019] ; |
00401141 . 50 PUSH EAX ; |Title => “X-Locks crackme for newbies”
00401142 . 8D05 54304000 LEA EAX,DWORD PTR DS:[403054] ; |
00401148 . 50 PUSH EAX ; |Text => “Lockless presents:
X-Locks crackme for newbies

Welcome to my first crackme! 🙂
There are 3 ways to make this prog to fullversion,
and there are 3 ways to register this program!
If you’re a good cracker, try to crack the 2nd che”…
00401149 . 6A 00 PUSH 0 ; |hOwner = NULL
0040114B . 8D05 BC114000 LEA EAX,DWORD PTR DS:[4011BC] ; |
00401151 . FFD0 CALL EAX ; \MessageBoxA
00401153 . EB 49 JMP SHORT X-LOCK~1.0040119E

00401124 > EB 78 JMP SHORT X-LOCK~1.0040119E esta linea nos manda directos al final del codigo, necesitamos redireccionar ese salto, lo haremos a la direccion 0040117A que es la zona donde nos interesa ir

0040117A |. 6A 00 PUSH 0 ; /Style = MB_OK|MB_APPLMODAL
0040117C |. 8D05 0B334000 LEA EAX,DWORD PTR DS:[40330B] ; |
00401182 |. 50 PUSH EAX ; |Title => “Congratulations!”
00401183 |. 8D05 1C334000 LEA EAX,DWORD PTR DS:[40331C] ; |
00401189 |. 50 PUSH EAX ; |Text => “You’ve cracked my 1st crackme!! 😉

Mail me your cracked .exe, a tut is welcome!
I think you’re able to crack my 2nd crackme
when I release it, and: It’ll be harder to crack!”
0040118A |. 6A 00 PUSH 0 ; |hOwner = NULL
0040118C |. 8D05 BC114000 LEA EAX,DWORD PTR DS:[4011BC] ; |
00401192 |. FFD0 CALL EAX ; \MessageBoxA

Debe quedarnos asi en el ollydbg

2

Guardamos el nuevo binario y comprobamos

3

Nos muestra este mensaje al abrirlo, pero porque no nos sale la ventana de antes poniendo Registered y Fullversion si lo hemos parcheado para que asi sea? Facil, el motivo es el ultimo salto que hemos hecho, si no hubieramos tocado esa linea nos mostrarioa la ventana pero el crackme estaria incompleto porque el autor nos pide las tres cosas.

4

Ahi esta

descarga

Eso es todo.