{"id":31,"date":"2012-03-01T17:12:24","date_gmt":"2012-03-01T20:12:24","guid":{"rendered":"http:\/\/www.maurom.com\/wp\/?p=31"},"modified":"2012-05-09T23:12:43","modified_gmt":"2012-05-10T02:12:43","slug":"open-security-training-csapp-y-gpefile","status":"publish","type":"post","link":"https:\/\/maurom.com\/blog\/2012\/03\/01\/open-security-training-csapp-y-gpefile\/","title":{"rendered":"Open Security Training, CS:APP y gPEFile"},"content":{"rendered":"<p>Finalizando las vacaciones, antes de reincorporarme al trabajo diario, dediqu\u00e9 unos d\u00edas a seguir uno de los cursos de an\u00e1lisis de malware que ten\u00eda agendado desde hace tiempo, en este caso, el de <strong><a href=\"http:\/\/opensecuritytraining.info\/\">Open Security Training<\/a>.<\/strong><\/p>\n<p>La gente de OST provee el material, los ejemplos y los videos en l\u00ednea para que uno vaya, a su tiempo, incorporando conocimientos repartidos en las <a href=\"http:\/\/opensecuritytraining.info\/Training.html\">siguientes clases<\/a>:<\/p>\n<p>Beginner Classes<\/p>\n<ul>\n<li><a href=\"http:\/\/opensecuritytraining.info\/IntroX86.html\">Introductory Intel x86: Architecture, Assembly, Applications, &amp; Alliteration<\/a><\/li>\n<li><a href=\"http:\/\/opensecuritytraining.info\/LifeOfBinaries.html\">The Life of Binaries<\/a><\/li>\n<li><a href=\"http:\/\/opensecuritytraining.info\/NetworkForensics.html\">Introduction to Network Forensics<\/a><\/li>\n<li><a href=\"http:\/\/opensecuritytraining.info\/CTFForensics.html\">CTF Forensics<\/a><\/li>\n<\/ul>\n<p>Intermediate Classes<\/p>\n<ul>\n<li><a href=\"http:\/\/opensecuritytraining.info\/IntermediateX86.html\">Intermediate Intel x86: Architecture, Assembly, Applications, &amp; Alliteration<\/a><\/li>\n<li><a href=\"http:\/\/opensecuritytraining.info\/IntroductionToSoftwareExploits.html\">Introduction to Software Exploits<\/a><\/li>\n<\/ul>\n<p>Advanced Classes<\/p>\n<ul>\n<li><a href=\"http:\/\/opensecuritytraining.info\/Rootkits.html\">Rootkits: What they are, and how to find them<\/a><\/li>\n<li><a href=\"http:\/\/opensecuritytraining.info\/IntroductionToReverseEngineering.html\">Introduction to Reverse Engineering Software<\/a><\/li>\n<\/ul>\n<p>La primera clase sirve como base para las siguientes y discurre sobre los conceptos iniciales, describe el hardware sobre el que se programa en lenguaje ensamblador, describe con varios ejemplos las instrucciones del lenguaje m\u00e1s comunes, y muestra c\u00f3mo seguir la ejecuci\u00f3n de un programa con en Windows con Visual Studio Debugger (u <a href=\"http:\/\/www.ollydbg.de\/\">OllyDbg<\/a>, que no es tan distinto) y en GNU\/Linux con gdb. Como bien hace menci\u00f3n el instructor, con conocer algunas pocas instrucciones ya es posible leer la mayor\u00eda de los programas.<\/p>\n<p>La clase finaliza dejando como tarea el an\u00e1lisis y la resoluci\u00f3n del cl\u00e1sico ejercicio de &#8220;<strong><a href=\"http:\/\/csapp.cs.cmu.edu\/public\/1e\/labs.html\">bomba binaria<\/a><\/strong>&#8221; de la asignatura Arquitectura de Computadores de la Carnegie Mellon University, la cual requiere conocer t\u00e9cnicas b\u00e1sicas de ingenier\u00eda inversa para progresar a traves de las diferentes fases de la bomba, dando las respuestas correctas y evitando &#8220;explotarla&#8221;. Sin duda es un ejercicio que me ha entretenido mucho, me ha hecho pensar bastante, y que realmente debo recomendar como un buen inicio al arte de la ingenier\u00eda inversa.<\/p>\n<p>Buscando informaci\u00f3n sobre el tema d\u00ed con el libro de cabecera de tal asignatura:<strong> <a href=\"http:\/\/csapp.cs.cmu.edu\/\">Computer Systems: A Programmer&#8217;s Perspective<\/a><\/strong>, cuya edici\u00f3n 2011 es altamente recomendable. Est\u00e1 escrito en un lenguaje claro pero detallado, con ejemplos concretos (casi dir\u00eda \u201cpalpables\u201d) para explicar las abstracciones de sistema, y con un amplio conjunto de ejercicios para realizar. El sitio web contiene <a href=\"http:\/\/csapp.cs.cmu.edu\/public\/samples.html\">algunas secciones de ejemplo<\/a> que sirven como preview, as\u00ed como tambi\u00e9n <a href=\"http:\/\/csapp.cs.cmu.edu\/public\/waside.html\">material<\/a> <a href=\"http:\/\/csapp.cs.cmu.edu\/public\/waside.html\">adicional<\/a> al texto en papel. En retrospectiva, es el libro que me tendr\u00edan que haber recomendado cuando curs\u00e9 las materias de arquitectura.<\/p>\n<p>La clase \u201cThe Life of Binaries\u201d trata efectivamente sobre \u201cla vida de los ejecutables\u201d, desde su creaci\u00f3n: parsing del c\u00f3digo fuente, abstract syntax trees, estrategias de compilaci\u00f3n, lenguajes intermedios, enlazado del binario final; hasta su carga en memoria por el loader del sistema operativo y posterior ejecuci\u00f3n en el computador. Se dan descripciones detalladas sobre los formatos binarios <a href=\"http:\/\/en.wikipedia.org\/wiki\/Portable_Executable\">Portable Executable (PE)<\/a> de Windows y <a href=\"http:\/\/en.wikipedia.org\/wiki\/Executable_and_Linkable_Format\">Executable and Linkable Format (ELF)<\/a> de Linux. El recorrido por el formato PE y su estructura, basado en el trabajo realizado por Ero Carrera, es muy completo y esclarecedor. La clase abarca tambi\u00e9n algunas de las t\u00e9cnicas que de ocultamiento y hooking utilizadas com\u00fanmente en el malware, c\u00f3mo funcionan <span style=\"font-style: italic;\">realmente<\/span> los virus de computadora, y qu\u00e9 t\u00e9cnicas es posible utilizar f\u00e1cilmente para brindar mayor seguridad a los binarios que se generan.<\/p>\n<p>A partir de esta clase se me ocurri\u00f3 aprovechar el excelente trabajo realizado por Carrera con la biblioteca<strong> <a href=\"http:\/\/code.google.com\/p\/pefile\/\">pefile<\/a><\/strong> y desarrollar con python-gtk2 un visor de archivos PE para interfaz gr\u00e1fica, inspirado en el utilizado en los videos de entrenamiento. Dejo algunas capturas de la primera versi\u00f3n que no da verg\u00fcenza mostrar. El c\u00f3digo, como siempre, se puede descargar desde el link que sigue y las correcciones y sugerencias ser\u00e1n bienvenidas.<\/p>\n<p>Descargar: <strong><a href=\"http:\/\/www.maurom.com\/files\/gpefile.py\">gpefile.py<\/a><\/strong> (v0.19, 78 KB)<\/p>\n<p>\u00daltimo cambio: Agregado despliegue de recursos RT_BITMAP, RT_GROUP_CURSOR, RT_GROUP_ICON, RT_STRING, GIF y PNG.<\/p>\n\n\t\t<style type=\"text\/css\">\n\t\t\t#gallery-1 {\n\t\t\t\tmargin: auto;\n\t\t\t}\n\t\t\t#gallery-1 .gallery-item {\n\t\t\t\tfloat: left;\n\t\t\t\tmargin-top: 10px;\n\t\t\t\ttext-align: center;\n\t\t\t\twidth: 33%;\n\t\t\t}\n\t\t\t#gallery-1 img {\n\t\t\t\tborder: 2px solid #cfcfcf;\n\t\t\t}\n\t\t\t#gallery-1 .gallery-caption {\n\t\t\t\tmargin-left: 0;\n\t\t\t}\n\t\t\t\/* see gallery_shortcode() in wp-includes\/media.php *\/\n\t\t<\/style>\n\t\t<div id='gallery-1' class='gallery galleryid-31 gallery-columns-3 gallery-size-thumbnail'><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/maurom.com\/blog\/wp-content\/uploads\/2012\/05\/gpefile1.png'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/maurom.com\/blog\/wp-content\/uploads\/2012\/05\/gpefile1-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/maurom.com\/blog\/wp-content\/uploads\/2012\/05\/gpefile2.png'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/maurom.com\/blog\/wp-content\/uploads\/2012\/05\/gpefile2-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/maurom.com\/blog\/wp-content\/uploads\/2012\/05\/gpefile3.png'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/maurom.com\/blog\/wp-content\/uploads\/2012\/05\/gpefile3-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><br style=\"clear: both\" \/><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/maurom.com\/blog\/wp-content\/uploads\/2012\/05\/gpefile4.png'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/maurom.com\/blog\/wp-content\/uploads\/2012\/05\/gpefile4-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/maurom.com\/blog\/wp-content\/uploads\/2012\/05\/gpefile5.png'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/maurom.com\/blog\/wp-content\/uploads\/2012\/05\/gpefile5-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/maurom.com\/blog\/wp-content\/uploads\/2012\/05\/gpefile6.png'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/maurom.com\/blog\/wp-content\/uploads\/2012\/05\/gpefile6-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" \/><\/a>\n\t\t\t<\/dt><\/dl><br style=\"clear: both\" \/>\n\t\t<\/div>\n\n<p>Me queda pendiente continuar con las clases siguientes, en cuanto el tiempo me lo permita. A la gente detr\u00e1s del proyecto de Open Security Training, mi sincero agradecimiento por la dedicaci\u00f3n y por el material brindado generosamente a la comunidad.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Finalizando las vacaciones, antes de reincorporarme al trabajo diario, dediqu\u00e9 unos d\u00edas a seguir uno de los cursos de an\u00e1lisis de malware que ten\u00eda agendado desde hace tiempo, en este caso, el de Open Security Training. La gente de OST provee el material, los ejemplos y los videos en l\u00ednea para que uno vaya, a [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[7,8,3,9,10,6],"_links":{"self":[{"href":"https:\/\/maurom.com\/blog\/wp-json\/wp\/v2\/posts\/31"}],"collection":[{"href":"https:\/\/maurom.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/maurom.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/maurom.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/maurom.com\/blog\/wp-json\/wp\/v2\/comments?post=31"}],"version-history":[{"count":0,"href":"https:\/\/maurom.com\/blog\/wp-json\/wp\/v2\/posts\/31\/revisions"}],"wp:attachment":[{"href":"https:\/\/maurom.com\/blog\/wp-json\/wp\/v2\/media?parent=31"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/maurom.com\/blog\/wp-json\/wp\/v2\/categories?post=31"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/maurom.com\/blog\/wp-json\/wp\/v2\/tags?post=31"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}