PDA

Ver la versión completa : Hacker Challenge 2007



Esk
03-09-2007, 22:08
¿Eres buen Hacker? Demuéstralo. El evento Hacker Challenge 2007 vuelve a premiar a los hackers más hábiles. El objetivo: lograr evaluar la eficiencia de varias medidas de seguridad. El premio: 50.000 dólares.

La idea de este singular concurso para todo tipo de personas con conocimientos en informática y seguridad llega de la mano de una empresa estadounidense que quiere tratar de medir la seguridad de sus propuestas.

La empresa permanece en el anonimato, y de hecho los pagos de los premios se realizarán a través del servicio PayPal también anónimamente. En la pasada edición los premios fueron de 15.000 dólares y consistió en romper la protección de tres códigos de seguridad bajo Linux. Esta vez las pruebas - dicen sus responsables - son más complejas y se ejecutarán sobre Windows.

Las tres fases son eliminatorias, y según se hayan pasado las primeras - y con qué nivel - se recibirá invitación para las siguientes. Si creéis que podéis lograr el objetivo, ya sabéis: demostradlo.

Fuente: The Inquirer.

clarinetista
03-09-2007, 22:31
Buena info Esk, lo lei también en Security Focus esta mañana :

Para más información:

http://www.hackerchallenge.org/

Los que mas "navegáis" el ingles podrías realizar alguna traduccioncilla.
Eso si, los resultados de las fases deben enviarse en perfecto ingles.
Suerte a todos

hystd
03-09-2007, 23:07
¿Alguien está participando? yo voy a intentar la primera prueba... ya iré comentando...

Saudos

rat
05-09-2007, 15:46
Yo estoy intentandolo, pero apenas se lo que hay que hacer...

hystd
05-09-2007, 19:19
Buenas!, he dedicado algunos ratillos, y bueno, primero te descargas el .zip, que contiene 4 ficheros (data.txt, goal.txt, readme.doc, final.exe).

Primero, si observas el .exe, lo llamas desde una consola, y ves que te salta un mensaje: "Missing password.txt - We apologize for the inconvenience", por lo que podemos deducir que debe existir este fichero (password.txt), en el mismo directorio. Si creas uno y escribes un password cualquiera, yo puse: "hackerchallenge", vuelves a lanzar "final.exe" desde la consola y observas el mensaje siguiente: "Incorrect password - We apologize for the inconvenience". Por lo que vemos que no vamos por mal camino... cabría pensar que si el password es de una cadena de no más de 6 o 7 caracteres, podríamos intentar fuerza bruta... Aunque no creo que paguen 4000€ para solucionarlo así...

Por otro lado, si debugeas "final.exe", manteniendo estos ficheros (password.txt también para poner un breakpoint justo en el mensaje en que me salta el "Invalid Password"...), crees haber visto la luz, pero no es así... ya que parece que la cabecera PE está comprimida/encriptada. (Observas muchos 00 00 00...), cuando debería empezar por un 4D 5A (MZ...).

Me acorde en mis tiempo de cracking xD, que el FileInspector te sacaba el tipo de empaquetamiento de un fichero binario... asi que sin más lo hice y me informó que el tipo de empaquetamiento es "PELOCknt 2.01". Así que me descargué un descompresor para este tipo, y se lo pasé: "Success. file has been unpacked to unpacked.exe".

Desensamblé nuevamente, y a partir de aquí es cuando llega lo verdaderamente interesante... xD

jejeje, un saludo

rat
05-09-2007, 22:18
Hola, hago este concurso principalmente para aprender algo de cracking, que no se casi nada. He intentado debugearlo y me ocurrio lo de los ceros. En vez del fileinspector me he descargado el RDG Packer detector, y aparece lo siguiente:

Compilador ------ Microsoft Visual C++
Detectado ------ Fake Ninja v2.0
Posible ------ Check IsDebuggerPresent
¿Que tengo que interpretar?
Gracias por la ayuda, creo que con esto amejorare en el campo del cracking.

Salu2.

hystd
05-09-2007, 23:35
Buenas! Si se me olvidó comentarlo... parece que llama a "IsDebuggerPresent" de kernell32.dll. Esto implica que el comportamiento del ejecutable "final.exe" será distinto (hará algo fuera de lo normal), cuando detecta la presencia de un debugger, esto es cuando lo desensamblamos. Una posible solución a ésto sería inyectar código externo (inyección dll) en esa API y así podríamos pasar por alto el debugger.

