reverse-engineering - seguridad - ingenieria inversa ventajas y desventajas
Historias de guerra de ingenierĂa inversa (13)
Lo más doloroso para mí fue para este producto en el que queríamos incluir una imagen en una Hoja de Cálculo de Excel (unos años antes de los estándares abiertos). Así que tuve que obtener y "entender" si tal cosa existe del formato interno para los documentos, también. Terminé haciendo una comparación Hex entre archivos con y sin la imagen para descubrir cómo ponerlo allí, además de trabajar en algunas pequeñas matemáticas endia ...
A veces no tiene el código fuente y necesita realizar una ingeniería inversa de un programa o una caja negra. ¿Alguna historia de guerra divertida?
Aquí está uno de los míos:
Hace algunos años tuve que volver a escribir un controlador de dispositivo para el que no tenía el código fuente. El controlador del dispositivo se ejecutó en una microcomputadora CP / M antigua y condujo una máquina de fotocomposición dedicada a través de un puerto serie. Casi ninguna documentación para la máquina de fotocomposición estaba disponible para mí.
Finalmente, pirateé un monitor de puerto serie en una PC DOS que imitaba las respuestas de la máquina de fotocomposición. Cableé la PC DOS a la máquina CP / M y comencé a registrar los datos que salen del controlador del dispositivo a medida que introduzco los datos a través de la máquina CP / M. Esto me permitió descifrar el apretón de manos y la codificación utilizados por el controlador del dispositivo y volver a crear uno equivalente para una máquina DOS.
Tuve que aplicar ingeniería inversa a una aplicación de procesamiento de video, donde solo tenía parte del código fuente. Me llevó semanas y semanas calcular el flujo de control, ya que seguía usando CORBA para llamarme a mí mismo, o ser llamado desde CORBA en alguna parte de la aplicación a la que no podía acceder.
Pura idiotez.
Bueno, esto no fue ingeniería inversa (bastante) sino un simple truco de hardware nacido de pura frustración. Fui gerente de TI para una región del servicio de telefonía celular de Southwestern Bell a principios de los 90. Mi departamento de TI careció de fondos suficientes y gastamos dinero en personas inteligentes en lugar de equipos.
Tuvimos una WAN entre las principales ciudades, utilizada exclusivamente para el servicio al cliente, con enlaces IP críticos. Nuestros jefes corporativos insistieron en que instalemos un sistema de monitoreo de red para notificarnos cuando las líneas se cayeron (no hay dinero por redundancia, pero gastamos dinero en fallas de manejo. Suspiro).
La solución recomendada FUERTEMENTE se ejecutó en una estación de trabajo SPARC y comenzó en $ 30K más el costo de una estación SPARC (alrededor de $ 20K en ese momento), que era una parte sustancial de mi presupuesto. No pude verlo, esto fue un desperdicio de $$. Así que decidí que un poco de piratería estaba en orden.
Tomé una PC vieja programada para destrucción y puse una copia de ProComm (¿recuerdas ProComm?) Y hice que hiciera ping a cada uno de los nodos requeridos a lo largo de la ruta (esta era una de las versiones posteriores de ProComm que contenía FTP y líneas en serie) KERMIT, etc.) Una pequeña lógica en la codificación desencadenó un mensaje de buscapersonas cuando no se pudo alcanzar un nodo. Ya lo había usado para improvisar un sistema de buscapersonas para nuestros técnicos, así que reutilicé el código del buscapersonas. La secuencia de comandos se ejecutó continuamente, enviando un ping una vez por minuto a través de cada uno de los enlaces críticos, y se bifurcó en el código del buscapersonas cuando no se devolvió un ping.
Duplicamos este sistema en cada ubicación crítica por un costo de menos de $ 500 y tuvimos una notificación muy rápida cuando un enlace se cayó. Próximo número: uno de nuestros primeros métodos para solucionar problemas fue el ciclo de encendido de nuestros enrutadores y / o servidores de terminales. Conseguí algunos controladores de acceso telefónico X10 y algunos interruptores de encendido de electrodomésticos X10. Debía saber el número de teléfono correcto y los tonos correctos para presionar, pero imprimimos una tarjeta trampa para cada técnico y la mantuvieron con su busca. Respuesta instantánea rápida! Uno de mis técnicos luego programó los teléfonos que todos teníamos que restablecer el equipo específico en cada sitio como un marcado rápido. ¡Una sola tecnología resuelve el problema!
Ahora la presentación de "le dije que sí".
Estoy almorzando con nuestro gerente de red corporativa en Dallas que está insistiendo en la compra del producto de administración de red basado en Sun. Me sale una página que dice que uno de nuestros enlaces está caído, y luego una segunda página. Dado que los mensajes de buscapersonas provienen de dos servidores diferentes, sé exactamente qué enrutador está involucrado (era una configuración, lo sabía de todos modos, ya que la tecnología en la reunión conmigo estaba en la cola para "bajar el enrutador" durante la comida, así podríamos presumir). Le muestro los mensajes del localizador al gerente y le pregunto qué haría para resolver este problema. Me mira con recelo, ya que aún no ha sido localizado con éxito por su sistema Solaris NMS que se supone que rastrea los enlaces críticos. "Bueno, supongo que será mejor que llames a un técnico y les pidas que reinicien el enrutador y vean si eso lo arregla". Me volví hacia el técnico que estaba almorzando con nosotros y le pedí que lo manejara. Sacó su teléfono celular (encima de la mesa esta vez) y presionó la marcación rápida que había programado para reiniciar el enrutador en cuestión. El teléfono marcó el interruptor X10, le dijo que apagara el enrutador, hizo una pausa de cinco segundos, le indicó que encendiera el enrutador y lo desconectó. Nuestra secuencia de comandos ProComm nos envió páginas que nos informaban que el enlace estaba respaldado dentro de los tres minutos de esta rutina. :-)
El gerente de la red corporativa estaba muy impresionado. Me preguntó cuál era el costo de mi nuevo sistema. Cuando le dije que tenía menos de $ 1K, fue apoplejía. Acababa de pedir un GRAN conjunto de la solución de administración de red Sun Solaris solo para las tareas que había ilustrado. Creo que él gastó algo así como $ 150K. Le dije cómo se hizo la magia y le ofrecí el guión de ProComm por el precio del almuerzo. TANSTAAFL. Me dijo que me compraría el almuerzo para mantener la boca cerrada.
Limpiando mis viejos cajones de discos y tal, encontré una copia del código - "Pingasaurus Rex" era el nombre que le había dado. Eso fue piratear en los buenos viejos tiempos.
Hace poco escribí una aplicación que descarga todo el contenido de un servidor Domino Webmail utilizando Curl. Esto se debe a que el subcontratista que ejecuta el servidor solicita unos cientos de dólares por cada solicitud de archivo.
Cambiaron su versión de webmail aproximadamente una semana después de que lanzara la aplicación para el departamento, pero lograron hacerlo funcionar de nuevo usando una gran cantidad de expresiones regulares y XML.
Una vez trabajé en una herramienta que reuniría información de inventario de una PC cuando se conectó a la red. La idea era hacer un seguimiento de todas las PC de su empresa.
Teníamos un nuevo requisito para admitir el sistema de red de Banyan VINES, ahora olvidado hace mucho tiempo, pero bastante bueno en el momento en que salió. No pude encontrar la forma de obtener la dirección MAC de Ethernet del adaptador de Banyan, ya que no había una API documentada para hacerlo.
Buscando en línea, encontré un programa que otro nerd de Banyan había publicado que realizó esta acción exacta. (Creo que almacenaría la dirección MAC en una variable de entorno para que pueda usarla en un script). Traté de escribirle al autor para averiguar cómo funcionaba su programa, pero o bien no quería decirme o quería una cantidad ridícula de dinero para la información (no recuerdo).
Así que simplemente encendí un desensamblador y desarmé su utilidad. Resultó que estaba haciendo una simple llamada al servidor, que era un código de función no documentado en la API de Banyan. Resolví los detalles de la llamada con bastante facilidad, básicamente estaba pidiendo al servidor la dirección de esta estación de trabajo a través de RPC, y el MAC formaba parte de la dirección de red de Banyan.
Luego simplemente envié un correo electrónico a los ingenieros de Banyan y les dije lo que tenía que hacer. "Oye, parece que la función de RPC número 528 (o lo que sea) devuelve lo que necesito. ¿Es seguro llamar?"
Los ingenieros de Banyan fueron muy buenos, verificaron que la función que había encontrado era correcta y que era bastante improbable que desapareciera. Escribí mi propio código nuevo para llamarlo y me puse en marcha.
Años más tarde utilicé básicamente la misma técnica para aplicar ingeniería inversa a un esquema de compresión no documentado en un formato de archivo que de otro modo estaría documentado. Encontré una herramienta de soporte poco conocida provista por la compañía (ahora desaparecida) que descomprimiría estos archivos y la ingeniería inversa. Resultó ser una variante muy sencilla de Lempel-Ziv aplicada dentro de la estructura de bloques de su formato de archivo. Los resultados de ese trabajo se registran para la posteridad en el código fuente de Wireshark , solo busca mi nombre.
Una vez, cuando jugaba Daggerfall II, no podía costear el Daedric Dai-Katana, así que edité en forma hexagonal el juego guardado.
Sin embargo, en serio, me las arreglé para quitar el control del dongle en la instalación de mis padres de AutoCAD con SoftICE hace muchos años. Esto fue antes de que Internet fuera grande. Él trabaja como ingeniero, así que tenía una copia legítima. Acababa de olvidar el dongle en su trabajo y necesitaba hacer algunas cosas y pensé que sería un desafío divertido. Yo estaba muy orgulloso después.
Allá por los años 90, olvidé mi contraseña de Compuserve. Tenía la versión encriptada en CIS.INI, así que escribí un pequeño programa para hacer un ataque y análisis de texto plano en un intento de aplicar ingeniería inversa al algoritmo de encriptación. 24 horas después, descubrí cómo funcionaba y cuál era mi contraseña.
Poco después, hice una limpieza y publiqué el programa como freeware para que los clientes de Compuserve pudieran recuperar sus contraseñas perdidas. El personal de soporte de la compañía con frecuencia referiría a estas personas a mi programa.
Eventualmente encontró su camino en algunos boletines electrónicos (¿los recuerda?) Y foros de Internet, y fue incluido en un libro alemán sobre Compuserve. Todavía está flotando por ahí en alguna parte. De hecho, Google me lleva directamente a eso.
Escribí un controlador para Atari ST que admitía tabletas de Wacom. Parte de la información de Wacom se puede encontrar en sus sitios web, pero aún así tuve que resolver muchas cosas por mi cuenta.
Luego, una vez que había escrito una biblioteca para acceder a las tablas de wacom (y una aplicación de prueba para mostrar los resultados), me di cuenta de que no había API para el sistema operativo (sistema de ventanas GEM) para colocar el cursor del mouse en alguna parte. Terminé teniendo que conectar algunas interrupciones en algo llamado VDI (como GDI en Windows), y tener mucho cuidado de no colgar la computadora adentro. Recibí ayuda (en forma de sugerencias) de los desarrolladores de una versión acelerada de VDI (NVDI), y todo estaba escrito en PurePascal. Todavía ocasionalmente tengo personas que me preguntan cómo mover el cursor del mouse en GEM, etc.
De hecho, tengo otra historia:
Unos años después de mi historia de "éxito" de FCopy, alguien me preguntó si podía descifrar el software de una máquina tragamonedas.
Esto fue en Alemania, donde casi todos los bares tenían uno o dos de ellos: arrojarías algo de dinero en un cuarto de los Estados Unidos, luego giraría tres ruedas y si tenías suerte con algún patrón, entonces tiene la opción de "duplicar o nada" su ganancia en la siguiente jugada u obtener la victoria actual. El objetivo de la jugada era intentar duplicar tu ganancia un par de veces hasta que te pusieras en el modo "serie" donde cualquier ganancia posterior, sin importar cuán insignificante, obtendría un gran pago (de aproximadamente 10 veces tu gasto por juego).
La dificultad era saber cuándo doblar y cuándo no. Para un "extraño" esto fue completamente al azar, por supuesto. Pero resultó que esas máquinas fabricadas en Alemania usaban simples tablas pseudoaleatorizadas en sus ROM. Ahora, si miraba la máquina jugar durante algunas rondas, podría averiguar dónde estaba este "puntero de tabla aleatorio" y predecir su próximo movimiento. De esta forma, un jugador sabría cuándo doblar y cuándo pasar, lo que lo llevará finalmente a la "serie de la gran ganancia".
Ahora, esto ya era algo común cuando esta persona se me acercó. Había una escena clandestina que tenía acceso a los ROM en esas máquinas, buscaba las tablas y creaba software para computadoras, como un C-64, para usarlo en la predicción de los próximos movimientos de la máquina.
Luego vino un nuevo tipo de máquina, que usó un algoritmo diferente: en lugar de usar tablas precalculadas, hizo algo más y ninguno de los crackers residentes pudo descifrarlo. Así que me acercaron, siendo conocido como una especie de genio desde mi fama de FCopy.
Así que obtuve los ROM. 16 KB, como de costumbre. No hay información sobre lo que hizo y cómo funcionó en absoluto. Yo estaba sólo. Incluso el código no parecía familiar (ya sabía 6502 y 8080). Después de cavar y preguntar, encontré que era un 6809 (que encontré que era la mejor CPU de 8 bits para existir, y que tenía analogías con el diseño de la CPU de 680x0, que era mucho más lineal que el desorden de instrucciones de la familia x86).
En ese momento, ya tenía una computadora 68000 (trabajé para la empresa "Gepard Computer", que construyó y vendió una máquina de este tipo, con su propio sistema operativo desarrollador, y todo) y se dedicaba a la programación de Modula-2. Así que escribí un desensamblador para el 6809, uno que me ayudó con la ingeniería inversa al encontrar subrutinas, saltos, etc. Lento Obtuve una idea del control de flujo del programa de la máquina tragamonedas. Eventualmente encontré un código que parecía un algoritmo matemático y caí en la cuenta de que este podría ser el código de generación aleatorio.
Como nunca tuve una educación formal en ciencias de la computación, hasta ese momento no tenía idea de cómo funcionaba un generador aleatorio típico utilizando mul, add y mod. Pero recuerdo haber visto algo mencionado en un libro Modula-2 y luego me di cuenta de lo que era.
Ahora podría encontrar rápidamente el código que llamaría a este randomgen y aprender qué "eventos" llevan a una iteración randomgen, lo que significa que sabía cómo predecir las siguientes iteraciones y sus valores durante un juego.
Lo que quedaba era descubrir la posición actual del randomgen. Nunca había sido bueno con cosas abstractas como el álgebra. Conocí a alguien que estudió matemáticas y también era programador. Cuando lo llamé, supo rápidamente cómo resolver el problema y cuestionó mucho sobre lo simple que sería determinar el valor inicial de randomgen. No entendí nada. Bien, entendí una cosa: el código para lograr esto tomaría mucho tiempo, y que una C-64 o cualquier otra computadora de 8 bits tomaría horas si no días.
Por lo tanto, decidí ofrecerle 1000 DM (que era mucho dinero para mí en ese entonces) si él podía escribirme una rutina de ensamblador en 68000. No tardó mucho y tuve el código que pude probar en mi 68000 computadora. Tardaba generalmente entre 5 y 8 minutos, lo cual era aceptable. Así que casi estaba allí.
Todavía se requiere una computadora portátil 68000 para llevar a la taberna donde se encuentra la máquina tragamonedas. Mi computadora Gepard claramente no era del tipo portátil. Afortunadamente, alguien más que conocía en Alemania produjo 68000 computadoras en una placa de circuito pequeña. Para E / S solo tenía comunicaciones en serie (RS-232) y un puerto paralelo (Centronics era el estándar de aquellos días). Podría conectar algunas batallas de bloques de 9V para que funcione. Luego compré una computadora de bolsillo Sharp, que tenía un teclado de goma y una pantalla de 32 caracteres de una sola línea. Funcionando con baterías, que era mi terminal. Tenía un conector RS-232 que conecté a la placa 68000. Sharp también tenía algún tipo de memoria no volátil, lo que me permitió almacenar el software de descifrado aleatorio de 68000 en Sharp, transferirlo bajo demanda a la computadora 68000, que luego calculó el valor de la semilla. Finalmente, tenía una pequeña impresora Centronics que imprimía en papel termo estrecho (que era del tamaño de lo que usan las cajas registradoras para imprimir recibos). Por lo tanto, una vez que los 68000 tuvieran los resultados, enviarían una fila de resultados para los próximos juegos en la máquina tragamonedas a Sharp, que los imprimió en papel.
Entonces, para vaciar una de estas máquinas tragamonedas, trabajarías con dos personas: empiezas a jugar, anotas sus resultados, una tienes el mínimo de juegos necesarios para el cálculo de la semilla, uno de ustedes iría al auto estacionado afuera, encienda Sharp, ingrese los resultados, la computadora 68000 sonaría durante 8 minutos, y salió una lista impresa de las próximas carreras del juego. Entonces, todo lo que necesitaba era esta pequeña hoja de papel, llévela a su amigo, que mantuvo la máquina ocupada, alinee los resultados anteriores con la impresión y no más de 2 minutos después se sintió "sorprendido" de ganar los 100 de todos los tiempos. serie. Luego jugaría estos 100 juegos, prácticamente vaciando la máquina (y si la máquina estaba vacía antes de que se jugaran los 100 juegos, tenía derecho a esperar a que se vuelva a llenar, tal vez incluso volver al día siguiente, mientras que la máquina estaba se detuvo hasta que regresaste).
Esto no era Las Vegas, así que solo obtendrías aproximadamente 400 DM de una máquina de esa manera, pero era dinero rápido y seguro, y fue emocionante. Algunos dueños de pubs sospechaban que hicimos trampas pero no tenían nada en contra de nosotros debido a las leyes de entonces, e incluso cuando algunos llamaban a la policía, la policía estaba a favor de nosotros).
Por supuesto, la compañía de tragamonedas pronto se enteró de esto y trató de contrarrestar, apagando esas máquinas particulares hasta que se instalaron nuevas ROM. Pero las primeras veces solo cambiaron los números de randomgen. Solo tuvimos que conseguir las nuevas ROM, y me llevó unos minutos encontrar las nuevas cifras e implementarlas en mi software.
Así que esto continuó por un tiempo durante el cual mis amigos y yo recorrimos bares de varias ciudades de Alemania en busca de esas máquinas que solo podíamos romper.
Sin embargo, el fabricante de máquinas aprendió a "arreglarlo": hasta entonces, el generador aleatorio solo avanzaba en determinados momentos predecibles, por ejemplo, algo así como 4 veces durante el juego y una vez más por presión del jugador "doble o nada" botón.
Pero luego finalmente lo cambiaron para que el randomgen sea sondeado continuamente, lo que significa que ya no podemos predecir el siguiente valor de semilla exactamente a tiempo para presionar el botón.
Ese fue el final de eso. Aún así, haciendo el esfuerzo de escribir un desensamblador solo para esta única grieta, encontrar las rutinas clave en 16KB de código de CPU de 8 bits, descifrar algoritmos desconocidos, invertir bastante dinero para pagar a otra persona para desarrollar código que no entendía , encontrar los elementos para una computadora portátil de alta velocidad que involucra la CPU "ciega" 68000 con Sharp como terminal y la impresora para la salida conveniente, y luego vaciar realmente las máquinas, fue una de las cosas más emocionantes que he hecho con mis habilidades de programación
Lea la historia de FCopy para el C-64 aquí:
En los años 80, el Commodore C-64 tenía una unidad de disquete inteligente, el 1541, es decir, una unidad externa que tenía su propia CPU y todo.
El C-64 enviará comandos al disco que a su vez los ejecutará por sí mismo, leyendo archivos, y luego, enviará los datos al C-64, por todo un cable serial proprio.
El manual para el 1541 mencionado, además de los comandos para leer y escribir archivos, que uno leería y escribiría en su espacio de memoria interna. Aún más emocionante fue que uno podía descargar el código 6502 en la memoria del disco y ejecutarlo allí.
Esto me enganchó y quise jugar con eso: ejecutar código en el disco. Por supuesto, no había documentación sobre qué código se podría ejecutar allí y qué funciones podría usar.
Un amigo mío había escrito un desensamblador en BASIC. y entonces leí todos sus contenidos de ROM, que eran 16KB de código de CPU 6502, y traté de entender lo que hace. El sistema operativo de la unidad era bastante sorprendente y tenía una IMO avanzada: tenía una especie de gestión de tareas, con comandos que se enviaban desde la unidad de comunicación al manejador de tareas de E / S de disco.
Aprendí lo suficiente como para entender cómo usar los comandos de E / S de disco para leer / escribir sectores del disco. En realidad, después de leer el libro de Apple 3.3 que explicaba todo el funcionamiento de su formato de disco y algos con gran detalle, fue de gran ayuda para comprenderlo todo.
(Más tarde supe que también podría haber encontrado información reservada en las unidades de disco 4032/4016 para los modelos Commodore de "negocios" que funcionaban bastante igual que el 1541, pero que no estaba disponible para mí como programador aficionado bastante desconectado en ese momento.)
Lo que es más importante, también aprendí cómo funcionaban las comunicaciones en serie. Me di cuenta de que las comunicaciones en serie, usando 4 líneas, dos para datos, dos para handshake, fueron programadas de manera muy ineficiente, todo en software (aunque hecho correctamente, usando el clásico handshaking en serie).
Así logré escribir una rutina de comunicaciones mucho más rápida, donde hice supuestos de temporización fija, usando tanto los datos como la línea de handshake para la transmisión de datos.
Ahora pude leer y escribir sectores, y también transmitir datos más rápido que nunca.
Por supuesto, hubiera sido genial si uno simplemente pudiera cargar un código en la unidad que acelera las comunicaciones, y luego usar los comandos normales para leer un archivo, que a su vez usaría las comunicaciones más rápidas. Sin embargo, esto no fue posible, ya que el sistema operativo en el disco no proporcionaba ningún gancho para eso (tenga en cuenta que todo el sistema operativo estaba en ROM, no modificable).
Por lo tanto, me preguntaba cómo podría convertir mis emocionantes hallazgos en una aplicación útil.
Habiendo sido programador durante un tiempo, lidiando con la pérdida de datos todo el tiempo (las cintas de música y los disquetes no eran muy confiables en aquel entonces), pensé: ¡Copia de seguridad!
Así que escribí un programa de copia de seguridad que podía duplicar un disquete con una velocidad nunca vista: la primera versión copió un disco de 170 KB en solo 8 minutos (sí, minutos), la segunda versión incluso en unos 4,5 minutos. Mientras que las aplicaciones antes que las mías tomaron más de 25 minutos. (Tenga en cuenta que Apple] [, que tenía su sistema operativo de disco ejecutándose directamente en Apple, con rápido acceso paralelo a datos, lo hizo todo en un minuto más o menos).
Y así nació FCopy para el C-64.
Pronto se hizo extremadamente popular. No como un programa de copia de seguridad como lo había pensado, sino como la opción principal para cualquiera que quiera copiar juegos y otro software para sus amigos.
Resultó que una simplificación en mi código, que simplemente omitiría sectores ilegibles, escribir un sector con un CRC incorrecto en la copia, eludió la mayoría de los esquemas de protección de copia utilizados entonces, haciendo posible copiar la mayoría de los discos que antes no se podían copiar.
Intenté vender mi aplicación y la vendí en realidad 70 veces. Cuando se publicitó en las revistas, alegando que copiaría un disco en menos de 5 minutos, los clientes lo llamarían y no lo creerían, "sabiendo mejor" que no se podía hacer, pero dándolo una oportunidad.
Poco después, otros comenzaron a realizar ingeniería inversa en mi aplicación y optimizarla, lo que hizo que las comunicaciones fueran aún más rápidas, lo que llevó a copiar aplicaciones que lo hicieron incluso en 1,5 minutos. Más rápido era difícil porque, debido a la cantidad limitada de memoria disponible en el 1541 y el C-64, había que intercambiar discos varias veces en la unidad de disco única para copiar los 170 KB de su contenido.
Al final, FCopy y sus sucesores optimizados fueron probablemente el software más popular en la C-64 en los años 80. Y a pesar de que no me pagó financieramente, aún me enorgullecía y aprendí mucho sobre ingeniería inversa, inutilidad de la protección anticopia y cómo se siente el estrellato. (De hecho, Jim Butterfield, editor de una revista C-64 en Canadá, contó a mis lectores mi historia, y pronto obtuvo un cheque por unos 1000 CA $ para mí, que la revista recogió de muchos usuarios agradecidos que enviaron 5 $ -cheques , que era una gran cantidad de dinero en aquel entonces para mí.)
No es una historia personal, pero sigue siendo una excelente lectura: desde el ojo de una tormenta legal, el hacker de televisión por satélite de Murdoch cuenta todo .
Cuando estaba en la escuela secundaria, introdujeron horarios especiales cada semana (había 3 horas si recuerdo correctamente) en los que tuvimos que elegir un salón de clases con un maestro para ayudar con cualquier pregunta sobre su tema. No, por supuesto, todos siempre quisieron pasar su tiempo en la sala de computadoras para jugar en las computadoras allí.
Para elegir la habitación en la que tendrías que estar, había una aplicación que monitoreaba cuántos estudiantes irían a cierta habitación, por lo que tenías que reservar tu lugar a tiempo o, de lo contrario, no había muchas opciones a dónde ir.
En ese momento siempre me gustaba jugar en las computadoras allí y ya había obtenido acceso de administrador, solo para esta aplicación que no me ayudaría mucho. Así que utilicé mi acceso de administrador para hacer una copia de la aplicación y llevarla a casa para examinarla. Ahora no recuerdo todos los detalles, pero descubrí que esta aplicación utilizaba algún archivo de base de datos de acceso ubicado en un recurso compartido de red oculto. Luego, después de tomar una copia de este archivo de base de datos, encontré que había una contraseña en la base de datos. Utilizando algunas herramientas de base de datos de acceso de Linux pude solucionarlo fácilmente y después de eso fue fácil importar esta base de datos en mi propio servidor mysql. Luego, a través de una simple interfaz web, pude encontrar detalles para que cada estudiante en la escuela cambiara sus máquinas tragamonedas y me promoviera a sentarme en mi habitación de elección cada vez.
El siguiente paso fue escribir mi propia aplicación que me permitiera seleccionar un estudiante de la lista y cambiar cualquier cosa sin tener que buscar su contraseña, que se implementó en unas pocas horas.
Aunque no es una historia tan impresionante como otras en este hilo, todavía recuerdo que fue muy divertido hacer para un niño de secundaria en aquel entonces.
Hace casi 10 años, recogí la edición de coleccionista de UFO / XCOM en la caja de gangas de una librería local, principalmente por nostalgia. Cuando volví a casa, me emocionó un poco que se hubiera trasladado a Windows (las versiones de DOS no se ejecutaban en win2k) ... y luego me decepcionó que tuviera gráficos distorsionados.
Estaba a punto de encogerme de hombros (bolsa de ganga y todo), pero luego mi amigo dijo "¿No has ... corregido el error ... el software antes?", Lo que llevó a una noche de beber mucha cola e ingeniería inversa mientras salgo con mi amigo. Al final, escribí un cargador de corrección de fallas que solucionó el problema de tono versus ancho, y finalmente pude jugar los dos primeros juegos de XCOM sin arrancar hardware antiguo (DOSBOX aún no estaba disponible, y mi máquina no era lo suficientemente potente para virtualización completa).
El cargador ganó algo de popularidad, e incluso se distribuyó con la nueva versión de STEAM de los juegos durante un tiempo. Sin embargo, creo que cambiaron a dosbox hoy en día.