domingo, 16 de octubre de 2011

Fac sapias et liber eris

Hace ya mas de 15 años que +ORC nos dijo: "the only way to hack and crack correctly is to be more a software historian than a programmer" (lección 8.1). Yo lo recuerdo porque me enseñó que vale la pena reversar versiones viejas de una aplicación para entender mejor una versión actual.

Como corolario, puedo hoy agregar que tambien se justifica reversar parches viejos... he visto que alguna gente reversa los parches de microsoft para escribir gusanos... y he oido historias de grupos de reversers que se roban los proyectos entre ellos... :P asi son los niños...

Escenario: Se tiene licencia sobre un software. La licencia permite instalar en dos equipos. Durante la instalacion, cada maquina genera dos codigos de instalacion que el usuario debe enviar a la casa desarrolladora. La casa verifica el numero de licencias en uso y envia dos codigos nuevos que permiten activar el software. Si ya se ha instalado en dos equipos no te envian los codigos de activacion y debes desinstalar una de las copias. Al desinstalar se generar dos codigos de desactivacion. Los codigos de desactivacion se envian a la casa desarrolladora. La casa verifica la desactivacion y libera un cupo de licencia. El ciclo empieza de nuevo.

El sistema no es seguro, desde luego, creo que bastaria con instalar en una maquina virtual y sacar copias de la misma... pero mas importante aun... revela algunas cosas sobre el desarrollador, y la mas importante es que piensa de forma rara.. para que dos codigos en lugar de uno (mas largo si se quiere)?

Problema: uno de los equipos se estropea. tan estropeado que es necesario formatear y ese cupo ya no es usable, ni es posible generar codigos de desinstalacion. la casa debe tener un protocolo para resolverlo. seguramente no es un problema. pero tomara un par de dias...

el software es usado por un estudiante de posgrado a quien le quedan solo un par de dias para entregar. el estudiante habla con su profesor. el profesor le presta su portatil que tiene la otra licencia y todos felices... pero, si el profesor esta fuera del pais, el estudiante debe llamar a su reverser de confianza...

La meta es rehabilitar una instalacion en el menor tiempo posible... y bajo esa premisa preferimos buscar en la red si alguien ya ha resuelto de alguna forma el problema. hay un ejecutable crackeado para la version 1.09, necesitamos portalo a la 1.12.0070 o talvez el instalador de la 1.09... buscando en la pagina de la casa encontramos que puede descargarse la 1.11 o la 1.12, las demas no estan listadas... pero nadie puede culparnos por intentar, asi que copiamos la ruta de la 1.11 y cambiamos el link para buscar una hipotetica 1.10... funciona... buscamos la 1.09 y funciona.... que algo no este listado en la pagina de descargas no significa que no este disponible para descarga....

se instala la 1.09 en maquina virtual, se prueba el binario crackeado y el sistema funciona... pero seria algo irresponsable ejecutarlo en una maquina real sin analizar el crack, no? vamos a comparar cambios cuando nos encontramos con una diferencia significativa de tamaño... desde luego... en algun momento alguien decidio que era mejor suministrar binarios parchados que suministrar parches... y si el binario pesa pues se empaqueta, no? fue una mala decision, no hay duda... es en parte entendible si lo que se quiere parchar es un binario empaquetado, pero desde luego existen tecnicas para hacerlo directamente... recuerdo que lo hice hace mas de 10 años (y hoy con este proyecto descubri que ya hay herramientas automaticas)... en fin... descargar un identificador de firmas... es aspack 2.12... buscar unpackers... probar algunos... aspackdie parece ser el unico capaz de reconstruir correctamente la iat... y tenemos un _unpacked.exe funcional

uhmm... aun hay diferencias de tamaño... unos pocos miles de bytes... no importa... comparamos los volcados hexadecimal... aspackdie firmo el unpacked para confunfir mas... pasando la firma un par de cambios inocuos... valores donde habia antes ceros... mas firmas? uhm finalmente... tres bytes aqui... otros dos alla... en el hexadecimal reconozco un xor eax, eax... buena señal... otros tres bytes... otros dos... y termina el bloque de cambios,,, un buen tramo de binario sin cambios y luego un tramo de miles de bytes cambiados... voy a centrarme en estos 10 bytes... apunto el offset desensamblo y comparo listados... efectivamente, en estos bytes pasa algo, cambian los retornos de una funcion... reconozco un parche de principiante... puedo hacer los mismo en la mitad de bytes sin problemas... y dependiendo del valor de eax al entrar a la funcion, podria hacerlo solo en solo dos bytes... uhmm... no importa... no es un concurso... es claro que soy el mejor... triz me lo dijo...