Si mal no recuerdo, había programas ya hechos que te hacían esta labor. Si usas ollydbg, para debugear existen plugins para ello, si no, siempre puedes programarte uno :).

Un saludo.

P.D.: Suerte ;), ahora lo tengo un poco de lado por falta de tiempo (examenes :s)

j8k6f4v9j
06-09-2007, 10:12
Yo en esto no puedo ayudar. Eso sí, animo a todos los que están intentándolo (4000 euros no están tan mal, además de la satisfacción).

PD: Suerte a todos los que estáis con exámenes. No sabía que es época ahora.

Salu2



http://img359.imageshack.us/img359/6631/celliigy4.pngKeep on Rollin' :mad:

gondar_f
06-09-2007, 12:08
Gracias j8 y suerte a todos los demás, yo lo hice ayer. Yo tampoco participare, pero a los que lo hagas suerte y que consigais el dinero...

Un Saludo

sorensic
07-09-2007, 01:15
:0= Bueno creo que esta es la oportunidad que muchos estabamos esperando, de hacer algo que nos guste sin que a ya saben quien les duela y nos hechen los perros jejejeje.. bueno Suerte Muchachos:p

editado (mails no)

hystd
08-09-2007, 03:57
Gracias a todos!!!

Ya tengo la clave que hay que poner en el fichero password.txt ^^

me felicita "Thank you..." y salen los números de gold.txt... supongo que eso será la segunda parte de la primera prueba... habrá que modificar el gold.txt? juasjuas ahora si que estoy perdido porque eso es dar palos de ciego... pueden significar cualquier cosa...

He aquí la salida capturada después de facilitar la clave en password.txt


Thank you.
1 3 10.9319
33 17 10 5 6 10 8 4
21.8638 178.136 1
1 7 9.02697
33 17 10 5 6 10 8 4
18.0539 181.946 1
9 3 14.8862
32 14 5 8 12 12 13 8
17.8634 102.137 2
11 3 11.0197
45 22 6 7 5 12 3 33
23.1964 187.304 1


Un saludo

j8k6f4v9j
08-09-2007, 04:36
Traduzco:

Fase 1 Objetivos
Esta actividad supone una prueba de seguridad. Tanto el software como las protecciones de software fueron desarrollados exclusivamente para en este propósito. No se han usado protecciones comerciales para el desarrollo de esta prueba.
Los participantes recibirán un binario protegido para Windows que produce una determinada salida al ser ejecutado. El fin de este concurso es alcanzar los dos siguientes objetivos:
Objetivo 1: Hallar mediante ingeniería inversa la fórmula matemática que produce como resultado el valor de salida "10.9319".
Objetivo 2: Eliminar la limitación sobre un campo de entrada de datos en el código de forma que los valores mayores que 210.5 sean tratados del mismo modo que los valores menores que 210.5.
La prueba se considerará superada cuando un participante alcance ambos objetivos; esto sólo será posible una vez vencidas las protecciones de software existentes.

Salu2



http://img359.imageshack.us/img359/6631/celliigy4.pngKeep on Rollin' :mad:

gondar_f
08-09-2007, 13:28
Según lo que entiendo de tu post j8 el Objetivo uno es sacar la formula usada en estás series:


1 3 10.9319
33 17 10 5 6 10 8 4
21.8638 178.136 1

Esta es la primera serie y en total ponen 4...

Pues tal como lo veo e imaginandome que la formulita no será de las fáciles de sacar, aunque a lo mejor con Taylor se podría aproximar, ya que con 4 resultados ya se puede hacer algo con Taylor... lo máximo es una formula equivalente con un margen de error del 8 o 9%, pero no sacar la formula exacta.

Asi, lo más fácil es buscar una CALL, llamada a subrutina y comprobar si que hace y así con todas... ya que está claro que si lo hace 4 veces y no siempre da el resultado adecuado debido a que recibe números (probablemente aleatorios), según los datos en el objetivo 2... la cosa es encontrar la función que recibe un dato de entrada y tiene que ser un dato en coma flotante... probablemente ahí también está la pista para encontrar por donde ande la función, ya que debe comprobar si un número es mayor de 210.5 y además así ya tienes localizado el objetivo para el segundo objetivo...

