Out Of Bounds Exception!

Mi lugar de irreflexión y algo de programación

Archivos mensuales: junio 2011

El “exposed” de la consulta médica

Es curioso ver en las películas el típico asalto a una compañía o algún tipo de organización mediante una mezcla de ingeniería social, habilidades de James Bond, algo de suerte y un simple pendrive USB: el espía en cuestión se cuela en la organización, probablemente fingiendo ser un magnate interesado en los productos que allí se ofrecen y consigue ser atendido por, si no el jefe de la compañía, algún otro jefecillo no mucho menos importante que, naturalmente, dispone de un PC en su despacho que, estoy seguro, tiene acceso a todos y cada uno de los datos de la compañía, sin escatimar en pijadas de seguridad.

Por supuesto el espía conseguirá, de algún modo, hacer que este “inocente” jefecillo se levante de su trono para ir a atender algún asunto que requiera su atención, probablemente simulando algún tipo de fallo de seguridad en el edificio o distrayendo la atención con alguna visita preparada. En cualquier caso dicho jefecillo saldrá de su despacho no sin antes dejar su ordenador y pantalla encendidos y, evidentemente, sin bloquearlo o, en caso de hacerlo, probablemente cualquier pintas con un “transcodificador con 17 GHz y 200 mil millones de chips” (o chipotes como diría mi profesor de Arquitectura de Computadores) podrá crackear la contraseña en menos de 5 segundos…

En cualquier caso, nuestro espía habrá accedido a la información que contiene ese PC y que, como ya dije, le permitirá acceder a TODA la información de la empresa y hasta controlar el termostato del despacho de Jose Antonio, que no le gusta el calor y pone el aire a tope cada mañana.

Bueno, yo no soy ningún espía, no suelo llevar pendrives USB encima todo el día (sólo el 40% del tiempo), tampoco voy colándome en organizaciones o empresas para intentar asaltar ningún sistema, aunque sí que se kárate, mira qué bien. El caso es que hace unas semanas tuve que ir a la consulta médica (más concretamente a la enfermería, pero no os preocupéis que estoy como un roble) y la verdad es que la situación que se me planteo no podía ser más… peliculera y cutre a la vez.

Resulta que la enfermería estaba ocupada, así que pasamos al despacho del enfermero/doctor en cuestión. Me senté en la típica camilla mientras él miraba sus cosas en el ordenador, que casualmente tenía perfectamente visible casi en frente de mí, por lo que podía ver fácilmente lo que estaba haciendo. No obstante no me gusta mirar a la gente mientras hace cosas en su ordenador, así que me distraje viendo la cantidad de documentos y papeles que tenía en su estantería (y no pude evitar preguntarme cuántos contendrían información sensible; qué le voy a hacer si soy curioso). El caso es que cuando terminó empezó a preparar el material oportuno y se dio cuenta de que le faltaban un par de cosas, así que con un “ahora vengo” salió de la consulta y subió unas escaleras… y allí me quedé yo: con una pila de documentos de vete tú a saber quién o qué en frente y un ordenador sin bloquear y con la pantalla encendida a mi derecha…

Obviamente no hice nada malo (y aunque hubiera tenido un USB con alguna “utilidad chula” tampoco, para qué mentir), pero sí que, en los 3 minutos y pico que estuvo fuera, se me ocurrieron infinidad de “trastadas” que podría haber hecho, ainss. Lo peor de todo es que, tras volver, tuvo que irse otros 2 minutos más a por otra cosa, dejándome con el pensamiento en la cabeza de que $deity definitivamente me estaba poniendo a prueba.

Los códigos WTF

En la vida de todo programador (ya sea Informático, Teleco, de FP o mi abuela dándole a la tecla) llega un momento en el que uno se embarca (o le embarcan) en algún tipo de proyecto más o menos grande en el que, inevitablemente, va a tener que reutilizar código ajeno y/o trabajar con otros compañeros. También existe la posibilidad de encontrarte esta situación en códigos ajenos que encuentras por ahí, ya sean tutoriales, ejemplos, PoCs (pruebas de concepto), como porno escrito en C… Aunque con estos últimos (los publicados en Internet, no el porno) es bastante menos común, ya que normalmente uno se lo piensa un par de veces antes de publicar algo, ¿no? =P

Se cumpla una, otra o las circunstancias que sean, el caso es que aparece cerca ese momento en el que te va a tocar modificar el código de otro (o no) y, muy probablemente, comprender qué hace (esto normalmente sí), y es en este momento en el que la tensión crece, la piel se te pone de gallina y rezas a los dioses que conoces para que no te toque a ti…

A mí me tocó hace poco, así que decidí recopilar unos cuantos más que fuese viendo y hacer una entrada sobre ello, que para algo el blog es mío 😀

  • El primero es un código en C que encontré en un ejemplo de inyección de código en procesos:
    BOOL st=TRUE;
    do
    {
        if(strcmp(pInfo.szExeFile, "test.exe")==0)
        {
            myPid=pInfo.th32ProcessID;
            break;
        }
        Process32Next(processList, &pInfo);
    }
    while(st!=FALSE);

    Obviando el hecho de que se le colaron algunos códigos HTML (incluido algún “<” y “>” en los include), el problema de este código es evidente: ¿para qué declarar un booleano que no usas?. Eso sin entrar a si es más o menos “elegante” el uso del break.

  • Este siguiente está en Java y es algo curioso:
    File f = new File (filename);
    if (f =! null){
        //...
    }

    Según mi parecer algunos programadores nos solemos poner algo paranoicos cuando llevamos muchas líneas de código escritas en un proyecto que no termina de funcionar, por lo que acabamos comprobando hasta lo más obvio, ¿cierto?

  • Más Java, este es de un tutorial de una librería con la que me he estado peleando últimamente:
    if(true) {
        //...
    }
    else {
        //...
    }

    Realmente no tengo nada que decir… podría entender que alguien escriba un código así si programa sobre algún IDE muy cutre o incluso con un simple editor de textos y, además, el proyecto en cuestión ha ido creciendo y esto lo ha implementado en varias fases. No obstante las risas te las echas igualmente cuando lo ves 🙂

  • Este es una aportación de mi amigo ccdg:
    public boolean containsStation(String station) {
        return stations == null ? null : stations.containsKey(station);
    }

    Este sí que es un verdadero código para decir “WTF??” ya que técnicamente no es posible convertir un null a un tipo de dato (ya sea boolean, int, float, o cualquiera, aunque sí a los objetos que los representan, como Boolean, Integer, etc.), no obstante parece ser que este programador se las ha apañado para “engañar” al compilador de Java y hacer que no detecte esta incompatibilidad de equipos, por lo que un código como el siguiente compilaría perfectamente, solo que tiraría un NullPointerException al ejecutarse:

    boolean a = true ? null : false;

    De hecho es curioso ver cómo un IDE como Eclipse nos señalará que “false” es código muerto, ya que siempre se va a cumplir que “true” es true, pero no se percatará de la asignación a no ser que sea demasiado obvia:

    boolean a = true ? null : null;

Y esto es todo amigos, espero que les hayan gustado y que no repitan ninguno en su trabajo =P