HackIt! 2013. Level 5 (y II)

Sólo nos queda arreglar un poco el método de cifrado:

  public byte[] applyCrypt(byte[] data)
  {
    this.seed = this.initial_seed;
    byte[] tmp46_44 = data;
 
    for (int i = 0; i < data.length; i++) {
      this.seed = ((1664525L * this.seed + 1013904223L) % 32L);
      byte mask = (byte)(int)(this.seed & 0xFF);
        tmp46_44[i] = ((byte)(tmp46_44[i] ^ mask));
    }
    return tmp46_44;
  }

Cifrando TestClass1.class con ese método debería darnos exactamente TestClass1.clazz… pero no lo hace :-O Pasando un md5 sobre nuestro .clazz y el que nos pasan en el level, vemos que son distintos. Aquí nos quedamos un tanto desconcertados, pero @ochoto resolvió: el problema es la semilla… no es la que nos dan (4919) sino otro número primo. ¿Cuál? Aquél que nos permita ejecutar applyCrypt sobre TestClass1.class y nos devuelva exactamente el mismo TestClass1.clazz que el fichero de ejemplo (o viceversa, recordemos…).

Una vez conseguido, basta con aplicar applyCrypt() a PasswordReveal.clazz, con lo que conseguiremos PasswordReveal.class. Descompilando con jd-gui obtendremos el ansiado password al siguiente nivel.

UPDATE 09/08/2013: no dejéis de visitar el blog de cymo, el autor de la prueba, para ver en detalle la solución «ortodoxa» de este nivel.

5 comentarios en «HackIt! 2013. Level 5 (y II)»

  1. Este nivel se suponía que no se podía resolver así, por ser la semilla de 64 bits. Pero, por lo que veo, cymo hace un %32 que destruye la (poca) seguridad de todo el sistema y lo hace evidentemente bruteforceable.

    Por lo que veo voy a tener que auditar los niveles que me pasa la gente… este pasa de 64 bits de key a 5, el de abeaumont tenía un XOR tan sencillo que no os hizo falta entender el nivel, el de Spectrum tenía la password en claro por algún tipo de cagada del emulador… y luego claro, viene DiarioLinux y se los pasa sin de verdad «pasarselos». 😛

  2. @marcan hey! que nos costó sangre, sudor y lágrimas ir «rompiendo» los juguetes que nos poníais en el medio 😛 Es más, gracias a estos posts ¿lo que va a mejorar el hackit del año que viene? whoahaahahahaaaa…..

    PD: el level de Spectrum nos lo pasamos por la vía difícil/ortodoxa… y nos costó un buen porrón de horas (NavarParty es testigo… y el mail explicativo que te enviamos en la party también 🙂 Luego vimos que la pass salía con un strings a pelo y nos quedamos ojipláticos o_O por todo el tiempo que perdimos cuando era trivial «pasárselo sin de verdad pasárselo», que es lo que mola en la party, romper los juguetes que nos pone @marcan con estrategias «laterales» (luego ya habrá tiempo para diseccionar cada nivel como es debido en DL, jejeje… o al ganar el torneo también, pero eso todavía no nos ha ocurrido O:-)

  3. Después de la hackit estuve hablando con los de Navarpaty y con w0pr, para ver quien había hecho el nivel de Spectrum, y ver cómo lo habían atacado (me interesaba saber si habían entendido por qué ocurría lo que ocurría; pokes en rom, calculos erroneos, y divisiones entre 0 sin errores). Es verdad que la pass estaba en el archivo .dsk, por un error del emulador, pero todos los grupos lo desecharon como password posible, por ser tan extraña. Aun con todo quizás tenía que haber implementado alguna protección para que cualquier inyección de código hubiera petado todo.

  4. Buenas,

    vengo a arrojar un poco de luz a este fiasco-level 😉

    Primero: el level era un refrito del del 2012, cambiando algunas condiciones de partida. Es más, originalmente ESTE iba a ser el planteamiento del level 2012, pero lo acabé cambiando de orden. 😉 De un año para otro «me olvidé» de mejorar ese aspecto de seguridad.

    Segundo: con o sin el mod 32, nunca uses un generador lineal congruente como generador criptográfico. Aunque sea para un hackit 😉

    Tercero: el nivel que le envié a marcan, tenía varias distribuciones posibles (¿por qué creeis que hay un paquete por ahí que se llama entregable difícil?). Él eligió una de ellas, pero podía haber elegido otra aún más compleja. Y tendríais que haber usado otro enfoque. A ver si saco un rato y lo publico en mi blog y os lo hago saber.

    Pretendía ser un nivel sencillo, con una vulnerabilidad obvia. Sinceramente, me alegro de que lo resolvierais por una vía diferente, que no es la que se esperaba.

    Nos vemos en matrix.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.