edito el original de la 1.09... monto el parche de 10 bytes... funcional! optimizo el parche... 5 bytes... funcional! 2 bytes? uhm... no... si aparece como registrado pero las funciones no se habilitan... regreso a los 5... no es un concurso despues de todo...

5 bytes... portar el parche a la 1.12 y funciona... es valido esperar que funcione para la 1.11 y la 1.10 pero no vamos a descargarlo solo por probar... ya esta resuelto el asunto... no es un concurso, verdad? uhmm.. descargando...

bien.., una tecnica para un parche multiversion, necesito escribirlo... ya resolvimos la emergencia... porque necesito escribir el parche? y aun alcanzo a llegar al toque de las almas.... porque necesito escribirlo? es claro que no puedo hacerlo publico... nunca... descargando dUP2... generando parche via search & replace... uhmm... probando en cada version... pienso en todos los pobres estudiantes de posgrado con una fecha limite, un profesor ausente y una maquina estropeada... recuerdo lo que dijo la señora simpson sobre los estudiantes de posgrado "they're not bad people, they just made terrible life choices"... uhm...


[descargar crack para hydrus 1.xx] jajaj... no... no... me decido :P

pero si de verdad es una situacion de emergencia, lo que estas buscando es este patron:

75 15 8B 81 08 04 00 00 33 C9 8A 50 05 84 D2 0F 94 C1 8A C1 C2 04 00 83 F8 01 75 13 8B 91 08 04 00 00 33 C0 8A 4A 06 84 C9 0F 94 C0 C2 04 00 83 F8 02 75 15 8B 81 08 04 00 00 33 C9 8A 50 07 84 D2 0F 94 C1 8A C1 C2 04 00 83 F8 03 75 13 8B 91 08 04 00 00 33 C0 8A 4A 08 84 C9 0F 94 C0 C2 04 00 B0 01

y los cinco bytes que necesitas son estos:

EB ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? EB ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? EB ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? EB ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00


martes, 7 de junio de 2011

Defcon19 CTF Quals -- Binary Badness 100

Terminaron las quals para el CTF de la Defcon19, este año si nos apalearon.
terminamos con 400 puntos: 100 en binarios, 100 en una trivia retro y 200 de otro reto que resolvio nando aunque creo que ni el supo como (igual que me paso el año pasado con un reto de crypto al que le pase un string nulo)... en todo caso... estuvo duro... mucho mas que el año pasado...

pues bien, conseguimos los primeros 100 puntos del equipo con el binary100

Lo primero fue identificar el binario usando file:
rmolina@maybe-failed:~/Downloads$ file b100_6817e51fa3b60f176b56
b100_6817e51fa3b60f176b56: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
y desde ahi ya ejecutar
rmolina@maybe-failed:~/Downloads$ chmod +x b100_6817e51fa3b60f176b56
rmolina@maybe-failed:~/Downloads$ ./b100_6817e51fa3b60f176b56
./b100_6817e51fa3b60f176b56 [1-11|all]
veo que recibe un parametro que puede ser un numero o 'all'
rmolina@maybe-failed:~/Downloads$ ./b100_6817e51fa3b60f176b56 1
(aqui borre muchas lineas, pero bueno la salida formaba unas caritas, emoticones, pero las ultimas lineas ya nos ubican)
5KQdq2HN cr7f Y65 ComKCtm
ynin13b/ 1MOB wl6 +Z3gPOvg
GsuM6KtaQ pj2D yWjO A1a5Lm5r
myLQluWb5 3a8D XffO C/ofUzGUn
rdzH2bx7N+ 5u6C SQXA awT6CMHez
26TtDI4f3B nwaX y4y gBZBCyfxDd
rKMZAkT6XPo 7QDs D8zj iqgHh9dtOI
/2FZV4o9ahU 9hsB nIYH WxUq7Iovfaa
t9/3qyCMID6/ lUEMw UMMAAA==@ @@@@ @@@@@@@@@@@
@@@@@@@@@@@@ @@@@ @@ @@ @@@@ @@@@@@@@@@@@
@@@@@@@@@@@@@ @@@@ @@ @ @@@@ @@@@@@@@@@@@@
@@@@@@@@@@@@@@ @@@@@ @ @@ @@@@@ @@@@@@@@@@@@@
@@@@@@@@@@@@@@@ @@@@ @ @ @@@@@ @@@@@@@@@@@@@@
@@@@@@@@@@@@@@@ @@@@ @ @ @@@@@ @@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@ @@@@@ @ @@@@@ @@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@ @@@@@ @ @@@@@@ @@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@ @@@@@ @ @@@@@@ @@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@ @@@@@ @ @@@@@@ @@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@ @@@@@@ @ @@@@@@ @@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@ @@@@@@@ @@@@@@@ @@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ @@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@ @@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@ @@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
todas esas '@' tienen que ser un relleno y justo antes de ellas, un '==' nos hace pensar en un texto en base64
pero primero hay que quitar las arrobas, los espacios, y los saltos de linea:
rmolina@maybe-failed:~/Downloads$ ./b100_6817e51fa3b60f176b56 1 | tr -d '@ \n' | base64 -d > b100.1
rmolina@maybe-failed:~/Downloads$ file b100.1
b100.1: gzip compressed data, was "bin2-a", from Unix, last modified: Fri Apr 1 03:28:09 2011
y si usamos el parametro 2, obtenemos:
rmolina@maybe-failed:~/Downloads$ ./b100_6817e51fa3b60f176b56 2 | tr -d '@ \n' | base64 -d > b100.2
rmolina@maybe-failed:~/Downloads$ file b100.1
b100.2: gzip compressed data, was "bin2-b", from Unix, last modified: Fri Apr 1 03:28:09 2011
bin2-a y bin2-b son partes de un archivo gzip
me imagino que si se savan las 11 partes y se concatenan con cat, se obtiene el archivo gzip completo

