Programación en Lenguaje Ensamblador

-El Verdadero Lenguaje de las Máquinas-

Tutoriales de Iczelion

–El Prometeo del Ensamblador–

Uno de los grandes males de la programación en Ensamblador es la presencia del Zombie Electrónico conocido como 8086. De hecho, en muchas universidades se sigue estudiando este CPU que lleva muerto por lo menos desde 1985. Aún en la era del Pentium, las gráficas 3D y los sistemas operativos multitarea con GUI, se seguía impartiendo el ensamblador de 16 bits, lo que lo desprestigiaba al grado de que aún hoy muchos creen que Ensamblador es sinónimo de programas obsoletos de 16 bits que corrían en pantallas negras con letras grises.

Sin embargo, en cierto momento aparecieron en el Internet unos interesantes tutoriales que demostraban que era posible hacer programas en ensamblador capaces de trabajar en 32 bits. En los noventas, la programación de 32 bits significaba cosas impresionantes como poder manejar 4 gigabytes de memoria en lugar de 64 kilobytes, modos de video con calidad fotográfica mas allá del 320 x 200 a 256 colores, Full Motion Video en lugar de minúsculos sprites y por supuesto modelos con superficies detalladas en los juegos 3D en lugar de esos polígonos con sombreado plano que recordaban cartones de leche. Esos tutoriales mostraban lo básico de la programación en 32 bits para Windows y estaban escritos en MASM. Su autor es un ser cuya identidad hasta ahora se desconoce, pero quien usaba por seudónimo el enigmático nombre de ICZELION.

iczelion original

Poco se sabe de Iczelion, salvo que sacó su seudónimo de un personaje de animación japonesa (lo que sugiere que probablemente sea un otaku) y que opera en Francia. Desde que se dieron a conocer, estos tutoriales han sido traducidos a varios idiomas y variantes de sintaxis de los diferentes ensambladores. Siendo particularmente perturbadora la traducción de un extremista religioso que incluyó en el archivo final textos ofensivos para otras religiones. Aunque lo verdaderamente ofensivo de ese archivo es que no había adaptado ni la mitad del tutorial.

Bueno, la cosa con los tutoriales de Iczelion es que a pesar de haber sido traducidos a los mas diversos lenguajes y sintaxis de los ensambladores, aún son extremadamente difíciles de entender. Sobre todo porque tienen una enorme cantidad de macros y parámetros de compilación que solo funcionan en el MASM. En este blog se intentará una vez mas escribir una adaptación de estos tutoriales. Aunque mas bien es una aproximación.

¿Y cual fue mi experiencia con los tutoriales de Iczelion? La verdad es que topé con piedra, pues no era capaz de hacer funcionar los códigos y cuando milagrosamente lograba hacer que algo funcionara no tenía ni la mas remota idea de lo que había hecho. Fue así hasta que encontré que la única manera de comprender y aprovechar verdaderamente estos tutoriales era usando un Debugger, como el IDA, WDASM o el OllyDbg. De hecho, no es una exageración decir que lanzarse a programar con los tutoriales de izcelion sin recurrir a un depurador de códigos es como tratar de comer nueces sin un cascanueces. Pues los códigos fuentes no te dirán nada con sus macros, constantes y sus directivas de compilación, pero con un depurador puedes ver todo el código en ensamblador puro, las constantes de Windows se convierten en simples números y las macros ‘se desenrrollan’. A partir de aquí, y si medianamente conoces la sintaxis de tu ensamblador (en mi caso fue el FASM), solo queda adaptarlo. Si tienes problemas, simplemente pasa tu propio ejecutable por el depurador y compara el código máquina. Los códigos máquina u OpCodes son los números que aparecen a la izquierda del código desensamblado en la mayoría de los depuradores. Ahora a programar:

Para entenderle a los tutoriales de Iczelion necesitaremos:

0.- Los tutoriales de Iczelion, por supuesto.