Juas menudo chollo...

Un Saludo

hystd
08-09-2007, 16:48
Bueno, las series suelen ser con números naturales. No reales... porque yo ahí veo: 10.9319, 21.8638, 178.136. Si fuera así como dices, la fórmula de la función que pasa por esos "puntos" se obtiene directamente interpolando... por Newton, Lagrange o como quieras. Taylor (McLaurin, si se aproxima en torno a x=0) lo que hace es aproximar una función a una serie de potencias (polinomio) de infinitos términos, en torno a un valor de x, cuya suma de estos infinitos términos da como resultado esta función, y cuyo intervalo de convergencia es el dominio de dicha función. Además no todas las funciones admiten desarrollo en serie de potencias...

Saludos

j8k6f4v9j
08-09-2007, 17:36
Tampoco dicen si la entrada es un solo valor, si son varios o si puede variar el número de valores, porque en cualquiera de esos casos sería también aplicable la comparación con 210.5. Lo más lógico es suponer en un primer momento que se trata de un solo valor de entrada, y en base a los resultados estimar si es una aproximación correcta o no.

Yo entiendo que, en caso de ser una sola entrada, un solo número tendría como salida toda la secuencia de números de cada serie tal y como la ha dividido gondar_f, y que va proporcionando la salida de abajo hacie arriba, siendo la cadena "Thank you" lo último en imprimir.

Lo que está claro es que yo no sabría expresar el sistema de ecuaciones adecuado, por ahora las matemáticas os las tendré que dejar a vosotros. xD

Salu2



http://img359.imageshack.us/img359/6631/celliigy4.pngKeep on Rollin' :mad:

gondar_f
09-09-2007, 20:17
hystd la formula te Taylor también sirve para interpolar, incluso tiene una ventaja, ya que es muy fácil calcular el margen de error con la de Taylor, algo que no es tan trivial con alguna de las otras que mencionas... La formula de Taylor tiene varios usos, aunque como bien dices, hay métodos más rapidos para obtener una interpolación. Pero se que se puede porque aun hace un par de años que curse Analisis Matemático y tenia un profesor obsesionado con la puta formula de Taylor (incluso escribiera un libro y no se que consiguiera resolver) y me tuve que liar con la condenada durante un cuatrimestre.

Pero como ya se comento, aqui no serviria de nada porque nos da una formula equivalente, y equivalente no dice que sea la misma fórmula, sino que que a mismo valor de X da el mismo valor de Y, pero no da más información de la formula en si, y teniendo en cuenta que normalmente, salvo que tengas muchos valores para provar, su aproximación es solo local (zona de prueba y zonas próximas)... pues no es la solución, solo te sirve para poder obtener valores aproximados en puntos que no conoces...

Por otro lado, la formula en si son más de una, por lo que pone el enunciado, ya que dice que antes del valor x se comporta de una forma y por encima de ese valor de otra, incluso lo que pide finalmente es que modifiques la función para que independientemente de si el valor es menos de x o superior se comporte siempre igual... que quiere decir eso, pues que es un sistema de programación lineal... que tampoco nos sirve de nada saverlo, ya que si se comprueba un valor de entrada fijo que tiene que haber un if...

Por cierto j8 acabas de tener una idea de puta madre, que por lo menos a mi no me había dado cuenta, la cadena "Thank you" puede ser una pista para hayar el comienzo de la función que realice las operaciones...

Resumiendo: Juas que chollazo, menos mal que ni me moleste en presentarme...

Un Saludo

hystd
09-09-2007, 22:45
Buenas!


hystd la formula te Taylor también sirve para interpolar, incluso tiene una ventaja, ya que es muy fácil calcular el margen de error con la de Taylor, algo que no es tan trivial con alguna de las otras que mencionas... La formula de Taylor tiene varios usos, aunque como bien dices, hay métodos más rapidos para obtener una interpolación. Pero se que se puede porque aun hace un par de años que curse Analisis Matemático y tenia un profesor obsesionado con la puta formula de Taylor (incluso escribiera un libro y no se que consiguiera resolver) y me tuve que liar con la condenada durante un cuatrimestre.

Taylor no sirve para este caso. Ya que Taylor no interpola una serie de puntos, sino que aproxima una función dada a una serie de potencias, es decir a un polinomio de orden n.

En este caso tu no dispones de la función, sino de una ristra de puntos.

Para obtener la "curva" que pase por estos puntos se recurre a una interpolación polinomial, usando por ejemplo los métodos que he comentado anteriormente. Taylor simplemente interpola a una función dada, entorno a un valor. Pero en este caso no dispones de esa función, sino de unos puntos. Si tuvieras la función, por ejemplo como bien dices a partir de un CALL, entonces si puedes usar Taylor para aproximarla mediante una serie de potencias de tantos términos como sea necesario para disminuir el error de aproximación... pero por desgracia sólo disponemos de los puntos.

Un saludo.

j8k6f4v9j
10-09-2007, 01:39
¿Pero qué ocurre con la entrada?

Tenéis los puntos, pero ¿y la entrada?

Quizá probando a pasar argumentos a la función cuente algo, aunque se comporte de forma diferente cuando se la está debugueando quizá no afecte a esta parte y dé algún tipo de error o suelte alguna pista. La salida la forma a partir de una entrada, no sólo con el password, la cadena puede servir de pista, pero muy probablemente sea clave averiguar de dónde obtiene la entrada, si de otro fichero, si como argumento, etc.

Salu2



http://img359.imageshack.us/img359/6631/celliigy4.pngKeep on Rollin' :mad:

gondar_f
10-09-2007, 13:15
hystd tienes razón, acabo de revisar libros y me cole, Taylor no sirve para este caso como dices, aunque hay una forma de hacerlo a partir de Taylor es muy compleja y es hacieno al revés la demostración del Metodo de Lagrange (haces Lagrange y a partir de él haces Taylor), pero el problema es que solo tiene una ventaja y es que te da en porcentaje de error (resto de Lagrange), ya que hay una relación directa entre el método de Lagrange y Taylor... pero como eso no nos sirve para nada en este caso pues lo mejor es usar el Método de Lagrange o el de Newton como tu bien dices, además para poder usar lo que yo decia previamente había que hacer Lagrange... se nota que hacia añitos que no tocaba nada de esto y falle miserablemente :(, gracias por sacarme del error hystd.

j8 yo tal como lo veo y teniendo en cuenta que esto:

1 3 10.9319
33 17 10 5 6 10 8 4
21.8638 178.136 1
1 7 9.02697
33 17 10 5 6 10 8 4
18.0539 181.946 1
9 3 14.8862
32 14 5 8 12 12 13 8
17.8634 102.137 2

Y si te fijas la segunda serie de numeros en los 2 primeros es igual:
33 17 10 5 6 10 8 4
deduzco, a lo mejor es mucho deducir, pero por algún sitio hay que empezar, que esta serie de cifras depende del primer número de cada experimento, ya que cuando se repite se repite la serie.
En cuanto al segundo número real, en los 2 primeros casos es exactamente el doble del primer numero real:
10.9319 x 2 = 21.8638, con lo cual deduzco que hay alguna relación directa.
El tercer número real también debe tener una relación directa, por lo menos con el segundo número real, y en que me baso, pues teniendo en cuenta la dispersión de los números fijaos en un detalle:
181.946 = 178.136 + 21.8638 - 18.0539
o lo que es lo mismo:
21.8638-18.0539= -178.136 + 181.946 y lo que más importante:
21.8638-18.0539= -178.136 + 181.946= 10.9319- 9.02697 x 2
con lo que tenos que los 3 números reales están relacionados.
Esto nos da varias pistas, entre ellas, que la diferencia entre uno y otro procede de un solo número (aunque este puede proceder de una operación como una suma, multiplicación...)
Ya tenemos identificados los números de donde surge toda la operación y son los 2 primeros.
Ahora tocaría deducir un punto intermedio y es sencillo, ya que varios teoremas nos indican que tiene que haber un punto intermedio. Yo voy ir a lo simple y voy a deducir el punto 1 5, que deduzco que debería estar en medio del 1 3 y el 1 7 aproximadamente, con lo cual debería ser algo así:
1 5 9.979435
33 17 10 5 6 10 8 4
19.9589 180.041 1
Si una vez ejecutada la función para 1 5 nos da una salida similar ya tenemos información para sacar las funciones.
Otras evidencias de que la dedución es correcta asta ahora:
21.8638 + 178.136 = 200 (aproximadamente, pero se debe a los decimales)
18.0539 + 181.946 = 200 (aproximadamente, pero se debe a los decimales)
Para la que se dedujo (1 5) también da, por lo cual es de suponer que la aproximación es correcta, con lo cual ya tenemos un dato deducido para provar la formula una vez que la obtengamos, incluso ya hemos relacionado una parte de los resultados.
Una última deducción, el último número entero (el último de la tercera linea) indica si se paso de 210.5 o no, si no se paso es 1, si se paso es 2.

Bueno no me hagais mucho caso, yo no participo y solo es una idea.

Un Saludo

j8k6f4v9j
10-09-2007, 13:51
Vaya, le has dado un buen "achuchón" al tema. Sólo un pequeñísimo inciso. Ya que
Objetivo 1: Hallar mediante ingeniería inversa la fórmula matemática que produce como resultado el valor de salida "10.9319". entonces la cifra cuyo valor es su doble no es el resultado de multiplicar ésta por dos, sino que ésta es el resultado de dividir la primera por dos.

Salu2



http://img359.imageshack.us/img359/6631/celliigy4.pngKeep on Rollin' :mad:

hystd
10-09-2007, 15:44
Buenas! Es una lástima que por falta de tiempo no hayamos conseguido nada, ya que hoy 10 de septiembre es el último dia para publicar la solución.

Viendo la evolución de los hilos y la capacidad de gondar_f y j8 sin haber participado, no ibamos para nada desencaminados. Aún así mañana veremos la solución.

Para colmo, hoy mismo me he dado cuenta que el fichero password.txt admite varios valores de entrada, pero siempre con el mismo patrón, así cualquiera de estos valores sería válido:


42
84
421
422
423
424
425
426
427
428
429
420
841
842
843
844
845
846
847
848
849
840
4211
4212
4213
4214
4215
4216
4217
4218
4219
4210
4221
4222
4223
4224
4225
4226
4227
4228
4229
4220
4231
4232
4233
4234
4235
4236
4237
4238
4239
4230
4241
4242
4243
4244
4245
4246
4247
4248
4249
4240
4251
4252
4253
4254
4255
4256
4257
4258
4259
4250
4261
4262
4263
4264
4265
4266
4267
4268
4269
4260
4271
4272
4273
4274
4275
4276
4277
4278
4279
4270
4281
4282
4283
4284
4285
4286
4287
4288
4289
4280
4291
4292
4293
4294
4295
4296
4297
4298
4299
4290
4201
4202
4203
4204
4205
4206
4207
4208
4209
4200
8411
8412
8413
8414
8415
8416
8417
8418
8419
8410
8421
8422
8423
8424
8425
8426
8427
8428
8429
8420
8431
8432
8433
8434
8435
8436
8437
8438
8439
8430
8441
8442
8443
8444
8445
8446
8447
8448
8449
8440
8451
8452
8453
8454
8455
8456
8457
8458
8459
8450
8461
8462
8463
8464
8465
8466
8467
8468
8469
8460
8471
8472
8473
8474
8475
8476
8477
8478
8479
8470
8481
8482
8483
8484
8485
8486
8487
8488
8489
8480
8491
8492
8493
8494
8495
8496
8497
8498
8499
8490
8401
8402
8403
8404
8405
8406
8407
8408
8409
8400


y así sucesivamente...

De ésto se puede deducir que un password es válido si empieza por 42 o por 84. :)

No obstante gracias a todos...

P.D.: gondar_f me has hecho recordar mis primeros años en la facultad con taylor y compañía jajaja... por lo menos de algo ha servido jejeje

Saludos

gondar_f
10-09-2007, 17:09
gondar_f me has hecho recordar mis primeros años en la facultad con taylor y compañía jajaja... por lo menos de algo ha servido jejeje
:D a mi también...

Otra vez se puede organizar algo e intentarlo de forma profesional en equipo.


entonces la cifra cuyo valor es su doble no es el resultado de multiplicar ésta por dos, sino que ésta es el resultado de dividir la primera por dos.
Coño j8 puede que acabes de dar en el clavo, más dado una idea...

Un Saludo

j8k6f4v9j
10-09-2007, 19:16
jeje, bueno, en mi caso lo único mostrado es la incapacidad :D Pero ha sido divertido ver el discurrir del hilo.

Salu2



http://img359.imageshack.us/img359/6631/celliigy4.pngKeep on Rollin' :mad: