<?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/"
	>

<channel>
	<title>DisidentS Team &#187; SparK</title>
	<atom:link href="http://www.disidents.org/tag/spark/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.disidents.org</link>
	<description>-= Sharing Knowledge since 1996! =- Seguridad, Ingeniería Inversa, Redes, Programación, Noticias</description>
	<lastBuildDate>Fri, 03 Sep 2010 13:10:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Wow tengo un huésped en mi PC! :D</title>
		<link>http://www.disidents.org/2009/07/02/wow-tengo-un-huesped-en-mi-pc-d/#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=wow-tengo-un-huesped-en-mi-pc-d</link>
		<comments>http://www.disidents.org/2009/07/02/wow-tengo-un-huesped-en-mi-pc-d/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 23:16:07 +0000</pubDate>
		<dc:creator>spark</dc:creator>
				<category><![CDATA[Artículos]]></category>
		<category><![CDATA[Análisis de Virus]]></category>
		<category><![CDATA[Backdoor]]></category>
		<category><![CDATA[Desinfección]]></category>
		<category><![CDATA[DisidentS]]></category>
		<category><![CDATA[DsD!]]></category>
		<category><![CDATA[Ingeniería Inversa]]></category>
		<category><![CDATA[Reversing Links]]></category>
		<category><![CDATA[SparK]]></category>
		<category><![CDATA[SparKrisp]]></category>
		<category><![CDATA[Troyano]]></category>
		<category><![CDATA[Virus]]></category>

		<guid isPermaLink="false">http://www.disidents.org/?p=189</guid>
		<description><![CDATA[Hola a todos, hoy a la mañana, enciendo mi notebook y descubro que mi NOD32 4.0 detecta intentos de conecciones de mi PC hacia servidores, con URL&#8217;s raras&#8230; Esto me dió alegría ya que me dije, &#8220;bien, algo nuevo para investigar vino a mi!!&#8221;&#8230; así que me puse manos a la obra, y mientras publicaba [...]]]></description>
			<content:encoded><![CDATA[<p>Hola a todos, hoy a la mañana, enciendo mi notebook y descubro que mi NOD32 4.0 detecta intentos de conecciones de mi PC hacia servidores, con URL&#8217;s raras&#8230; <img src='http://www.disidents.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Esto me dió alegría ya que me dije, &#8220;bien, algo nuevo para investigar vino a mi!!&#8221;&#8230; así que me puse manos a la obra, y mientras publicaba un artículo viejo que escribí para la revista @rroba, me dediqué a mirar este bichito&#8230;</p>
<p><strong>Mirando los logs de NOD</strong></p>
<p>He aquí algunas líneas del log de mi AV&#8217;s&#8230;</p>
<blockquote><p><em>06/06/2009 12:02:04 a.m.</em><span><em> </em></span><em>HTTP filter</em><span><em> </em></span><em>file</em><span><em> </em></span><em>http://174.133.147.18/p0508/2.0/w2.bin?829467</em><span><em> </em></span><em>probably a variant of Win32/Adware.Coolezweb.AI application</em><span><em> </em></span><em>connection terminated &#8211; quarantined</em><span><em> </em></span><em>NT AUTHORITY\SYSTEM</em><span><em> </em></span><em>Threat was detected upon access to web by the application: C:\WINDOWS\system32\svchost.exe.</em></p>
<p><em>06/06/2009 12:01:56 a.m.</em><span><em> </em></span><em>HTTP filter</em><span><em> </em></span><em>file</em><span><em> </em></span><em>http://174.133.73.178/p0508/2.0/w2.bin?405861</em><span><em> </em></span><em>probably a variant of Win32/Adware.Coolezweb.AI application</em><span><em> </em></span><em>connection terminated &#8211; quarantined</em><span><em> </em></span><em>NT AUTHORITY\SYSTEM</em><span><em> </em></span><em>Threat was detected upon access to web by the application: C:\WINDOWS\system32\svchost.exe.</em></p>
<p><em>06/06/2009 12:01:48 a.m.</em><span><em> </em></span><em>HTTP filter</em><span><em> </em></span><em>file</em><span><em> </em></span><em>http://174.133.34.178/p0612/2.0/w1.bin?413869</em><span><em> </em></span><em>probably a variant of Win32/Adware.Coolezweb.AI application</em><span><em> </em></span><em>connection terminated &#8211; quarantined</em><span><em> </em></span><em>NT AUTHORITY\SYSTEM</em><span><em> </em></span><em>Threat was detected upon access to web by the application: C:\WINDOWS\system32\svchost.exe.</em></p>
<p><em>06/06/2009 12:01:40 a.m.</em><span><em> </em></span><em>HTTP filter</em><span><em> </em></span><em>file</em><span><em> </em></span><em>http://174.133.72.250/p0508/2.0/w1.bin?762274</em><span><em> </em></span><em>probably a variant of Win32/Adware.Coolezweb.AI application</em><span><em> </em></span><em>connection terminated &#8211; quarantined</em><span><em> </em></span><em>NT AUTHORITY\SYSTEM</em><span><em> </em></span><em>Threat was detected upon access to web by the application: C:\WINDOWS\system32\svchost.exe.</em></p>
<p><em>06/06/2009 12:01:29 a.m.</em><span><em> </em></span><em>HTTP filter</em><span><em> </em></span><em>file</em><span><em> </em></span><em>http://174.133.147.18/p0508/2.0/w1.bin?875733</em><span><em> </em></span><em>probably a variant of Win32/Adware.Coolezweb.AI application</em><span><em> </em></span><em>connection terminated &#8211; quarantined</em><span><em> </em></span><em>NT AUTHORITY\SYSTEM</em><span><em> </em></span><em>Threat was detected upon access to web by the application: C:\WINDOWS\system32\svchost.exe.</em></p>
<p><em>06/06/2009 12:01:21 a.m.</em><span><em> </em></span><em>HTTP filter</em><span><em> </em></span><em>file</em><span><em> </em></span><em>http://174.133.73.178/p0508/2.0/w1.bin?233033</em><span><em> </em></span><em>probably a variant of Win32/Adware.Coolezweb.AI application</em><span><em> </em></span><em>connection terminated &#8211; quarantined</em><span><em> </em></span><em>NT AUTHORITY\SYSTEM</em><span><em> </em></span><em>Threat was detected upon access to web by the application: C:\WINDOWS\system32\svchost.exe.</em></p>
<p><em>06/06/2009 12:01:19 a.m.</em><span><em> </em></span><em>Real-time file system protection</em><span><em> </em></span><em>file</em><span><em> </em></span><em>C:\WINDOWS\system32\wtukd32.exe</em><span><em> </em></span><em>probably a variant of Win32/Adware.Coolezweb.AI application</em><span><em> </em></span><em>cleaned by deleting &#8211; quarantined</em><span><em> </em></span><em>NT AUTHORITY\SYSTEM</em><span><em> </em></span><em>Event occurred on a file modified by the application: C:\WINDOWS\system32\svchost.exe.</em></p>
<p><em>06/06/2009 12:01:12 a.m.</em><span><em> </em></span><em>HTTP filter</em><span><em> </em></span><em>file</em><span><em> </em></span><em>http://174.133.34.178/p0612/2.0/w.bin?613307</em><span><em> </em></span><em>probably a variant of Win32/Adware.Coolezweb.AI application</em><span><em> </em></span><em>connection terminated &#8211; quarantined</em><span><em> </em></span><em>NT AUTHORITY\SYSTEM</em><span><em> </em></span><em>Threat was detected upon access to web by the application: C:\WINDOWS\system32\svchost.exe.</em></p>
<p><em>06/06/2009 12:01:04 a.m.</em><span><em> </em></span><em>HTTP filter</em><span><em> </em></span><em>file</em><span><em> </em></span><em>http://174.133.72.250/p0508/2.0/w.bin?333771</em><span><em> </em></span><em>probably a variant of Win32/Adware.Coolezweb.AI application</em><span><em> </em></span><em>connection terminated &#8211; quarantined</em><span><em> </em></span><em>NT AUTHORITY\SYSTEM</em><span><em> </em></span><em>Threat was detected upon access to web by the application: C:\WINDOWS\system32\svchost.exe.</em></p>
<p><em>06/06/2009 12:00:56 a.m.</em><span><em> </em></span><em>HTTP filter</em><span><em> </em></span><em>file</em><span><em> </em></span><em>http://174.133.147.18/p0508/2.0/w.bin?280812</em><span><em> </em></span><em>probably a variant of Win32/Adware.Coolezweb.AI application</em><span><em> </em></span><em>connection terminated &#8211; quarantined</em><span><em> </em></span><em>NT AUTHORITY\SYSTEM</em><span><em> </em></span><em>Threat was detected upon access to web by the application: C:\WINDOWS\system32\svchost.exe.</em></p>
<p><em>06/06/2009 12:00:48 a.m.</em><span><em> </em></span><em>HTTP filter</em><span><em> </em></span><em>file</em><span><em> </em></span><em>http://174.133.73.178/p0508/2.0/w.bin?170629</em><span><em> </em></span><em>probably a variant of Win32/Adware.Coolezweb.AI application</em><span><em> </em></span><em>connection terminated &#8211; quarantined</em><span><em> </em></span><em>NT AUTHORITY\SYSTEM</em><span><em> </em></span><em>Threat was detected upon access to web by the application: C:\WINDOWS\system32\svchost.exe.</em></p>
<p><em>05/06/2009 10:15:47 p.m.</em><span><em> </em></span><em>HTTP filter</em><span><em> </em></span><em>file</em><span><em> </em></span><em>http://bddanhdnfl.net/ccsuper3.php</em><span><em> </em></span><em>Win32/Small.NEK trojan</em><span><em> </em></span><em>connection terminated &#8211; quarantined</em><span><em> </em></span><em>NOTEBOOK\Sparkrisp</em><span><em> </em></span><em>Threat was detected upon access to web by the application: C:\fuwtkxex.exe.</em></p>
<p><em>05/06/2009 10:15:46 p.m.</em><span><em> </em></span><em>Real-time file system protection</em><span><em> </em></span><em>file</em><span><em> </em></span><em>C:\clftq.exe</em><span><em> </em></span><em>Win32/TrojanDownloader.Bredolab.AA trojan</em><span><em> </em></span><em>cleaned by deleting &#8211; quarantined</em><span><em> </em></span><em>NOTEBOOK\Sparkrisp</em><span><em> </em></span><em>Event occurred on a new file created by the application: C:\fuwtkxex.exe.</em></p>
<p><em>05/06/2009 10:15:45 p.m.</em><span><em> </em></span><em>Real-time file system protection</em><span><em> </em></span><em>file</em><span><em> </em></span><em>C:\Documents and Settings\Sparkrisp\Configuración local\Archivos temporales de Internet\Content.IE5\K13ASQ4J\ccsuper2[1].htm</em><span><em> </em></span><em>Win32/TrojanDownloader.Bredolab.AA trojan</em><span><em> </em></span><em>cleaned by deleting &#8211; quarantined</em><span><em> </em></span><em>NOTEBOOK\Sparkrisp</em><span><em> </em></span><em>Event occurred on a new file created by the application: C:\fuwtkxex.exe.</em></p>
<p><em>05/06/2009 10:15:45 p.m.</em><span><em> </em></span><em>HTTP filter</em><span><em> </em></span><em>file</em><span><em> </em></span><em>http://bddanhdnfl.net/ccsuper2.php</em><span><em> </em></span><em>Win32/TrojanDownloader.Bredolab.AA trojan</em><span><em> </em></span><em>connection terminated &#8211; quarantined</em><span><em> </em></span><em>NOTEBOOK\Sparkrisp</em><span><em> </em></span><em>Threat was detected upon access to web by the application: C:\fuwtkxex.exe.</em></p>
<p><em>05/06/2009 10:15:42 p.m.</em><span><em> </em></span><em>HTTP filter</em><span><em> </em></span><em>file</em><span><em> </em></span><em>http://bddanhdnfl.net/ccsuper1.php</em><span><em> </em></span><em>Win32/Small.NEK trojan</em><span><em> </em></span><em>connection terminated &#8211; quarantined</em><span><em> </em></span><em>NOTEBOOK\Sparkrisp</em><span><em> </em></span><em>Threat was detected upon access to web by the application: C:\fuwtkxex.exe.</em></p>
<p><em>05/06/2009 10:15:41 p.m.</em><span><em> </em></span><em>HTTP filter</em><span><em> </em></span><em>file</em><span><em> </em></span><em>http://bddanhdnfl.net/ccsuper0.php</em><span><em> </em></span><em>a variant of Win32/Rustock.NIK trojan</em><span><em> </em></span><em>connection terminated &#8211; quarantined</em><span><em> </em></span><em>NOTEBOOK\Sparkrisp</em><span><em> </em></span><em>Threat was detected upon access to web by the application: C:\fuwtkxex.exe.</em></p>
<p><em>05/06/2009 10:15:18 p.m.</em><span><em> </em></span><em>HTTP filter</em><span><em> </em></span><em>file</em><span><em> </em></span><em>http://bddanhdnfl.net/progs/xadmaa/molivjw.php</em><span><em> </em></span><em>Win32/Small.NEK trojan</em><span><em> </em></span><em>connection terminated &#8211; quarantined</em><span><em> </em></span><em>NOTEBOOK\Sparkrisp</em><span><em> </em></span><em>Threat was detected upon access to web by the application: C:\Documents and Settings\Sparkrisp\Configuración local\Temp\136.exe.</em></p>
<p><em>05/06/2009 10:15:17 p.m.</em><span><em> </em></span><em>HTTP filter</em><span><em> </em></span><em>file</em><span><em> </em></span><em>http://bddanhdnfl.net/progs/xadmaa/djdjjnxlcp.php</em><span><em> </em></span><em>Win32/Small.NEK trojan</em><span><em> </em></span><em>connection terminated &#8211; quarantined</em><span><em> </em></span><em>NOTEBOOK\Sparkrisp</em><span><em> </em></span><em>Threat was detected upon access to web by the application: C:\Documents and Settings\Sparkrisp\Configuración local\Temp\136.exe.</em></p></blockquote>
<p>Bien, nuestra pequeña bestia intentó muchas cosas al mismo tiempo prácticamente. <img src='http://www.disidents.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Aparentemente, nuestro autor, o &#8220;autor&#8221; porque no creo que lo sea de todos estos virusillos, tiene un host y seguramente hace downloaders, para los mismos, estos consultan las url&#8217;s que estamos viendo en el log, baja los troyanos, y finalmente infecta nuestra PC, para robarnos información, tomar el control, etc.</p>
<p><strong>Viendo que hay detrás</strong></p>
<p>Si probamos alguna de las URL&#8217;s, y la ejecutamos en un navegador (sin miedo jejeje), veremos algo por el estilo:</p>
<p><a href="http://www.disidents.org/wp-content/uploads/2009/06/cap1.jpg"><img class="aligncenter size-medium wp-image-190" title="cap1" src="http://www.disidents.org/wp-content/uploads/2009/06/cap1-300x181.jpg" alt="cap1" width="300" height="181" /></a></p>
<p>Exactamente, el binario de uno de los troyanos, el cual NOD lo detecta como: Win32/Small.NEK.</p>
<p>Con una simple mirada en el código binario, podemos ver que está hecho en VB (MSVBVM60.DLL), y otra cosa más, en que carpeta el desarrollador lo tiene al proyecto entero!</p>
<blockquote><p>D:\Documents and Settings\Administrator\Lhb—\installscash active!!nno form wow downloader\mycc\Project1.vbp</p></blockquote>
<p>Aparentemende NOD lo detecta como un troyano, pero es un downloader&#8230;</p>
<p>Luego, veremos nombres de logs, archivos de log, serán archivos generados por el downloader?</p>
<blockquote><p>xdfbxewhrrjdzdfbcvne5gwgaabaz36.log</p>
<p>xdfbxewhrrjdzdfbcvne5gwgaabaz37.log</p>
<p>xdfbxewhrrjdzdfbcvne5gwgaabaz38.log</p>
<p>xdfbxewhrrjdzdfbcvne5gwgaabaz39.log</p></blockquote>
<p>Y la lista sigue&#8230;</p>
<p>Así veremos también en esa misma página, la utilización de la API: urlmonURLDownloadToFile, sabemos que es utilizada para bajar archivos de una URL, muy común en los downloaders. <img src='http://www.disidents.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Si guardamos el fichero obtenido de esa URL (sugiero hacerlo con wget), y utilizan el WKT VB Debugger, podremos ir viendo lo que va a haciendo&#8230;</p>
<p>Algunas de las cosas que veremos es que tiene strings encriptadas, para evitar el desensamblado y la identificación sencilla del virus en cuestión.</p>
<p>Así que debuggearemos un poco para ver que hace&#8230;</p>
<blockquote><p>M8C9S8H5zcX9C9z3Q9UaKbRbA4y0k9EbybPcR9LcUaYby23azcJdOcFaR9z1</p>
<p>M8C9UaH5C9X9Faz3ObUaIdP9w0C4naJaIcEaLaRcOby27bH8Q8EbRcz8NbHdI3b8KaOcFaPbKazcUaB52bJcJdIcD8zaVbLcJcM8z3jaLdz8PbLcN9E9w0H3cb2bibG3w2</p></blockquote>
<div>He aquí algunas de las strings encriptadas&#8230; es simple pensar que utiliza XOR, para encriptarlas, ya que no se necesita mucho más para estas tareas víricas&#8230; <img src='http://www.disidents.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </div>
<div>También veremos cosas como:</div>
<blockquote>
<div>AddService = zgtkg3jrsyzdb6wtgw3rh3wahhrjkae80,,My_AddService_Name</div>
</blockquote>
<div>Quiere decir que este bichito debe instalar un servicio en nuestro sistema&#8230; pero que pícaro&#8230; <img src='http://www.disidents.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </div>
<div>Podemos ver el código interpretado del virus sin necesidad de correrlo en el debugger de WKT&#8230;</div>
<div>Para eso podemos utilizar el VB Decompiler Lite (o el Pro si lo consiguen por ahí&#8230; jeje), y obtendremos lo siguiente:</div>
<div>
<blockquote>
<div>Private Sub MZ_4051D4</div>
<div>loc_404908: OnErrorGoto 0</div>
<div>loc_40490D: LitStr &#8220;M8C9S8H5zcX9C9z3Q9UaKbRbA4y0k9EbybPcR9LcUaYby23azcJdOcFaR9z1&#8243;</div>
<div>loc_404910: ImpAdCallI2 proc_403FBC</div>
<div>loc_404915: FStStr var_A0</div>
<div>loc_404918: LitI4 0</div>
<div>loc_40491D: FLdZeroAd var_A0</div>
<div>loc_404920: CVarStr var_94</div>
<div>loc_404923: ImpAdCallFPR4 Shell</div>
<div>loc_404928: FStFPR8 var_9C</div>
<div>loc_40492B: FFree1Str var_A0</div>
<div>loc_40492E: FFree1Var var_94 = &#8220;&#8221;</div>
<div>loc_404933: LitStr &#8220;Q9Fcz3ybKbLbCaIbCbB5z3y2RcObybObRdybx1R8OcAbVdOc0bA468cbib5a2abd698a&#8221;</div>
<div>loc_404936: ImpAdCallI2 proc_403FBC</div>
</blockquote>
<div>Podemos ver los strings encriptados, y en la línea siguiente las llamadas a un proceso en la dirección 403FBC. Esta función se encarga de desencriptar los strings.</div>
</div>
<div>Si abrimos este programa con el debugger de WKT, veremos que la función en 403FBC hacela desencripción, y finalmente después de cada proceso de desencripción, y más adelante, la ventana de mensajes nos irá diciendo algo como esto:</div>
<blockquote>
<div>FStStr -&gt; &#8216;sc config   wscsvc start= DISABLED&#8217;</div>
<div>
<div>FStStrNoPop -&gt; &#8216;C:\DOCUME~1\SPARKR~1\CONFIG~1\Temp\zgtkg3jrsyzdb6wtgw3rh3wahhrjkae35.log&#8217;</div>
<div>FStStrNoPop -&gt; &#8216;C:\DOCUME~1\SPARKR~1\CONFIG~1\Temp\zgtkg3jrsyzdb6wtgw3rh3wahhrjkae43.exe&#8217;</div>
<div>FStStrNoPop -&gt; &#8216;zgtkg3jrsyzdb6wtgw3rh3wahhrjkae81.exe&#8217;</div>
</div>
</blockquote>
<div>Veremos que ejecuta nada más ni nada menos que un comando de DOS, que intenta deshabilitar el servicio de firewall de Windows y Centro de Seguridad, luego grabará un archivo de log , el EXE y seguirá con otro&#8230;</div>
<div>CVarStr -&gt; &#8216;net.exe stop &#8220;Security Center&#8221;&#8216;</div>
<div>
<div>FStStr -&gt; &#8216;sc config   wscsvc start= DISABLED&#8217;</div>
<div>FStStrNoPop -&gt; &#8216;C:\DOCUME~1\SPARKR~1\CONFIG~1\Temp\zgtkg3jrsyzdb6wtgw3rh3wahhrjkae35.log&#8217;</div>
<div>FStStrNoPop -&gt; &#8216;C:\DOCUME~1\SPARKR~1\CONFIG~1\Temp\zgtkg3jrsyzdb6wtgw3rh3wahhrjkae43.exe&#8217;</div>
<div>FStStrNoPop -&gt; &#8216;zgtkg3jrsyzdb6wtgw3rh3wahhrjkae81.exe&#8217;</div>
</div>
<div>Veremos otras strings como:</div>
<div>
<blockquote>
<div>Concat-&gt;&#8217;C:\DOCUME~1\SPARKR~1\CONFIG~1\Temp&#8217; + &#8216;\zgtkg3jrsyzdb6wtgw3rh3wahhrjkae79.inf&#8217;</div>
<div>FStStr -&gt; &#8216;C:\DOCUME~1\SPARKR~1\CONFIG~1\Temp\zgtkg3jrsyzdb6wtgw3rh3wahhrjkae79.inf&#8217;</div>
</blockquote>
</div>
<div>Cuando decompilemos el programita este, veremos que la función de la dirección 4043E4 se encarga de instalar el servicio del que les hablaba antes&#8230; el servicio llevará el nombre de:  zgtkg3jrsyzdb6wtgw3rh3wahhrjkae81.</div>
<div><a href="http://www.disidents.org/wp-content/uploads/2009/06/servicio2.jpg"><img class="aligncenter size-medium wp-image-193" title="servicio2" src="http://www.disidents.org/wp-content/uploads/2009/06/servicio2-300x187.jpg" alt="servicio2" width="300" height="187" /></a></div>
<div>Si ejecutan el programa, lo podrán ver en la lista de servicios, así que podrán deshabilitarlo&#8230;</div>
<div><strong>Viejo Truco</strong></div>
<div><strong><br />
</strong></div>
<div>Dije antes, que utiliza la famosa API para bajar un archivo de una URL en particular&#8230; hay trucos para evitar que los antivirus detecten que se está utilizando, generalmente la heurística detecta todo y está sonado.. <img src='http://www.disidents.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </div>
<div>Este virus, no es la excepción, y el truco que usa, está en la función 40417C.</div>
<div>Concatena cada letra del nombre de las API&#8217;s que pueden llamar la atención a nuestros Antivirus (AV&#8217;s)&#8230;</div>
<div>
<blockquote>
<div>loc_40401D: LitStr &#8220;U&#8221;</div>
<div>loc_404020: LitStr &#8220;R&#8221;</div>
<div>loc_404023: ConcatStr</div>
<div>loc_404024: FStStrNoPop var_A0</div>
<div>loc_404027: LitStr &#8220;L&#8221;</div>
<div>loc_40402A: ConcatStr</div>
<div>loc_40402B: FStStrNoPop var_A4</div>
<div>loc_40402E: LitStr &#8220;D&#8221;</div>
<div>loc_404031: ConcatStr</div>
<div>loc_404032: FStStrNoPop var_A8</div>
<div>loc_404035: LitStr &#8220;o&#8221;</div>
<div>loc_404038: ConcatStr</div>
<div>loc_404039: FStStrNoPop var_AC</div>
<div>loc_40403C: LitStr &#8220;w&#8221;</div>
<div>loc_40403F: ConcatStr</div>
<div>loc_404040: FStStrNoPop var_B0</div>
<div>loc_404043: LitStr &#8220;n&#8221;</div>
<div>loc_404046: ConcatStr</div>
<div>loc_404047: FStStrNoPop var_B4</div>
</blockquote>
<div>Luego si miramos más el proyecto veremos que tiene una función para ejecutar las API&#8217;s de alguna manera especial.. no entraremos tanto en detalle, vamos a seguir mirando que mas nos ofrece&#8230;</div>
<div><strong>Siguiendo el rastro</strong></div>
<div>Si dejamos a este bichito ejecutarse un par de días, seguirá bajando copias y variantes de sí mismo. Parece que los programadores de estos downloaders, son muy activos, en dos días he bajado como 3 o 4 versiones del mismo downloader, con algunas diferencias&#8230;</div>
<div><a href="http://www.disidents.org/wp-content/uploads/2009/06/inicio2.jpg"><img class="aligncenter size-medium wp-image-196" title="inicio2" src="http://www.disidents.org/wp-content/uploads/2009/06/inicio2-300x129.jpg" alt="inicio2" width="300" height="129" /></a></div>
<div>Tenemos otro que modifica el registro de windows, instalándose en el inicio, para hacer las conecciones remotas, cada vez que arranca el sistema operativo.</div>
<div><a href="http://www.disidents.org/wp-content/uploads/2009/06/inicio.jpg"><img class="aligncenter size-medium wp-image-197" title="inicio" src="http://www.disidents.org/wp-content/uploads/2009/06/inicio-300x191.jpg" alt="inicio" width="300" height="191" /></a></div>
<div>Por ejemplo existe otra variante, la que se instala al inicio, que no instala el servicio&#8230; <img src='http://www.disidents.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </div>
<div>En la segunda imagen de inicio, marco otros sospechosos que encontré, no sé si son de este virus o de otro que tengo xDDD, si es de otro, quizás tengamos más diversión xD&#8230;</div>
<div>Al ver que instala servicios, se me ocurre correr la utilidad GMER, muy utilizada. Y me avisa de una instalación de un servicio oculto&#8230;</div>
<div><a href="http://www.disidents.org/wp-content/uploads/2009/06/servicio3.jpg"><img class="aligncenter size-medium wp-image-198" title="servicio3" src="http://www.disidents.org/wp-content/uploads/2009/06/servicio3-300x226.jpg" alt="servicio3" width="300" height="226" /></a></div>
<div>Podemos desinstalarlo y borrarlo con GMER, sin problemas, al próximo reinicio no estará más. Si queremos analizarlo un poco más con IDA no veremos mucho, así que o Softice o Syser Debugger, que es bastante bueno también. <img src='http://www.disidents.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </div>
<div>Bien, como dije cada uno de los &#8220;hijos&#8221; tiene sus características, la idea principal calculo que será infectarnos y hacernos zombies de alguna manera, o robarnos información, a su vez con una rápida actualización de los downloaders, los cuales no fueron detectados por NOD 4.0, sino que éste detectó las conecciones hacia el host.</div>
<div><a href="http://www.disidents.org/wp-content/uploads/2009/06/hijos.jpg"><img class="aligncenter size-medium wp-image-199" title="hijos" src="http://www.disidents.org/wp-content/uploads/2009/06/hijos-300x225.jpg" alt="hijos" width="300" height="225" /></a></div>
<div>Los dos ficheros de inicio, que tenía yo en mi PC, aparentemente están empaquetados, veremos con una pequeña sesión de Olly que sale&#8230;en la segunda parte.. xD</div>
<div>Veremos varias cosas más, otros archivos ocultos especialmente en las carpetas system32 de nuestro windows&#8230;. pero eso será como dije en la próxima&#8230;</div>
<div>Espero que les esté gustando.</div>
<div>Un saludo.</div>
</div>
 <span class="post2pdf_span" style="border: 1px solid gray; width: 160px; text-align: left; "><a href="http://www.disidents.org/wp-content/plugins/post2pdf/generate.php?post=" rel="nofollow"><img src="http://www.disidents.org/wp-content/plugins/post2pdf/icon/pdf.png" width="16px" height="16px" />convert this post to pdf.</a></span>]]></content:encoded>
			<wfw:commentRss>http://www.disidents.org/2009/07/02/wow-tengo-un-huesped-en-mi-pc-d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lockless X-Lock Crackme #1 &#8211; (Old Session 2002)</title>
		<link>http://www.disidents.org/2009/06/14/lockless-x-lock-crackme-1-old-session-2002/#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=lockless-x-lock-crackme-1-old-session-2002</link>
		<comments>http://www.disidents.org/2009/06/14/lockless-x-lock-crackme-1-old-session-2002/#comments</comments>
		<pubDate>Sun, 14 Jun 2009 17:00:57 +0000</pubDate>
		<dc:creator>spark</dc:creator>
				<category><![CDATA[Spark - @rroba]]></category>
		<category><![CDATA[@rroba]]></category>
		<category><![CDATA[Cracking]]></category>
		<category><![CDATA[Ingeniería Inversa]]></category>
		<category><![CDATA[Old Reversing Session]]></category>
		<category><![CDATA[Reversing Engineering]]></category>
		<category><![CDATA[Reversing Links]]></category>
		<category><![CDATA[SparK]]></category>

		<guid isPermaLink="false">http://www.disidents.org/?p=180</guid>
		<description><![CDATA[En la lección de este mes, les traigo un amigable crackme, que según el autor (  y con razón) es un tutorial, si lo desensamblamos, así que les pegaré el código y eso es todo… jeje , era broma, lo iremos descubriendo de a poco, y aprenderemos juntos. Nos encontramos con una protección que no [...]]]></description>
			<content:encoded><![CDATA[<p>En la lección de este mes, les traigo un amigable crackme, que según el autor (  y con razón) es un tutorial, si lo desensamblamos, así que les pegaré el código y eso es todo… jeje , era broma, lo iremos descubriendo de a poco, y aprenderemos juntos. <img src='http://www.disidents.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Nos encontramos con una protección que no habíamos analizado aun, esta proteccion, es parecida a las utilizadas en los keymes, donde necesitamos un fichero clave para que el programa este registrado, este fichero clave contiene ciertas caracteristicas muy importantes que hacen, que se este registrado o no.</p>
<p>Bueno, este crackme no es un keyme, pero al principio actua como un keyme, nada mas que chequea un par de cosillas distintas, que ya veremos.</p>
<p><strong>Reglas de Juego</strong></p>
<p>Cuando ejecutamos el Crackme , tenemos en la pantalla principal de este, dos botones, y a la izquierda de estos, dos labels, que dicen Shareware y Unregistered.</p>
<p>Miremos en el boton About/Rules, donde nos dice, que hay tres caminos para crackear el crackme, y luego como les comente al principio del articulo, si lo desensamblamos, este crackme, es un tutorial por si mismo, tenemos permitido usar desensamblador y parchear; y por ultimo dice que si somos mejores con SoftIce, lo hagamos con SoftIce, pero nosotros no usaremos SoftIce, usaremos Olly Debugger, asi que no lo desensamblaremos, ni lo parchearemos fisicamente, solo en memoria.</p>
<p><strong>Un poco de teoría</strong></p>
<p>Desensamblemos el crackme, y veremos la pantalla principal de debugger, con el codigo ensamblador mostrandonos como es nuestra victima, debo decirles, que es un poco enradada, pero no nos asusteis, esta todo controlado…</p>
<p>Comenzamos en la dirección 401000, con un recibimiento poco comun en los crackmes (lo he  visto en algunos programas y juegos comerciales, y bastantes nuevos), nada mas ni nada menos que un “Hi Reverser”,</p>
<p>¿ pero quien es el reverser aquí ?, SI! Nosotros, o eso creo….</p>
<p>Luego otro PUSH ( que lo que hace es cargar con una direccion de memoria la cual apuna al string, el string propiamente dicho) que nos dice “Here Starts the test for the Versión” (Aquí empieza el chequeo por la versión).</p>
<p>Nueve instrucciones mas abajo encontramos otro texto que es PUSHeado a la memoria diciendo: “Here end the test for the Versión” (Aquí termina el chequeo por la verision).</p>
<p>Con razon el creador dijo que esto era un tutorial, miren, si nos marca el sector donde hace el chequeo para decirnos si esta registrado o no el programa, nosotros debemos conseguir que en esos dos labels que hay al ejecutarlo en la pantalla principal diga que esta registrado.</p>
<p>Bien, veamos que podemos hacer aquí tenemos lo siguiente:</p>
<p><a href="http://www.disidents.org/wp-content/uploads/2009/06/principalcrackme.jpg"><img class="aligncenter size-medium wp-image-181" title="principalcrackme" src="http://www.disidents.org/wp-content/uploads/2009/06/principalcrackme-300x211.jpg" alt="principalcrackme" width="300" height="211" /></a></p>
<p>En la direccion 0040100B  , la instrucción MOV [DWORD DS:40300C],1 y en la direccion 00401015 , la instrucción MOV [DWORD DS:403008],1 ;  analicemos para que sirven y porque las nombro de entre todas las demas, ¿ ustedes piensan que tienen coronita ? pues no, no la tienen, o de algun modo si… <img src='http://www.disidents.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Los dos MOV’s mueven un 1 en decimal, a dos direcciones de memoria diferentes…. Anotemos la direccion 403008.</p>
<p>Más abajo en la dirección 00401021 , tenemos la instruccion  LEA EAX,[DWORD DS:403010], que carga el valor que esta en la zona de memoria 403010 a  EAX, y luego la instrucción de la direccion 00401029 que nos dice:</p>
<p><a href="http://www.disidents.org/wp-content/uploads/2009/06/captura1reg1deverdad.jpg"><img class="aligncenter size-medium wp-image-183" title="captura1reg1deverdad" src="http://www.disidents.org/wp-content/uploads/2009/06/captura1reg1deverdad-300x43.jpg" alt="captura1reg1deverdad" width="300" height="43" /></a></p>
<p>CMP EAX,X-LOCK~1.00403012</p>
<p><a href="http://www.disidents.org/wp-content/uploads/2009/06/captura1reg2deverdad.jpg"><img class="aligncenter size-medium wp-image-184" title="captura1reg2deverdad" src="http://www.disidents.org/wp-content/uploads/2009/06/captura1reg2deverdad-300x24.jpg" alt="captura1reg2deverdad" width="300" height="24" /></a></p>
<p>Luego viene nuestro push querido indicandonos el fin del programa, un pop eax, y un salto JE, que nos lleva  a la direccion 401040….</p>
<p><strong>Algo muy notorio</strong></p>
<p>Muy bien, ¿que es lo notorio?, ese salto a 401040 nos lleva a continuar el flujo del programa normalmente, ¿pero que sucede si este salto no se realiza?, veamos:</p>
<p>00401036   MOV [DWORD DS:403008],0</p>
<p>¿Pero que sucede aquí?, en 403008, la que yo les dije que recordaran , pone un 0!!!, ¿porque? Sigamos mirando y deduzcamos si ese 0 es necesario para estar registrados o no…</p>
<p><a href="http://www.disidents.org/wp-content/uploads/2009/06/chequeaeaxpor1.jpg"><img class="aligncenter size-medium wp-image-185" title="chequeaeaxpor1" src="http://www.disidents.org/wp-content/uploads/2009/06/chequeaeaxpor1-300x12.jpg" alt="chequeaeaxpor1" width="300" height="12" /></a></p>
<p>Mas adelante en el programa , carga la ventana principal, en la direccion 401077 chequea , por si se ha clickeado un boton, y si es asi, pregunta cual de ellos, etc, etc. Esta rutina es comun en todos los programas, ya que es la rutina principal que chequea por cada opcion, o boton , si fue presionado o no, y en caso afirmativo se deriva el flujo del programa a la direccion correspondiente a la accion solicitada por el usuario.</p>
<p>Lo bueno comienza en la direccion 0040109D, donde nos encontramos el push identico, al primero que vimos en la apertura del programa desensamblado, y unas lineas de codigo mas abajo el otro push que nos indica que finaliza la seccion de registro, tal cual en el principio.</p>
<p>¿ Se acuerdan de los mirror checks que yo les habia explicado en articulos anteriores ?, bien, aquí lo tienen, la proteccion se repite en dos zonas de memoria distintas, o sea, que si nosotros parcheamos solamente la primera, o encontramos la segunda y parcheamos solamente esta, la otra seguira actuando normalmente y no nos dejara el programa registrado, por supuesto todo esto depende de cómo el programa este implementado, porque en nuestro caso, con modificar el segundo chequeo , nuestro crackme ya esta completamente funcional.</p>
<p>Fijense que en la direccion 0040109D vuelve a hacer lo mismo que antes.</p>
<p>Carga en EAX, lo que contiene la direccion 403010 y lo compara con lo que hay en la direccion 403012, si no llegan a ser iguales en la direccion 004010AD salta a la direccion 004010B9, pero la instrucción MOV [DWORD DS:40300C],0 de la linea anterior no es ejecutada, si se produce el salto, pero miren atentamente moveria un 0 decimal a la direccion 40300C, es otra zona!, es un doble chequeo, pero chequea dos zonas distintas de memoria, miremos mas,</p>
<p>miremos mas….. <img src='http://www.disidents.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://www.disidents.org/wp-content/uploads/2009/06/redireccion.jpg"><img class="aligncenter size-medium wp-image-182" title="redireccion" src="http://www.disidents.org/wp-content/uploads/2009/06/redireccion-300x90.jpg" alt="redireccion" width="300" height="90" /></a></p>
<p>En la direccion 004010A2  tenemos un  LEA EAX,[DWORD DS:403010], 403010 tiene un 31 en hexa (1 en decimal), lo que al compararlo en 4010A8 con el valor de 00403012 que contiene un 30 en decimal (0 en decimal), hara que no salte y entonces el mov de la direccion 004010AF pondra a 40300C en  0 y no estaremos registrados.</p>
<p>A partir de la direccion de memoria 4010E6 hasta 4010EE tenemos lo siguiente:</p>
<p>MOV EAX,[DWORD DS:403008]   ;  mueve lo que contiene 403008 a EAX</p>
<p>CMP EAX,1<span> </span> ; lo compara con 1</p>
<p>JNZ SHORT X-LOCK~1.00401105 ; y luego si no es igual salta a 401105</p>
<p>Mas abajo miremos, las strings cargadas…</p>
<p>004010F6  |. 50             PUSH EAX                                 ; /Text =&gt; &#8220;Fullversion&#8221;</p>
<p>00401115  |. 50             PUSH EAX                                 ; /Text =&gt; &#8220;Registered&#8221;</p>
<p>Necesitamos que estas strings se carguen, para que nuestro crackme funcione correctamente!!!, pero como podemos hacerlo??? Bien, el salto de la direccion 4010EE no nos lleva a poder ejecutar esas strings, por lo menos la de Fullversion no, pero sin embargo salta a una direccion anterior a la de la string “Registered”, salta a 401105, y “Registered”, esta en 401115, o sea que algo debe haber en el medio..  &gt;: \</p>
<p>Perfecto, en la dirección 401105 tenemos lo mismo que en la direccion 4010E6 nada mas que el MOV EAX,[DWORD DS:403008]  , cambia por MOV EAX,[DWORD DS:40300C]  , aquí sucede lo mismo que antes, si no se cumple la misma condicion, o sea en la direccion 40300C no esta el valor 1 decimal, tampoco carga la string “Registered”, y nuestro programa no estaria ni completo (Fullversion) ni registrado (Registered).</p>
<p><a href="http://www.disidents.org/wp-content/uploads/2009/06/poneeditsregistrado.jpg"><img class="aligncenter size-medium wp-image-186" title="poneeditsregistrado" src="http://www.disidents.org/wp-content/uploads/2009/06/poneeditsregistrado-300x53.jpg" alt="poneeditsregistrado" width="300" height="53" /></a></p>
<p><strong>Alternativas de Cracking:</strong></p>
<p>Hay muchas alternativas, para hacer que nuestro pequeño funcione, podemos modificar los saltos de las direcciones 401034 y 4010EE, entonces como los valores de las direccion 403008 y 40300C seran 0 saltara, y nos hara registrar, simplemente cambiar los JNZ por JZ y listo, o sino por JMP y estos se transformaran en saltos INcondicionales, o sea, no importa si son iguales o no los valores, el salto se realiza igual.</p>
<p>Otra alternativa mas “elite”, y menos sucia que cambiar saltos y forzar el flujo del programa, es modificar la instrucción LEA de la direccion 00401021  , donde mueve lo que contiene 403010 a EAX, como lo que contiene 403010 es un 1 en decimal, siempre no saltara y nos pondra en 403008 el valor 0 con lo que no estaremos registrados nunca, entonces ¿por cual valor podemos moficar el operando de la instrucción LEA? Por una direccion de memoria como por ejemplo 403012, que contiene 0, entonces cuando llegue al CMP EAX, 403012, simplemente comparara el valor que contiene 403012 con el que contiene 403012, ¿resultado?, se produce el salto, y asi nuestro soldadito atrapado en  403008 (el 1), seguira vivo y no sera machacado….</p>
<p>Otra alternativa seria cambiar el CMP EAX,403012 por 403010, ya que, sera lo mismo, nada mas que en 403010 hay un 1 y no un 0 decimal como en 403012.</p>
<p>Luego en 004010A2 podemos modificar la instrucción LEA , por 403012, o inclusive podemos hacer un MOV EAX,0  y seria suficiente porque 403012 contiene un 0 decimal, y debemos hacer que el salto se produzca, y como el salto se produce cuando son iguales, pues ya lo tenemos <img src='http://www.disidents.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Tambien podemos modificar el CMP, como en la zona de chequeo anterior o el salto JNZ.</p>
<p><strong>Triunfadores:</strong></p>
<p>Hemos  triunfado de nuevo, como podemos ver, nos aparece una ventanita, diciendonos, que hemos craqueado exitosamente el crakme, y que esperemos el segundo que sera mas difícil de crackear, ¿lo sera? Quizas si…. Quizas no….</p>
<p>¡Hasta la próxima!</p>
 <span class="post2pdf_span" style="border: 1px solid gray; width: 160px; text-align: left; "><a href="http://www.disidents.org/wp-content/plugins/post2pdf/generate.php?post=" rel="nofollow"><img src="http://www.disidents.org/wp-content/plugins/post2pdf/icon/pdf.png" width="16px" height="16px" />convert this post to pdf.</a></span>]]></content:encoded>
			<wfw:commentRss>http://www.disidents.org/2009/06/14/lockless-x-lock-crackme-1-old-session-2002/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ParaBytes Reverseme #4 &#8211; (Old Session 2002)</title>
		<link>http://www.disidents.org/2009/06/07/parabytes-reverseme-4/#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=parabytes-reverseme-4</link>
		<comments>http://www.disidents.org/2009/06/07/parabytes-reverseme-4/#comments</comments>
		<pubDate>Sun, 07 Jun 2009 15:45:27 +0000</pubDate>
		<dc:creator>spark</dc:creator>
				<category><![CDATA[Spark - @rroba]]></category>
		<category><![CDATA[@rroba]]></category>
		<category><![CDATA[Ingeniería Inversa]]></category>
		<category><![CDATA[Parabyte]]></category>
		<category><![CDATA[Reverseme]]></category>
		<category><![CDATA[Reversing Links]]></category>
		<category><![CDATA[SparK]]></category>

		<guid isPermaLink="false">http://www.disidents.org/?p=165</guid>
		<description><![CDATA[Hemos llegado a una parte muy interesante de este curso, bienvenidos nuevamente a otro fascinante episodio de esta sección. Espero que les guste y que les sea de agrado leerla, he elegido un elaborado Reverseme de ParaBytes aún sin solución, nosotros no implementaremos la solución completa, pero pasen y vean, vean que bestia he atrapado. [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">Hemos llegado a una parte muy interesante de este curso, bienvenidos nuevamente a otro fascinante episodio de esta sección.</p>
<p style="text-align: left;">Espero que les guste y que les sea de agrado leerla, he elegido un elaborado Reverseme de ParaBytes aún sin solución, nosotros no implementaremos la solución completa, pero pasen y vean, vean que bestia he atrapado. <img src='http://www.disidents.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Bien, había comentado anteriormente que es un Reverseme, pero para todos aquellos que no lo sepan, o aún no lo entiendan, un Reverseme es justamente un programa el cual hay que agregarle, activarle, reprogramarle alguna función.</p>
<p>Estas funciones son dadas por el programador, como reglas del juego, como veremos mas adelante, tenemos reglas para jugar con nuestro Reverseme elegido, muy entretenidas, cubriremos la mayor parte de estas reglas, que son muy sencillas, y les ayudará muchísimo a la hora de entender alguna víctima de este tipo, o quizás nuevas, porque todo este conocimiento es reciclable.</p>
<p><strong>Reglas de Juego</strong></p>
<p>Bueno, el Reverseme nos dice, que tenemos un solo botón, llamado Exit, que justamente lo que hace es salir del programa; pero también hay un misterioso lugar arriba que nada esta ocupándolo, veremos porqué.</p>
<p>Esto es así porque, justamente lo que debemos hacer es crear un botón nuevo, en ese espacio, y luego programarlo para que muestre un número aleatorio en un messagebox, parece sencillo no?, veamos que sucede más adelante.<br />
<img class="aligncenter size-medium wp-image-166" title="captura1" src="http://www.disidents.org/wp-content/uploads/2009/06/captura1-300x183.jpg" alt="captura1" width="300" height="183" /></p>
<p><strong>Un poco de teoría</strong></p>
<p>Veamos algunas definiciones nuevas para los iniciados, y renovemos a los ya iniciados con un poco de teoría que no viene nada mal.</p>
<p>Un archivo PE,NE,MZ, ELF, COM, o cualquier formato que tengamos que analizar o modificar, debemos estudiar en primera instancia su estructura. Un fichero PE (los mas comunes de win32) está dividido en secciones, PE significa Portable Executable, y algunos nombres comunes de secciones que se suelen encontrar en un PE normal son: .code, .data, .rsrc, .udata, .text, .edata, y algunos más que posiblemente ahora no recuerde bien, pero para que más, esos son los más importantes.</p>
<p>Por supuesto que la cosa cambia cuando el EXE esta empaquetado, las secciones suelen cambiar sus características , incluyendo su nombre y demás atributos.</p>
<p>Cada sección, posee atributos, como el de ejecutable, o el de lectura, compartido, etc. Con un editor de  archivos PE pueden verse las secciones fácilmente, un programa para ello es PE-Editor, muy útil en estos casos, permite volcar secciones, editarlas, analizarlas, etc.</p>
<p>Cuando un programa es ejecutado, este es volcado en gran parte en memoria, o al menos el código que será ejecutado dentro de poco tiempo en memoria, esto hace que la mayoría de los recursos del archivo EXE se vuelquen también en memoria, y tengamos casi todo ahí para servirnos de ese manjar.</p>
<p>Cuando tenemos un Reverseme de este estilo que debemos AGREGAR un botón, justamente, debemos agregar código, y eso requiere cambios en el flujo del programa, cambios lógicos, o sea que no hagan que el programa se corrompa ni produzca errores, debemos controlarlo, para poder hacer lo que queramos hacer con él, ésta manera, es la mejor manera de entender el ensamblador  y que sucede dentro de la PC en Windows por ahora.</p>
<p><strong>Desviación del Flujo de Programa</strong></p>
<p>Debemos graficar esta situación, esta modificación es en primera instancia en memoria, luego podemos transladarla al archivo físicamente parcheándolo y dejándole agregada la función para siempre, pero antes para hacer todo esto debemos graficarnos como modificar el flujo de un programa.</p>
<p>Los virus hacen algo parecido al infectar EXE&#8217;s, justamente cambian el flujo de su víctima, para que el virus se ejecute primero y luego, infecta, o hace sus cosas malas, y luego le da el lugar a la víctima a que se ejecute normalmente; antes en DOS, se calculaba la cabecera del EXE, y luego se le agregaba el código de operación de un salto incondicional con la dirección en la que empezaba el virus, de esta manera, el programa lo primero que hacía era, ir al virus a través de ese salto y luego volver.</p>
<p>Algo parecido haremos aquí, primero dejaremos que muchas cosas propias del programa se ejecuten, porque no lo infectaremos, simplemente le agregaremos algunas cosas, así que debemos observar la víctima mirarla bien donde hay que agregar, como funciona y demás para luego decidir donde agregar y porque.</p>
<p>En programación en Win32Asm, tenemos que cualquier programa  que programemos en este lenguaje, tiene un bucle, este se denomina bucle de mensajes, y es ejecutado por cada programa siempre, para saber si algún mensaje fue enviado a ese programa, como por ejemplo el clickeo en un botón, la minimización del programa y muchísimas cosas más.</p>
<p>Generalmente las API&#8217;s ejecutadas son GetMessage, TranslateMessage y DispatchMessage, son utilizadas para este fin, de esta forma, ubicar este bucle se nos hace muy fácil simplemente buscando estas API&#8217;s.</p>
<p>Generalmente cuando el programa se está cargando antes que nada, genera los recursos, o sea, la ventana, los botones, y todos los componentes que necesita para funcionar, estos son generados de diversas maneras, dependiendo el lenguaje en el que fué programado.</p>
<p>Por ejemplo en algunos programas hechos en Delphi , se utiliza el API LoadResource, mientras que en Win32Asm, se suele hacer de distintas maneras, generalmente se hace de la manera más tradicional, llamando a CreateWindowExa, para crear botones, ventanas , y demás componentes.</p>
<p>Pero esta API lleva parámetros que deben ser introducidos y respetados para que todo funcione como queremos.</p>
<p>Si ubicamos la rutina que crea un botón, ya podemos modificarla un poco y agregarla en algún lugar libre para redireccionar el programa hacia ese lugar en el momento que se comienzan a cargar los recursos para también cargar el nuestro que agregaremos, y luego devolverle el control para que el programa siga su rumbo normal sin ningún tropiezo.</p>
<p>Bien, grafiquemos esto:</p>
<p>Inicio del Programa &#8212;&gt; Carga de Recursos – PARCHEO &#8211; &#8212;&gt; desvío hacia nuevo código &#8212;&gt; retorno al código original</p>
<p>Sabiendo que debemos hacer, analicemos nuestro amiguito, con Language vemos en que lenguaje está programado, cuando vemos que nada nos pone, es que está hecho en el lenguaje más puro Win32Asm, si señor, miremoslo, porque todo está entregado, no hay runtimes, ni llamadas a DLL&#8217;s sin sentido , ni cosas raras, es ASM, puro y simple.</p>
<p>Si lo desensamblamos, y miramos con W32Dasm, vamos a la ventana de String References y vemos una palabra BUTTON, bueno ahí tienes hijo, el botón declaradísimo, más claro imposible. <img src='http://www.disidents.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Hagamos doble click en la palabra, y nos lleva a la dirección donde parece que se declara el tipo de botón, nombre de este, y muchas cosas mas, luego si miramos mas abajo podemos observar que se llama a CreateWindowExa, exacto, con eso se crea el botón.</p>
<p>Ahora, una idea brillante se me ha ocurrido (milagro), podemos reutilizar este código ya compilado para usarlo para nuestros propósitos que en este caso es agregarle un botón más, por ahora, solamente haremos eso.</p>
<p>Bien, el código para la declaración del botón empieza con PUSH en la dirección 4011CB, si miramos más abajo podemos observar que en la dirección 4011E8 se encuentra el título del único botón que hay en el programa (hasta ahora), “Exit”, y una línea más abajo está el texto “BUTTON”,  estamos por buen camino. <img src='http://www.disidents.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://www.disidents.org/wp-content/uploads/2009/06/captura2.jpg"><img class="aligncenter size-medium wp-image-169" title="captura2" src="http://www.disidents.org/wp-content/uploads/2009/06/captura2-284x300.jpg" alt="captura2" width="284" height="300" /></a></p>
<p>Luego podemos ver que ingresa muchos parámetros más y luego ejecuta la API CreateFontA, que lo que hace justamente es darle un tipo de letra al botón, nosotros haremos exactamente lo mismo con el nuestro, luego ejecuta la API SendMessage simplemente para poner la letra al botón.</p>
<p>Nosotros copiaremos enteramente desde 4011CB a 40123D, y modificaremos, algunas cosas, si miramos el PUSH que pushea el texto “Exit”, este nos dice una dirección, que es 40303C, nosotros modificaremos ese PUSH poniendo un PUSH pero a una dirección lejana que sabemos que no será utilizada por nadie como por ejemplo 403FF8, ahí pondremos cualquier texto, con el Olly, simplemente apretamos control+G en la ventana de datos y ponemos esa dirección, luego seleccionamos 8 bytes y hacemos click en el botón derecho, haciendo click en la opción para modificar los datos, introducimos el texto que queramos, y listo.</p>
<p style="text-align: center;"><a href="http://www.disidents.org/wp-content/uploads/2009/06/captura3.jpg"><img class="size-medium wp-image-171 aligncenter" title="captura3" src="http://www.disidents.org/wp-content/uploads/2009/06/captura3-300x186.jpg" alt="captura3" width="300" height="186" /></a></p>
<p>Ahora, debemos cambiar el ID del botón, el del Exit es 7A69, el cual modificaremos y le pondremos uno más 7A6A por ejemplo. Nuestro botón debe tener distinto ID para poder poder existir y sobrevivir, sino haría conflictos con el existente.</p>
<p><a href="http://www.disidents.org/wp-content/uploads/2009/06/captura3.jpg"><img class="aligncenter size-medium wp-image-171" title="captura3" src="http://www.disidents.org/wp-content/uploads/2009/06/captura3-300x186.jpg" alt="captura3" width="300" height="186" /></a></p>
<p>Ahora si miramos un poco más arriba vemos que en 4011C5 y más arriba también está el bucle de mensajes del programa, el cual nos centraremos en 4011AC, que es donde pregunta por el ID del botón Exit, deberá hacer lo mismo para nuestro botón, asi que debemos parchear esa parte también de esta manera:</p>
<p>claramente se observa que exit sale del programa, o sea la API que hay mas abajo PostQuitMessage es ejecutada, quiere decir que cundo hacemos click en ese botón el salto JNZ que hay antes no se ejecuta, este se ejecuta cuando NO es clickeado el botón, o sea que si es presionado el nuestro, ahí podemos redireccionar con una dirección distinta hacia nuestro código, para que haga un CMP con nuestro ID tal cual como lo hizo con exit y luego un nuevo JNZ, y ahí si éste será idéntico al que modificaremos ahora, ¿porque? Pues porque este JNZ nos lleva a otra parte del bucle principal del programa que se encarga de los mensajes también, si no lo hacemos nuestro programa puede romperse y salir de repente o inclusive trabar a nuestro querido Windows.</p>
<p style="text-align: center;"><a href="http://www.disidents.org/wp-content/uploads/2009/06/captura4.jpg"><img class="size-medium wp-image-172 aligncenter" title="captura4" src="http://www.disidents.org/wp-content/uploads/2009/06/captura4-300x118.jpg" alt="captura4" width="300" height="118" /></a></p>
<p>Bien, he dado las pautas para poder modificarlo, ahora debemos situar el código de creación del botón en algún lado, para eso, usaremos un programa hecho por WKT (saludos esn-min) llamado Topo, este programa analizará nuestro EXE en busca de espacio libre para alojar injertos, y luego lo dejará fertilizado para nuestros propósitos.</p>
<p>Al ejecutarlo y analizar el fichero nos dice que hay 420 bytes disponibles, le decimos que lo agregue en la misma sección (o sea .code), y luego, operamos con el Olly de nuevo.<br />
<img class="aligncenter size-medium wp-image-170" title="captura5" src="http://www.disidents.org/wp-content/uploads/2009/06/captura5-300x130.jpg" alt="captura5" width="300" height="130" /></p>
<p>En 40225C en el offset A5C, a partir de ahí  estará seguro nuestro injerto, así que los saltos antes mencionados deben redireccionarse a éste código, el salto que debe ir hacia este código es un JMP a esta dirección, lo pondremos sobre el push 0 de la dirección 4011CB, y luego, de ir hacia nuestro código, antes de regresar pondremos un push 0 (que fue el que sobreescribimos) y luego un jump al segundo push, o sea a la dirección 4011CD,  de esta manera el programa no se dará cuenta de lo que está sucediendo en su interior. <img src='http://www.disidents.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Así nuestra víctima generará un botón que ni siquiera estaba previsto crear con algunos simples cambios.</p>
<p><strong>Conclusión</strong></p>
<p>Muy  bien, hemos hecho un injerto de código!, ahora con esto debemos profundizar y utilizarlo en más reversemes, crackmes, toolmes, y demás bestias que andan sueltas por la Red.</p>
<p>Espero que les sea de utilidad, y vean que hay cosas que no son tan difíciles como las plantean, o como se plantean en muchos sitios “elite”.-</p>
 <span class="post2pdf_span" style="border: 1px solid gray; width: 160px; text-align: left; "><a href="http://www.disidents.org/wp-content/plugins/post2pdf/generate.php?post=" rel="nofollow"><img src="http://www.disidents.org/wp-content/plugins/post2pdf/icon/pdf.png" width="16px" height="16px" />convert this post to pdf.</a></span>]]></content:encoded>
			<wfw:commentRss>http://www.disidents.org/2009/06/07/parabytes-reverseme-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Annoyer by Spider (Old Session &#8211; 2002)</title>
		<link>http://www.disidents.org/2009/05/02/annoyer-by-spider-old-session-2002/#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=annoyer-by-spider-old-session-2002</link>
		<comments>http://www.disidents.org/2009/05/02/annoyer-by-spider-old-session-2002/#comments</comments>
		<pubDate>Sat, 02 May 2009 17:04:12 +0000</pubDate>
		<dc:creator>spark</dc:creator>
				<category><![CDATA[Artículos]]></category>
		<category><![CDATA[Spark - @rroba]]></category>
		<category><![CDATA[Annoyer]]></category>
		<category><![CDATA[DisidentS]]></category>
		<category><![CDATA[Ingeniería Inversa]]></category>
		<category><![CDATA[RCE]]></category>
		<category><![CDATA[Reversing Links]]></category>
		<category><![CDATA[SparK]]></category>

		<guid isPermaLink="false">http://www.disidents.org/?p=145</guid>
		<description><![CDATA[Muy bien, he encontrado por ahí un buen crackme, un poco raro, con una proteccion linda de explicar, mas adelante les explicaré algunas técnicas y trucos de cómo podemos encontrar “pistas” para poder vencer estos hermosos juguetes llamados crackmes. Empezaremos por el principio, como siempre debemos empezar, mirando la víctima, ejecutemoslo… listo? ¿Que tenemos?, una [...]]]></description>
			<content:encoded><![CDATA[<p><em>Muy bien, he encontrado por ahí un buen crackme, un poco raro, con una proteccion linda de explicar, mas adelante les explicaré algunas técnicas y trucos  de cómo podemos encontrar “pistas” para poder vencer estos hermosos juguetes llamados crackmes.<br />
</em></p>
<p>Empezaremos por el principio, como siempre debemos empezar, mirando la víctima, ejecutemoslo… listo? ¿Que tenemos?, una hermosa ventanita con un menú file, con la opción exit, y otro menú help con la opción register y about.</p>
<p><strong>Experimentando con la bestia</strong></p>
<p>Bueno, que sucede si hacemos click en la opción register del menú help?, nos aparece una ventanita que nos dice “Kill the nagscreen”, estas ventanitas, con esos iconos característicos son generalmente llamadas con una API llamada MessageBox o MessageBoxA, dependiendo si la aplicación es de 16 o 32 bits respectivamente.</p>
<p>Aquí ya tenemos una pista, estas eran las “pistas” que yo les mencioné anteriormente, que sirven para guíarnos a través del código.</p>
<p>Otra cosa interesante, es que aparece una ventanita aleatoriamente diciendo algunas cosas sin sentido e incitándonos a crackearlo. Destruyámosla. <img src='http://www.disidents.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Si hacemos click en la opción About, nos da datos sobre el autor del crackme, y demás cosas, que no tienen mucha importancia.</p>
<p><strong>Reglas de juego</strong></p>
<p>Ahora veamos que nos pide el autor del crackme, y seamos chicos aplicados cumpliendo con  todo lo que él dice, al pie de la letra, ¿están listos? ¡¡Adelante!!</p>
<p>Bueno, dice que saquemos el messagebox que aparece cuando hacemos click en register, lo haremos, y luego debemos matar la ventanita chiquita que nos incita a crackearlo.</p>
<p><strong>Sobre las “pistas”, API’s, y reconociendo patrones de código</strong></p>
<p>Tenemos siempre, que tratar, debido al gran caos del código desensamblado de un programa, tener referencias y entender lo útil y principal, lo que verdaderamente está sucediendo en partes o en la totalidad del programa, para poder “descifrar” el funcionamiento del programa, encontrar la protección y poder anularla.</p>
<p>Otras veces, deberemos entender, varias cosas antes de desensamblar un programa, cuando veamos ejercicios del tipo reverseme’s, ya verán de lo que les hablo.</p>
<p>Las pistas que debemos encontrar, son las API’s, debemos conocer las más comunes , sus parámetros, sus valores de retorno, su función principal, aquí les detallo algunas:</p>
<p>MessageBox		SystemTime		Hmemcpy<br />
OpenFile			GetLocalTime<br />
DialogBoxParamA		createwindow<br />
GetDlgItemText		createwindowexa<br />
WriteFile			showwindow</p>
<p>Bueno, la mayoría de estos nombres de API’s se explican por sí solos, así que no hay que preocuparse mucho, lo que sí, les mostraré ahora algunos que he estado descubriendo, por ejemplo en este crackme, encontré uno que me sirvió y me dio la pista para poder matar la nagscreen que nos incita a crackear el crackme.</p>
<p>La API que me guió hasta esa ventana es, CreateThread , en breve les mostraré porqué y como razoné para deducir que esa API era la responsable.</p>
<p style="text-align: center;"> </p>
<p>Los patrones de código son reconocibles, con la práctica, el ojo humano al principio debe acostumbrarse a leer ensamblador, como dije antes, todo código sea ensamblador, c++, basic, pascal, es caótico, tiende a ser caótico.</p>
<p><a href="http://www.disidents.org/wp-content/uploads/2009/05/createthread.jpg"><img class="aligncenter size-medium wp-image-153" title="createthread" src="http://www.disidents.org/wp-content/uploads/2009/05/createthread-300x225.jpg" alt="createthread" width="300" height="225" /></a></p>
<p>Cuando programamos un sistema por ejemplo, un programa muy grande, debemos documentar debidamente cada función, cada proceso creado, que valores retorna, porque, y como funciona, para futuros arreglos o implementaciones, debemos organizar, e identar todas las instrucciones correctamente, sino sería ilegible, o muy difícil de entender, y aunque ustedes no lo crean, se hacen concursos de “ofuscados” son programas que hacen algo, como un cálculo o alguna cosa simple, pero que el ganador es aquel que lo hace “menos entendible”, sin querer decir que programe “suciamente”, simplemente hacerlo lo mas ilegible posible. Pero no nos meteremos en esos campos extraños de la informática.</p>
<p>Un programa desensamblado, es lo mas terrorífico que un programador se puede encontrar, el algo verdaderamente ilegible, si no se tiene el conocimiento real de la situación a bajo nivel, y cierta práctica como para reconocer los patrones de código de los cuales les hablo.</p>
<p><a href="http://www.disidents.org/wp-content/uploads/2009/05/messageboxa.jpg"><img class="aligncenter size-medium wp-image-151" title="messageboxa" src="http://www.disidents.org/wp-content/uploads/2009/05/messageboxa-300x225.jpg" alt="messageboxa" width="300" height="225" /></a></p>
<p style="text-align: center;"> </p>
<p>Cuando usamos Vc++, VB, Delphi, o algún otro RAD, el código generado por estos compiladores, se repite muchísimas veces en distintos programas programados bajo el mismo lenguaje, permitiéndonos, con la práctica ( o un buen tutorial a mano sobre el tema ) poder reconocer por ejemplo, cuando el programa chequea si las opciones de los menúes fueron clickeadas, etc.</p>
<p><strong>¡¡Al Ataque!!</strong></p>
<p>Muy bien, aclaradas algunas cosas antes, vayamos a nuestro pequeño ejercicio, haber si podemos calentar un poco nuestras neuronas…</p>
<p>Veamos de que se trata, a mí me gusta saber en que lenguaje está programada mi víctima, para saber con quien estoy “hablando”, es como una presentación…… bueno dejenme, son mañas. <img src='http://www.disidents.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Corramos el programa Language 2000, arrastremos la víctima hacia language 2000, y que nos dice…. Que está programado en Visual C++, ohps! muy bien, y ¿ahora que?, bien respiremos profundamente, porque cuando los programas están programados en Vc++, en C++ o en C, significa, que su código desensamblado, será más entendible (eso no significa más fácil). ¿Por qué digo esto?, porque cuando trabajamos con programas programados en VB, por ejemplo , este lenguaje es interpretado, y necesita runtimes, utiliza funciones propias del lenguaje, las cuales debemos analizar para que sirve cada una, porque raramente llama a una API, salvo que sea una llamada directa hecha por el programador.</p>
<p>Programas hechos en VB o en Delphi por ejemplo, tienen patrones de código bien reconocibles, y llamadas a rutinas, que realizan el trabajo “sucio”, entonces, el código desensamblado es mayor, mucho más caótico y difícil de descifrar si no tenemos la suficiente paciencia, pero no es imposible, no se me desanimen. <img src='http://www.disidents.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Ahora, tomemos un desensamblador, como por ejemplo el IDA, muy bueno a mi parecer, hace el código muy entendible, y tiene las librerías llamadas FLIRT, que si sabes en que está programada la víctima, puedes cargar una FLIRT para reconocer rutinas propias de los programas generados con X lenguaje, entonces de esa manera se entiende mucho más fácil, y puedes ir al punto directamente sin dar muchas vueltas.</p>
<p><a href="http://www.disidents.org/wp-content/uploads/2009/05/1312.jpg"><img class="aligncenter size-medium wp-image-156" title="1312" src="http://www.disidents.org/wp-content/uploads/2009/05/1312-300x225.jpg" alt="1312" width="300" height="225" /></a></p>
<p>Bueno, empecemos por lo  más sencillo, buscar strings references, esto es lo más sencillo, porque nos lleva al punto directo, de cuando el mesagebox o X componente fue creado con X texto que busquemos, que no estará muy lejos de la llamada API correspondiente, les muestro que sucede en nuestro crackme:</p>
<p>Buscamos el texto &#8220;Kill the nagscreen.&#8221;, y lo encontramos, ahora hagamos doble click en él y nos lleva hasta aquí :</p>
<p>push    offset aCanTRegister ; &#8220;Can&#8217;t register&#8221;<br />
push    offset aKillTheNagscreen_ ; &#8220;Kill the nagscreen.&#8221;<br />
call    ds:MessageBoxA</p>
<p>por problemas de espacio he dejado las instrucciones más importantes, a continuación explico cada una:<br />
el primer, push es un parámetro al igual que el segundo push, debemos saber por eso que parámetros necesita la API MessageBoxA, para poder saber que esos son los parámetros usados para mostrar nuestra ventanita, que debemos anular.</p>
<p>Miremos un poco mas arriba en esa rutina y encontramos esto:</p>
<p>_text:00401355 loc_0_401355:                           ; CODE XREF: _text:0040132D j</p>
<p>hagamos click en la parte resaltada con amarillo y nos llevará al lugar desde donde es llamada esta rutina para mostrar la ventanita.</p>
<p>Aquí nos lleva:<br />
jz      short loc_0_401355</p>
<p>Ok, este es el salto que produce la ventana, matémoslo bruscamente, para eso usemos la instrucción NOP (No OPeration), para anular ese salto, el código de operación de esta instrucción es 90, ¿Qué es código de operación? Simplemente, el valor que toma la instrucción cuando es compilada por la computadora, entonces para entendernos con ella crudamente, debemos hablar su mismo idioma, esto quiere decir, tomar un editor hexadecimal, como hex workshop por ejemplo e ir al offset, de esta instrucción el cual nos dice IDA debajo de todo en el cuarto campo, este es 132D.</p>
<p><a href="http://www.disidents.org/wp-content/uploads/2009/05/132d.jpg"><img class="aligncenter size-medium wp-image-157" title="132d" src="http://www.disidents.org/wp-content/uploads/2009/05/132d-300x225.jpg" alt="132d" width="300" height="225" /></a></p>
<p>Como estos saltos ocupan dos posiciones compilados debemos poner dos NOP’s, o sea dos 90, en esa posición y en la que sigue.</p>
<p>Ejecutemos la víctima, hagamos click en la opcion Register…… ¡Bingo!</p>
<p>Ahora, vamos por la otra ventanita, esta ventana es creada debes en cuando, no tome el tiempo, pero estimo que si no es por tiempo fijo, es aleatoria, eso mucho no interesa, ya que lo que queremos es anularla, entonces, lo que me guió a mí como ya les comenté es la API CreateThread la cual sirve para crear un nuevo hilo de proceso,  mientras la aplicación principal se ejecuta en otro proceso distinto, entonces, los mensajes de una ventana no traba a la otra, permitiendo el efecto “multitarea”, la teoría de programación multihilo es muy interesante pero no profundizaremos en esto más que por la definición que acabo de dar.</p>
<p>Busquemos el string “Kill the nagsreen.” De  nuevo, miremos un poco más debajo de esa rutina y aparece nuestra querida API CreateThread, de esta manera:             call    ds:CreateThread</p>
<p>Ok, hagamos doble click la referencia de que hace al principio de la rutina, como la rutina analizada anteriormente, esto nos dice desde donde es llamada la rutina, viendo directamente el salto que debemos NOPear en nuestro caso.</p>
<p>Nos lleva aquí:    jz      short loc_0_401374</p>
<p>El cual debemos topear igual que el otro salto, para que ya no tenga más efecto esa rutina, y la asquerosa ventanita aleatoria no aparezca más.</p>
<p>Como verán, existen muchísimas formas de proteger un programa, y yo en particular pienso que deben existir cientos de otras formas, mezclas de protecciones, como por ejemplo la que acabamos de ver, en la que se implementa muy bien la API CreateThread, para crear una ventana nueva, y además una nag screen en la opción register.</p>
<p>Más adelante veremos, protecciones CD-Check, y quizás vayamos mas arriba aun, código automodificable, encriptación, key-files, etc.</p>
<p>Cada una, tiene su pro y su contra, en algún momento quizás también nos topemos, con programas que verdaderamente son DEMOS, y les falta implementar la opción “Save as…”, por ejemplo, en estos casos, usaremos las técnicas de reversing, en la que deberemos saber Win32Asm (ensamblador de 32bits para Windows), hacer injertos de código, conocer la estructura de los archivos PE, y demás cosas muy interesantes.</p>
<p>También, en esta carrera nos toparemos con los “loaders”, programas que parchean en memoria, y desprotegen “runtime” a los programas, veremos como funcionan, como hacer uno propio, en un lenguaje fácil (VB, Delphi), cuando y como usarlos.</p>
<p>Quizás lleguemos a ver mas adelante, protecciones llamadas dongles, las famosas “mochilas”, esta es una protección por hardware, que necesita de un determinado hardware conectado a uno de los puertos de la pc, para que el programa funcione.</p>
<p>El cracker, debe tener una mente abierta, analizar un programa protegido, es toda una aventura, es conocer, aprender, desafiarnos, y crecer, en conocimiento, y sobre todo en paciencia.</p>
<p>Ok, hasta aquí hemos llegado, para la próxima veremos opciones desactivadas y/o cd-checks.</p>
<p>¡Suerte!<br />
¡Happy Cracking!</p>
<p>SparK</p>
 <span class="post2pdf_span" style="border: 1px solid gray; width: 160px; text-align: left; "><a href="http://www.disidents.org/wp-content/plugins/post2pdf/generate.php?post=" rel="nofollow"><img src="http://www.disidents.org/wp-content/plugins/post2pdf/icon/pdf.png" width="16px" height="16px" />convert this post to pdf.</a></span>]]></content:encoded>
			<wfw:commentRss>http://www.disidents.org/2009/05/02/annoyer-by-spider-old-session-2002/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CutedEvil Crackme #1 (Old Session &#8211; 2002)</title>
		<link>http://www.disidents.org/2009/04/05/cutedevil-crackme-1-old-session-2002/#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=cutedevil-crackme-1-old-session-2002</link>
		<comments>http://www.disidents.org/2009/04/05/cutedevil-crackme-1-old-session-2002/#comments</comments>
		<pubDate>Mon, 06 Apr 2009 01:44:50 +0000</pubDate>
		<dc:creator>spark</dc:creator>
				<category><![CDATA[Artículos]]></category>
		<category><![CDATA[Spark - @rroba]]></category>
		<category><![CDATA[@rroba]]></category>
		<category><![CDATA[Cracking]]></category>
		<category><![CDATA[crackme]]></category>
		<category><![CDATA[cutedevil]]></category>
		<category><![CDATA[Ingeniería Inversa]]></category>
		<category><![CDATA[Reversing Links]]></category>
		<category><![CDATA[SparK]]></category>
		<category><![CDATA[SparKrisp]]></category>

		<guid isPermaLink="false">http://www.disidents.org/?p=127</guid>
		<description><![CDATA[  CuTedEvil CrackMe #1 Análisis y Parcheo.   Buenas, a todos los lectores de @rroba, soy SparK, del team DisidentS, y les ofrezco mis nobles y humildes conocimientos en este arte de la Ingeniería Inversa. Espero que se diviertan tanto como yo lo he hecho con este crackme, en realidad no es nada difícil, pero [...]]]></description>
			<content:encoded><![CDATA[<p> </p>
<p align="CENTER"><span style="font-family: Arial, sans-serif;"><span style="font-size: x-large;">CuTedEvil CrackMe #1</span></span></p>
<p align="CENTER"><span style="font-family: Arial, sans-serif;"><span style="font-size: large;"><span style="text-decoration: underline;">Análisis y Parcheo.</span></span></span></p>
<p align="CENTER"> </p>
<p align="JUSTIFY"><span style="font-family: Arial;">Buenas, a todos los lectores de @rroba, soy SparK, del team DisidentS, y les ofrezco mis nobles y humildes conocimientos en este arte de la Ingeniería Inversa.</span></p>
<p align="JUSTIFY"><span style="font-family: Arial;">Espero que se diviertan tanto como yo lo he hecho con este crackme, en realidad no es nada difícil, pero a veces es lindo acorralar fácilmente a una víctima o no? <img src='http://www.disidents.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </span></p>
<p align="JUSTIFY"><span style="font-family: Arial; ">Quizás algunos de ustedes sean avezados Reverser&#8217;s y piensen al leerme, ¿pero que es esto? ¿El abecedario una y otra vez?, quizás otros novatos newbies, o simplemente lectores interesados en este arte digan: “mmmm, interesante”, quiero que sepan todos ustedes, intentaré darles siempre pensamientos frescos e ideas nuevas, por eso es bello este arte, es muy diverso.</span></p>
<p align="JUSTIFY"><span style="font-family: Arial; ">Pero, vamos por partes, dijo Jack el Destripador, ¿Qué es un Crackme?</span></p>
<p align="JUSTIFY"><span style="font-family: Arial; ">Ok, para los que no lo saben, un crackme es un programita que sirve para ejecitarse en el arte de la ingeniería inversa, en pocas palabras, es un “ejercicio de aplicación”.</span></p>
<p align="JUSTIFY"><span style="font-family: Arial; ">¿ Que lograremos crackeando un crackme?</span></p>
<p align="JUSTIFY"><span style="font-family: Arial; ">Pues, muchísimas cosas, primero, hay crackmes con las mas diversas protecciones y ocurrencias, en síntesis sirve para poder aprender, concentrarse en ese código difícil de aprender e interpretar a simple vista llamado Ensamblador, para poder memorizar técnicas, rutinas,  y luego, en otro momento cuando miremos otro código digamos, “ah!, es mas o menos parecido a&#8230;” , en fin, ejercitas, la lógica, la memoria, y a la vez si no sabes o no entiendes ni medio de lo que pasa en ese maldito crackme, <strong>aprendes</strong>, que es lo más importante que te puede suceder aquí.</span></p>
<p align="JUSTIFY"><span style="font-family: Arial; ">Les daré mas pistas, existen muchos tipos de ejercicios de aplicación, algunos de ellos son los Reverse me&#8217;s, los Tool me&#8217;s y demás, los primeros debes conocer ensamblador a fondo, y reprogramar la aplicación, o inclusive agregar código faltante, ¿ interesante no ? , ya veremos algunos, no desesperéis&#8230;. <img src='http://www.disidents.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </span></p>
<p align="JUSTIFY"><span style="font-family: Arial; ">Este Crackme, lo he bajado de <a href="http://www.crackmes.de/">www.crackmes.de</a> , y hasta hoy no tenía solución.</span></p>
<p align="JUSTIFY"><span style="font-family: Arial; ">El crackme, tiene un aspecto como una caja de registro típica de cualquier programa, deberemos ingresar Nombre de Usuario, Serial, y luego click en Check.</span></p>
<p align="JUSTIFY"><span style="font-family: Arial;">Si hacemos click en Read the Rulez!, nos dirá que debemos programar un keygen, ok, ¿que es eso? Un programa que genere seriales aceptables para el crackme, ingresandole cualquier nombre de usuario, para poder hacer esto debemos conocer y entender que sucede dentro del crackme y como se calcula el serial a partir de un nombre de usuario dado.</span></p>
<p align="JUSTIFY"><span style="font-family: Arial; ">Ok, empecemos parcheándolo, ¿porque? ,  pues porque no tenemos que analizar mucho para parchearlo, aunque no este permitido en las reglas del juego, lo haré para explicarles a los más novatillos como se debe hacer.</span></p>
<p align="JUSTIFY"><span style="font-family: Arial">Les comento algo a todos, parchear es nocivo para la mente del cracker, se dice que es un sucio crack, aquel que pudiendo aplicar técnicas mas “finas”,  parchea, ¿ porque ?, porque aquí queremos aprender, y el facilismo nos lleva a la mediocridad, entonces, si parcheamos, es fácil crackearlo, como verán solo cambiando uno o dos bytes, pero si hacemos un serial fishing, y aún muchísimo mejor , programamos una keygen, estamos demostrandonos sobre todo, que sabemos bien lo que sucede en nuestra querida pc, y que podemos entender tarde o temprano, lo que sea. Aunque si no está a nuestros alcances hacer un keygen aún, paciencia, parchear es divertido <img src='http://www.disidents.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </span></p>
<p align="JUSTIFY"><span style="font-family: Arial; ">Carguemos el Olly, (¿que porque olly?, porque me anda muy bien en mi win xp), y ejecutemoslo, presionando F9, ¿que sucede?, aparece nuestro programilla, ponemos un nombre de usuario, SparK, ahora un serial, 0123456, y click en Check, que sucede?&#8230;&#8230;&#8230; NADA!</span></p>
<p align="JUSTIFY"><span style="font-family: Arial; ">Ok, se dice en el Zen Cracking, que todo cracker necesita una referencia para penetrar en el código de un programa, los seres humanos, tenemos referencias, los objetos los identificamos con los sentidos, son distintos, son reconocibles, en el cracking sucede lo mismo, el cracker necesita un punto de referencia, al principio los novatos necesitan puntos de referencia mas “humanos”, pero luego, te acostumbras al lenguaje interno de las máquinas y empiezas a encontrar referencias que antes no veías, esto , se llama práctica.</span></p>
<p align="JUSTIFY"><span style="font-family: Arial;">Nuestro punto de referencia, aquí sería un cartel, llamado messagebox que diga “Incorrect Serial” o algo por el estilo, entonces, nosotros desensamblaríamos el programa, y buscaríamos donde se llama a ese messagebox y un poco antes encontraríamos el salto que nos lleva al cartel exitoso o al fracaso, simplemente invertirlo y PUM!, “You are registered”.</span></p>
<p align="JUSTIFY"><span style="font-family: Arial">Pero no, no soñemos mas, enfrentemos la realidad, no hay messagebox, no nos dice nada, pero tampoco nos registra y eso nos pone mal, muy mal. <img src='http://www.disidents.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </span></p>
<p align="JUSTIFY"><span style="font-family: Arial; ">Ok, busquemos en el Olly, por alguna referencia de strings, miremos un poquito más abajo y encontramos algo como esto:</span></p>
<p style="text-align: center; " align="JUSTIFY"><a href="http://www.disidents.org/wp-content/uploads/2009/04/figura1.jpg"><img class="aligncenter size-thumbnail wp-image-135" title="figura11" src="http://www.disidents.org/wp-content/uploads/2009/04/figura11-150x150.jpg" alt="figura11" width="150" height="150" /></a></p>
<p align="JUSTIFY"><span style="font-family: Arial; ">Perfecto!, algunas referencias hemos encontrado, miren esta,  &#8220;Congratulations, you cracked this program <img src='http://www.disidents.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> &#8221;, miremos mas arriba de esta referencia, y encontramos este salto:</span></p>
<p align="JUSTIFY"><span style="font-family: Arial; ">004012E8  |. 74 0F          |JE SHORT CuTedEvi.004012F9</span></p>
<p align="JUSTIFY"><span style="font-family: Arial; ">Bien, si invertimos ese salto, tendríamos que estar registrados, probemos cambiar el 74 por un 75 (JNE), hagamos click sobre la instrucción de salto, presionemos la tecla espaciadora, y ahora, cambiemos el JE por un JNE, y listo, apretemos F9, ¿¿que pasa?? nada, sigue haciendo lo mismo, ¿pero que pasa aqui?</span></p>
<p align="JUSTIFY"><span style="font-family: Arial;">Seguramente existe lo que se llama, mirror check, es un chequeo primario o secundario, que se hace en otra parte del código, que seguramente chequea longitud del nombre de usuario, del serial ingresado, o algun cálculo con ellos posterior, miremos un poco más, ¿ven porque no es bueno parchear a lo bruto?, si no conoces el código y lo haces mecánicamente, puedes quedar mal parado ante una demostración ;oD</span></p>
<p align="JUSTIFY"><span style="font-family: Arial;">¿Pero, como encontrar el otro chequeo?, miremos, observermos, debugiemos el código, una y otra vez, pongamos breakpoints, haber, ¿ que sucede generalmente en estas rutinas a nivel interno para obtener los textos introducidos por el usuario?, una pista, referencia, aparentemente oculta, pero existe, generalmente se llama a la API GetDlgItemText, o GetDlgItemTextA, para obtener el texto, pues ¿que hace?, obtiene el texto del editbox del nombre de usuario por ejemplo, y pone en el registro EAX la longitud del texto introducido.</span></p>
<p align="JUSTIFY"><span style="font-family: Arial; ">Busquemos la/las llamadas a esta hermosa API&#8230;..</span></p>
<p align="JUSTIFY"><span style="font-family: Arial; ">Aquí hay algo interesante:</span></p>
<p style="text-align: center;" align="JUSTIFY"><a href="http://www.disidents.org/wp-content/uploads/2009/04/figura2.jpg"><img class="aligncenter size-thumbnail wp-image-136" title="figura21" src="http://www.disidents.org/wp-content/uploads/2009/04/figura21-150x150.jpg" alt="figura21" width="150" height="150" /></a></p>
<p align="JUSTIFY"><span style="font-family: Arial;">Ok, tenemos en 0040115B que carga el ID de uno de los editbox, seguramente el del nombre de usuario, y en</span></p>
<p align="JUSTIFY"><span style="font-family: Arial;">0040117E, el ID del serial, ahora 00401166 y en 00401191 es llamada la API mencionada.</span></p>
<p align="JUSTIFY"><span style="font-family: Arial, sans-serif;"><span style="font-size: x-small;">Fijense algo curioso, luego de llamarlas a las APIs encontramos lo siguiente:</span></span></p>
<p align="JUSTIFY"><span style="font-family: Arial;">0040118E  	CMP EAX,0</span></p>
<p align="JUSTIFY"><span style="font-family: Arial;"> 00401191  	JE CuTedEvi.0040132B</span></p>
<p align="JUSTIFY"><span style="font-family: Arial;">Recuerden que les conté en secreto que GetDlgItemTextA, devuelve en EAX la longitud del texto extraído de una editbox, entonces, aquí compara la longitud con 0 y si es 0, salta a otro lado, con lo que no iría por buen camino, ya que nosotros debemos ingresar un serial y un nombre de usuario, sino no chequeará nada y seguirá su rumbo&#8230;..</span></p>
<p align="JUSTIFY"><span style="font-family: Arial;">Existe otra API llamada lstrlenA, que justamente obtiene la longitud de una string. ¿ pero porque esta llamada aquí ?, si ya sabemos cuanto tiene cada string&#8230; quiere decir, que debe necesitarlo, miremos:</span></p>
<p align="JUSTIFY"><span style="font-family: Arial;">PUSH CuTedEvi.0040332B                   	; /String = &#8220;&#8221;</span></p>
<p align="JUSTIFY"><span style="font-family: Arial;"> CALL &lt;JMP.&amp;KERNEL32.lstrlenA&gt;           ; \lstrlenA</span></p>
<p align="JUSTIFY"><span style="font-family: Arial"> CMP EAX,0</span></p>
<p align="JUSTIFY"><span style="font-family: Arial"> JE SHORT CuTedEvi.004012F7 </span></p>
<p align="JUSTIFY"><span style="font-family: Arial;">De nuevo un chequeo por 0, y salta a donde el otro chequeo lo hace, 004012F7, como podemos ver, ese salto, es por donde NO debemos ir.</span></p>
<p align="JUSTIFY"><span style="font-family: Arial, sans-serif;"><span style="font-size: x-small;">Bien, pensemos ahora, que sucede, ¿si no salta a 004012F7?, algo hace, algo debe hacer, y de hecho lo hace&#8230;</span></span></p>
<p style="text-align: center;" align="JUSTIFY"><a href="http://www.disidents.org/wp-content/uploads/2009/04/figura31.jpg"><img class="aligncenter size-thumbnail wp-image-138" title="figura31" src="http://www.disidents.org/wp-content/uploads/2009/04/figura31-150x150.jpg" alt="figura31" width="150" height="150" /></a></p>
<p align="JUSTIFY"><span style="font-family: Arial;">ROL es una instrucción de cálculo, rota los bits hacia la izquierda, hagamos de cuenta que multiplicamos por 5 (en decimal) un valor.</span></p>
<p align="JUSTIFY"><span style="font-family: Arial;">SUB resta 123 (en hexadecimal).</span></p>
<p align="JUSTIFY"><span style="font-family: Arial;">ADD suma 321 (en hexa también)</span></p>
<p align="JUSTIFY"><span style="font-family: Arial;">CMP compara con un valor, en este caso 2FE.</span></p>
<p align="JUSTIFY"><span style="font-family: Arial;">Luego si, no es EAX ese valor esperado, salta al famoso <em>salto del fracaso</em>. <img src='http://www.disidents.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </span></p>
<p align="JUSTIFY"><span style="font-family: Arial;"><span style="text-decoration: underline;">Apliquemos Ingeniería Inversa:</span></span></p>
<p align="JUSTIFY"> </p>
<p align="JUSTIFY"><span style="font-family: Arial;">el valor esperado en eax como resultado de los cálculos es 2FE (33 en decimal), en EAX, tenemos la longitud de la cadena serial luego de llamar a lstrlenA, entonces, hagamos el cálculo inverso para ver, que longitud necesitamos tener en el editbox serial.</span></p>
<p align="JUSTIFY"><span style="font-family: Arial;">Tomemos 2FE, restemosle 321, esto nos da un número negativo FFFFFFFFFFFFFFDD, ahora sumemos 123, y nos da 100 (siempre en hexadecimal, no se confundan), ahora ROL multiplica por 5, ahora DIVIDAMOS por 5, ¿¿ y que obtenemos ?? un lindo y hermoso <strong>33</strong><span>.</span></span></p>
<p align="JUSTIFY"><span style="font-family: Arial;">Esa, esa cifra señores, es la longitud que el programa necesita que tenga el serial, para poder seguir chequeando.</span></p>
<p align="JUSTIFY"><span style="font-family: Arial;">Ahora , modifiquemos el valor del serial, y miremos, que pasa: 012345678901234567890123456789012 , ese serial introduje yo, 33 valores cualquiera ni más, ni menos&#8230;</span></p>
<p align="JUSTIFY"><span style="font-family: Arial;">Ahora miremos que estamos muy cerca de los cartelitos de antes, ¿se acuerdan?, ok, les muestro que pasa antes:</span></p>
<p style="text-align: center;" align="JUSTIFY"><span style="font-family: Arial;"><a href="http://www.disidents.org/wp-content/uploads/2009/04/figura4.jpg"><img class="aligncenter size-thumbnail wp-image-139" title="figura41" src="http://www.disidents.org/wp-content/uploads/2009/04/figura41-150x150.jpg" alt="figura41" width="150" height="150" /></a><br />
</span></p>
<p align="JUSTIFY">Ok, tenemos el salto que habíamos parcheado hoy, pero, con la diferencia que sabemos que pasa antes, ahora solamente lo que podemos hacer son dos cosas, o introducir un número cualquiera de 33 caracteres, y luego parchear ese salto, o sino, parchear los dos saltos:</p>
<p>Primero: 		<span style="font-family: Arial;"><span>CMP EAX,2FE</span></span></p>
<p align="JUSTIFY"><span style="font-family: Arial;"> JNZ SHORT CuTedEvi.004012F7</span></p>
<p align="JUSTIFY"> </p>
<p align="JUSTIFY">Segundo:		<span style="font-family: Arial;"><span style="font-size: x-small;"><span><span>CMP BL,0</span></span></span></p>
<p align="JUSTIFY"><span style="font-family: Arial;"> JE SHORT CuTedEvi.004012F9</span></p>
<p align="JUSTIFY"><span style="font-family: Arial;">y Listo!, felicidades lo has logrado. <img src='http://www.disidents.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </span></p>
 <span class="post2pdf_span" style="border: 1px solid gray; width: 160px; text-align: left; "><a href="http://www.disidents.org/wp-content/plugins/post2pdf/generate.php?post=" rel="nofollow"><img src="http://www.disidents.org/wp-content/plugins/post2pdf/icon/pdf.png" width="16px" height="16px" />convert this post to pdf.</a></span>]]></content:encoded>
			<wfw:commentRss>http://www.disidents.org/2009/04/05/cutedevil-crackme-1-old-session-2002/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sólo quiero bajar algo por ftp! (con FlashFXP xD)</title>
		<link>http://www.disidents.org/2009/02/05/solo-quiero-bajar-algo-por-ftp-con-flashfxp-xd/#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=solo-quiero-bajar-algo-por-ftp-con-flashfxp-xd</link>
		<comments>http://www.disidents.org/2009/02/05/solo-quiero-bajar-algo-por-ftp-con-flashfxp-xd/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 01:18:45 +0000</pubDate>
		<dc:creator>spark</dc:creator>
				<category><![CDATA[Artículos]]></category>
		<category><![CDATA[Papers]]></category>
		<category><![CDATA[Aplicaciones Inseguras]]></category>
		<category><![CDATA[Cracking]]></category>
		<category><![CDATA[Downloader]]></category>
		<category><![CDATA[FlashFXP Reversing]]></category>
		<category><![CDATA[Ingeniería Inversa]]></category>
		<category><![CDATA[SparK]]></category>
		<category><![CDATA[Troyano]]></category>
		<category><![CDATA[Virus]]></category>

		<guid isPermaLink="false">http://www.disidents.org/?p=33</guid>
		<description><![CDATA[Hola a todos, el otro día buscando un FlashFXP para bajar algo , encontré la última versión&#8230;.la bajé&#8230;.al ejecutarla, me pidió número de serie&#8230; utilicé el keygen que lo acompañaba. Cuando puse el serial el programa siguió su camino, me apareció una ventanita que decía c:\windows\system32 &#8230;. Me pareció muy raro y sospeché de un [...]]]></description>
			<content:encoded><![CDATA[<p>Hola a todos, el otro día buscando un FlashFXP para bajar algo , encontré la última versión&#8230;.la bajé&#8230;.al ejecutarla, me pidió número de serie&#8230; utilicé el keygen que lo acompañaba.</p>
<p>Cuando puse el serial el programa siguió su camino, me apareció una ventanita que decía c:\windows\system32 &#8230;.</p>
<p>Me pareció muy raro y sospeché de un virus&#8230; obviamente seguí utilizando el programa, y NOD me avisó que &#8220;algo&#8221; se quería conectar&#8230; algo con nombre como qsyrjrwes.exe en la carpeta Datos de Programa de mi usuario en Windows XP.</p>
<p>Obviamente, escribí en arroba sobre ese EXE, para ver de que se trataba, era un simple downloader, definido como downloader.Win32&#8230; Ya postearé el artículo explicando de qué se trata&#8230; <img src='http://www.disidents.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Bueno obviamente, el EXE de flashfxp estaba &#8220;envuelto&#8221; por un dropper, éste sacaba el downloader, y después hacía ejecutar al flashfxp normalmente&#8230;</p>
<p>Empezando a mirar el EXE, encontramos algunas strings que se cargan, y mirándolas por arriba, pienso que son strings encriptadas que desencripta en tiempo de ejecución&#8230;</p>
<p><a href="http://www.disidents.org/wp-content/uploads/2008/12/1.jpg"><img class="aligncenter size-medium wp-image-34" title="1" src="http://www.disidents.org/wp-content/uploads/2008/12/1-300x96.jpg" alt="Strings Encriptadas" width="300" height="96" /></a></p>
<p>Seguramente para evitar que los AV&#8217;s detecten el proceso&#8230;</p>
<p>Cuando debuggeemos por las strings &#8220;.dll&#8221; y &#8220;.exe&#8221;, más precisamente en las direcciones 408D03 y 408D15 veremos estas cosas en la pila:</p>
<p style="text-align: center; ">0012FFAC   01141C30  0  ASCII &#8220;C:\WINDOWS\system32\niksr.dll&#8221;</p>
<p>y luego,</p>
<p style="text-align: center; "> </p>
<p>0012FFA8   01141CA4  ¤  ASCII &#8220;C:\DOCUME~1\SPARKR~1\CONFIG~1\Temp\setup.exe&#8221;</p>
<p style="text-align: left; ">Luego de eso, en estas direcciones podremos ver que el ejecutable creado en la carpeta temporal de nuestro windows, posee un icono de flashfxp&#8230; es raro.. <img src='http://www.disidents.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p style="text-align: left; "> </p>
<p style="text-align: center; ">00408D39  |. A1 C8A94000    MOV EAX,DWORD PTR DS:[40A9C8]</p>
<p style="text-align: center; ">00408D3E  |. E8 BDFDFFFF    CALL setup-pr.00408B00</p>
<p style="text-align: left; ">En estas dos líneas se ejecuta el EXE liberado en la carpeta temporal de Windows. Igualmente no es el EXE final.</p>
<p style="text-align: left; ">Veremos que entrando al CALL mencionado dos líneas más arriba, y mirando un poco más, se crea un objeto Mutex.</p>
<p style="text-align: left; "><a href="http://www.disidents.org/wp-content/uploads/2008/12/2.jpg"><img class="aligncenter size-medium wp-image-36" title="2" src="http://www.disidents.org/wp-content/uploads/2008/12/2-300x93.jpg" alt="Mutex" width="300" height="93" /></a></p>
<p>Veamos para que sirve un mutex (una definición de la red&#8230;):</p>
<p><em>&#8220;Un mutex funciona exactamente del mismo modo que las secciones críticas. La única diferencia en las implementaciones Win32 es que la sección crítica esta limitada para ser usada con </em><span style="text-decoration: underline;"><em>solamente un proceso</em></span><em>. Si tienes un programa que usa varios hilos, entonces la sección crítica es liviana y adecuada para tus necesidades. Sin embargo, cuando escribes una DLL, es muy posible que diferentes procesos usen la DLL en el mismo momento. En este caso, debes usar mutexes, en lugar de secciones críticas.&#8221;</em></p>
<p>Veremos en la imagen, que genera un código único, que se utiliza como nombre del mutex, para crearlo, con la API CreateMutexA.</p>
<p>Seguido de esto, parece que nuestro troyano necesita descomprimir una dll denominada bcdsa.dll, veamos:</p>
<p>EAX apunta al string C:\WINDOWS\system32\bcdsa.dll.</p>
<p>El ejecutable busca el archivo bcdsa.dll y si no existe, lo crea.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-89" title="fxp1" src="http://www.disidents.org/wp-content/uploads/2009/02/fxp1.jpg" alt="fxp1" width="551" height="44" /></p>
<p>Luego de crear la DLL, descomprime el segundo EXE como hemos visto que el path estaba en memoria y crea el Thread finalmente con la DLL deseada. Capturemos la DLL, para futuro análisis. <img src='http://www.disidents.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Si vamos a buscar la DLL y vemos propiedades encontraremos una descripción extraña:</p>
<p><img class="aligncenter size-full wp-image-90" title="fxp2bcdsa" src="http://www.disidents.org/wp-content/uploads/2009/02/fxp2bcdsa.jpg" alt="fxp2bcdsa" width="402" height="502" /></p>
<p><img class="aligncenter size-full wp-image-91" title="fxp3bcdsa" src="http://www.disidents.org/wp-content/uploads/2009/02/fxp3bcdsa.jpg" alt="fxp3bcdsa" width="404" height="502" /></p>
<p>O es una librería que necesitará el flashfxp final o es algo más&#8230;</p>
<p><img class="aligncenter size-full wp-image-92" title="fxp4" src="http://www.disidents.org/wp-content/uploads/2009/02/fxp4.jpg" alt="fxp4" width="530" height="75" /></p>
<p>Luego de que el Thread es creado, nos aparecerá la ventanita con el mensaje: &#8220;c:\windows\system32&#8243;, esto es lo que me hizo sospechar de la actividad de este ejecutable. Es una falla de programación importante, ya que se da a conocer muy sencillamente, parece que el programador tenía pocos recursos para poder darse cuenta cuando la DLL estaba cargada en memoria&#8230; <img src='http://www.disidents.org/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Ahora veremos el segundo ejecutable.</p>
<p>Una vez que nuestro amigo está descomprimido veremos que al cargarlo está hecho en C, por eso mismo carga nuestra DLL, que se trata nada más ni nada menos de las MFC, librerías runtime necesarias. <img src='http://www.disidents.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Este EXE, descomprimirá el FlashFXP final, pero además agregará la descompresión de un downloader&#8230; <img src='http://www.disidents.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  para fines non santos&#8230;</p>
<p><img class="aligncenter size-full wp-image-97" title="fxp5" src="http://www.disidents.org/wp-content/uploads/2009/02/fxp5.jpg" alt="fxp5" width="575" height="146" /></p>
<p>El ejecutable de FlashFXP será descomprimido en c:\windows\ bajo el nombre de setup.exe</p>
<p><img class="aligncenter size-full wp-image-103" title="fxp6" src="http://www.disidents.org/wp-content/uploads/2009/02/fxp6.jpg" alt="fxp6" width="573" height="209" /></p>
<p>En esta imagen, podemos ver como ejecuta a FlashFXP original y a su vez, descomprime y crea el downloader, cuyo nombre es aleatorio.</p>
<p>Finalmente, tratará de ejecutar el Downloader, como veremos acá:</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-104" title="fxp7" src="http://www.disidents.org/wp-content/uploads/2009/02/fxp7.jpg" alt="fxp7" width="539" height="75" /></p>
<p>Por último el proceso termina, llamando a ExitProcess. <img src='http://www.disidents.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Entonces si queremos nuestro EXE final de FlashFXP, directamente lo buscamos en la carpeta Windows de nuestro sistema.</p>
<p>Nos damos cuenta que el EXE es el original, porque al hacer botón derecho y propiedades, veremos los datos originales de la aplicación. Lo cuál ante un usuario atento, se dará cuenta que los otros ejecutables no son los originales. <img src='http://www.disidents.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Es importantísimo poder tener firmado los ejecutables de nuestras aplicaciones, además de poder tener la información guardada como propiedades del ejecutable, de manera que un usuario puede verificar la autenticidad de varias maneras.</p>
<p>Siempre hay que estar atento a actividades extrañas, como por ejemplo la ventana que sale a modo de información avisando que la DLL ya fue creada, para poder continuar la descompresión&#8230;. como lo vimos anteriormente.</p>
<p>Eso es todo, espero que les haya servido y gustado. <img src='http://www.disidents.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Nos vemos la próxima.</p>
 <span class="post2pdf_span" style="border: 1px solid gray; width: 160px; text-align: left; "><a href="http://www.disidents.org/wp-content/plugins/post2pdf/generate.php?post=!" rel="nofollow"><img src="http://www.disidents.org/wp-content/plugins/post2pdf/icon/pdf.png" width="16px" height="16px" />convert this post to pdf.</a></span>]]></content:encoded>
			<wfw:commentRss>http://www.disidents.org/2009/02/05/solo-quiero-bajar-algo-por-ftp-con-flashfxp-xd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>¿Qué hace NetSS de Thinkcore?</title>
		<link>http://www.disidents.org/2008/12/08/%c2%bfque-hace-netss-de-thinkcore/#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25c2%25bfque-hace-netss-de-thinkcore</link>
		<comments>http://www.disidents.org/2008/12/08/%c2%bfque-hace-netss-de-thinkcore/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 01:41:14 +0000</pubDate>
		<dc:creator>spark</dc:creator>
				<category><![CDATA[Artículos]]></category>
		<category><![CDATA[Papers]]></category>
		<category><![CDATA[NetSS]]></category>
		<category><![CDATA[Reversing Links]]></category>
		<category><![CDATA[SparK]]></category>
		<category><![CDATA[SparKrisp]]></category>
		<category><![CDATA[Thinkcore]]></category>
		<category><![CDATA[Unpacking]]></category>

		<guid isPermaLink="false">http://www.disidents.org/?p=24</guid>
		<description><![CDATA[Si, así me quedé pensando hoy a la tarde, cuando vi lo que hacía este programita&#8230;. me quedé pensando, algo tan simple debe venir con código fuente&#8230;. Lo bajo de la web de thinkcore: http://www.thinkcore.com/utilities/networking/NetSS-v1.0.zip Lo abro&#8230; y nada :O no había código, un EXE y un readme.txt&#8230;. ¿es justo? Este programita, es muy simple, envía [...]]]></description>
			<content:encoded><![CDATA[<p>Si, así me quedé pensando hoy a la tarde, cuando vi lo que hacía este programita&#8230;. me quedé pensando, algo tan simple debe venir con código fuente&#8230;.</p>
<p>Lo bajo de la web de thinkcore: http://www.thinkcore.com/utilities/networking/NetSS-v1.0.zip</p>
<p>Lo abro&#8230; y nada :O no había código, un EXE y un readme.txt&#8230;. ¿es justo?</p>
<p>Este programita, es muy simple, envía mensajes anónimos por net send, el famoso mensajero de windows XP&#8230; el truco, es muy fácil y simple, por eso no me gustó que no pusieran el código fuente, de algo tan simple, para mostrar a la gente como se puede hacer&#8230;</p>
<p>Me dije, ¿ es necesario debuggear y analizar lo que hace ? me dije, si&#8230; y aquí estamos <img src='http://www.disidents.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Abrí el ejecutable y me encontré con esto en Olly:</p>
<p><a href="http://www.disidents.org/wp-content/uploads/2008/12/p1.jpg"><img class="aligncenter size-medium wp-image-25" title="p1" src="http://www.disidents.org/wp-content/uploads/2008/12/p1-300x220.jpg" alt="Empacado" width="300" height="220" /></a></p>
<p>Como veremos para ojos entrenados, esta empacado&#8230; es simple de ver&#8230; no es un entrypoint &#8220;normal&#8221;. Si corremos el Peid no nos dará nada, y el rdg tampoco dará nada, así que no importa, lo cargamos en el Olly como vemos y debuggeamos un poco&#8230;.</p>
<p>Dará vueltas, miles, armando todo nuestro ejecutable final&#8230; al final, damos F9 y lo ejecutamos del todo&#8230; lo veremos abierto&#8230;.</p>
<p>Pondremos un breakpoint de acceso en la sección de código de nuestro proceso netss.exe de esta forma:</p>
<p><a href="http://www.disidents.org/wp-content/uploads/2008/12/p2.jpg"><img class="aligncenter size-medium wp-image-26" title="p2" src="http://www.disidents.org/wp-content/uploads/2008/12/p2-300x103.jpg" alt="Breakpoint on access en la seccion code" width="300" height="103" /></a></p>
<p>Ahora hacemos un click en la aplicación y Olly saltará, permitiéndonos volver al proceso principal, y mirar nuestro desempacado en memoria 100% libre de ataduras. <img src='http://www.disidents.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Veremos el código así:</p>
<p><a href="http://www.disidents.org/wp-content/uploads/2008/12/p3.jpg"><img class="aligncenter size-medium wp-image-27" title="p3" src="http://www.disidents.org/wp-content/uploads/2008/12/p3.jpg" alt="Remover el análisis!!" width="195" height="67" /></a></p>
<p>Veremos que necesitamos sacar el análisis ya que Olly no lo interpretó bien&#8230;.</p>
<p><a href="http://www.disidents.org/wp-content/uploads/2008/12/p41.jpg"><img class="aligncenter size-full wp-image-29" title="p41" src="http://www.disidents.org/wp-content/uploads/2008/12/p41.jpg" alt="Ahora si tiene más color..." width="500" height="78" /></a></p>
<p>Ahora si nuestro &#8220;EP&#8221; tiene más color ¿no amigos?, ahora haremos el volcado con el ollydump, si lo ejecutamos se romperá&#8230; ¿ qué está mal?</p>
<p>Si hacemos scroll veremos algo más que puede ser un entrypoint más posible que ese&#8230;</p>
<p>Nuestro dump se rompe porque hace un cmp con un valor específico&#8230; calculo que lo hace para ver que botón se ha presionado en el formulario, típico de aplicaciones en win32asm, como dicen los autores que lo hicieron. <img src='http://www.disidents.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://www.disidents.org/wp-content/uploads/2008/12/p5.jpg"><img class="aligncenter size-full wp-image-30" title="p5" src="http://www.disidents.org/wp-content/uploads/2008/12/p5.jpg" alt="Este es el real EP" width="500" height="80" /></a></p>
<p>He aquí más arriba algo más normal del principio de un programa en win32asm, todo definido, el querido GetModuleHandleA, hasta ExitProccess, está todo listo. <img src='http://www.disidents.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>¿Cuál es la definición final? Deberemos modificar el Entrypoint, ya que si cargamos el dump con Olly, empezará en la dirección 40102B y no en 401000 que es donde debería empezar&#8230;</p>
<p>Para eso abrimos un editor PE cualquiera, probé uno nuevo llamado PEiT (Pe Insight, desde rusia).</p>
<p>Modificamos el valor del Entrypoint y quedará así finalmente:</p>
<p><a href="http://www.disidents.org/wp-content/uploads/2008/12/p6.jpg"><img class="aligncenter size-full wp-image-31" title="p6" src="http://www.disidents.org/wp-content/uploads/2008/12/p6.jpg" alt="Modificando el Entrypoint con PEiT" width="431" height="380" /></a></p>
<p>Finalmente el EP quedará apuntando a 401000, grabamos los cambios, lo probamos y voilá! lo hemos hecho. <img src='http://www.disidents.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Bien, pero el tema era ver como enviamos esos mensajes anónimos, y si miramos un poco el código fuente, nos daremos cuenta que una de las API&#8217;s usadas son para enviar con a través del servicio mensajero.</p>
<p style="text-align: center;"><strong>NetMessageBufferSend</strong></p>
<p style="text-align: left;">Ahora veamos como carga los parámetros cuales son cada uno, y listo, ya sabemos el secreto&#8230; <img src='http://www.disidents.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="text-align: left;"><a href="http://www.disidents.org/wp-content/uploads/2008/12/p7.jpg"><img class="aligncenter size-full wp-image-32" title="p7" src="http://www.disidents.org/wp-content/uploads/2008/12/p7.jpg" alt="Parámetros de la función" width="500" height="53" /></a></p>
<p style="text-align: left;">Está todo dicho amigos, la magia, el misterio se terminó&#8230; ya sabemos que parámetros y que API del sistema deberemos llamar&#8230;.</p>
<p style="text-align: left;">La información debe conocerse, coincido que NO toda a veces, pero este tipo de información ocultarla no tiene sentido amigos&#8230; tarde o temprano&#8230; se sabe. <img src='http://www.disidents.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="text-align: left;">Google nos da pocos resultados sobre esta API, encima eso&#8230; it&#8217;s is a must dar a conocerlo a la gente&#8230;</p>
<p style="text-align: left;">Gracias a todos por leerme, saludos a z0mbie, GriYo, kaze, la gente de indetectables, al hispano #crackers, #Disidents, #hackers, #virus, la gente de crackslatinos, y muchos más, aún seguimos vivos. <img src='http://www.disidents.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="text-align: left;">Saludos,</p>
<p style="text-align: left;">SparK.-</p>
 <span class="post2pdf_span" style="border: 1px solid gray; width: 160px; text-align: left; "><a href="http://www.disidents.org/wp-content/plugins/post2pdf/generate.php?post=" rel="nofollow"><img src="http://www.disidents.org/wp-content/plugins/post2pdf/icon/pdf.png" width="16px" height="16px" />convert this post to pdf.</a></span>]]></content:encoded>
			<wfw:commentRss>http://www.disidents.org/2008/12/08/%c2%bfque-hace-netss-de-thinkcore/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>E-zines</title>
		<link>http://www.disidents.org/2008/03/16/pruebap/#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=pruebap</link>
		<comments>http://www.disidents.org/2008/03/16/pruebap/#comments</comments>
		<pubDate>Sun, 16 Mar 2008 18:56:30 +0000</pubDate>
		<dc:creator>ddiego</dc:creator>
				<category><![CDATA[E-zines]]></category>
		<category><![CDATA[DDiego]]></category>
		<category><![CDATA[DisidentS]]></category>
		<category><![CDATA[DsD!]]></category>
		<category><![CDATA[ezines]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Hacktivismo]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Reversing Links]]></category>
		<category><![CDATA[SparK]]></category>
		<category><![CDATA[Virus]]></category>
		<category><![CDATA[W3ndig0]]></category>

		<guid isPermaLink="false">http://www.disidents.org/2008/03/16/pruebap/</guid>
		<description><![CDATA[Disidents 001 &#8211; disidents001.zip md5: 2bd65a2d20bda4c252b7478368608da7 Disidents 002 &#8211; disidents002.zip md5: 85501e0bba972a5f264e5698a4aab9ed Disidents 003 &#8211; disidents003.zip md5: de34eff4ee97f26c48bc1c0eff3b2749 Disidents 004 &#8211; disidents004.zip md5: 2741c77ff1339199c2d86e07bdcc3815 Disidents 005 &#8211; disidents005.zip md5: ea92a017dc089d1989a070ae85a539a4 Disidents 006 &#8211; disidents006.zip md5: 15b5f143945b81a9f09e25979dc9513c Disidents 007 &#8211; disidents007.zip md5: 2002beaece1b83eb3b2ad9ff4de8442e Disidents 008 &#8211; disidents008.zip md5: e641726ce9352592d67557956cdbb583 convert this post to pdf.]]></description>
			<content:encoded><![CDATA[<p>Disidents 001 &#8211; <a title="disidents001.zip" href="http://www.disidents.org/wp-content/uploads/2008/03/disidents001.zip">disidents001.zip</a> <span style="color: gray;">md5: 2bd65a2d20bda4c252b7478368608da7</span><br />
Disidents 002 &#8211; <a title="disidents002.zip" href="http://www.disidents.org/wp-content/uploads/2008/03/disidents002.zip">disidents002.zip</a> <span style="color: gray;">md5: 85501e0bba972a5f264e5698a4aab9ed</span><br />
Disidents 003 &#8211; <a title="disidents003.zip" href="http://www.disidents.org/wp-content/uploads/2008/03/disidents003.zip">disidents003.zip</a> <span style="color: gray;">md5: de34eff4ee97f26c48bc1c0eff3b2749</span><br />
Disidents 004 &#8211;  <a title="disidents004.zip" href="http://www.disidents.org/wp-content/uploads/2008/03/disidents004.zip">disidents004.zip</a> <span style="color: gray;">md5: 2741c77ff1339199c2d86e07bdcc3815</span><br />
Disidents 005 &#8211; <a title="disidents005.zip" href="http://www.disidents.org/wp-content/uploads/2008/03/disidents005.zip">disidents005.zip</a> <span style="color: gray;">md5: ea92a017dc089d1989a070ae85a539a4</span><br />
Disidents 006 &#8211; <a title="disidents006.zip" href="http://www.disidents.org/wp-content/uploads/2008/03/disidents006.zip">disidents006.zip</a> <span style="color: gray;">md5: 15b5f143945b81a9f09e25979dc9513c</span><br />
Disidents 007 &#8211; <a title="disidents007.zip" href="http://www.disidents.org/wp-content/uploads/2008/03/disidents007.zip">disidents007.zip</a> <span style="color: gray;">md5: 2002beaece1b83eb3b2ad9ff4de8442e</span><br />
Disidents 008 &#8211; <a title="disidents008.zip" href="http://www.disidents.org/wp-content/uploads/2008/03/disidents008.zip">disidents008.zip</a> <span style="color: gray;">md5: e641726ce9352592d67557956cdbb583</span></p>
 <span class="post2pdf_span" style="border: 1px solid gray; width: 160px; text-align: left; "><a href="http://www.disidents.org/wp-content/plugins/post2pdf/generate.php?post=	" rel="nofollow"><img src="http://www.disidents.org/wp-content/plugins/post2pdf/icon/pdf.png" width="16px" height="16px" />convert this post to pdf.</a></span>]]></content:encoded>
			<wfw:commentRss>http://www.disidents.org/2008/03/16/pruebap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