1.- Un ensamblador, en este caso el el FASM pero pueden usar cualquier otro si quieren.

2.- Un desensamblador como el OllyDbg, al lado derecho de esta blog pueden hallar un link a este.

3.- Una referencia a la API de Windows. Basta con que diga el nombre de cada función, en que DLL se encuentra y que parámetros recibe. No importa para que lenguaje se halla escrito. Es relativamente sencillo encontrar estas referencias en Internet.

Pasos para procesar los tutoriales de Iczelion:

1.- Lee la documentación que viene sin preocuparte demasiado por el código

2.- Busca el ejecutable de esa sección (el archivo con extensión .EXE) y mételo al depurador de códigos.

3.- El código desensamblado lo copias a un archivo de texto, puedes hacerlo cortando y pegando en el bloc de notas.

4.- Identifica todas las llamadas al sistema, OllyDbg puede hacer esto por ti.

5.- Lleva un registro de todos los símbolos que encuentres, los símbolos son las variables, constantes simbólicas, nombres de estructuras, funciones, etc, etc, etc. Un programador me dijo que un buen programador colecciona todos estos simbolos como si fueran estampitas (cromos, cards o tarjetas de beisbol segun tus creencias).

6.- Para integrar una función de la API de Windows en un programa de FASM recuerda declarar en la sección de importaciones el nombre de la función y el DLL que la contiene. Aquí es donde entra la referencia de la API de Windows.

7.- Al principio puedes usar los números directamente como te los mandó el depurador, pero mas adelante necesitarás declarar esos números como constantes o el código se volverá realmente confuso.

8.-Diviértete…

Por ahora ha sido todo, mas adelante veremos este tutorial con mucho mas detalle, por ahora solo les dejo un enlace a la web de Iczelion a ver hasta donde llegan ustedes solos. Y no se les olvide llevar su depurador porque solo con el código fuente no llegarán muy lejos.

mayo 31, 2009 - Posted by | Uncategorized | , , ,