pero preferi intentar con el parametro all
rmolina@maybe-failed:~/Downloads$ ./b100_6817e51fa3b60f176b56 all | tr -d '@ \n' | base64 -d > b100.all.gz

rmolina@maybe-failed:~/Downloads$ gunzip b100.all.gz
rmolina@maybe-failed:~/Downloads$ file b100.all
b100.all: 7-zip archive data, version 0.3
rmolina@maybe-failed:~/Downloads$ mv b100.all b100.all.7z

rmolina@maybe-failed:~/Downloads$ 7z e b100.all.7z
7-Zip 9.04 beta Copyright (c) 1999-2009 Igor Pavlov 2009-05-30
p7zip Version 9.04 (locale=es_CO.utf8,Utf16=on,HugeFiles=on,2 CPUs)
Processing archive: b100-all.7z
Extracting bin2
Everything is Ok
Size: 980647
Compressed: 514107
rmolina@maybe-failed:~/Downloads$ file bin2
bin2: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, not stripped
y ya tenemos un nuevo binario
para resumir, otra carita es ascii, pero esta es diferente...
en todo caso, tratamiento similar:
rmolina@maybe-failed:~/Downloads$ ./bin2 | tr -d '@ \n' | base64 -d
S0 S0RRY 41NT NUTH1N BUT 4 P34NUT
(ese texto sale muchas veces)
intento esa clave
no es
nos esta diciendo que vamos perdidos

despues de un rato se me ocurre que si aparecio bin2, y suponiendo que el incial que nos dan es bin1, puede haber otros escondidos...
intento pasarle parametros pero ninguno funciona.
finalmente, reviso con ltrace:
rmolina@maybe-failed:~/Downloads$ ltrace ./bin2 all
__libc_start_main(0x8048460, 2, 0xbff06284, 0x80484a0, 0x8048500
strcmp("all", "h3rr0m3y3n4m31zbr0br0gan") = -1
fprintf(0xb78784e0, "%s\n", " UzAgUzBSUlkgNDFOVCBOVVRIMU4gQlV"... UzAgUzBSUlkgNDFOVCBOVVRIMU4gQlVUIDQgUDM0TlVUIFMwIFMwUlJZIDQxTlQgTlVUSDFOIEJVVCA0IFAzNE5VVCBTMCBTMFJS
WSA0MU5UIE5VVEgxTiBCVVQgNCBQMzROVVQgUzAgUzBSUlkgNDFOVCBOVVRIMU4gQlVUIDQgUDM0TlVUIFMwIFMwUlJZIDQxTlQg
TlVUSDFOIEJVVCA0IFAzNE5VVCBTMCBTMFJSWSA0MU5UIE5VVEgxTiBCVVQgNCBQMzROVVQgUzAgUzBSUlkgNDFOVCBOVVRIMU4g
QlVUIDQgUDM0TlVUIFMwIFMwUlJZIDQxTlQgTlVUSDFOIEJVVCA0IFAzNE5VVCBTMCBTMFJSWSA0MU5UIE5VVEgxTiBCVVQgNCBQ
(y el resto del string que genera la carita)
pero con ese strcmp ya encontramos "h3rr0m3y3n4m31zbr0br0gan"
al pasar ese parametro sale un texto nuevo, una carita nueva, muchas pero muchas de esta cara en ascii...
bueno esta carita la reconozco, pero es irrelevante...
al final otra vez arrobas y repetimos el tratamiento
desde ahi, es cosa de identificar la salida, renombrar (algunos comandos requieren la extension correcta) y usar el descompresor adecuado...
resuta que usaron muchos descompresores diferentes... todos en cadena...
rmolina@maybe-failed:~/Downloads$ ./bin2 h3rr0m3y3n4m31zbr0br0gan | tr -d '@ \n' | base64 -d > nuevobin
rmolina@maybe-failed:~/Downloads$ file nuevobin
nuevobin: gzip compressed data, was "bin3", from Unix, last modified: Fri Apr 1 01:35:15 2011
rmolina@maybe-failed:~/Downloads$ mv nuevobin bin3.gz

rmolina@maybe-failed:~/Downloads$ gunzip bin3.gz
rmolina@maybe-failed:~/Downloads$ file bin3
bin3: lzop compressed data - version 1.030, LZO1X-999, os: Unix
rmolina@maybe-failed:~/Downloads$ mv bin3 bin3.lzo

rmolina@maybe-failed:~/Downloads$ lzop -d bin3.lzo
rmolina@maybe-failed:~/Downloads$ file bin3
bin3: compress'd data 16 bits
rmolina@maybe-failed:~/Downloads$ mv bin3 bin3.Z

rmolina@maybe-failed:~/Downloads$ uncompress bin3.Z
rmolina@maybe-failed:~/Downloads$ file bin3
bin3: gzip compressed data, was "bin3", from Unix, last modified: Thu Mar 31 09:10:38 2011
rmolina@maybe-failed:~/Downloads$ mv bin3 bin3.gz

rmolina@maybe-failed:~/Downloads$ gunzip bin3.gz
rmolina@maybe-failed:~/Downloads$ file bin3
bin3: ARC archive data, uncompressed
rmolina@maybe-failed:~/Downloads$ mv bin3 bin3.arc

rmolina@maybe-failed:~/Downloads$ arc -e bin3.arc
Extracting file: bin3
rmolina@maybe-failed:~/Downloads$ file bin3
bin3: XZ compressed data
rmolina@maybe-failed:~/Downloads$ mv bin3 bin3.xz

rmolina@maybe-failed:~/Downloads$ xz -d bin3.xz
rmolina@maybe-failed:~/Downloads$ file bin3
bin3: rzip compressed data - version 2.1 (276265 bytes)
rmolina@maybe-failed:~/Downloads$ mv bin3 bin3.rz

rmolina@maybe-failed:~/Downloads$ rzip -d bin3.rz
rmolina@maybe-failed:~/Downloads$ file bin3
bin3: gzip compressed data, from Unix, last modified: Fri Apr 1 01:10:06 2011
rmolina@maybe-failed:~/Downloads$ mv bin3 bin3.gz

rmolina@maybe-failed:~/Downloads$ gunzip bin3.gz
rmolina@maybe-failed:~/Downloads$ file bin3
bin3: POSIX tar archive (GNU)
rmolina@maybe-failed:~/Downloads$ mv bin3 bin3.tar

rmolina@maybe-failed:~/Downloads$ tar x bin3.tar
rmolina@maybe-failed:~/Downloads$ file bin3
bin3: lzop compressed data - version 1.030, LZO1X-999, os: Unix
rmolina@maybe-failed:~/Downloads$ mv bin3 bin3.lz

rmolina@maybe-failed:~/Downloads$ lzop -d bin3.lzo
rmolina@maybe-failed:~/Downloads$ file bin3
bin3: bzip2 compressed data, block size = 900k
rmolina@maybe-failed:~/Downloads$ mv bin3 bin3.bz2

rmolina@maybe-failed:~/Downloads$ bunzip2 bin3.bz2
rmolina@maybe-failed:~/Downloads$ file bin3
bin3: 7-zip archive data, version 0.3
rmolina@maybe-failed:~/Downloads$ mv bin3 bin3.7z

rmolina@maybe-failed:~/Downloads$ 7z e bin3.7z
7-Zip 9.04 beta Copyright (c) 1999-2009 Igor Pavlov 2009-05-30
p7zip Version 9.04 (locale=es_CO.utf8,Utf16=on,HugeFiles=on,2 CPUs)
Processing archive: bin3.7z
Extracting bin3
Everything is Ok
Size: 272781
Compressed: 274332
rmolina@maybe-failed:~/Downloads$ file bin3
bin3: ARJ archive data, v11, slash-switched, original name: , os: Unix
rmolina@maybe-failed:~/Downloads$ mv bin3 bin3.arj

rmolina@maybe-failed:~/Downloads$ arj e bin3.arj
ARJ32 v 3.10, Copyright (c) 1998-2004, ARJ Software Russia. [08 Mar 2011]
Processing archive: bin3.arj
Archive created: 2011-04-01 01:01:36, modified: 2011-04-01 01:01:36
Extracting bin3-a OK
Extracting bin3-b OK
Extracting bin3-c OK
3 file(s)

rmolina@maybe-failed:~/Downloads$ cat bin3-* > bin3
rmolina@maybe-failed:~/Downloads$ file bin3
bin3: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.32, stripped
finalmente! otro binario!

(por cierto, en el log faltaron algunas paradas para instalar via apt-get o para revisar el manual de los compresores que nadie conoce...)
lo ejcuto y:
rmolina@maybe-failed:~/Downloads$ chmod +x bin3
rmolina@maybe-failed:~/Downloads$ ./bin3
-=-=-=-=-=-=-=-=- Wh4t W1ll B3 R3v34l3d? -=-=-=-=-=-=-=-=-
hey bro, you're cool bro. don't ever change bro! you're such a bro, bro!
-=-=-=-=-=-=-=-=- Wh4t W1ll Be R3v34l3d? -=-=-=-=-=-=-=-=-
si!!!
la bandera!
la ensayamos... y no...
no es!

no lo puedo creer...
vuelvo a ejecutar...
rmolina@maybe-failed:~/Downloads$ ./bin3
-=-=-=-=-=-=-=-=- Wh4t W1ll B3 R3v34l3d? -=-=-=-=-=-=-=-=-
why be professional when you can be brofessional?
-=-=-=-=-=-=-=-=- Wh4t W1ll Be R3v34l3d? -=-=-=-=-=-=-=-=-
que?

rmolina@maybe-failed:~/Downloads$ ./bin3
-=-=-=-=-=-=-=-=- Wh4t W1ll B3 R3v34l3d? -=-=-=-=-=-=-=-=-
!y3wt4w7k1n2m3? 3y3s3dy3wt4w7k1n2m3?
-=-=-=-=-=-=-=-=- Wh4t W1ll Be R3v34l3d? -=-=-=-=-=-=-=-=-

rmolina@maybe-failed:~/Downloads$ ./bin3
-=-=-=-=-=-=-=-=- Wh4t W1ll B3 R3v34l3d? -=-=-=-=-=-=-=-=-
2r98hdij23r98hdsfkjb23r9hdfkj39
-=-=-=-=-=-=-=-=- Wh4t W1ll Be R3v34l3d? -=-=-=-=-=-=-=-=-

rmolina@maybe-failed:~/Downloads$ ./bin3
-=-=-=-=-=-=-=-=- Wh4t W1ll B3 R3v34l3d? -=-=-=-=-=-=-=-=-
canthisbethekeybecauseitissuchalongstringandddteklikeslongstrings?
-=-=-=-=-=-=-=-=- Wh4t W1ll Be R3v34l3d? -=-=-=-=-=-=-=-=-

joder... que despiste...
banderas falsas...
salen al azar...
ahi perdi un buen rato...
me salieron mas de 30 diferentes

pero finalmente decidi listar las cadenas con strings:
rmolina@maybe-failed:~/Downloads$ strings bin3
PTRhP
<[^_]
<8#}
(y la lista es larguisima)
[^_]
[^_]
(pero despues de muchas cadenas aparecen las soluciones falsas)
Th1s1zt3hK3yk3yk33H33H33H33.N0t!
t00rongD1DNTg1ve
canthisbethekeybecauseitissuchalongstringandddteklikeslongstrings?
l33tsp33k1z0ut.RealTalkIsIn.
h1tth3r04dj4ck3ndd0nty3wc0m3b4ckn0m0ren0m0R3n0M0R3N0M0R3!
k3ysk3yst3hmm4g1c4lfr3wtthm0r3y3we4tth3mt3hm0r3y3wr00t
5tunt1n1z4h4b1tput171nth3a1r
! is i upside down!i!i!
A complete statement can also be the key to victory.
This is the key.
(lol, esa fue la mejor)
.key the is This
Can y3w feel it coming in the air tonight?
Random thoughts give way to random problems give way to random solutions
Lorem Ipsum is a bitch.
!y3wt4w7k1n2m3? 3y3s3dy3wt4w7k1n2m3?
asdfhasdkfjhasfkjhasfjasdkfjhasdfkjhasfkh
2r98hdij23r98hdsfkjb23r9hdfkj39
8377e19ab2c48f5f70021d6ed92937cc520c3ad1
e9b1b3124eedf6e88a40b0f240b19b8f
7cf0564cb453a9186431ee9553f7f935
84ee6f2004d8dfc1a864012edf6f92a7802d60b2
you are what you don't root
Why don't you make like a tree and.. get outta here?
It's already mutated into human form, shoot it!
if it makes a difference, they make a purse that looks like a vagina
it's better to live one day as a bro than a thousand years as a douchebag
why be professional when you can be brofessional?
hey bro, you're cool bro. don't ever change bro! you're such a bro, bro!
a list is only as strong as its weakest link
As Lord Chesterfield said of the generals of his day, 'I only hope that when the enemy reads the list of their names, he tremelbes as I do.'
th3r3 wuz 4 f4m1l33 uv 4r15t0cr4tz
1f y3w c4n't 41m j0ur p1$$ 1n d4 t01l3t l1k3 4n 4dult, s1t d0wn & p1$$ l1k3 4 b1zn44zzzzzzzzzt1ch
(todas esas me salian al azar)
TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVs aXQsIHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvc mUgbWFnbmEgYWxpcXVhLiBVdCBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkI GV4ZXJjaXRhdGlvbiB1bGxhbWNvIGxhYm9yaXMgbmlzaSB1dCBhbGlxdWlwIGV4IGVhIGNvb W1vZG8gY29uc2VxdWF0LiBEdWlzIGF1dGUgaXJ1cmUgZG9sb3IgaW4gcmVwcmVoZW5kZXJpd CBpbiB2b2x1cHRhdGUgdmVsaXQgZXNzZSBjaWxsdW0gZG9sb3JlIGV1IGZ1Z2lhdCBudWxsY SBwYXJpYXR1ci4gRXhjZXB0ZXVyIHNpbnQgb2NjYWVjYXQgY3VwaWRhdGF0IG5vbiBwcm9pZ GVudCwgc3VudCBpbiBjdWxwYSBxdWkgb2ZmaWNpYSBkZXNlcnVudCBtb2xsaXQgYW5pbSBpZ CBlc3QgbGFib3J1bS4K
(esta anterior es un bloque en base64 que te da esperanzas.... pero no... es solo un lorem ipsum...)
-=-=-=-=-=-=-=-=- Wh4t W1ll B3 R3v34l3d? -=-=-=-=-=-=-=-=-
-=-=-=-=-=-=-=-=- Wh4t W1ll Be R3v34l3d? -=-=-=-=-=-=-=-=-
(se acabaron?)
FATAL: kernel too old
FATAL: cannot determine kernel version
/dev/full
/dev/null
set_thread_area failed when setting up thread-local storage
unexpected reloc type in static binary
LIBC_FATAL_STDERR_
(y asi nos seguimos)
of Verneed record
RTLD_NEXT used in code not dynamically loaded
stack smashing detected
*** %s ***: %s terminated
zPLR
Where we're going we don't need... roads.
CAk[S
la vieron?
claro... asi ya es facil....

pero solo por darles el dato:
rmolina@maybe-failed:~/Downloads$ strings bin3 | wc -l
1706
1706 strings para inspeccionar...

creanme, no fue facil verla, pero ahi estaba, en un punto facil de encontrar...
porque cuando al final la vi, de una vez pense: "esta nunca me salio, que hace por aca? sera?"
y claro

Where we're going we don't need... roads.

FIN :)

bueno... un BONUS:

logre hacer otros 100 puntos para el equipo resolviendo un problema retro:

____ ___ ______!

si, solo eso decia!

no le veia pinta de nada...
hasta que hablando con rafarevert, me dijo: "eso debe ser un ahorcado"
algo como "fuck the defcon"

y claro ahi si la vi de una:
hack the planet
ya no recuerdo si la respuesta incluia el bang (!) al final o no

uhmm... eso si es retro de verdad :)