<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>[Roberto Mercado] Weblog</title>
	<atom:link href="http://jrobertomercadog.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://jrobertomercadog.wordpress.com</link>
	<description>Articulos de Software, Desarrollo, Seguridad y demás...</description>
	<lastBuildDate>Thu, 04 Jun 2009 06:57:05 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='jrobertomercadog.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>[Roberto Mercado] Weblog</title>
		<link>http://jrobertomercadog.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://jrobertomercadog.wordpress.com/osd.xml" title="[Roberto Mercado] Weblog" />
	<atom:link rel='hub' href='http://jrobertomercadog.wordpress.com/?pushpress=hub'/>
		<item>
		<title>WebService en Mono 2.x usando System.Data.OracleClient</title>
		<link>http://jrobertomercadog.wordpress.com/2009/06/02/draft-webservice-en-mono-2-x-usando-system-data-oracleclient/</link>
		<comments>http://jrobertomercadog.wordpress.com/2009/06/02/draft-webservice-en-mono-2-x-usando-system-data-oracleclient/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 19:24:14 +0000</pubDate>
		<dc:creator>jrobertomercadog</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Novell Mono]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://jrobertomercadog.wordpress.com/?p=8</guid>
		<description><![CDATA[Preámbulo La principal razón del por que decidí crear este artículo es principalmente por una asignatura durante el desarrollo de mi carrera profesional. Por razones extrañas no lograba hacer arrancar IIS en mi ordenador, así que opté por ingeniarmelas y usar Mono 2.x en una máquina virtual que ensamblé manualmente. La proeza se tornó en [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jrobertomercadog.wordpress.com&amp;blog=3340012&amp;post=8&amp;subd=jrobertomercadog&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h1>Preámbulo</h1>
<p>La principal razón del por que decidí crear este artículo es principalmente por una asignatura durante el desarrollo de mi carrera profesional. Por razones extrañas no lograba hacer arrancar IIS en mi ordenador, así que opté por ingeniarmelas y usar <strong>Mono 2.x</strong> en una máquina virtual que ensamblé manualmente. La proeza se tornó en una investigación que ahora les comparto.</p>
<p>Para desarrollar el ejemplo práctico de este artículo es requerido tener un conocimiento esencial de <strong>C#</strong> y sobre el funcionamiento de los WebServices. También es sumamente recomendable saber maniobrar un <strong>GNU/Linux</strong> de su preferencia, personalmente recomiendo utilizar <strong>Canonical Ubuntu</strong> por mi experiencia personal y fácilidad de uso. Para correr una máquina virtual de Ubuntu o de su <em>GNU/Linux preferido</em> les recomiendo ampliamente usar <strong>Sun VirtualBox</strong>.</p>
<h1>Indice de Contenido</h1>
<ol style="padding-left:30px;">
<li>Prerequisitos.</li>
<li>Oracle XE e Instant Client 10.2</li>
<li>El archivo tnsnames.ora</li>
<li>Variables de entorno.</li>
<li>Ejemplo de Código usando C#</li>
<li>Puesta a prueba</li>
<li>Conclusiones</li>
</ol>
<h1><span id="more-8"></span>Prerequisitos</h1>
<ul style="padding-left:30px;">
<li><strong>Oracle XE 10g Express Edition</strong>. Esta ODBRMS es de uso gratuito mientras se respeten los términos de la licencia. En breve, se puede poner en producción pero tiene las restricciones de sólo usar 4GB de datos en Disco Duro para todos los usuarios creados, máximo uso de 1 GB de RAM y un sólo núcleo de procesador. Aun así considero de 4 GB es excelente espacio mientras no se planee usar BLOB&#8217;s.</li>
</ul>
<p style="padding-left:30px;">La liga para descargar Oracle XE 10g Express Edition es la siguiente:</p>
<blockquote>
<pre><a title="Oracle XE" href="http://www.oracle.com/technology/software/products/ database/xe/index.html" target="_blank">http://www.oracle.com/technology/software/products/
database/xe/index.html</a></pre>
</blockquote>
<p style="padding-left:30px;">Para descargar de estar liga, es requerido tener una cuenta de Oracle, la cuál es gratuita de tramitar en línea.</p>
<p style="padding-left:30px;">Para los usuarios de <em>Canonical Ubuntu y  Debian</em>, pueden agregar la siguiente linea  a su /etc/apt/sources.list</p>
<blockquote>
<pre>deb http://oss.oracle.com/debian unstable main non-free</pre>
</blockquote>
<p style="padding-left:30px;">A continuación ejecuten los siguientes comandos:</p>
<blockquote>
<pre>sudo apt-get update
sudo apt-get install oracle-xe-universal
sudo /etc/init.d/oracle-xe configure</pre>
</blockquote>
<p style="padding-left:30px;">Revisen previamente para asegurar que tengan el <em>puerto 8080 de TCP disponible</em>, de lo contrario presten especial atención cuando ejecuten el último comando del paso anterior.</p>
<ul style="padding-left:30px;">
<li><strong>Oracle Instant Client 10.2 para GNU/Linux</strong>. Este es el componente que permitirá laborar de forma directa con Oracle XE. Tengo entendido que existen .dll&#8217;s que funcionan con .NET, sin embargo considero que no hay nada mejor que trabajar con librerías hechas en C que funcionen directamente con el motor de la base de datos, final y al cabo el <em>System.Data.OracleClient de Mono 2.x</em> es un wrapper a estas librerías.</li>
</ul>
<p style="padding-left:30px;">La URL para descargar Oracle Instant Cliente es la siguiente:</p>
<blockquote>
<pre><a title="Oracle OCI Instant Client" href="http://www.oracle.com/technology/tech/oci/ instantclient/index.html" target="_blank">http://www.oracle.com/technology/tech/oci/
instantclient/index.html</a></pre>
</blockquote>
<p style="padding-left:30px;">De igual forma, es requerido tener una cuenta en Oracle para descargar este componente. Les recomiendo ampliamente descargar la version<strong> Instant Client Basic Lite 10.2</strong> por razones de compatibilidad binaria. También puesto que <em>Oracle XE</em> corre nativamente bajo el esquema ANSI y el Esquema Europeo de Caractéres.</p>
<ul style="padding-left:30px;">
<li>Mono 2.x Runtime y Archivos de Desarrollo. En <strong>Canonical Ubuntu</strong>, Mono 2.x Runtime ya viene instalado, sólo se requiere instalar algunas aplicaciones adicionales como xsp2 y MonoDevelop 2.0.</li>
</ul>
<p style="padding-left:30px;">Para los usuarios de <strong>Canonical Ubuntu 9.04</strong> ejecuten el siguiente comando:</p>
<blockquote>
<pre>sudo apt-get install mono-devel
libmono-oracle2.0-cil monodevelop mono-xsp2</pre>
</blockquote>
<p style="padding-left:30px;">Este comando es suficiente para instalar las librerias requeridas para desarrollar en Mono 2.x, instalará el simple pero útil IDE de <strong>MonoDevelop 2.0</strong> para desarrollar este ejemplo, La libreria <em>System.Data.OracleClient</em> que será nuestra herramienta a utilizar y xsp2 para poder ejecutar via Web nuestro WebServices.</p>
<h1>Oracle XE e Instant Client 10.2</h1>
<p>En <em>Prerequisitos </em>procedimos a descargar ambos componentes y configurar inicialmente a <em>Oracle XE</em>, ahora queda poner en marcha este manejador de base de datos, crear un usuario para este ejemplo y crear una tabla.</p>
<p>Para poner en marcha el manejador utilizando <strong>Canonical Ubuntu</strong>, ejecute el siguiente comando:</p>
<pre>/etc/init.d/oracle-xe start</pre>
<p>Abra su navegador preferido y dirigase a la URL:</p>
<pre>http://localhost:8080/apex</pre>
<p>En caso de haber elegido<em> otro puerto durante la configuracion</em> del manejador, utilícelo en vez del puerto <strong>8080</strong>.</p>
<p>Durante la configuracion se <em>designó una contraseña </em>para el Superusario <strong>SYSTEM </strong>para <em>Oracle XE</em>. Utilice estas credenciales para accesar al sistema.</p>
<p>Una vez dentro, haga click en<em> &#8220;Administration&#8221; </em>despues en <em>&#8220;Database Users&#8221; </em>y haga click sobre el botón<em> &#8220;Create &gt;&#8221;</em>. Ahi escribirá el <em>Username y el Password</em>. Para cuestiones prácticas de este artículo nuestro usuario se llamará <em>&#8220;ORACLEWS&#8221; </em>y el password sera <em>&#8220;novellmono2x</em>&#8220;. Si va a implementar estas ideas en un sistema de producción, por favor, siempre utilice credenciales de acceso bastante fuertes. A continuación marque también las opciones<em> &#8220;CREATE TABLE, CREATE VIEW, CREATE PROCEDURE y CREATE TRIGGER&#8221;</em>. Son los permisos adecuados para que un usuario pueda ejecutar labores normales, como crear tablas, vistas y procedimientos, una vez listos hacemos click en el botón &#8220;<em>Create</em>&#8221; para surtir los efectos seleccionados.</p>
<p>A continuación hacemos click en la liga &#8220;Logout&#8221;, esto nos llevará a un mensaje y volvemos a hacer click en la liga &#8220;Login&#8221;. Nos llevará de vuelta a la página de Inicio de Sesion. Teclee las credenciales de acceso que acabamos de crear en el paso anterior.</p>
<p>Ingresando hacemos click en &#8220;Object Explorer&#8221;, despues sobre el botón &#8220;Create&#8221; y se mostrarán varias opciones. Hacemos click en la liga &#8220;Table&#8221; y nos llevará al editor para crear una tabla nueva. Para esta tabla usen los siguientes elementos:</p>
<pre>Nombre de la tabla: COMENTARIOS</pre>
<ul>
<li>
<pre>IDCOMENTARIO : NUMBER</pre>
</li>
<li>
<pre>NOMBREUSUARIO : NVARCHAR2 (50)</pre>
</li>
<li>
<pre>COMENTARIO :  NVARCHAR2 (100)</pre>
</li>
</ul>
<p>A continuacion hacemos click en <em>&#8220;Next&gt;&#8221;</em> y nos llevará a la página para elegir la llave primaria, seleccionamos la segunda opción que marca &#8220;<em>Populated from a new sequence</em>&#8221; y aparecerán 3 nuevos campos, prestamos atención al tercero que dice &#8220;<em>Primary Key</em>&#8221; y de la lista seleccionamos a <em>&#8220;IDCOMENTARIO</em>&#8220;, despues volvemos a hacer click en &#8220;<em>Next&gt;</em>&#8220;.</p>
<p>Puesto que no requerimos indicar<em> ni llaves foráneas ni restricciones</em>, hacemos click en &#8220;<em>Next&gt;</em>&#8221; de nuevo y despues en &#8220;<em>Finish</em>&#8220;. Finalmente hacemos click en el botón &#8220;<em>Create</em>&#8220;. Esto creará nuestra tabla que usaremos para nuestro WebService.</p>
<p>Por último, una vez descargado las librerias Oracle Instant Client 10.2<br />
( <strong>oracle-instantclient-basiclite-10.2.0.4-1.i386.zip</strong> ) podremos descomprimirlo con el siguiente comando:</p>
<blockquote>
<pre>~&gt; unzip oracle-instantclient-basiclite-10.2.0.4-1.i386.zip</pre>
</blockquote>
<p>Descomprimirá el contenido del archivo ZIP en una nueva carpeta llamada <strong>instant_client_10_2</strong>.</p>
<p>Finalmente, sólo queda realizar un par de modificaciones para permitir a Novell Mono 2.x poder encontrar estas determinadas librerías, para lograr esto tecleamos los siguientes comandos:</p>
<blockquote>
<pre>~&gt;cd instant_client_10_2</pre>
<pre>instant_client_10_2&gt; ln -s libclntsh.so.10.1 libclntsh.so</pre>
<pre>instant_client_10_2&gt; ln -s libocci.so.10.1 libocci.so</pre>
</blockquote>
<p>Una vez listo, ya podremos pasar a configurar el archivo de conexion y las variables de entorno.</p>
<h1>El archivo tnsnames.ora</h1>
<p>Este archivo contiene la cadena de conexion a Oracle, es de suma importancia crearla adecuadamente, para comenzar hay que crear el archivo dentro de nuestra carpeta instant_client_10_2 y darle los permisos requeridos para funcionar, esto se logra de la siguiente forma:</p>
<blockquote>
<pre>instant_client_10_2&gt; touch tnsnames.ora
instant_client_10_2&gt; chmod 644 tnsnames.ora</pre>
</blockquote>
<p>Una vez listo, edite con su editor preferido el nuevo archivo tnsnames.ora agregando como en mi siguiente ejemplo:</p>
<blockquote>
<pre>conn_str = (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)
(HOST=localhost)(PORT=1521))
(CONNECT_DATA=(SERVICE_NAME = XE)))</pre>
</blockquote>
<p>Nótese que el texto anterior sólo se ubica en una sola linea. Puede consultar el archivo en la siguiente <a title="Ejemplo de tnsnames.ora" href="http://pastie.org/500062" target="_blank">liga</a>. Revise si su ordenador responde ante el alias &#8220;<em>localhost</em>&#8220;, generalmente usar esta cadena no debería ocasionar ningún problema, si llega a presentar un problema de conectividad con el <em>TNS</em>, utilice <em>127.0.0.1</em> en vez de &#8220;<em>localhost</em>&#8220;.</p>
<h1>Variables de entorno</h1>
<p>Para que las invocaciones de <strong>System.Data.OracleClient</strong> puedan encontrar el archivo <em>tnsnames.ora</em> y las librerías, es necesario establecer las variables de entorno, para ello dentro de nuestro directorio <strong>HOME </strong>hay que editar el archivo <strong>.bashrc</strong>.<strong> </strong>Una vez listo en nuestro editor favorito, al final de este archivo anexe las siguientes lineas:</p>
<blockquote>
<pre>TNS_ADMIN=`echo $HOME`/instantclient_10_2/
LD_LIBRARY_PATH=`echo $HOME`/instantclient_10_2/
   :$LD_LIBRARY_PATH
TWO_TASK=conn_str
export TNS_ADMIN LD_LIBRARY_PATH TWO_TASK</pre>
</blockquote>
<p>Puede consultar este fragmento de script en la siguiente <a title="Variables de Entorno de Oracle" href="http://pastie.org/500064" target="_blank">liga</a>.</p>
<p>Guarde los cambios y procedemos a surtir los cambios ejecutando el siguiente comando:</p>
<blockquote>
<pre>~&gt; source .bashrc</pre>
</blockquote>
<p>Si el comando se completó con éxito, no arrojará nada, de lo contrario advertirá de los errores cometidos durante la edicion el archivo .bashrc</p>
<h1>Ejemplo de Código usando C#</h1>
<p>Es recomendable usar MonoDevelop para desarrollar este ejemplo, aun asi puede usar el editor de su preferencia y despues llamar al compilador de forma manual, el código se encuentra en la liga siguiente:</p>
<pre><a title="Codigo Fuente" href="http://pastie.org/500059" target="_blank">http://pastie.org/500059</a></pre>
<p>Si utiliza MonoDevelop, no olvide agregar las referencias de &#8220;<em>System.Data</em>&#8221; y &#8220;<em>System.Data.OracleClient</em>&#8220;, de lo contrario al compilar encontrará errores de referencias.</p>
<h1>Puesta a prueba</h1>
<p>Una vez compilado el código sin problemas será necesario ejecutar <strong>xsp2 </strong>para correr el Servicio Web que hicimos anteriormente. Evite ejecutarlo desde <em>MonoDevelop </em>puesto que podría ocasionar un error y no correrse, esto se debe a que <em>MonoDevelop </em>arranca <strong>xsp2 </strong>en el puerto <strong>8080 </strong>y por defacto, <strong>Oracle XE</strong> escuchará en esta direccion para ejecutar su <strong>Application Express</strong> (La interfaz web que usamos para crear la tabla)</p>
<p>Para ejecutar xsp2 manualmente, abriremos una terminar nueva y ejecutaremos el siguiente comando:</p>
<blockquote>
<pre>xsp2 --port 8081 --root `echo $HOME`/Projects/PruebaOracle
/PruebaOracle</pre>
</blockquote>
<p>Puede consultar este comando en la siguiente <a title="Comando para ejecutar xsp2" href="http://pastie.org/500073" target="_blank">liga</a>.</p>
<p>Por supuesto que puede elegir que puerto ejecutar si les devuelve algun error o se sienten más cómodos usando otro.</p>
<p>Abra su navegador preferido y consulte la URL donde se localice su WebService. Si usa  una máquina virtual y se encuentra dentro de ella, esta URL sería <em>http://localhost:8081/ServicioOracle.asmx</em>. Usted vería una página como la siguiente.</p>
<div id="attachment_44" class="wp-caption alignnone" style="width: 520px"><img class="size-full wp-image-44" title="WebService Mono y Oracle" src="http://jrobertomercadog.files.wordpress.com/2009/06/monoserviciooracle.png?w=510&#038;h=242" alt="WebService Mono y Oracle" width="510" height="242" /><p class="wp-caption-text">WebService Mono y Oracle</p></div>
<h1>Conclusiones</h1>
<p><em>¿Muy complicado?</em> Personalmente no y considero que vale la pena hacerlo. Lo encuentro laborioso y les daría un buen video pero aun no me hago de una licencia de <em>Camtasia</em>, aunque cuando la tenga será uno de los primero videos que haré. Como reitero en el <em>Preámbulo</em>, esto surgió a raíz de una asignatura en clases. Sin embargo, decidí hacerlo un articulo completo puesto que no he encontrado NINGUNA referencia detallada para como hacerlo funcionar y quise contribuir con un granito de arena para la comunidad de Desarrolladores. <strong>Happy Coding =)</strong></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jrobertomercadog.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jrobertomercadog.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jrobertomercadog.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jrobertomercadog.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jrobertomercadog.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jrobertomercadog.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jrobertomercadog.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jrobertomercadog.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jrobertomercadog.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jrobertomercadog.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jrobertomercadog.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jrobertomercadog.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jrobertomercadog.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jrobertomercadog.wordpress.com/8/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jrobertomercadog.wordpress.com&amp;blog=3340012&amp;post=8&amp;subd=jrobertomercadog&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jrobertomercadog.wordpress.com/2009/06/02/draft-webservice-en-mono-2-x-usando-system-data-oracleclient/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f977a40fb8c46d8ebff6d7ab769de6ab?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jrobertomercadog</media:title>
		</media:content>

		<media:content url="http://jrobertomercadog.files.wordpress.com/2009/06/monoserviciooracle.png" medium="image">
			<media:title type="html">WebService Mono y Oracle</media:title>
		</media:content>
	</item>
		<item>
		<title>Básicos de Shellcoding bajo GNU/Linux</title>
		<link>http://jrobertomercadog.wordpress.com/2009/04/22/basicos-de-shellcoding-bajo-gnulinux/</link>
		<comments>http://jrobertomercadog.wordpress.com/2009/04/22/basicos-de-shellcoding-bajo-gnulinux/#comments</comments>
		<pubDate>Wed, 22 Apr 2009 12:15:06 +0000</pubDate>
		<dc:creator>jrobertomercadog</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Seguridad 101]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[nasm]]></category>
		<category><![CDATA[seguridad informatica]]></category>
		<category><![CDATA[shellcoding]]></category>

		<guid isPermaLink="false">http://jrobertomercadog.wordpress.com/?p=3</guid>
		<description><![CDATA[Dentro de este artículo describiré de manera elemental respecto a los básicos de \&#8221;shellcoding\&#8221; acorde a seguridad informática con ejemplos para implementarlos de manéra práctica. Shellcoding &#8211; Definición Los \&#8221;Shellcodes\&#8221; representan una serie de código representado binariamente insertado a través de una vulnerabilidad de una aplicación o sistema para acompletar una tarea determinada. Generalmente se [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jrobertomercadog.wordpress.com&amp;blog=3340012&amp;post=3&amp;subd=jrobertomercadog&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Dentro de este artículo describiré de manera elemental respecto a los básicos de \&#8221;shellcoding\&#8221; acorde a seguridad informática con ejemplos para implementarlos de manéra práctica.</p>
<p><strong>Shellcoding &#8211; Definición</strong></p>
<p>Los \&#8221;Shellcodes\&#8221; representan una serie de código representado binariamente insertado a través de una vulnerabilidad de una aplicación o sistema para acompletar una tarea determinada. Generalmente se emplean para obtener una \&#8221;shell\&#8221; remota, de ahi precisa su nombre.</p>
<p>Para Linux, se precisa conocer las \&#8221;llamadas a sistema\&#8221; (<em>syscalls</em>) bajo assambler que son estandarizados para tales distribuciones, su implementación no es tan compleja como aparenta, sin embargo es laboriosa y bastante desafiante. <span id="more-3"></span></p>
<p>Herramientas a Utilizar</p>
<ul>
<li>gcc</li>
<li>ld</li>
<li>nasm</li>
<li>objdump</li>
</ul>
<p>Conocimientos asumidos:</p>
<ul>
<li>Comprender assambler.</li>
<li>Lenguaje C</li>
<li>Comprender principios de UNIX.</li>
</ul>
<p>Plantilla:</p>
<p>Usaremos la siguiente pequeña aplicación para probar nuestro código (<em>probarshellcode.c</em>):</p>
<pre><span>
char bytecode[] = \"tu bytecode es aqui !\";

int main(int argc, char **argv)
{
   int (*funcion)();
   funcion = (int (*)()) bytecode;
   (int)(*funcion)();
}
</span></pre>
<p>Ejemplo 1:</p>
<p>Debido a la simplicidad de la llamada a sistema \&#8221;exit\&#8221;, es el más sencillo de implementar:</p>
<p>Archivo assambler (<em>salir.asm</em>) :</p>
<pre> <span>
[SECTION .text]

global _start

_start:

        xor eax, eax    ;exit es el syscall 1

        mov al, 1

        xor ebx,ebx     ;pone en ceros a ebx

        int 0x80        ;llamada al kernel</span></pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jrobertomercadog.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jrobertomercadog.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jrobertomercadog.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jrobertomercadog.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jrobertomercadog.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jrobertomercadog.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jrobertomercadog.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jrobertomercadog.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jrobertomercadog.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jrobertomercadog.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jrobertomercadog.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jrobertomercadog.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jrobertomercadog.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jrobertomercadog.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jrobertomercadog.wordpress.com&amp;blog=3340012&amp;post=3&amp;subd=jrobertomercadog&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jrobertomercadog.wordpress.com/2009/04/22/basicos-de-shellcoding-bajo-gnulinux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f977a40fb8c46d8ebff6d7ab769de6ab?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jrobertomercadog</media:title>
		</media:content>
	</item>
	</channel>
</rss>