14 comentarios »

  1. Hola a todos los del foro,

    Desde los 13años estoy metido en la informatica y he aprendido vb6, C++, PASCAL, html, css, javascript y sql. He trabajado como desarrollador de software y todo… pero lo que me trajo mas al mundo de la programacion fueron los virus y todas esas cosas, de momento solo tengo conocimientos basicos de hacking. Hace una semana decidi leerme una guia de ASM y me ha gustado un monton y se me hizo facil entenderlo porque solo necesitaba las sintaxis…

    Mi preguntas son:

    1.- Es bueno aprender ensamblador hoy en dia o estoy perdiendo el tiempo?

    2.- Necesito ensamblador para hacking o Cracking?

    3.- Necesito enamblador para hacer un virus o semejantes? o con c++/vb6 los puedo hacer igualmente de eficientes?

    4.- Puedo hacer conexiones remotas con ASM?

    5.- Puedo acceder a Bases de Datos MySQL con ASM?

    6.- Puedo diseñar aplicaciones para windows (normales) con Listview y todo en ASM (sin MASM) u obligado debo usar MASM?

    Bueno esas son mis dudas
    son muchas pero agradeceria mucho que me las respondan ya que si no puedo hacer esas cosas con asm me desanimo un poco

    AH! Tengo 20 años sera que todavía estoy a tiempo de aprender hacking? o ya estoy pasado de viejo?

    Comentario por manuel garza | junio 1, 2009 | Responder

    • Interesante… para empezar ser hacker solo significa que te interesa el funcionamiento de las cosas y no tiene nada que ver con hacer maldades. De hecho ya no se necesitan grandes conocimientos informáticos para fastidiar gente en internet. Ahora vayamos con las preguntas:

      1.- Te conviene ensamblador solo si te interesa la computación de muy alto desempeño como los juegos de última generación o cuestiones relacionadas con la robótica. Si lo tuyo son las bases de datos y demás trabajos normales, el ensamblador te representará un esfuerzo inutil.

      2.- Todo experto en ensamblador es un cracker en potencia y todo cracker debe ser un experto en ensamblador. De hecho, si quieres aprender a programar en ensamblador forzosamente tienes que recurrir a la ingeniería inversa. La respuesta es mas que un SI, solo recuerda leer el contrato de licencia de un programa antes de desensamblar y modificar un software que no sea tuyo.

      3.- Hoy en día no solo hay virus, sino una gran cantidad de amenazas que van desde refinados virus hasta burdas bromas de mal gusto que no tienen nada de código. Ahora se usa el término MALWARE para abarcar todo ese mundo. En cuanto al ensamblador, este solo te dará poder sobre la computadora. Si quieres usar ese poder para la justicia o la destrucción ese es asunto tuyo.

      4.- Eso depende del sistema operativo. Pero claro que se puede como lo haría cualquier aplicación.

      5.- De poder si se puede pero nunca me ha interesado. Puedes crear una aplicación en Ensamblador que use la ODBC entre otras cosas.

      6.- Cosas como la ListView, tree view, common controls, activex, etc dependen únicamente del windows y puedes llamarlos desde cualquier ensamblador si conoces como funcionan los DLL’s y COM’s. Yo por ejemplo uso FASM, aunque puedes usar cualquier otro ensamblador. Aunque hay diferencias entre la sintaxis de los ensambladores todos generan el mismo código máquina.

      La única regla es que si la computadora puede hacer algo, esto puede hacerse en Ensamblador. Porque la computadora solo corre código máquina y eso es el Ensamblador.

      En cuanto a la edad, la mayor parte de los programadores de ensamblador son, según el ‘jargon file’ “Viejos hackers locos que no quieren tirar su 486”. Ahora que si te arrepientes y quieres regresar a la computación normal (java, VB, .NET, bases de datos, etc) ya estás por dar el viejazo. Pues en muchas de estas compañías solo te contratan si cumples estos requisitos: menor de 25 años, excelente presentación, talla 3 a 7 y solicitud de de empleo con foto de cuerpo entero.

      En cuanto a lo del hacking, recuerda que ser hacker solo significa que te interesa el funcionamiento interno de las cosas y nada tiene que ver con hacer daño a otros. De hecho, ya hay muchas herramientas y técnicas para intervenir computadoras de otras personas sin necesidad de saber nada sobre programación. Pero eso no es ser hacker, eso es ser lamer. Así que mejor estudia como funcionan los programas y luego tu conciencia te dirá que es lo que quieres hacer.

      Comentario por asm86 | junio 1, 2009 | Responder

  2. creo que mejor me quedo con vb y java
    hasta luego.

    Manuel Garza

    Comentario por manuel garza | junio 2, 2009 | Responder

  3. Definitivamente ya llego la temporada de lamers

    Comentario por blackpig | junio 2, 2009 | Responder

  4. Este tipo debería de leer el “Diario de un Lamer” hahaha.

    Comentario por El Julio | junio 3, 2009 | Responder

  5. es algun status de desarrollador mas importante
    eso de ser un lamer?

    o a que te refieres con lamer?

    es algun tipo de enfermedad o algo asi?

    pregunto porque suena un poco ofensivo

    a , otra pregunta
    que libreria puedo utilizar
    en java para poder hacer sprites o graficos en tercera dimension, y veloces

    espero y me puedan ayudar

    de antemano gracias

    Manuel Garza

    Comentario por manuel garza | junio 4, 2009 | Responder

  6. no se trata de hacerce al inteligente o interesante, es q es asi, en cualquier programa, lo q un ejecutable hace es gestionar memoria, direcciones aki o aya, password aki o aya, representacion de la información, o sea q quieren q no lo entendamos, lo muestran de otra manera..

    lo bello de assembler es o trabajar con la memoria del ordenador es darles en el culo a essos programadores de mierda q no saben nada de seguridad informatica…

    es luchar contra el sistema y hacer essoso programas de pago accesibles a todo público…

    y si los programadores fueran inteligentes no noslo dejarian

    La ingenieria inversa es todo akello q va en contra de lo establecido es ir en contra del tiempo^^ asi lo veo Yo un +cracker

    Comentario por blowsoncath | agosto 19, 2009 | Responder

    • Lo gracioso de la ingenieria inversa es que depende de la cultura, entre los programadores asiaticos es de lo mas normal la ingenieria inversa porque asi comprenden mejor como trabaja un sistema y lo pueden mejorar. En occidente la ingenieria inversa es vista como robo. Lo unico que tengo que decir es que hacerle ingenieria inversa a un programa de otros es mucho mas dificil de lo que fue hacer el programa originalmente.

      Pero lo mejor es que quien sabe hacer ingenieria inversa puede aprender y mejorar codigos. Me pregunto que le dolera mas a los ‘programadores de mierda’: que les rompan la seguridad de sus programas comerciales o que alguien haga un programa mucho mejor que el de ellos en forma de software libre. Para ambas cosas hay que saber de ingenieria inversa.

      Comentario por asm86 | agosto 19, 2009 | Responder

  7. nu mames el wey de arriba sabe disque de programacion y sale con esas mamadas de que le llamo la atencion p0r los viruz, jijuetureboluda madre cabron es de aweb0 per0 de aweb0 que si quieres saber de virus tienes que tener conocimiento de ASM , caraj0s es de la ley , este put0 se sac0 el premi0 a la pendejada del año neta, pasad0 de lanza jij0 de t0da , ese wey numas escribi0 p0r fastidiar ni sabe l0 que escribi0 el muy pendej0, ya me voy che madre nomas de leer tanta pendejada me di0 ganas de wakarear!

    Comentario por d0n ram0n | marzo 30, 2010 | Responder

  8. jaja otr0 put0 disque cracker jaja , simon we camara blowsoncagada, te pasaste de mamon tambien con tu comentari0 , est0 es un clar0 sign0 de que el ap0calipsis ha empezad0 y que di0s se ha vuelt0 mas sadic0 que nunca ah0ra n0 s0l0 n0s hace escuchar lament0s mas h0rrend0s que en el infiern0 con esa musica de reweyt0n, sino que tambien n0s hace ver l0 que la bas0fia humana es capaz de escribir. 0tr0 sign0 mas del ap0kalipsis, el fals0 pr0feta!

    Comentario por d0n ram0n | marzo 30, 2010 | Responder

  9. Despues de buscar en el google, puede encontrar los manueles :) traducidos al español, para aquella gente como yo que no se lleba bien con el ingles

    http://www.angelfire.com/rnb/byte/tut_es.htm#index

    disfrutenlo
    (si no se pueden poner link, por favor adm borre mi com :) )

    Comentario por JavierJV | mayo 17, 2011 | Responder

    • Es bueno encontrar una traduccion al espanol, tambien hay algunos de esos tutoriales adaptados para el Fasm y el Nasm. Aunque al final lo mejor es desensamblarlos y entenderse con el lenguaje maquina directamente

      Comentario por asm86 | mayo 18, 2011 | Responder

  10. Hola estoy deacuerdo con lo del Zombi ELectronico,desgraciadamente yo q estoy en la universidad tengo que menejarlo no se porque jejej
    xfis no conoces un buen manual que me hable de graficos, manejo de imagenes, colores y dibujos en ensamblador para el umu8086?? :-)
    Xfis te lo agradecere mucho

    Comentario por Claudia | junio 13, 2011 | Responder

    • Pues existen en internet documentos como la PCGPE (pc game programmers encyclopedia) o los tutoriales de asphyxia de Denthor. Son bastante antiguos pero si quieres hacer graficas con un emulador de DOS puede que te sean de utilidad. No te costara mucho hallarlos en Google.

      Comentario por asm86 | junio 13, 2011 | Responder


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: