<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-2157924926610706248</atom:id><lastBuildDate>Sun, 18 Oct 2026 22:42:13 +0000</lastBuildDate><category>Artigo - Tecnologia</category><category>Artigo - Games</category><category>Artigo - Diversos</category><category>root</category><category>#LTCode</category><category>Criptomoeda</category><category>Curiosidades - Tecnologia</category><category>Curiosidades - Diversos</category><category>WhatsApp</category><category>Smartphones - Reviews</category><category>#HK</category><category>Programar C</category><category>Pentest</category><category>#ann</category><category>Programar Shell</category><category>Coluna - Alternative World</category><category>VPN</category><category>blueteam</category><category>Raspberry Pi</category><category>Coluna - Tec Line</category><category>logica</category><category>Coluna - Fail</category><category>HN</category><category>Programar verilog</category><category>IA</category><category>Teoria</category><category>estudo</category><category>autor-thomaz</category><category>Programar POO</category><category>Programar Python</category><category>cftv</category><category>Review</category><category>qradar</category><category>Redes</category><category>Top Nostalgia</category><category>en</category><category>Shorty Awards</category><title>Limon Tec</title><description>Tutorial, bitcoin, hacking.</description><link>http://www.limontec.com/</link><managingEditor>noreply@blogger.com (Unknown)</managingEditor><generator>Blogger</generator><openSearch:totalResults>1364</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2157924926610706248.post-479757703577709983</guid><pubDate>Sat, 17 Oct 2026 16:55:02 +0000</pubDate><atom:updated>2026-10-17T13:55:02.111-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Artigo - Tecnologia</category><category domain="http://www.blogger.com/atom/ns#">root</category><title>Monitorar Docker Containers com Zabbix</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEio0rkhzi2WvG8R27sNEMQinMjE0BhffgKoGXUIh6OqzHfUxiWaqiEt9oLLi5AiMPgQWxmHd1PV37_8LXibobinSFcB2Ddl1RfgltHKQeTAaPy-uqaQa5dBB4ggSpoqda7d5yK5Dn4JvzdnULlA-SQQOMlNMFPVwIphIuO0ytB9HuIMnXqHzMREkwvBN0ku/s1200/zabbix-docker-monitor.jfif&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;896&quot; data-original-width=&quot;1200&quot; height=&quot;239&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEio0rkhzi2WvG8R27sNEMQinMjE0BhffgKoGXUIh6OqzHfUxiWaqiEt9oLLi5AiMPgQWxmHd1PV37_8LXibobinSFcB2Ddl1RfgltHKQeTAaPy-uqaQa5dBB4ggSpoqda7d5yK5Dn4JvzdnULlA-SQQOMlNMFPVwIphIuO0ytB9HuIMnXqHzMREkwvBN0ku/s320/zabbix-docker-monitor.jfif&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Para adicionar o monitoramento de containers Docker com Zabbix é muito simples utilizando o template oficial Docker by Zabbix agent 2.&lt;/p&gt;&lt;p&gt;Primeiramente crie um host clicando em &quot;Criar host&quot; em &quot;Dados coletados&quot; &amp;gt; &quot;Hosts&quot; &amp;gt; &quot;Criar host&quot;. Adicione um nome para o host, em templates procure por &quot;Docker by Zabbix agent 2&quot; e em grupos de hosts adicione &quot;Linux servers&quot; por exemplo. Também adicione em &quot;Interfaces&quot; um &quot;Agente&quot; com o IP do servidor dos containers docker.&lt;/p&gt;&lt;p&gt;Em sua máquina Linux que tem os containers Docker rodando, execute os comandos abaixo para Ubuntu (ou &lt;a href=&quot;https://www.zabbix.com/download?zabbix=7.4&amp;amp;os_distribution=ubuntu&amp;amp;os_version=26.04&amp;amp;components=agent_2&amp;amp;db=&amp;amp;ws=&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;clique aqui&lt;/a&gt; para obter os comando para seu sabor de Linux):&lt;/p&gt;&lt;p&gt;&lt;b&gt;Download e instalação:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[sudo -s]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[wget https://repo.zabbix.com/zabbix/7.4/release/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.4+ubuntu26.04_all.deb]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[dpkg -i zabbix-release_latest_7.4+ubuntu26.04_all.deb]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[apt update]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[apt install zabbix-agent2]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;O comando abaixo é opcional para instalação de plugins:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[apt install zabbix-agent2-plugin-mongodb zabbix-agent2-plugin-mssql zabbix-agent2-plugin-postgresql]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Ajuste o IP do seu Zabbix, no arquivo abaixo procure pela linha &quot;Server=127.0.0.1&quot; e substitua pelo IP do seu servidor Zabbix.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[pico /etc/zabbix/zabbix_agent2.conf]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Evite o error &quot;Cannot fetch data: Get &quot;http://1.28/info&quot;: dial unix /var/run/docker.sock: connect: permission denied&quot; adicionando o usuário zabbix ao grupo de usuários do Docker:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[usermod -aG docker zabbix]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[groups zabbix]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Reinicie o agente:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[systemctl restart zabbix-agent2]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[systemctl enable zabbix-agent2]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;b&gt;Tutorial em vídeo:&lt;/b&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;iframe allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; src=&quot;https://www.youtube.com/embed/QNdsWp_X9-c?si=z2q-OEiAq7M8wz5p&quot; title=&quot;YouTube video player&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;</description><link>http://www.limontec.com/2026/10/monitorar-docker-containers-com-zabbix.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEio0rkhzi2WvG8R27sNEMQinMjE0BhffgKoGXUIh6OqzHfUxiWaqiEt9oLLi5AiMPgQWxmHd1PV37_8LXibobinSFcB2Ddl1RfgltHKQeTAaPy-uqaQa5dBB4ggSpoqda7d5yK5Dn4JvzdnULlA-SQQOMlNMFPVwIphIuO0ytB9HuIMnXqHzMREkwvBN0ku/s72-c/zabbix-docker-monitor.jfif" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2157924926610706248.post-2311664367354943842</guid><pubDate>Tue, 08 Sep 2026 21:12:59 +0000</pubDate><atom:updated>2026-09-08T18:12:59.420-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Artigo - Tecnologia</category><category domain="http://www.blogger.com/atom/ns#">IA</category><category domain="http://www.blogger.com/atom/ns#">root</category><title>Ollama configurar context 64000</title><description>&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHh88vlajtsv1JJsRCw6sVY_lvTi5GVdwfAR-uTrbufRTeBog9iwMoWLJb-cAaP0-3Fev5XOfTfVCnq9VlYPbS-5uk2W_tVhcAk9sBzsSYIA2ZGxxZb-asIo_2Sbe4ExSl40j8yoR9jDe1HZzhclGpniqdJc-P_zodn75EpxDfKF1XDGwozwRf3CWgfhmn/s870/ollama_context_window.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;595&quot; data-original-width=&quot;870&quot; height=&quot;219&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHh88vlajtsv1JJsRCw6sVY_lvTi5GVdwfAR-uTrbufRTeBog9iwMoWLJb-cAaP0-3Fev5XOfTfVCnq9VlYPbS-5uk2W_tVhcAk9sBzsSYIA2ZGxxZb-asIo_2Sbe4ExSl40j8yoR9jDe1HZzhclGpniqdJc-P_zodn75EpxDfKF1XDGwozwRf3CWgfhmn/s320/ollama_context_window.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;OLLAMA_CONTEXT_LENGTH é uma variável de ambiente do Ollama usada para definir o tamanho da janela de contexto (context window) padrão para os modelos de IA carregados. O &quot;contexto&quot; é a quantidade máxima de texto (medida em tokens) que a IA consegue &quot;lembrar&quot; ou ler de uma só vez em uma única conversa. Se você precisa aumentar essa janela de contexto no Ollama para Linux siga o procedimento abaixo:&lt;/p&gt;&lt;p&gt;Edite o arquivo /etc/systemd/system/ollama.service&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[sudo pico /etc/systemd/system/ollama.service]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Adicione o novo tamanho da janela de contexto dentro de [Service].&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[Environment=&quot;OLLAMA_CONTEXT_LENGTH=64000&quot;]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Reinicie o ollama&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[sudo systemctl daemon-reload]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[sudo systemctl restart ollama]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Chame algum modelo e acompanhe o tamanho da nova janela de contexto com o comando abaixo.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[watch -n1 ollama ps]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description><link>http://www.limontec.com/2026/09/ollama-configurar-context-64000.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHh88vlajtsv1JJsRCw6sVY_lvTi5GVdwfAR-uTrbufRTeBog9iwMoWLJb-cAaP0-3Fev5XOfTfVCnq9VlYPbS-5uk2W_tVhcAk9sBzsSYIA2ZGxxZb-asIo_2Sbe4ExSl40j8yoR9jDe1HZzhclGpniqdJc-P_zodn75EpxDfKF1XDGwozwRf3CWgfhmn/s72-c/ollama_context_window.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2157924926610706248.post-3563198408825840480</guid><pubDate>Mon, 10 Aug 2026 11:00:00 +0000</pubDate><atom:updated>2026-08-10T08:00:00.112-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Artigo - Tecnologia</category><category domain="http://www.blogger.com/atom/ns#">root</category><title>Como identificar interface de um IP no Palo Alto</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1NTujZVdaoF13yJ3kF96umJjvFjlriWc1f96tgwEb0pX_1yKJgegGrgy2uDGkNvZOQeE33cseMIRw-5giitmUwhcQ1140yJMz-vhyDAjVFVjKeLjHWFRrAb5P2P_y0Le9G0LmOky-ZW2lv4mWHHg7xNiytTJWPm2gktIK9Rv0oKRUfNXPGEjjrJMacjYJ/s587/fw-palo-alto-ip-interface.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;243&quot; data-original-width=&quot;587&quot; height=&quot;132&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1NTujZVdaoF13yJ3kF96umJjvFjlriWc1f96tgwEb0pX_1yKJgegGrgy2uDGkNvZOQeE33cseMIRw-5giitmUwhcQ1140yJMz-vhyDAjVFVjKeLjHWFRrAb5P2P_y0Le9G0LmOky-ZW2lv4mWHHg7xNiytTJWPm2gktIK9Rv0oKRUfNXPGEjjrJMacjYJ/s320/fw-palo-alto-ip-interface.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Saiba como identificar qual interface esta associado determinado IP de origem à zona de segurança no firewall&amp;nbsp;no Palo Alto / Panorama.&lt;/p&gt;&lt;p&gt;Quando não sabemos por qual caminho o firewall envia o tráfego de um IP específico, forçamos um teste de rota informando o IP de destino e o Virtual Router do equipamento. Substitua &lt;i&gt;default&lt;/i&gt; pelo nome do seu virtual-router e &lt;i&gt;192.168.0.10&lt;/i&gt; pelo IP que você está investigando.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;[test routing fib-lookup ip 192.168.0.10 virtual-router default]&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;A saída será algo como:&lt;/p&gt;&lt;p&gt;----------------------------------------------------------------------------------&lt;/p&gt;&lt;p&gt;runtime route lookup&lt;/p&gt;&lt;p&gt;----------------------------------------------------------------------------------&lt;/p&gt;&lt;p&gt;virtual-router: default&lt;/p&gt;&lt;p&gt;destination: 192.168.0.10&lt;/p&gt;&lt;p&gt;result:&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; via 10.0.0.1 interface ethernet1/10.2, source 10.0.0.1, metric 11&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;------------------------------------------------------------------------------------&lt;/span&gt;&lt;/p&gt;&lt;p&gt;O resultado apresentado nos informa que o tráfego está passando pela interface ethernet1/10.2 e 10.0.0.1 é próximo salto que conhece o caminho para o IP 192.168.0.10 .&lt;/p&gt;&lt;p&gt;Se você entrar em um firewall desconhecido e precisar descobrir o nome do Virtual Router para rodar os comandos acima, use o comando &quot;show routing route&quot; (sem aspas).&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</description><link>http://www.limontec.com/2026/08/palo-alto-firewall-ip-interface.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1NTujZVdaoF13yJ3kF96umJjvFjlriWc1f96tgwEb0pX_1yKJgegGrgy2uDGkNvZOQeE33cseMIRw-5giitmUwhcQ1140yJMz-vhyDAjVFVjKeLjHWFRrAb5P2P_y0Le9G0LmOky-ZW2lv4mWHHg7xNiytTJWPm2gktIK9Rv0oKRUfNXPGEjjrJMacjYJ/s72-c/fw-palo-alto-ip-interface.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2157924926610706248.post-1176484952510577580</guid><pubDate>Fri, 07 Aug 2026 11:00:00 +0000</pubDate><atom:updated>2026-08-07T08:00:00.118-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Artigo - Tecnologia</category><category domain="http://www.blogger.com/atom/ns#">root</category><title>Como assistir a várias LIVES na mesma guia do navegador</title><description>&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghIWIF7NYM_IcGUceO1n7ug0RTxFBjf6lDjUDLBhWrJ76A_I7jp6Ow_vCM_WHvDj5mJ7kpAaAI_x2UTGJfRpzj7BzHaYTWZUXv-NVq0GL7Jas_d7rtZY0WTYTmF3ZwHpLx60z811BNv63M0aUJhs66A80tuY1XXCh_G4PuuiSLRhNHAu5WAU7lzwIiDA4X/s1761/streamlink-web.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;901&quot; data-original-width=&quot;1761&quot; height=&quot;164&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghIWIF7NYM_IcGUceO1n7ug0RTxFBjf6lDjUDLBhWrJ76A_I7jp6Ow_vCM_WHvDj5mJ7kpAaAI_x2UTGJfRpzj7BzHaYTWZUXv-NVq0GL7Jas_d7rtZY0WTYTmF3ZwHpLx60z811BNv63M0aUJhs66A80tuY1XXCh_G4PuuiSLRhNHAu5WAU7lzwIiDA4X/s320/streamlink-web.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class=&quot;citation-31&quot;&gt;O &lt;/span&gt;&lt;b data-index-in-node=&quot;2&quot; data-path-to-node=&quot;0&quot;&gt;Streamlink Web Player&lt;/b&gt;&lt;span class=&quot;citation-31&quot;&gt; é uma interface web local para o Streamlink. Simples de usar, apenas cole a URL de uma transmissão&amp;nbsp;&lt;/span&gt;(como Twitch, YouTube, entre outras)&lt;span class=&quot;citation-31&quot;&gt;&amp;nbsp;e assista no navegador via HLS sem necessidade do VLC. Reproduza várias transmissões simultaneamente em uma grade redimensionável, com organização por arrastar e soltar.&lt;/span&gt;&lt;span class=&quot;citation-31 citation-end-31&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;citation-31 citation-end-31&quot;&gt;Abaixo, veja um mini tutorial prático de como configurar e utilizar essa ferramenta.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;citation-31 citation-end-31&quot;&gt;&lt;b&gt;Pré-requisitos&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class=&quot;citation-31 citation-end-31&quot;&gt;Antes de instalar o projeto do repositório &lt;a href=&quot;https://github.com/limontec/Streamlink-Web-Player&quot; target=&quot;_blank&quot;&gt;limontec/Streamlink-Web-Player&lt;/a&gt;, certifique-se de ter em seu sistema:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;a href=&quot;https://www.python.org/downloads/windows/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Python&lt;/a&gt; instalado.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://streamlink.github.io/install.html#windows&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Streamlink&lt;/a&gt; instalado e configurado no PATH do sistema.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://git-scm.com/install/windows&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Git&lt;/a&gt; (opcional, para clonar o repositório).&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ffmpeg.org/download.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;ffmpeg&lt;/a&gt; no caminho C:\ffmpeg\bin\ffmpeg.exe&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;b&gt;Passo a Passo&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. Abra o seu terminal e clone o repositório do GitHub ou baixe-o como arquivo ZIP:&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;[git &lt;span class=&quot;hljs-built_in&quot;&gt;clone&lt;/span&gt; https://github.com/limontec/Streamlink-Web-Player.git&lt;/div&gt;&lt;div&gt;cd Streamlink-Web-Player]&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2. Inicialize o ambiente Python conforme seu ambiente:&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;[python -m venv venv&lt;/div&gt;&lt;div&gt;&lt;div&gt;venv\Scripts\Activate.ps1]&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3. Instale as dependências:&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;[pip install -r requirements.txt]&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;4. Abra o arquivo app.py e aponte o caminho do ffmpeg:&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;[FFMPEG_PATH = r&quot;C:\ffmpeg\bin\ffmpeg.exe&quot;]&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;5. (Opcional) Caso use plugins que não existem oficialmente para Streamlink, coloque eles na pasta `custom_plugin/`, ao lado de `app.py` (criada automaticamente na primeira execução).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;6. Execute a aplicação e abra o endereço http://localhost:5000 no seu navegador.&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;[python app.py]&lt;/blockquote&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Como usar:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Cole a URL do stream no campo de entrada e pressione Enter (ou clique em &quot;Assistir&quot;).&lt;/li&gt;&lt;li&gt;O servidor inicia o streamlink direcionando a saída para o ffmpeg, que faz a transcodificação para HLS; o vídeo começa a reproduzir automaticamente assim que o primeiro segmento está pronto.&lt;/li&gt;&lt;li&gt;Cada stream tem seu próprio cartão:&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Arraste o cabeçalho para reordenar os cartões.&lt;/li&gt;&lt;li&gt;Arraste o canto inferior direito para redimensionar um cartão.&lt;/li&gt;&lt;li&gt;&quot;Recarregar&quot; reinicia o player daquele stream.&lt;/li&gt;&lt;li&gt;&quot;Fechar&quot; interrompe o stream e libera o espaço.&lt;/li&gt;&lt;li&gt;&quot;Mostrar logs&quot; exibe um registro de eventos específico para o stream (estado da conexão, carregamento/buffering, erros).&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;O ponto de status ao lado do título de cada stream indica seu estado:&amp;nbsp;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;amarelo (iniciando/carregando)&lt;/li&gt;&lt;li&gt;verde (reproduzindo)&lt;/li&gt;&lt;li&gt;vermelho (desconectado/erro).&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Os streams abertos são salvos no navegador (localStorage) e restaurados automaticamente na próxima vez que você carregar a página.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;Para mais informações de personalização, confira o &lt;a href=&quot;https://github.com/limontec/Streamlink-Web-Player&quot; target=&quot;_blank&quot;&gt;readme&lt;/a&gt;.&lt;/div&gt;&lt;p&gt;&lt;/p&gt;</description><link>http://www.limontec.com/2026/08/streamlink-web-player.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghIWIF7NYM_IcGUceO1n7ug0RTxFBjf6lDjUDLBhWrJ76A_I7jp6Ow_vCM_WHvDj5mJ7kpAaAI_x2UTGJfRpzj7BzHaYTWZUXv-NVq0GL7Jas_d7rtZY0WTYTmF3ZwHpLx60z811BNv63M0aUJhs66A80tuY1XXCh_G4PuuiSLRhNHAu5WAU7lzwIiDA4X/s72-c/streamlink-web.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2157924926610706248.post-3931366841701820904</guid><pubDate>Sun, 02 Aug 2026 16:41:54 +0000</pubDate><atom:updated>2026-08-15T09:45:35.258-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Artigo - Tecnologia</category><category domain="http://www.blogger.com/atom/ns#">cftv</category><category domain="http://www.blogger.com/atom/ns#">root</category><title>[NVR caseiro] Como gravar remotamente câmeras IP chinesas em PC antigo</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAEon5QrbhubUIuQs_vfhjhiE1iwFFTqTDcmGGDlqcRINVWhihW5i7q5yE7bwVZvOjO8GWlVzuFvfGf7G9oXmOR2XjNJPJHbWwcvJYUoX2w6HhwIMwRnI5cWSr4yD6QlE9US_xjoR3ND5jVOcvaV2OBNBdTVDDT6XvaRTXQCH408bJWmpvEWEewUHgnuX7/s1408/lightnvr-tailscale.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;768&quot; data-original-width=&quot;1408&quot; height=&quot;175&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAEon5QrbhubUIuQs_vfhjhiE1iwFFTqTDcmGGDlqcRINVWhihW5i7q5yE7bwVZvOjO8GWlVzuFvfGf7G9oXmOR2XjNJPJHbWwcvJYUoX2w6HhwIMwRnI5cWSr4yD6QlE9US_xjoR3ND5jVOcvaV2OBNBdTVDDT6XvaRTXQCH408bJWmpvEWEewUHgnuX7/s320/lightnvr-tailscale.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Se você tem câmeras IP, um computador antigo parado e não deseja comprar um DVR, pode optar por utilizar o &lt;b data-index-in-node=&quot;107&quot; data-path-to-node=&quot;3&quot;&gt;&lt;a href=&quot;https://github.com/opensensor/lightNVR&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;lightNVR&lt;/a&gt;&lt;/b&gt; para gravar as imagens. Este software é um gravador de vídeo em rede (NVR) otimizado para uso eficiente de memória em máquinas com pouca RAM.&lt;/p&gt;&lt;p&gt;Embora não seja uma regra obrigatória, é altamente recomendado adquirir um HD apropriado para sistemas de CFTV (como os modelos WD Purple). Eles foram desenvolvidos especificamente para funcionar em ciclos contínuos de gravação, o que ajuda a evitar perdas de imagens que costumam ocorrer com o uso de HDs comuns de computador.&lt;/p&gt;&lt;p&gt;Com o HD em mãos, instale-o no computador antigo junto com outro disco onde ficará o sistema operacional. Recomendamos o &lt;b data-index-in-node=&quot;121&quot; data-path-to-node=&quot;5&quot;&gt;&lt;a href=&quot;https://xubuntu.org/download/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Xubuntu&lt;/a&gt;&lt;/b&gt;, por ser uma distribuição Linux leve e ideal para computadores antigos. Como boa prática, instale o sistema em um HD separado daquele dedicado exclusivamente às gravações.&lt;/p&gt;&lt;p&gt;Depois de instalar o sistema, configure a montagem automática do HD de gravação, temos um artigo sobre como realizar este procedimento no Linux. &lt;a href=&quot;https://www.limontec.com/2020/05/como-montar-automaticamente-usb-hd-externo-linux.html&quot; target=&quot;_blank&quot;&gt;Clique aqui&lt;/a&gt; para saber mais.&lt;/p&gt;&lt;p&gt;Para facilitar a instalação, vamos rodar a aplicação via Docker. Portanto, certifique-se de ter o &lt;a href=&quot;https://docs.docker.com/engine/install/ubuntu/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Docker&lt;/a&gt; instalado na máquina. Em seguida, acesse o HD de gravação, crie uma pasta chamada &lt;code data-index-in-node=&quot;187&quot; data-path-to-node=&quot;7&quot;&gt;lightNVR&lt;/code&gt; e baixe o arquivo &lt;code data-index-in-node=&quot;214&quot; data-path-to-node=&quot;7&quot;&gt;docker-compose.yml&lt;/code&gt;:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;[mkdir lightNVR&lt;/p&gt;&lt;p&gt;cd lightNVR&lt;/p&gt;&lt;p&gt;curl -LO https://raw.githubusercontent.com/opensensor/lightNVR/main/docker-compose.yml]&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Feito isso, inicie o container:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[docker compose up -d]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;11&quot;&gt;Certifique-se de que a aplicação está rodando corretamente conferindo a saída do comando:&lt;/p&gt;&lt;response-element class=&quot;no-md&quot; ng-version=&quot;0.0.0-PLACEHOLDER&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;code-block _nghost-ng-c1728983502=&quot;&quot; class=&quot;ng-tns-c1728983502-57 enable-luminous-code-block ng-star-inserted&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;div _ngcontent-ng-c1728983502=&quot;&quot; class=&quot;code-block ng-tns-c1728983502-57 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation&quot; data-hveid=&quot;0&quot; data-ved=&quot;0CAAQhtANahcKEwjfjquN_YGWAxUAAAAAHQAAAAAQcg&quot; decode-data-ved=&quot;1&quot; jslog=&quot;223238;track:impression,attention;BardVeMetadataKey:[[&amp;quot;r_8861ba71e9400774&amp;quot;,&amp;quot;c_6f72728ae18ef156&amp;quot;,null,&amp;quot;rc_92987e51c849d44a&amp;quot;,null,null,&amp;quot;pt&amp;quot;,null,1,null,null,1,0]]&quot;&gt;&lt;!----&gt;&lt;div _ngcontent-ng-c1728983502=&quot;&quot; class=&quot;formatted-code-block-internal-container ng-tns-c1728983502-57&quot;&gt;&lt;div _ngcontent-ng-c1728983502=&quot;&quot; class=&quot;animated-opacity ng-tns-c1728983502-57&quot;&gt;&lt;div _ngcontent-ng-c1728983502=&quot;&quot; class=&quot;code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1728983502-57 ng-star-inserted&quot;&gt;&lt;span _ngcontent-ng-c1728983502=&quot;&quot; class=&quot;ng-tns-c1728983502-57&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code-block&gt;&lt;/response-element&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[docker ps -a]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Acesse a interface diretamente pelo navegador em &lt;code data-index-in-node=&quot;49&quot; data-path-to-node=&quot;13&quot;&gt;http://ip-da-maquina:8080/&lt;/code&gt; e faça login com o usuário &lt;code data-index-in-node=&quot;103&quot; data-path-to-node=&quot;13&quot;&gt;admin&lt;/code&gt; e a senha &lt;code data-index-in-node=&quot;119&quot; data-path-to-node=&quot;13&quot;&gt;admin&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Acesso remoto às câmeras (cenário de gravação em outra localidade)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Caso as suas câmeras estejam em outra rede física, por exemplo, o computador que gravará as imagens fica na Casa A e as câmeras ficam na Casa B, e você não consiga ou não queira abrir portas no roteador da Casa B para expor as câmeras à internet, existe uma solução simples e segura usando VPN.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Instale um computador (ou Raspberry Pi) na &lt;b data-index-in-node=&quot;43&quot; data-path-to-node=&quot;17,0,0&quot;&gt;Casa B&lt;/b&gt; rodando o software &lt;b data-index-in-node=&quot;69&quot; data-path-to-node=&quot;17,0,0&quot;&gt;Tailscale&lt;/b&gt;.&lt;/li&gt;&lt;li&gt;Habilite o recurso de &lt;b data-index-in-node=&quot;22&quot; data-path-to-node=&quot;17,1,0&quot;&gt;&lt;a href=&quot;https://tailscale.com/docs/features/subnet-routers&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;subnet routers&lt;/a&gt;&lt;/b&gt; (roteadores de sub-rede) nesse computador da Casa B para que ele faça o redirecionamento da rede local de lá.&lt;/li&gt;&lt;li&gt;Adicione o computador da &lt;b data-index-in-node=&quot;25&quot; data-path-to-node=&quot;17,2,0&quot;&gt;Casa A&lt;/b&gt; (que efetuará a gravação) na mesma conta do Tailscale.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Dessa forma, você conseguirá alcançar os IPs das câmeras da Casa B a partir da Casa A de forma totalmente transparente e segura.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Configurar transmissões&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A interface é bem simples de usar e está em português do Brasil. O próximo passo importante é configurar as câmeras: acesse a aba &lt;b data-index-in-node=&quot;130&quot; data-path-to-node=&quot;21&quot;&gt;Streams&lt;/b&gt; e adicione a transmissão utilizando os IPs locais. Para obter o endereço da transmissão da sua câmera chinesa, &lt;a href=&quot;https://www.limontec.com/2022/01/rtsp-cameras-ip-chinesas.html&quot; target=&quot;_blank&quot;&gt;clique aqui&lt;/a&gt; e saiba mais.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Durante o processo de adicionar a câmera, certifique de marcar a opção de gravação contínua para que as imagens sejam armazenadas em disco.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i data-index-in-node=&quot;164&quot; data-path-to-node=&quot;14&quot;&gt;Dica 1:&lt;/i&gt; Algumas câmeras utilizam o protocolo UDP em vez de TCP, portanto, altere essa configuração na stream caso encontre erros ao clicar no botão que testa a conexão.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i data-index-in-node=&quot;164&quot; data-path-to-node=&quot;14&quot;&gt;Dica 2:&lt;/i&gt;&amp;nbsp;Para atualizar o lightNVR é muito simples. Execute os comandos abaixo no diretório que contém o arquivo docker-compose.yml&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;[docker compose down]&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;[docker compose pull]&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;[docker compose up -d]&lt;/blockquote&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;i data-index-in-node=&quot;164&quot; data-path-to-node=&quot;14&quot;&gt;Dica 3:&lt;/i&gt;&amp;nbsp;Se seu objetivo é extrair o máximo dos recursos da máquina, executar diretamente o software lightNVR é mais eficiente do que de utilizar Docker. Leia a documentação do software para saber como instalar sem Docker.&lt;/div&gt;&lt;p&gt;&lt;/p&gt;</description><link>http://www.limontec.com/2026/08/lightnvr-ip-camera.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAEon5QrbhubUIuQs_vfhjhiE1iwFFTqTDcmGGDlqcRINVWhihW5i7q5yE7bwVZvOjO8GWlVzuFvfGf7G9oXmOR2XjNJPJHbWwcvJYUoX2w6HhwIMwRnI5cWSr4yD6QlE9US_xjoR3ND5jVOcvaV2OBNBdTVDDT6XvaRTXQCH408bJWmpvEWEewUHgnuX7/s72-c/lightnvr-tailscale.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2157924926610706248.post-825276935661004735</guid><pubDate>Thu, 11 Jun 2026 19:27:22 +0000</pubDate><atom:updated>2026-06-11T16:30:50.967-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Artigo - Tecnologia</category><category domain="http://www.blogger.com/atom/ns#">root</category><title>Como assistir live do YouTube com latência mínima</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHjquJw_IQkOIOFSDVZhmcacLtvRhaD78gBJFBzZ9j4kWxiTreHxC-MZPm_6w190ArlC1T4JsEmu_iE78CqKtJ4TYFlXkr5FASZ6bksuvdt3PxbUVuLAsbi46gUlw7bx0d-zpi1QUqkOf7CynliwkGmtbcs-9mnEiPoux8XABanxpWHctNWKVWF3N2wb-W/s1428/vlc-latencia.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;461&quot; data-original-width=&quot;1428&quot; height=&quot;129&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHjquJw_IQkOIOFSDVZhmcacLtvRhaD78gBJFBzZ9j4kWxiTreHxC-MZPm_6w190ArlC1T4JsEmu_iE78CqKtJ4TYFlXkr5FASZ6bksuvdt3PxbUVuLAsbi46gUlw7bx0d-zpi1QUqkOf7CynliwkGmtbcs-9mnEiPoux8XABanxpWHctNWKVWF3N2wb-W/w400-h129/vlc-latencia.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Comando para assistir qualquer live do YouTube com latência mínima pelo VLC Player.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Baixe e instale &lt;a href=&quot;https://streamlink.github.io/install.html#windows&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://streamlink.github.io/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Baixe e instale &lt;a href=&quot;https://www.videolan.org/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://www.videolan.org/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Abra o CMD (prompt de comando) e cole o comando abaixo (substitua URL pelo link da live do YouTube).&amp;nbsp;&lt;/li&gt;&lt;/ol&gt;&lt;blockquote&gt;&lt;div&gt;[streamlink &lt;b&gt;URL&lt;/b&gt; best --hls-live-edge 1 --stream-segment-threads 4 --ringbuffer-size 16M --hls-segment-stream-data --player-args &quot;--network-caching=0 --live-caching=0 --file-caching=0 --sout-mux-caching=0 --clock-jitter=0 --clock-synchro=0 --no-audio-time-stretch --avcodec-hw=any --high-priority&quot;]&lt;/div&gt;&lt;/blockquote&gt;&lt;p&gt;Ao executar esse comando, o seu player de vídeo ignora qualquer margem de segurança para evitar travamentos.&amp;nbsp;A latência será a menor possível, se a sua conexão oscilar minimamente ou se o servidor do YouTube tiver uma pequena queda, o vídeo irá travará imediatamente, pois não há buffer para compensar falhas.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</description><link>http://www.limontec.com/2026/06/assistir-live-do-youtube-pelo-vlc.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHjquJw_IQkOIOFSDVZhmcacLtvRhaD78gBJFBzZ9j4kWxiTreHxC-MZPm_6w190ArlC1T4JsEmu_iE78CqKtJ4TYFlXkr5FASZ6bksuvdt3PxbUVuLAsbi46gUlw7bx0d-zpi1QUqkOf7CynliwkGmtbcs-9mnEiPoux8XABanxpWHctNWKVWF3N2wb-W/s72-w400-h129-c/vlc-latencia.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2157924926610706248.post-3655064862601236650</guid><pubDate>Tue, 12 May 2026 17:19:27 +0000</pubDate><atom:updated>2026-05-12T14:19:27.640-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Artigo - Tecnologia</category><category domain="http://www.blogger.com/atom/ns#">IA</category><category domain="http://www.blogger.com/atom/ns#">root</category><title>OpenWebUI error &quot;startwith&quot;</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFlvVygyqY-UHo16mm9Cfn8G1gYmGFZNUkn77zoViw8KKWIJVAb54JCmdAeq8Di5bqhRCm19o-7EV5kk-JjjXbCPkaDyfoZSlCRMxb7tKESzqx3P_oA_yaLI13Dci07HKL1YfOyz6f3QQF3-ZqIWB-U4rx4bm9-XSJQjbNuah8Z0tt98BfjY8dY2znow_S/s777/openwebui-code-fix.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;250&quot; data-original-width=&quot;777&quot; height=&quot;103&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFlvVygyqY-UHo16mm9Cfn8G1gYmGFZNUkn77zoViw8KKWIJVAb54JCmdAeq8Di5bqhRCm19o-7EV5kk-JjjXbCPkaDyfoZSlCRMxb7tKESzqx3P_oA_yaLI13Dci07HKL1YfOyz6f3QQF3-ZqIWB-U4rx4bm9-XSJQjbNuah8Z0tt98BfjY8dY2znow_S/s320/openwebui-code-fix.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Se você está recebendo a mensagem de erro abaixo ao chamar a API &lt;b&gt;/api/chat/completions&lt;/b&gt; do OpenWebUI em sua versão v0.9.5 saiba que é possível resolver alterando uma linha de código enquanto que a solução não é distribuída.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;[&quot;error&quot;: {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;message&quot;: &quot;Bad request - please check your parameters&quot;,&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;timestamp&quot;: 1778603658835,&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;name&quot;: &quot;NodeApiError&quot;,&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;description&quot;: &quot;&#39;NoneType&#39; object has no attribute &#39;startswith&#39;&quot;,&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;context&quot;: {}&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;]&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Caso esteja utilizando Docker, primeiro identifique o ID do contêiner que está executando o OpenWebUi com o comando:&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[sudo docker ps -a]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Em seguida copie o arquivo main.py para sua máquina (substitua ID pelo id do conteiner):&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[sudo docker cp ID:/app/backend/open_webui/socket/main.py ./main.py]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Edite o arquivo e procure pela linha:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[if request_info.get(&#39;chat_id&#39;, &#39;&#39;).startswith(&#39;channel:&#39;):]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Altere essa linha para:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[if (request_info.get(&#39;chat_id&#39;) or &#39;&#39;).startswith(&#39;channel:&#39;):]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Pronto, agora copie o arquivo de volta para o container (substitua ID pelo id do conteiner):&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[sudo docker cp ./main.py ID:/app/backend/open_webui/socket/main.py]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;E então reinicie o conteiner (substitua ID pelo id do conteiner):&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[sudo docker restart ID]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Após realizar este procedimento, faça uma nova chamada de API e verá seu funcionamento normal.&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Fonte:&amp;nbsp;&lt;a href=&quot;https://github.com/open-webui/open-webui/issues/24553#issuecomment-4416523151&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://github.com/open-webui/open-webui/issues/24553#issuecomment-4416523151&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description><link>http://www.limontec.com/2026/05/openwebui-error-startwith.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFlvVygyqY-UHo16mm9Cfn8G1gYmGFZNUkn77zoViw8KKWIJVAb54JCmdAeq8Di5bqhRCm19o-7EV5kk-JjjXbCPkaDyfoZSlCRMxb7tKESzqx3P_oA_yaLI13Dci07HKL1YfOyz6f3QQF3-ZqIWB-U4rx4bm9-XSJQjbNuah8Z0tt98BfjY8dY2znow_S/s72-c/openwebui-code-fix.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2157924926610706248.post-3847430970175789628</guid><pubDate>Sun, 10 May 2026 01:32:00 +0000</pubDate><atom:updated>2026-05-09T22:32:32.468-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">#LTCode</category><category domain="http://www.blogger.com/atom/ns#">Pentest</category><title>[0x1B] EGG Hunter Exploit</title><description>&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikJMn5LIEfrtHPEivASNGrjkvEXwlg4pIfsUmJSG3iiHB7Qq2GaWwJER5C7ACwPdzjN3mOJMzZdm6Bafmml93aqYJZ_yJFwmxuidt2RVhJnGRLXV2v545RJExEEpfLRP6o2trej48bX-8CaV9ryot9es4nMq4iCNEvPxcVUu2M8uAvqxo4gECtD5lHKw/s849/limontec_seguranca_ofensiva_software.png&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;558&quot; data-original-width=&quot;849&quot; height=&quot;421&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikJMn5LIEfrtHPEivASNGrjkvEXwlg4pIfsUmJSG3iiHB7Qq2GaWwJER5C7ACwPdzjN3mOJMzZdm6Bafmml93aqYJZ_yJFwmxuidt2RVhJnGRLXV2v545RJExEEpfLRP6o2trej48bX-8CaV9ryot9es4nMq4iCNEvPxcVUu2M8uAvqxo4gECtD5lHKw/w640-h421/limontec_seguranca_ofensiva_software.png&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Este tutorial faz parte do GUIA COMPLETO do professional em Segurança Ofensiva de Software,&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2b00fe; font-family: verdana;&quot;&gt;&lt;a href=&quot;https://www.limontec.com/2023/11/guia-em-seguranca-ofensiva.html&quot;&gt;saiba mais&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Aula 27: EGG HUNTER&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;No cenário de desenvolvimento de exploits, um dos obstáculos mais comuns enfrentados por pesquisadores de segurança é a limitação de espaço para a injeção de payloads. Quando a vulnerabilidade explorada (como um buffer overflow) oferece apenas alguns poucos bytes para a execução de código, torna-se impossível injetar um shellcode completo e funcional, como os gerados pelo Metasploit. Para contornar essa barreira, utiliza-se a técnica conhecida como Egg Hunter.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;A técnica recebe esse nome em referência à tradição de &quot;caça aos ovos&quot; de Páscoa, comum nos Estados Unidos. No contexto da exploração, o &quot;ovo&quot; (egg) é uma tag. Essa tag é uma pequena string de 4 bytes, geralmente repetida (totalizando 8 bytes) que o atacante coloca no início do seu shellcode principal.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;O Egg Hunter em si é um estágio inicial do payload, extremamente pequeno e otimizado, cuja única função é varrer a memória do processo em busca dessa tag. Assim que a tag é localizada, o Egg Hunter desvia o fluxo de execução para o código que vem logo após ela, permitindo a execução do shellcode completo que estava escondido em outra área da memória.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Existem diversos motivos pelos quais o espaço para exploração pode ser limitado:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Manipulação da Pilha pela Aplicação: Mesmo que o atacante consiga injetar um código grande, a própria aplicação pode continuar executando e chamar funções que sobrescrevem partes da pilha (stack), corrompendo o shellcode antes que ele seja executado.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Restrição de Caracteres: Filtros de entrada que barram caracteres específicos podem forçar o payload a crescer demais para evitar esses bytes proibidos, impedindo que ele caiba no espaço disponível.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Arquitetura da Função: Algumas funções vulneráveis possuem buffers naturalmente pequenos que não comportam um payload de estágio único.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;O ataque funciona como um payload de dois estágios:&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Injeção do Shellcode (Ovo): O atacante envia o shellcode completo (com a tag identificadora no início) através de qualquer entrada aceita pela aplicação (ex: um pacote de dados anterior ou outra variável). Ele não precisa saber exatamente onde esse código ficará, apenas garantir que ele esteja presente na memória.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Exploração e Execução do Hunter: O atacante explora a falha enviando o Egg Hunter (o código de busca). Este código varre a memória de forma seletiva para evitar travamentos.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Um desafio crítico é que o Hunter não pode simplesmente acessar todos os endereços de memória. Tentar ler áreas inacessíveis ou reservadas ao sistema operacional causará uma exceção de acesso, derrubando o processo e interrompendo o ataque.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;No Windows, o Hunter utiliza chamadas de sistema (como a NtDisplayString ou a NtAccessCheckAndAuditAlarm) para verificar se um endereço é legível sem causar um erro fatal. O processo segue esta lógica:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;O Hunter consulta o sistema sobre a acessibilidade de um endereço.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Se o sistema retornar um erro de acesso, o Hunter pula para a próxima página de memória.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Se o acesso for permitido, ele compara o conteúdo do endereço com a tag escolhida.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Ao encontrar a tag, ele salta para o endereço e inicia a execução do payload principal.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;A eficiência do Egg Hunter depende do seu tamanho e da rapidez com que varre a memória.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoq4a2tRNAXB6ijF-JDHIJUMmmvVn6hm5dv5rxSNJQXHkmHkxAWjaJWBin8Z_pB9Pck0L72PHkazmqHj9jZq4f3uGNa8KigJV9fna3t0uHjBOPCgAIH8qgf7RhJPYKAZGfYkAkrb5RMsZMj-vBLjG7KpTR9XuHhtuvVjkuFB3kzIJPnbZ39exHcQiNmQ/s677/1_software.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;543&quot; data-original-width=&quot;677&quot; height=&quot;514&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoq4a2tRNAXB6ijF-JDHIJUMmmvVn6hm5dv5rxSNJQXHkmHkxAWjaJWBin8Z_pB9Pck0L72PHkazmqHj9jZq4f3uGNa8KigJV9fna3t0uHjBOPCgAIH8qgf7RhJPYKAZGfYkAkrb5RMsZMj-vBLjG7KpTR9XuHhtuvVjkuFB3kzIJPnbZ39exHcQiNmQ/w640-h514/1_software.png&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Figura 1: Aplicação vulnerável&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Utilizando a aplicação que desenvolvemos um exploit que explora a vulnerabilidade de Buffer Overflow anteriormente, vamos agora construir um exploit que utilize um Egg Hunter (Figura 1).&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLTvFE5bHDzvzkVVsi3gLcRjTaUrEnYQaadyVeQ1HtzY0ffW5q7v02sC-mHB9hCZbhPSrRHf4y_QHQujacv2z7PCMluaxMxUDKrrhETzdHBK05kvAf2LmiKbV0Nlu1FBQqWCJr6AkL4susOZx-6nZT_A7Z1UqOFzq6iQyZilPKPXa7OSBdOe6QRb984g/s661/egg_tag_mona.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;550&quot; data-original-width=&quot;661&quot; height=&quot;532&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLTvFE5bHDzvzkVVsi3gLcRjTaUrEnYQaadyVeQ1HtzY0ffW5q7v02sC-mHB9hCZbhPSrRHf4y_QHQujacv2z7PCMluaxMxUDKrrhETzdHBK05kvAf2LmiKbV0Nlu1FBQqWCJr6AkL4susOZx-6nZT_A7Z1UqOFzq6iQyZilPKPXa7OSBdOe6QRb984g/w640-h532/egg_tag_mona.png&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Figura 2: Gerando Egghunter e TAG&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Primeiramente vamos gerar o código do Egghunter definindo sua tag com o seguinte comando utilizando o Mona no Immunity (Figura 2): !mona egg -t LTAG&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmTQfOzhvPnDIJ64Bfcw3yROrCiH52aE8HBrBZzTOjH1qKL7gZlj4H7q4mQafMopuTSIuUAOtv8TrVFSgrHqCEM3azKpX8uoHwneVRJE60__1OesQ4cup1dCNUdmnU1a1xMguxjYQtpq3BbsouKc5nJo4RlG8JUom7jUmnhgGNQ3sbbe-hpMys82Eg_g/s687/codigo_teste.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;665&quot; data-original-width=&quot;687&quot; height=&quot;620&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmTQfOzhvPnDIJ64Bfcw3yROrCiH52aE8HBrBZzTOjH1qKL7gZlj4H7q4mQafMopuTSIuUAOtv8TrVFSgrHqCEM3azKpX8uoHwneVRJE60__1OesQ4cup1dCNUdmnU1a1xMguxjYQtpq3BbsouKc5nJo4RlG8JUom7jUmnhgGNQ3sbbe-hpMys82Eg_g/w640-h620/codigo_teste.png&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Figura 3: Desenvolvimento código&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Reutilizando o código do exploit que desenvolvemos em aulas anteriores, foi adicionado a tag e o código do Egghunter (Figura 3).&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXCjdqJyTnGy39YIplhSZoIf3M1astnj_FF4560fTQB51gIAFy8QFsw5rFLZLbev_8aAcuyfDaLgCKeIG95bkfevqmGWlqXs4FXxcGtvJhn_yHFDEJg_6_ggsjSRNBdMsbxgyYsL7C9XWMXtOFN55lx-n4-0jVSbISb5ObWldEP6_1mVTIKvXIo7Rvuw/s649/4_breakpoint.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;516&quot; data-original-width=&quot;649&quot; height=&quot;508&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXCjdqJyTnGy39YIplhSZoIf3M1astnj_FF4560fTQB51gIAFy8QFsw5rFLZLbev_8aAcuyfDaLgCKeIG95bkfevqmGWlqXs4FXxcGtvJhn_yHFDEJg_6_ggsjSRNBdMsbxgyYsL7C9XWMXtOFN55lx-n4-0jVSbISb5ObWldEP6_1mVTIKvXIo7Rvuw/w640-h508/4_breakpoint.png&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Figura 4: Breaking point&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Vamos analisar o crash. No Immunity adicione um breaking point no endereço referente a instrução &quot;JMP ESP&quot; para acompanhar o fluxo do código (Figura 4).&lt;/span&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUTNimdoOqwLHkr-7gdhMSb58LDMXtq9RZN9wMXfFDnJfkN0Ux8C1yl6LL-vz7kV3bzUJntrAK5-8P9x4_PJ4lRz2P20jvcQL-A-XLVY1DJZ07LAThZ1ndiouJg7ooG2ik3qjWXBf-rydryJY_6XJXUYHvN9U6b8AF8xhUCpi-pfoCckppS4MNmd6Gcw/s648/5_jump_B.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;514&quot; data-original-width=&quot;648&quot; height=&quot;508&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUTNimdoOqwLHkr-7gdhMSb58LDMXtq9RZN9wMXfFDnJfkN0Ux8C1yl6LL-vz7kV3bzUJntrAK5-8P9x4_PJ4lRz2P20jvcQL-A-XLVY1DJZ07LAThZ1ndiouJg7ooG2ik3qjWXBf-rydryJY_6XJXUYHvN9U6b8AF8xhUCpi-pfoCckppS4MNmd6Gcw/w640-h508/5_jump_B.png&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;span class=&quot;fontstyle0&quot;&gt;Figura 5: Estado da aplicação após jump esp&lt;/span&gt;&lt;br style=&quot;font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; text-align: -webkit-auto; text-size-adjust: auto;&quot; /&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;span&gt;Observa-se que nSEH e SEH foram sobrescritos com “B” (Figura 5). Portanto optarei por&amp;nbsp;&lt;/span&gt;&lt;span&gt;colocar o código do EggHunter entre o lixo e a sobrescrita do EIP.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpdd0SEwBfi7wabSZls_UpSNvo3spzFFUuYzdmbvtoCgHdQu9yq5In7O2FdZSpVLxKkX7ppLy7ZiS4eeKlsHOkbS2PsOBeKE8sxim7RhScH-9Ele1xDow7yTMzNZPm6N71Kcs_hrkdcNxxwd7GuaB6WXxZSfS_VtXKWWenb9fqnLvcTrNxyKJoGYqvGQ/s450/9_jmp_negativo.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;119&quot; data-original-width=&quot;450&quot; height=&quot;170&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpdd0SEwBfi7wabSZls_UpSNvo3spzFFUuYzdmbvtoCgHdQu9yq5In7O2FdZSpVLxKkX7ppLy7ZiS4eeKlsHOkbS2PsOBeKE8sxim7RhScH-9Ele1xDow7yTMzNZPm6N71Kcs_hrkdcNxxwd7GuaB6WXxZSfS_VtXKWWenb9fqnLvcTrNxyKJoGYqvGQ/w640-h170/9_jmp_negativo.png&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Figura 6: Jump -50 bytes&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Portanto será feito um jump back de 50 bytes (Figura 6).&lt;/span&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiyXQwTLonCDQIsZmJmR8kdASIcPYQR1PmPkaQcSIw7IHanUDfT_FsGE6mh8KMyCkJm6o3kNbdRMszimPtiokucWvp5Dz1q207aWugrxEecXqzNvJBEqSZMji9hfpm9ZyUC7qyer2uCyacwXUf6tNmwppVZ2oMdFK2FetRUsEjF5iX2XGjL8N2FUStLA/s769/exploit_egghunter_code.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;769&quot; data-original-width=&quot;693&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiyXQwTLonCDQIsZmJmR8kdASIcPYQR1PmPkaQcSIw7IHanUDfT_FsGE6mh8KMyCkJm6o3kNbdRMszimPtiokucWvp5Dz1q207aWugrxEecXqzNvJBEqSZMji9hfpm9ZyUC7qyer2uCyacwXUf6tNmwppVZ2oMdFK2FetRUsEjF5iX2XGjL8N2FUStLA/w576-h640/exploit_egghunter_code.png&quot; width=&quot;576&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Figura 7: Código final do exploit&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;| Junk … | EggHunter | … Junk | EIP | JumpBack 50 | Egg | Shellcode |&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;|------&lt;/span&gt;&lt;span&gt;←&lt;/span&gt;&lt;span&gt;←&lt;/span&gt;&lt;span&gt;←&lt;/span&gt;&lt;span&gt;←&lt;/span&gt;&lt;span&gt;←&lt;/span&gt;&lt;span&gt;←&lt;/span&gt;&lt;span&gt;←------&lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;span&gt;Entre o início do lixo (junk) e a sobrescrita do EIP são 4116 bytes. Então o Egghunter foi&amp;nbsp;&lt;/span&gt;&lt;span&gt;adicionado a -50 bytes da sobrescrita do EIP e os bytes restante até a sobrescrita foram&amp;nbsp;&lt;/span&gt;&lt;span&gt;preenchidos com lixo. Após a sobrescrita do EIP foi adicionado a instrução que realiza um&amp;nbsp;&lt;/span&gt;&lt;span&gt;jump back de 50 bytes, em seguida adicionado nossa TAG (egg) e por fim o shellcode, um&amp;nbsp;&lt;/span&gt;&lt;span&gt;payload do tipo messagebox para Windows (Figura 7).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnZHSRazs6cEz2maQuafxkReE66PzezjPJBOlxteSfuNY7JpDxUjj3EDhK9StDA2_3hKsRZweUE91k2O_W5Sspg9FNMp0cGCUs72_5D-c0rWEgm5UAudxnlN9bTCVYcsQS6_yTvxXchPpYp9T2k7Pymap-uwTfBHejWbyu5VXCb5quW94qteFCpCdSCw/s766/breakpoint.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;580&quot; data-original-width=&quot;766&quot; height=&quot;484&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnZHSRazs6cEz2maQuafxkReE66PzezjPJBOlxteSfuNY7JpDxUjj3EDhK9StDA2_3hKsRZweUE91k2O_W5Sspg9FNMp0cGCUs72_5D-c0rWEgm5UAudxnlN9bTCVYcsQS6_yTvxXchPpYp9T2k7Pymap-uwTfBHejWbyu5VXCb5quW94qteFCpCdSCw/w640-h484/breakpoint.png&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Figura 8: Breakpoint instrução “jmp esp”&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwBXMsWXZTkYc2Br7-PR2xb4pB83Y7M9mdIxnfMhmDl2nzlO21sI1lXuaVkXzjeHD9aqCPMlf5nC72YEFCSkuv-T96eH8vXBc-GLYGD2M35cidxcBVkOuO4nHRsVliLiqdeSO9nZIeigwHtLplQ6RRH_kT3v07YI5EU_gzcdlgRbxtshiQflRmJ-wdLA/s763/jumpback.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;581&quot; data-original-width=&quot;763&quot; height=&quot;488&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwBXMsWXZTkYc2Br7-PR2xb4pB83Y7M9mdIxnfMhmDl2nzlO21sI1lXuaVkXzjeHD9aqCPMlf5nC72YEFCSkuv-T96eH8vXBc-GLYGD2M35cidxcBVkOuO4nHRsVliLiqdeSO9nZIeigwHtLplQ6RRH_kT3v07YI5EU_gzcdlgRbxtshiQflRmJ-wdLA/w640-h488/jumpback.png&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Figura 9: Jump back 50 bytes&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXVfuogchAWbhEn0txs0VnpUsgMXM8JaxDsW1XkFwB7IM2TbdbOgTZ06usRgmc6YK8Yfb4oMTxzus1LjQhNnmuMuf6TkPJba0SISbXFSjKVBM2_qaBs-FjZyygfbit65EDd-CCCMdkbwFGgBJ8F_Ie99bJogpP2OIqvNr0vqDMq51dIwuwDj3C8ZBRMw/s762/egghunter.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;579&quot; data-original-width=&quot;762&quot; height=&quot;486&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXVfuogchAWbhEn0txs0VnpUsgMXM8JaxDsW1XkFwB7IM2TbdbOgTZ06usRgmc6YK8Yfb4oMTxzus1LjQhNnmuMuf6TkPJba0SISbXFSjKVBM2_qaBs-FjZyygfbit65EDd-CCCMdkbwFGgBJ8F_Ie99bJogpP2OIqvNr0vqDMq51dIwuwDj3C8ZBRMw/w640-h486/egghunter.png&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Figura 10: Egghunter&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Após realizar jump negativo de 50 bytes, caímos exatamente no Egghunter (Figura 10).&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU0DUIPtZXzGkCC1C_03RFmQE17fNsCeL9OOkXveayL9nAt1kDk5omlUlbAl3_ASoiBVl8t9rHRaJVg5GjCHPZaaV6yVZXeWA3309galymyPmBhBjtrwDxPqJuaKYp_A7yH9FraI25aQJDI1WaoZKyiTJGghrAoIpqaCxGjeaq18i5tsPYWFl2xiRKyA/s762/tag_search.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;582&quot; data-original-width=&quot;762&quot; height=&quot;488&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU0DUIPtZXzGkCC1C_03RFmQE17fNsCeL9OOkXveayL9nAt1kDk5omlUlbAl3_ASoiBVl8t9rHRaJVg5GjCHPZaaV6yVZXeWA3309galymyPmBhBjtrwDxPqJuaKYp_A7yH9FraI25aQJDI1WaoZKyiTJGghrAoIpqaCxGjeaq18i5tsPYWFl2xiRKyA/w640-h488/tag_search.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Figura 11: Busca pela TAG com Mona&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana; text-align: left;&quot;&gt;Utilizando o Mona foi verificado a ocorrência da TAG na memória (Figura 11).&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggbeRIX8uqEy6Q0AV_9V9W4a6fK4bP4wYVAEl4iHa4m1nCz42YgTP2duMtvuRQ1T0y8PjRIRsWTj1eb6m_CgJKJFeyiOAu6i9HriMKCbTLd4elkPgM-w49RwbkZQbbW6e-_LyKPr4hr0rezv96TP7MzFCWE6hyaekwWfLDChxeRW91Dt3Tlkhyut7Zug/s310/15_shellcode_bin.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;73&quot; data-original-width=&quot;310&quot; height=&quot;73&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggbeRIX8uqEy6Q0AV_9V9W4a6fK4bP4wYVAEl4iHa4m1nCz42YgTP2duMtvuRQ1T0y8PjRIRsWTj1eb6m_CgJKJFeyiOAu6i9HriMKCbTLd4elkPgM-w49RwbkZQbbW6e-_LyKPr4hr0rezv96TP7MzFCWE6hyaekwWfLDChxeRW91Dt3Tlkhyut7Zug/s1600/15_shellcode_bin.png&quot; width=&quot;310&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Figura 12: Preparar arquivo para comparar shellcode&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7VhvA3l9TxSEo5TmDvln72ucuwcxIyX5251X5fkUUfzy8a-xMiJu4B8wttPynufW86Rlz9p0DWc9ZtOfIbtVM1qf4WFKjbGDf-IQ0BiuJZlmntg9k0XJPikfXJqa97tFtQhIq2_Agazch4JQE8SrxsvZM6Uxh4FHOvWjKIO4vvOvH_Yj9pjadVWyqHA/s763/check_shellcode.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;696&quot; data-original-width=&quot;763&quot; height=&quot;584&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7VhvA3l9TxSEo5TmDvln72ucuwcxIyX5251X5fkUUfzy8a-xMiJu4B8wttPynufW86Rlz9p0DWc9ZtOfIbtVM1qf4WFKjbGDf-IQ0BiuJZlmntg9k0XJPikfXJqa97tFtQhIq2_Agazch4JQE8SrxsvZM6Uxh4FHOvWjKIO4vvOvH_Yj9pjadVWyqHA/w640-h584/check_shellcode.png&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;span class=&quot;fontstyle0&quot;&gt;Figura 13: Verificado integridade do shellcode&lt;/span&gt;&lt;br style=&quot;font-variant-east-asian: normal; font-variant-numeric: normal; line-height: normal; text-align: -webkit-auto; text-size-adjust: auto;&quot; /&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Utilizando o comando compare do Mona, foi verificado que o shellcode está integro na memória (Figura 13).&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7tFTZ7C1-WhF4afJTPBv9beLEYtlF7TPyDrXWit-yKpvC6pt6f0kuGQfS4s-3uveY5qngTkQtIoEkGRtpXurBeaOH7V8szhcywdrAu-_YEmKEn1hVg67xrb56L5RUOXVHeEtLpctihzj-nZ4srMPYksmxi0o7OfK1EepPlkt8tnYtRt48y4_0Kmu2rg/s1134/17_egghunter_working.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;587&quot; data-original-width=&quot;1134&quot; height=&quot;332&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7tFTZ7C1-WhF4afJTPBv9beLEYtlF7TPyDrXWit-yKpvC6pt6f0kuGQfS4s-3uveY5qngTkQtIoEkGRtpXurBeaOH7V8szhcywdrAu-_YEmKEn1hVg67xrb56L5RUOXVHeEtLpctihzj-nZ4srMPYksmxi0o7OfK1EepPlkt8tnYtRt48y4_0Kmu2rg/w640-h332/17_egghunter_working.png&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Figura 14: Exploit com EggHunter funcionando&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Após compilar o exploit e gerar o arquivo, carregou-se o arquivo eggoverflow.wav na aplicação que então elevou a CPU a 100% ao buscar pela nossa tag na memória. Após encontrar a tag o payload foi executado com sucesso (Figura 14).&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Podemos concluir que o Egg Hunter é uma ferramenta de precisão em ataques de corrupção de memória. Certas implementações de Egg Hunter utilizam chamadas de sistema que possuem o mesmo identificador em diversas versões do Windows, facilitando a criação de exploits estáveis. Enquanto um payload comum de busca de tags no Metasploit pode ter cerca de 92 bytes, um Egg Hunter customizado e otimizado pode ser significativamente menor, encaixando-se em brechas mínimas de memória. Sendo assim, essa técnica permite que exploits sobrevivam a ambientes com restrições severas de memória, transformando uma pequena falha de poucos bytes numa porta de entrada para a execução completa de código arbitrário.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;span&gt;Próxima aula, &lt;/span&gt;&lt;span style=&quot;color: #2b00fe;&quot;&gt;&lt;a href=&quot;https://www.limontec.com/2023/11/guia-em-seguranca-ofensiva.html&quot;&gt;clique aqui&lt;/a&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;</description><link>http://www.limontec.com/2026/05/egg-hunter-exploit.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikJMn5LIEfrtHPEivASNGrjkvEXwlg4pIfsUmJSG3iiHB7Qq2GaWwJER5C7ACwPdzjN3mOJMzZdm6Bafmml93aqYJZ_yJFwmxuidt2RVhJnGRLXV2v545RJExEEpfLRP6o2trej48bX-8CaV9ryot9es4nMq4iCNEvPxcVUu2M8uAvqxo4gECtD5lHKw/s72-w640-h421-c/limontec_seguranca_ofensiva_software.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2157924926610706248.post-5948956884330008795</guid><pubDate>Sat, 14 Mar 2026 16:19:00 +0000</pubDate><atom:updated>2026-03-14T13:19:09.164-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Artigo - Tecnologia</category><category domain="http://www.blogger.com/atom/ns#">blueteam</category><category domain="http://www.blogger.com/atom/ns#">root</category><title>Cortex XDR Linux Partially Protected</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiYfa34DjCAQJkZvTvjLFglPh_Iv_P4I5N5f7p-c63t9c0Nljf0BzzfWcesx3BIi6T7HdHCuyfUuaoq5tP209xcmdCos1ZQC3NOXefp6FFIkWcV9XCztdNZvfu7wl1RJoBcxnMB2tnXjdoAN8Kk5LJN96VrjXY3mH_s4dzLJfgbsSTbMwc9PfPNgVcJCwr/s1720/cortex_xdr_linux_kernel.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;847&quot; data-original-width=&quot;1720&quot; height=&quot;158&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiYfa34DjCAQJkZvTvjLFglPh_Iv_P4I5N5f7p-c63t9c0Nljf0BzzfWcesx3BIi6T7HdHCuyfUuaoq5tP209xcmdCos1ZQC3NOXefp6FFIkWcV9XCztdNZvfu7wl1RJoBcxnMB2tnXjdoAN8Kk5LJN96VrjXY3mH_s4dzLJfgbsSTbMwc9PfPNgVcJCwr/s320/cortex_xdr_linux_kernel.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Este tutorial resolve as falhas de carregamento de módulos BTP e Antimalware forçando o agente a operar em &lt;b data-index-in-node=&quot;103&quot; data-path-to-node=&quot;4&quot;&gt;User Space&lt;/b&gt;.&lt;/p&gt;&lt;h3 data-path-to-node=&quot;5&quot;&gt;Passo 1: Configuração no Console Cortex XDR&lt;/h3&gt;&lt;ol data-path-to-node=&quot;6&quot; start=&quot;1&quot;&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;6,0,0&quot;&gt;Acesse o menu lateral: &lt;b data-index-in-node=&quot;23&quot; data-path-to-node=&quot;6,0,0&quot;&gt;Endpoints&lt;/b&gt; &amp;gt; &lt;b data-index-in-node=&quot;35&quot; data-path-to-node=&quot;6,0,0&quot;&gt;Policy Management&lt;/b&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;6,1,0&quot;&gt;Vá na aba &lt;b data-index-in-node=&quot;10&quot; data-path-to-node=&quot;6,1,0&quot;&gt;Prevention&lt;/b&gt; e selecione &lt;b&gt;Profiles&lt;/b&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;6,2,0&quot;&gt;Clique em &lt;b data-index-in-node=&quot;10&quot; data-path-to-node=&quot;6,2,0&quot;&gt;+ Add Profile&lt;/b&gt; para criar uma nova configuração de Agent Settings.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;6,3,0&quot;&gt;Localize a seção &lt;b data-index-in-node=&quot;17&quot; data-path-to-node=&quot;6,3,0&quot;&gt;Agent Operation Mode&lt;/b&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;6,4,0&quot;&gt;Marque a opção &lt;b data-index-in-node=&quot;15&quot; data-path-to-node=&quot;6,4,0&quot;&gt;User Space&lt;/b&gt; (desmarque o Kernel Mode se necessário).&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;6,5,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,5,0&quot;&gt;Salve&lt;/b&gt; a configuração com um nome identificável (ex: &lt;i data-index-in-node=&quot;52&quot; data-path-to-node=&quot;6,5,0&quot;&gt;Linux_User_Space&lt;/i&gt;).&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;h3 data-path-to-node=&quot;7&quot;&gt;Passo 2: Criar a Policy Rule&lt;/h3&gt;&lt;ol data-path-to-node=&quot;8&quot; start=&quot;1&quot;&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;8,0,0&quot;&gt;Ainda em &lt;b data-index-in-node=&quot;9&quot; data-path-to-node=&quot;8,0,0&quot;&gt;Policy Management&lt;/b&gt;, vá para a aba &lt;b data-index-in-node=&quot;42&quot; data-path-to-node=&quot;8,0,0&quot;&gt;Policy Rules&lt;/b&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;8,1,0&quot;&gt;Crie uma nova regra e, no filtro, selecione especificamente o &lt;b data-index-in-node=&quot;62&quot; data-path-to-node=&quot;8,1,0&quot;&gt;Hostname&lt;/b&gt; ou o &lt;b data-index-in-node=&quot;76&quot; data-path-to-node=&quot;8,1,0&quot;&gt;IP&lt;/b&gt; do servidor afetado.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;8,2,0&quot;&gt;Atribua o &lt;b data-index-in-node=&quot;10&quot; data-path-to-node=&quot;8,2,0&quot;&gt;Agent Settings&lt;/b&gt; que você criou no Passo 1 a esta regra.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;8,3,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,3,0&quot;&gt;Salve&lt;/b&gt; e certifique-se de que a regra está no topo da hierarquia (prioridade alta).&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;h3 data-path-to-node=&quot;10&quot;&gt;Passo 3: Comandos no Servidor (Terminal)&lt;/h3&gt;&lt;p data-path-to-node=&quot;11&quot;&gt;Conecte-se ao servidor via live terminal e execute os comandos abaixo para forçar a atualização da política e reiniciar os serviços:&lt;/p&gt;&lt;p data-path-to-node=&quot;11&quot;&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p data-path-to-node=&quot;11&quot;&gt;[cd /opt/traps/bin&lt;/p&gt;&lt;p data-path-to-node=&quot;11&quot;&gt;./cytool adaptive_policy query&lt;/p&gt;&lt;p data-path-to-node=&quot;11&quot;&gt;./cytool adaptive_policy recalc&lt;/p&gt;&lt;p data-path-to-node=&quot;11&quot;&gt;./cytool runtime start all]&lt;/p&gt;&lt;/blockquote&gt;&lt;p data-path-to-node=&quot;11&quot;&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;11&quot;&gt;Após alguns instantes, o status no console deve mudar para &lt;b data-index-in-node=&quot;59&quot; data-path-to-node=&quot;16&quot;&gt;Protected&lt;/b&gt;. Como o agente agora opera no espaço do usuário, ele não tentará mais carregar os módulos de kernel que estavam falhando.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;</description><link>http://www.limontec.com/2026/03/cortex-xdr-linux-partially-protected.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiYfa34DjCAQJkZvTvjLFglPh_Iv_P4I5N5f7p-c63t9c0Nljf0BzzfWcesx3BIi6T7HdHCuyfUuaoq5tP209xcmdCos1ZQC3NOXefp6FFIkWcV9XCztdNZvfu7wl1RJoBcxnMB2tnXjdoAN8Kk5LJN96VrjXY3mH_s4dzLJfgbsSTbMwc9PfPNgVcJCwr/s72-c/cortex_xdr_linux_kernel.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2157924926610706248.post-1358672255073885985</guid><pubDate>Mon, 16 Feb 2026 12:22:00 +0000</pubDate><atom:updated>2026-02-16T09:22:09.112-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Artigo - Tecnologia</category><category domain="http://www.blogger.com/atom/ns#">cftv</category><title>[RESOLVIDO] Intelbras app falha de conexão</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiK49O8GtTEDU7ToWsCCQNT_psOpoLyg8CSreKHcnpF6OeVVb0FTnsmdv6JElkr1jtxFm54lZbfvDOhkqHVU3nSSXF1rxhdPWO5zB4GtipIgBJ5fbu7gVCVMEjuK8j7qdVTd1MOnKY3NLIJSAfWH7Ur344Dc8uVXTYOwGBmX8hzkUBH68npKLZBQktZM-I4/s1237/intelbas-isic-lite.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;927&quot; data-original-width=&quot;1237&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiK49O8GtTEDU7ToWsCCQNT_psOpoLyg8CSreKHcnpF6OeVVb0FTnsmdv6JElkr1jtxFm54lZbfvDOhkqHVU3nSSXF1rxhdPWO5zB4GtipIgBJ5fbu7gVCVMEjuK8j7qdVTd1MOnKY3NLIJSAfWH7Ur344Dc8uVXTYOwGBmX8hzkUBH68npKLZBQktZM-I4/s320/intelbas-isic-lite.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p data-path-to-node=&quot;4&quot;&gt;Se o seu aplicativo da Intelbras exibe as mensagens &lt;b data-index-in-node=&quot;52&quot; data-path-to-node=&quot;4&quot;&gt;&quot;Falha de conexão&quot;&lt;/b&gt; ou &lt;b data-index-in-node=&quot;74&quot; data-path-to-node=&quot;4&quot;&gt;&quot;Não foi possível realizar esta operação. Tente novamente mais tarde&quot;&lt;/b&gt;, mesmo com IP, porta e senha corretos, o problema costuma ser a falta de sincronia na segurança do streaming.&lt;/p&gt;&lt;p data-path-to-node=&quot;5&quot;&gt;Siga os passos abaixo para normalizar o acesso:&lt;/p&gt;&lt;h3 data-path-to-node=&quot;6&quot;&gt;1. Em ambos aplicativos (ISIC Lite ou Guardian)&lt;/h3&gt;&lt;ul data-path-to-node=&quot;7&quot;&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;7,0,0&quot;&gt;Clique na opção de&amp;nbsp;&lt;b data-index-in-node=&quot;31&quot; data-path-to-node=&quot;7,0,0&quot;&gt;Configurações (símbolo de engrenagem)&lt;/b&gt;&lt;span data-index-in-node=&quot;31&quot; data-path-to-node=&quot;7,0,0&quot;&gt;&amp;nbsp;dentro do app&lt;/span&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;7,1,0&quot;&gt;Localize a opção &lt;b data-index-in-node=&quot;17&quot; data-path-to-node=&quot;7,1,0&quot;&gt;Criptografia de Áudio &amp;amp; Vídeo&lt;/b&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;7,2,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;7,2,0&quot;&gt;Habilite&lt;/b&gt; essa função.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;7,3,0&quot;&gt;Retorne à visualização e teste a conexão.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 data-path-to-node=&quot;11&quot;&gt;Por que esse erro ocorre?&lt;/h3&gt;&lt;p data-path-to-node=&quot;12&quot;&gt;As mensagens &lt;b data-index-in-node=&quot;13&quot; data-path-to-node=&quot;12&quot;&gt;&quot;Falha de conexão&quot;&lt;/b&gt; e &lt;b data-index-in-node=&quot;34&quot; data-path-to-node=&quot;12&quot;&gt;&quot;Não foi possível realizar esta operação&quot;&lt;/b&gt; aparecem porque os gravadores (DVRs/NVRs) mais recentes exigem que o canal de dados esteja criptografado. Se essa opção estiver desativada no app, o app não consegue descriptografar a imagem, resultando no bloqueio do acesso.&lt;/p&gt;</description><link>http://www.limontec.com/2026/02/resolvido-intelbras-app-falha-de-conexao.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiK49O8GtTEDU7ToWsCCQNT_psOpoLyg8CSreKHcnpF6OeVVb0FTnsmdv6JElkr1jtxFm54lZbfvDOhkqHVU3nSSXF1rxhdPWO5zB4GtipIgBJ5fbu7gVCVMEjuK8j7qdVTd1MOnKY3NLIJSAfWH7Ur344Dc8uVXTYOwGBmX8hzkUBH68npKLZBQktZM-I4/s72-c/intelbas-isic-lite.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2157924926610706248.post-1121130058571642896</guid><pubDate>Wed, 11 Feb 2026 19:24:00 +0000</pubDate><atom:updated>2026-02-11T16:24:15.974-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Artigo - Tecnologia</category><category domain="http://www.blogger.com/atom/ns#">Criptomoeda</category><title>Como minerar bitcoin com ESP32 WROOM</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQy5pSDSgzPPBJg8H5UMzoGIuX2uDBkd56Yoj-EEvsAqefPWXZdAgzhnNvZQxqe5V4FpCj3LFNDcB_GX3UM2jXWDKLFjVPEmX3e6_SwcSTLNWzITyFf-r7kEcELBNlsFi8PShWKLTJNoLkoD5g7-10vMO6v9eJfQ_BlW7DTDL_Infsrr2Ftx00d5-TyzYI/s1068/esp32_mining.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;548&quot; data-original-width=&quot;1068&quot; height=&quot;164&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQy5pSDSgzPPBJg8H5UMzoGIuX2uDBkd56Yoj-EEvsAqefPWXZdAgzhnNvZQxqe5V4FpCj3LFNDcB_GX3UM2jXWDKLFjVPEmX3e6_SwcSTLNWzITyFf-r7kEcELBNlsFi8PShWKLTJNoLkoD5g7-10vMO6v9eJfQ_BlW7DTDL_Infsrr2Ftx00d5-TyzYI/s320/esp32_mining.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;O termo &quot;Lotto Mining&quot; (mineração de loteria) é o que define perfeitamente o propósito deste projeto. Não é sobre lucro constante, mas sobre uma chance remota de um prêmio gigante. Para começar a &quot;minerar bitcoin&quot; (participar de uma loteria honesta a cada 10 minutos) com um ESP32 WROOM é muito simples.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Baixe o projeto NerdMiner_v2 &lt;a href=&quot;https://github.com/BitMaker-hub/NerdMiner_v2/archive/refs/heads/main.zip&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;clicando aqui&lt;/a&gt;&amp;nbsp;(&lt;a href=&quot;https://github.com/limontec/NerdMiner_v2&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;fork&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;Acesse o site &lt;a href=&quot;http://esp.huhn.me&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;esp.huhn.me&lt;/a&gt;&amp;nbsp;, conecte seu ESP32 via cabo ao computador e depois aperte no botão &quot;CONNECT&quot; da página (utilize o Google Chrome para realizar o procedimento).&lt;/li&gt;&lt;li&gt;Depois de conectado, para cada porta identificada carregue um arquivo .bin correspondente. Estes arquivos estão dentro da pasta&amp;nbsp;NerdMiner_v2-main no caminho &quot;\bin\bin ESP32-devKit- no pass&quot; .&lt;/li&gt;&lt;li&gt;Após carregar os arquivos clique em &quot;PROGRAM&quot; para iniciar a gravação. Observe a saída em &quot;Output&quot; que quando aparecer &quot;Done! To run the new firmware please reset your device.&quot; você já pode remover seu ESP32 do cabo usb.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Depois de instalado o firmware, conecte seu ESP32 a energia ou mesmo em uma porta USB qualquer para ligá-lo . Em seu celular procure pela rede WiFi&amp;nbsp;NerdMinerAP . Se solicitar senha, a senha é &quot;MineYourCoins&quot; (sem aspas). Se não encontrar uma rede WiFi, tente flashar o ESP32 novamente pois no caso das placas ESP32-WROOM, pode ser necessário colocar a placa em modo de inicialização. Para isso, mantenha pressionado o botão de boot, enquanto pressiona o botão de reset e então clica em &quot;program&quot;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Conectado a rede wifi, você será redirecionado para um capitive portal no qual terá que configurar nome da sua rede wifi, senha e endereço de bitcoin. Assim, depois de configurado o ESP32 irá se conectar a sua rede para começar minerar bitcoin. Para mais informações e configurações visite&amp;nbsp;&lt;a href=&quot;https://github.com/BitMaker-hub/NerdMiner_v2&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://github.com/BitMaker-hub/NerdMiner_v2&lt;/a&gt;&amp;nbsp;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Para conferir se seu dispositivo esta minerando, acesse a pool escolhida e pesquise pelo endereço de bitcoin que você configurou. Você verá a quantidade de trabalho realizado através da métrica de hash rate mencionada.&lt;br /&gt;&lt;br /&gt;Procurando um ESP32 para comprar? Confira nossa página de ofertas &lt;a href=&quot;https://www.limontec.com/p/ofertas.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;aqui&lt;/a&gt;.&lt;/div&gt;&lt;p&gt;&lt;/p&gt;</description><link>http://www.limontec.com/2026/02/como-minerar-bitcoin-com-esp32-wroom.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQy5pSDSgzPPBJg8H5UMzoGIuX2uDBkd56Yoj-EEvsAqefPWXZdAgzhnNvZQxqe5V4FpCj3LFNDcB_GX3UM2jXWDKLFjVPEmX3e6_SwcSTLNWzITyFf-r7kEcELBNlsFi8PShWKLTJNoLkoD5g7-10vMO6v9eJfQ_BlW7DTDL_Infsrr2Ftx00d5-TyzYI/s72-c/esp32_mining.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2157924926610706248.post-3625257247319808219</guid><pubDate>Tue, 10 Feb 2026 20:10:00 +0000</pubDate><atom:updated>2026-02-16T09:08:52.081-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Artigo - Tecnologia</category><category domain="http://www.blogger.com/atom/ns#">cftv</category><category domain="http://www.blogger.com/atom/ns#">root</category><title>Como Integrar o Vídeo Porteiro Intelbras IVR 1010 ao seu DVR</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnQ7UhGILRr-KBSZF5jPSfWlnjXSRWtlNFIHOTOnOuzHzijdfwwAhUCaVJ_foCAQu6lJdyFuqmtjDIkn-2R_WZUa_en_AQBtxF-GE_7n7hIAx0Aen77iN2SLeAahtvI5hy4yStf2rusqs3JIp0QvGYO77xjjR38U3fMc4DTpYrA0C_DHypZf8TftknlPOC/s1263/borne_ivr1010_diagrama.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;882&quot; data-original-width=&quot;1263&quot; height=&quot;223&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnQ7UhGILRr-KBSZF5jPSfWlnjXSRWtlNFIHOTOnOuzHzijdfwwAhUCaVJ_foCAQu6lJdyFuqmtjDIkn-2R_WZUa_en_AQBtxF-GE_7n7hIAx0Aen77iN2SLeAahtvI5hy4yStf2rusqs3JIp0QvGYO77xjjR38U3fMc4DTpYrA0C_DHypZf8TftknlPOC/s320/borne_ivr1010_diagrama.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Após realizar a instalação padrão do seu IVR 1010 seguindo as &lt;a href=&quot;https://backend.intelbras.com/sites/default/files/2022-08/Manual-do-Usuario-IVR-1010-02-22.pdf&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;orientações do fabricante&lt;/a&gt;, seja via cabo coaxial (pág. 13 do manual) ou cabo de rede UTP (pág. 12), certifique-se de que o sistema está operando corretamente antes de iniciar as integrações abaixo. Realize o procedimento abaixo sempre com o aparelho &lt;b&gt;desligado &lt;/b&gt;da tomada.&lt;/p&gt;&lt;p&gt;&lt;b&gt;1. Como gravar a imagem do interfone no DVR&lt;/b&gt;&lt;/p&gt;&lt;p data-path-to-node=&quot;7&quot;&gt;Este procedimento permite que o seu sistema de monitoramento grave 24h a imagem do interfone. O sinal pode ser interceptado tanto em instalações com cabo de rede quanto coaxial.&lt;/p&gt;&lt;p data-path-to-node=&quot;8&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8&quot;&gt;Passo a passo:&lt;/b&gt;&lt;/p&gt;&lt;ol data-path-to-node=&quot;9&quot; start=&quot;1&quot;&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;9,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;9,0,0&quot;&gt;Identificação dos fios:&lt;/b&gt; Localize o sinal de vídeo e o negativo (GND). No IVR 1010, eles correspondem aos &lt;b data-index-in-node=&quot;105&quot; data-path-to-node=&quot;9,0,0&quot;&gt;bornes 2 (Vídeo)&lt;/b&gt; e &lt;b data-index-in-node=&quot;124&quot; data-path-to-node=&quot;9,0,0&quot;&gt;3 (GND)&lt;/b&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;9,1,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;9,1,0&quot;&gt;Derivação do sinal:&lt;/b&gt; Faça uma emenda (derivação) nesses cabos para levar o sinal até o DVR.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;9,2,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;9,2,0&quot;&gt;Conexão no DVR:&lt;/b&gt;&lt;/p&gt;&lt;ul data-path-to-node=&quot;9,2,1&quot;&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;9,2,1,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;9,2,1,0,0&quot;&gt;Cabo UTP:&lt;/b&gt; É obrigatório o uso de um &lt;b data-index-in-node=&quot;36&quot; data-path-to-node=&quot;9,2,1,0,0&quot;&gt;Video Balun&lt;/b&gt; para converter o sinal para o conector BNC do DVR.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;9,2,1,1,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;9,2,1,1,0&quot;&gt;Cabo Coaxial:&lt;/b&gt; Você pode realizar uma emenda direta (unindo as &quot;almas&quot; e as &quot;malhas&quot; dos cabos) ou utilizar um &lt;b data-index-in-node=&quot;110&quot; data-path-to-node=&quot;9,2,1,1,0&quot;&gt;conector BNC tipo T&lt;/b&gt; para uma conexão mais limpa e profissional.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXoXXKrHehz_13qGW3bjnkuMw1brj3TtHPw5_7oU-fURHyU-yc-6e1Tpw0d2vjY2rsZgmc76bTO9N-GJodqFejqr6MtZ3Ql9KNadvZXQidwA3AjWwE-UiAHfe4G45lZkSeokhCfW1lAQYGchIl8xFzpALl-lAigdvW_-KfByA57PhiSLbSjBfwra6mDNpo/s1084/ivr_1010_to_dvr.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;418&quot; data-original-width=&quot;1084&quot; height=&quot;246&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXoXXKrHehz_13qGW3bjnkuMw1brj3TtHPw5_7oU-fURHyU-yc-6e1Tpw0d2vjY2rsZgmc76bTO9N-GJodqFejqr6MtZ3Ql9KNadvZXQidwA3AjWwE-UiAHfe4G45lZkSeokhCfW1lAQYGchIl8xFzpALl-lAigdvW_-KfByA57PhiSLbSjBfwra6mDNpo/w640-h246/ivr_1010_to_dvr.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;2. Como usar o DVR como &quot;Câmera 2&quot; no monitor interno&lt;br /&gt;&lt;/b&gt;&lt;p data-path-to-node=&quot;13&quot;&gt;Esta configuração permite que você visualize as câmeras do seu DVR diretamente na tela do interfone.&lt;/p&gt;&lt;h4 data-path-to-node=&quot;14&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;14&quot;&gt;Configuração do Jumper&lt;/b&gt;&lt;/h4&gt;&lt;p data-path-to-node=&quot;15&quot;&gt;Antes de iniciar as conexões físicas, desligue o módulo interno da tomada. Altere a posição do &lt;b data-index-in-node=&quot;95&quot; data-path-to-node=&quot;15&quot;&gt;Jumper&lt;/b&gt; no módulo interno para a &lt;b data-index-in-node=&quot;127&quot; data-path-to-node=&quot;15&quot;&gt;posição 2-3&lt;/b&gt; (Comum/Câmera 2).&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGfmIzR8OMuC-DSDHnx5NVTtcqRJYr4Eu2PHr4dujdQP0hvNR52FmlG-uUOPj6gj-Qr1BtlzxZPsjuZeVT0D-83zw7NY2A22mGweHABUDJcQTrwVlH7yFYybnSCgTd4zZuX4Iu0sPGzHwF7SVYRK03A-GW1yk_kmsnCAj7TKdlDLYSdMQnbRivNTPO8l5u/s247/ivr_1010_jumper.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;186&quot; data-original-width=&quot;247&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGfmIzR8OMuC-DSDHnx5NVTtcqRJYr4Eu2PHr4dujdQP0hvNR52FmlG-uUOPj6gj-Qr1BtlzxZPsjuZeVT0D-83zw7NY2A22mGweHABUDJcQTrwVlH7yFYybnSCgTd4zZuX4Iu0sPGzHwF7SVYRK03A-GW1yk_kmsnCAj7TKdlDLYSdMQnbRivNTPO8l5u/s16000/ivr_1010_jumper.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;h4 data-path-to-node=&quot;17&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;17&quot;&gt;Instalação dos Cabos&lt;/b&gt;&lt;/h4&gt;&lt;p data-path-to-node=&quot;18&quot;&gt;Siga o esquema de ligação abaixo para conectar a saída de vídeo do DVR ao interfone:&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0zQ0q5IEd-4dOk_H5fyqM43eVGJawEbQYNEbqnopXnB295rByhj1ffimo5SSANjP4SHcQLC47YKum9ZtPILjS9-CDs9vaeNNggWzdHxcWRVwivXgllp72Fvygoppepouh28TJo_oUXItDc-rrqMdT59DJ_pgJffuR35ySQ0mzKP-3PIrmCpoVlqF2EQ8P/s837/dvr_to_ivr_1010.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;362&quot; data-original-width=&quot;837&quot; height=&quot;276&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0zQ0q5IEd-4dOk_H5fyqM43eVGJawEbQYNEbqnopXnB295rByhj1ffimo5SSANjP4SHcQLC47YKum9ZtPILjS9-CDs9vaeNNggWzdHxcWRVwivXgllp72Fvygoppepouh28TJo_oUXItDc-rrqMdT59DJ_pgJffuR35ySQ0mzKP-3PIrmCpoVlqF2EQ8P/w640-h276/dvr_to_ivr_1010.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;b&gt;DVR&lt;/b&gt;: a saída &quot;Video Out&quot; é uma saída de vídeo auxiliar que pode ser utilizada para enviar a imagem para o interfone. Caso seu DVR não possua esta saída, converta a saída VGA para RCA vídeo.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Balun Passivo&lt;/b&gt;: é utilizado para transmitir o sinal de vídeo por cabo de rede (recomendado) ou cabo paralelo que acompanhe o cabo coaxial flexível (pode haver interferência). Você também pode optar por utilizar cabo coaxial, removendo a necessidade do balun e usando apenas um conector BNC, portanto faça corretamente a ligação do sinal de Vídeo e GND nos bornes do módulo interno.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Módulo Interno&lt;/b&gt;: A unidade interna do interfone que exibirá a imagem da câmera. No diagrama você visualiza o bloco de terminais de conexão.&amp;nbsp;Conecte o positivo que você ligou no balun no borne C (contato rele comum) e o negativo no borne 7.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;h4 data-path-to-node=&quot;21&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;21&quot;&gt;Ativação do Recurso&lt;/b&gt;&lt;/h4&gt;&lt;p data-path-to-node=&quot;22&quot;&gt;Com tudo conectado, ligue o módulo interno na energia. Com a tela desligada e o monofone no gancho:&lt;/p&gt;&lt;ol data-path-to-node=&quot;23&quot; start=&quot;1&quot;&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;23,0,0&quot;&gt;Mantenha pressionada a tecla &lt;b data-index-in-node=&quot;29&quot; data-path-to-node=&quot;23,0,0&quot;&gt;Câmera 2 / Portão 2&lt;/b&gt; por &lt;b data-index-in-node=&quot;53&quot; data-path-to-node=&quot;23,0,0&quot;&gt;5 segundos&lt;/b&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;23,1,0&quot;&gt;O aparelho emitirá &lt;b data-index-in-node=&quot;19&quot; data-path-to-node=&quot;23,1,0&quot;&gt;6 bips&lt;/b&gt;, confirmando que a entrada da Câmera 2 está ativa.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;23,2,0&quot;&gt;Para visualizar, basta um toque rápido na tecla &lt;b data-index-in-node=&quot;48&quot; data-path-to-node=&quot;23,2,0&quot;&gt;Câmera 2&lt;/b&gt;; a imagem será exibida por 30 segundos.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;b&gt;Dica:&lt;/b&gt; No DVR, você pode configurar o modo de visualização (mosaico ou câmera única) para aparecer no monitor do interfone.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Este tutorial foi testado no IVR 1010 ligado ao DVR&amp;nbsp;MHDX 1204 utilizando cabo coaxial para enviar a imagem do interfone ao DVR e cabo paralelo para receber imagem do DVR no interfone. Para melhor qualidade e não precisar ficar passando fios... recomendamos o uso de cabo de rede UTP.&lt;/div&gt;&lt;p&gt;&lt;/p&gt;</description><link>http://www.limontec.com/2026/02/ivr-1010-conectar-dvr.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnQ7UhGILRr-KBSZF5jPSfWlnjXSRWtlNFIHOTOnOuzHzijdfwwAhUCaVJ_foCAQu6lJdyFuqmtjDIkn-2R_WZUa_en_AQBtxF-GE_7n7hIAx0Aen77iN2SLeAahtvI5hy4yStf2rusqs3JIp0QvGYO77xjjR38U3fMc4DTpYrA0C_DHypZf8TftknlPOC/s72-c/borne_ivr1010_diagrama.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2157924926610706248.post-7360353991900449140</guid><pubDate>Sun, 08 Feb 2026 20:48:00 +0000</pubDate><atom:updated>2026-10-17T13:37:41.751-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Artigo - Tecnologia</category><category domain="http://www.blogger.com/atom/ns#">root</category><title>Como manter o Teams com status online</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ2saFEm9XG19xwRBs0lI2rKHZd1go2l8UcWh1QPklBmtzNQWWPPZjFtKYYJ4_OEZYymXhcU2FcdIg85Nbg-70Um6CW4VJIi7YCP4l_16nd3Uv1dbFv1U92Kwe2uR_Yi_yYUIwBZSuemfZ9msIhbSC0Fl8kP4R3q_MiR3VEr9pzaSpTD69C809MyDg1myr/s962/ms_teams_script.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;363&quot; data-original-width=&quot;962&quot; height=&quot;121&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ2saFEm9XG19xwRBs0lI2rKHZd1go2l8UcWh1QPklBmtzNQWWPPZjFtKYYJ4_OEZYymXhcU2FcdIg85Nbg-70Um6CW4VJIi7YCP4l_16nd3Uv1dbFv1U92Kwe2uR_Yi_yYUIwBZSuemfZ9msIhbSC0Fl8kP4R3q_MiR3VEr9pzaSpTD69C809MyDg1myr/s320/ms_teams_script.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Se você se sente incomodado com o Teams com status ausente mesmo estando de frente ao computador trabalhando/estudando, saiba como manter o status online automaticamente no Windows.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Pesquise na aba de pesquisa do Windows pelo PowerShell e execute como administrador.&lt;/li&gt;&lt;li&gt;Execute o comando abaixo para permitir a execução local de scripts.&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;blockquote&gt;[Set-ExecutionPolicy Unrestricted]&lt;/blockquote&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Aperte sim (yes).&lt;/li&gt;&lt;li&gt;Baixe o script keep.ps1 &lt;a href=&quot;https://github.com/limontec/keep_teams_online/archive/refs/heads/main.zip&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;clicando aqui&lt;/a&gt; e extraia o .zip .&lt;/li&gt;&lt;li&gt;Clique com botão direito sobre o arquivo keep.ps1 e execute com PowerShell.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;O script basicamente envia ao Windows um comando de teclado inofensivo a cada 30 segundos. É importante saber que em ambientes corporativos, alguns administradores de TI podem monitorar ou bloquear scripts de automação. &lt;/div&gt;&lt;p&gt;&lt;/p&gt;</description><link>http://www.limontec.com/2026/02/como-manter-o-teams-com-status-online.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ2saFEm9XG19xwRBs0lI2rKHZd1go2l8UcWh1QPklBmtzNQWWPPZjFtKYYJ4_OEZYymXhcU2FcdIg85Nbg-70Um6CW4VJIi7YCP4l_16nd3Uv1dbFv1U92Kwe2uR_Yi_yYUIwBZSuemfZ9msIhbSC0Fl8kP4R3q_MiR3VEr9pzaSpTD69C809MyDg1myr/s72-c/ms_teams_script.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2157924926610706248.post-8968480489025779873</guid><pubDate>Fri, 24 Oct 2025 22:00:00 +0000</pubDate><atom:updated>2025-10-24T19:00:00.110-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">#LTCode</category><category domain="http://www.blogger.com/atom/ns#">Pentest</category><title>[0x1A] STRUCTURED EXCEPTION HANDLER</title><description>&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikJMn5LIEfrtHPEivASNGrjkvEXwlg4pIfsUmJSG3iiHB7Qq2GaWwJER5C7ACwPdzjN3mOJMzZdm6Bafmml93aqYJZ_yJFwmxuidt2RVhJnGRLXV2v545RJExEEpfLRP6o2trej48bX-8CaV9ryot9es4nMq4iCNEvPxcVUu2M8uAvqxo4gECtD5lHKw/s849/limontec_seguranca_ofensiva_software.png&quot; style=&quot;font-family: verdana; margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;span&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;558&quot; data-original-width=&quot;849&quot; height=&quot;421&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikJMn5LIEfrtHPEivASNGrjkvEXwlg4pIfsUmJSG3iiHB7Qq2GaWwJER5C7ACwPdzjN3mOJMzZdm6Bafmml93aqYJZ_yJFwmxuidt2RVhJnGRLXV2v545RJExEEpfLRP6o2trej48bX-8CaV9ryot9es4nMq4iCNEvPxcVUu2M8uAvqxo4gECtD5lHKw/w640-h421/limontec_seguranca_ofensiva_software.png&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Este tutorial faz parte do GUIA COMPLETO do professional em Segurança Ofensiva de Software,&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2b00fe; font-family: verdana;&quot;&gt;&lt;a href=&quot;https://www.limontec.com/2023/11/guia-em-seguranca-ofensiva.html&quot;&gt;saiba mais&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Aula 26: Sobrescrita de SEHs&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;O Structured Exception Handler (Tratador Estruturado de Exceções) é um mecanismo do Windows para&amp;nbsp;capturar e gerenciar exceções (erros de software).&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWYmhDRtBpLEXpP0GL4eoGIgWUTEKXfJqOeEGEkKk8JyjcGUjbJqFbyf0QUnhO74cjj9JFNimh8KdH55bfsy4KTfd_5TxvHxa4jEC9YWzMQVT54eC5k_B_kd6cJNiAyZ-IO9sRY7_U2IwG6xJuesgn-wFlFbO-zXLTKHdsgug0GbTbHr0vpaeRFDGVhLK9/s642/lista_SEH.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;488&quot; data-original-width=&quot;642&quot; height=&quot;486&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWYmhDRtBpLEXpP0GL4eoGIgWUTEKXfJqOeEGEkKk8JyjcGUjbJqFbyf0QUnhO74cjj9JFNimh8KdH55bfsy4KTfd_5TxvHxa4jEC9YWzMQVT54eC5k_B_kd6cJNiAyZ-IO9sRY7_U2IwG6xJuesgn-wFlFbO-zXLTKHdsgug0GbTbHr0vpaeRFDGVhLK9/w640-h486/lista_SEH.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Estrutura na Pilha&lt;/b&gt;: O SEH é implementado como uma lista ligada de registros. Esses registros são anotados na pilha (Stack), localizados logo abaixo do&amp;nbsp;frame da função onde o código com potencial para lançar exceções reside.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Conteúdo do Registro&lt;/b&gt;: Cada registro SEH na pilha contém dois ponteiros principais:&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;O &lt;b&gt;endereço do tratador de exceção&lt;/b&gt; (o código a ser executado em caso de exceção).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;O &lt;b&gt;endereço do próximo SEH&lt;/b&gt; na lista ligada.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Funcionamento&lt;/b&gt;: Quando uma exceção é lançada, o Despachador de Exceções (código do sistema operacional) percorre essa lista de tratadores, a partir do topo da pilha, até encontrar o primeiro tratador elegível definido por um filtro.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;O principal objetivo da técnica é sobrescrever os ponteiros do SEH através de um buffer overflow. Essa abordagem é usada para desviar o fluxo de execução para um código malicioso (shellcode) antes que a proteção do canário seja checada.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;b&gt;Vantagem sobre o Canary&lt;/b&gt;: Em um buffer overflow tradicional, sobrescrever o Canary (localizado entre o buffer e os metadados da função) leva à detecção e ao lançamento de uma exceção de segurança quando a função tenta retornar. O ataque SEH Overwrite força o lançamento de uma exceção antes que a função retorne, evitando a checagem do Canary.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;b&gt;A Estratégia POP POP RET&lt;/b&gt;: Para garantir que o ataque funcione independentemente do layout da pilha (superando a imprevisibilidade de endereços), o exploit não usa um endereço hardcoded para o shellcode. A técnica envolve:&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpUmA8dg7yQ2uFxEUbH1zH1EfCOZVBnil3AfFZ7uivogfBIJD3ba9uf6LXx73r0zbNC5kfdTy-MaWZS-3RCwB_cYVowdmMuZFbpxpElzdrTdz-w2_Cs5w1MuFimPun8SOry0TyGAgo5EsvkNB8-aE_sOZbw6qG_FJXI5OIwB_-Wnm0SNItT7ZzqnCL5SGH/s580/estrutura_exploit_seh.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;392&quot; data-original-width=&quot;580&quot; height=&quot;432&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpUmA8dg7yQ2uFxEUbH1zH1EfCOZVBnil3AfFZ7uivogfBIJD3ba9uf6LXx73r0zbNC5kfdTy-MaWZS-3RCwB_cYVowdmMuZFbpxpElzdrTdz-w2_Cs5w1MuFimPun8SOry0TyGAgo5EsvkNB8-aE_sOZbw6qG_FJXI5OIwB_-Wnm0SNItT7ZzqnCL5SGH/w640-h432/estrutura_exploit_seh.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Sobrescrever o Endereço do Tratador&lt;/b&gt;: O atacante preenche o campo do endereço do tratador com o endereço de uma sequência de instruções POP POP RET encontrada em uma biblioteca do sistema.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Sobrescrever o Próximo SEH&lt;/b&gt;: O campo do próximo SEH é sobrescrito com uma instrução de salto curto (JMP SHORT) que aponta para o shellcode injetado na pilha.&lt;/li&gt;&lt;li&gt;&lt;b&gt;O Desvio&lt;/b&gt;:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;O despachador de exceções salta para o endereço POP POP RET.&lt;/li&gt;&lt;li&gt;O POP POP desempilha 8 bytes, posicionando o topo da pilha (ESP) exatamente sobre o campo do próximo SEH (o JMP SHORT).&lt;/li&gt;&lt;li&gt;O RET (Return) retira o endereço do topo da pilha e desvia a execução para lá, que agora é a instrução JMP SHORT, saltando assim para o shellcode.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Com o tempo, o sistema operacional Windows implementou proteções para mitigar os ataques SEH Overwrite:&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;b&gt;SafeSEH&lt;/b&gt;: Exige que os módulos da aplicação sejam compilados com uma lista de tratadores seguros, validando-os na execução.&lt;/li&gt;&lt;li&gt;&lt;div&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcug4g1iIdZ7Qdq3U_XWF0raoa2dFOaWn0HorZlxI_zLloksj0opluyf-stoGRdwBjgzjdyRyK4zJzoLYC4qX11Yb8IMSAHlv8xDCro81nuMabo9mlFPavkcAwT_dyPttRZLfW8pyOZMLkSvqvLdOQH5Mrs2oauNawIDB5hGUgGPZl7XOaF05WpiA9Q4eb/s316/seh_sentila.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;236&quot; data-original-width=&quot;316&quot; height=&quot;236&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcug4g1iIdZ7Qdq3U_XWF0raoa2dFOaWn0HorZlxI_zLloksj0opluyf-stoGRdwBjgzjdyRyK4zJzoLYC4qX11Yb8IMSAHlv8xDCro81nuMabo9mlFPavkcAwT_dyPttRZLfW8pyOZMLkSvqvLdOQH5Mrs2oauNawIDB5hGUgGPZl7XOaF05WpiA9Q4eb/s1600/seh_sentila.png&quot; width=&quot;316&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;SEHOP (SEH Overwrite Protection)&lt;/b&gt;: Introduzido a partir do Windows Vista SP1. Adiciona um registro SEH sentinela (sentinel) inalcançável no final da lista. Durante a execução, o SEHOP checa se o último SEH é o sentinela. Se não for, indica que a lista foi corrompida, e a execução é encerrada. Foi contornado em 2009 sob certas condições.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana; text-align: left;&quot;&gt;Próxima aula,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2b00fe; font-family: verdana; text-align: left;&quot;&gt;&lt;a href=&quot;https://www.limontec.com/2023/11/guia-em-seguranca-ofensiva.html&quot;&gt;clique aqui&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font-family: verdana; text-align: left;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;</description><link>http://www.limontec.com/2024/03/structured-exception-handler.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikJMn5LIEfrtHPEivASNGrjkvEXwlg4pIfsUmJSG3iiHB7Qq2GaWwJER5C7ACwPdzjN3mOJMzZdm6Bafmml93aqYJZ_yJFwmxuidt2RVhJnGRLXV2v545RJExEEpfLRP6o2trej48bX-8CaV9ryot9es4nMq4iCNEvPxcVUu2M8uAvqxo4gECtD5lHKw/s72-w640-h421-c/limontec_seguranca_ofensiva_software.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2157924926610706248.post-7087871787630575561</guid><pubDate>Fri, 17 Oct 2025 22:00:00 +0000</pubDate><atom:updated>2025-10-17T19:00:00.111-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">#LTCode</category><category domain="http://www.blogger.com/atom/ns#">Pentest</category><title>[0x19] Como fazer Fuzzing</title><description>&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikJMn5LIEfrtHPEivASNGrjkvEXwlg4pIfsUmJSG3iiHB7Qq2GaWwJER5C7ACwPdzjN3mOJMzZdm6Bafmml93aqYJZ_yJFwmxuidt2RVhJnGRLXV2v545RJExEEpfLRP6o2trej48bX-8CaV9ryot9es4nMq4iCNEvPxcVUu2M8uAvqxo4gECtD5lHKw/s849/limontec_seguranca_ofensiva_software.png&quot; style=&quot;font-family: verdana; margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;span&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;558&quot; data-original-width=&quot;849&quot; height=&quot;421&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikJMn5LIEfrtHPEivASNGrjkvEXwlg4pIfsUmJSG3iiHB7Qq2GaWwJER5C7ACwPdzjN3mOJMzZdm6Bafmml93aqYJZ_yJFwmxuidt2RVhJnGRLXV2v545RJExEEpfLRP6o2trej48bX-8CaV9ryot9es4nMq4iCNEvPxcVUu2M8uAvqxo4gECtD5lHKw/w640-h421/limontec_seguranca_ofensiva_software.png&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Este tutorial faz parte do GUIA COMPLETO do professional em Segurança Ofensiva de Software,&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2b00fe; font-family: verdana;&quot;&gt;&lt;a href=&quot;https://www.limontec.com/2023/11/guia-em-seguranca-ofensiva.html&quot;&gt;saiba mais&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Aula 25: &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=define+Fuzzing&amp;amp;bbid=2157924926610706248&amp;amp;bpid=7087871787630575561&quot; target=&quot;_blank&quot;&gt;Fuzzing&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;25.1: Resumo&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Fuzzing é uma forma de &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=define+an%C3%A1lise+de+vulnerabilidade&amp;amp;bbid=2157924926610706248&amp;amp;bpid=7087871787630575561&quot; target=&quot;_blank&quot;&gt;análise de vulnerabilidade&lt;/a&gt;, sendo uma técnica comum e relativamente simples empregada para&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;descobrir novas vulnerabilidades em &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=define+aplica%C3%A7%C3%B5es+bin%C3%A1rias&amp;amp;bbid=2157924926610706248&amp;amp;bpid=7087871787630575561&quot; target=&quot;_blank&quot;&gt;aplicações binárias&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;O processo consiste em:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Enviar à aplicação&amp;nbsp;vários casos de teste levemente anômalos (ou malformados).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Monitorar a aplicação para identificar qualquer sinal de erro ou comportamento inesperado.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;O objetivo final é encontrar falhas que permitam&amp;nbsp;executar &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=define+c%C3%B3digo+arbitr%C3%A1rio&amp;amp;bbid=2157924926610706248&amp;amp;bpid=7087871787630575561&quot; target=&quot;_blank&quot;&gt;código arbitrário&lt;/a&gt; (explorar a vulnerabilidade).&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;A principal diferença entre Fuzzing e os testes de usuário tradicionais é o foco:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;&lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=Teste+de+Usu%C3%A1rio&amp;amp;bbid=2157924926610706248&amp;amp;bpid=7087871787630575561&quot; target=&quot;_blank&quot;&gt;Teste de Usuário&lt;/a&gt;&lt;/b&gt;: Roda o programa com muitas entradas normais para evitar que usuários encontrem erros.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Fuzzing&lt;/b&gt;: Roda o programa com muitas &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=entradas+anormais&amp;amp;bbid=2157924926610706248&amp;amp;bpid=7087871787630575561&quot; target=&quot;_blank&quot;&gt;entradas anormais&lt;/a&gt; (entradas que a aplicação não esperaria) para forçar um mau comportamento. O objetivo é encontrar&amp;nbsp;erros exploráveis antes que um atacante o faça, a fim de corrigi-los.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;div&gt;As entradas anômalas usadas no Fuzzing geralmente são:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Arquivos (.pdf, .png, .wav, .mp3), explorando o formato do arquivo ou seus campos de dados.&lt;/li&gt;&lt;li&gt;Baseadas em Rede (protocolos como &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=define+HTTP&amp;amp;bbid=2157924926610706248&amp;amp;bpid=7087871787630575561&quot; target=&quot;_blank&quot;&gt;HTTP&lt;/a&gt;, &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=define+SOAP&amp;amp;bbid=2157924926610706248&amp;amp;bpid=7087871787630575561&quot; target=&quot;_blank&quot;&gt;SOAP&lt;/a&gt;, &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=define+SNMP&amp;amp;bbid=2157924926610706248&amp;amp;bpid=7087871787630575561&quot; target=&quot;_blank&quot;&gt;SNMP&lt;/a&gt;), explorando a comunicação e variando os campos de dados do protocolo.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;Os fuzzers são classificados em três tipos principais:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;b&gt;Baseado em mutação&lt;/b&gt;: Também chamado de &quot;&lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=Dumb+Fuzzing&amp;amp;bbid=2157924926610706248&amp;amp;bpid=7087871787630575561&quot; target=&quot;_blank&quot;&gt;Dumb Fuzzing&lt;/a&gt;&quot;. Coleta amostras de dados normais (entradas válidas) e as embaralha ou modifica para criar entradas anômalas. Assume pouco ou nenhum conhecimento da estrutura da entrada.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Baseado em Geração&lt;/b&gt;: Chamado de &quot;&lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=Smart+Fuzzing&amp;amp;bbid=2157924926610706248&amp;amp;bpid=7087871787630575561&quot; target=&quot;_blank&quot;&gt;Smart Fuzzing&lt;/a&gt;&quot;. Define novos testes com base em modelos da entrada e em formatos específicos que possam aumentar a probabilidade de gerar um erro, como no exemplo do nome do arquivo em uma requisição HTTP. Requer conhecimento da estrutura da entrada.&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=Evolucion%C3%A1rio+Fuzzing&amp;amp;bbid=2157924926610706248&amp;amp;bpid=7087871787630575561&quot; target=&quot;_blank&quot;&gt;Evolucionário&lt;/a&gt;&lt;/b&gt;: Gera entradas baseadas na resposta da aplicação. O sistema tenta aprender sobre o comportamento do programa para evoluir os testes.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;O processo de Fuzzing apresenta desafios, sendo os principais:&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;b&gt;&lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=Decis%C3%A3o+de+Parada+Fuzzing&amp;amp;bbid=2157924926610706248&amp;amp;bpid=7087871787630575561&quot; target=&quot;_blank&quot;&gt;Decisão de Parada&lt;/a&gt;&lt;/b&gt;: Em métodos baseados em mutação, o fuzzer pode executar para sempre, gerando mutações infinitas sem encontrar um erro. É preciso decidir quando parar os testes.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Identificação do Erro&lt;/b&gt;: Muitas aplicações possuem mecanismos de recuperação de erro (como tratamento de exceção), o que dificulta a identificação de um erro explorável. Por exemplo, um &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=buffer+overflow&amp;amp;bbid=2157924926610706248&amp;amp;bpid=7087871787630575561&quot; target=&quot;_blank&quot;&gt;buffer overflow&lt;/a&gt; pode ser recuperado pela aplicação.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;O ideal é executar o teste em uma cópia do binário da aplicação e anexar um depurador (debugger) (como o &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=Immunity+Debugger&amp;amp;bbid=2157924926610706248&amp;amp;bpid=7087871787630575561&quot; target=&quot;_blank&quot;&gt;Immunity Debugger&lt;/a&gt;) para observar o fluxo de execução e o estado da memória no momento da falha, o que é característico de um teste &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=White+Box+testing&amp;amp;bbid=2157924926610706248&amp;amp;bpid=7087871787630575561&quot; target=&quot;_blank&quot;&gt;White Box&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;25.2: Desenvolvimento de código Fuzzing&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Vamos construir um template de fuzzing do &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=Spike+Fuzzing+tool&amp;amp;bbid=2157924926610706248&amp;amp;bpid=7087871787630575561&quot; target=&quot;_blank&quot;&gt;Spike&lt;/a&gt; para identificar uma vulnerabilidade na aplicação Xitami Web Server versão&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;2.5b4 para &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=Windows+XP&amp;amp;bbid=2157924926610706248&amp;amp;bpid=7087871787630575561&quot; target=&quot;_blank&quot;&gt;Windows XP&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;A ferramenta Spike é utilizada como um interpretador para enviar dados malformados a servidores TCP. Ela utiliza&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;scripts (Spike Scripts) para gerar e modificar&lt;i&gt;&amp;nbsp;&lt;/i&gt;variáveis de comunicação, permitindo ao testador guiar o processo de Fuzzing.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Primeiramente inicie a aplicação vulnerável em sua máquina alvo. Em seguida, na máquina &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=Kali+Linux&amp;amp;bbid=2157924926610706248&amp;amp;bpid=7087871787630575561&quot; target=&quot;_blank&quot;&gt;Kali&lt;/a&gt; inicie a captura de pacotes com o &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=Wireshark&amp;amp;bbid=2157924926610706248&amp;amp;bpid=7087871787630575561&quot; target=&quot;_blank&quot;&gt;Wireshark&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWvi9VBxp7-K-bVFV4nQ3VYzaNiOblRPDfXTGXGk7DMcU5nLSUY-zgIqI6RwUpDoYiIHlIAr559TvMkHnda0AqPZQ60gnLGwoMPjYpjfAyc-kyG4I-wgTHllF6AnrZqX20RR5pO8biVGZNA0RnC9VzDWPGtkrRrbbp0YmkbAQMLNlaolSuS9acdJTLPQ/s1439/1_wireshark_tcp_follow.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;828&quot; data-original-width=&quot;1439&quot; height=&quot;368&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWvi9VBxp7-K-bVFV4nQ3VYzaNiOblRPDfXTGXGk7DMcU5nLSUY-zgIqI6RwUpDoYiIHlIAr559TvMkHnda0AqPZQ60gnLGwoMPjYpjfAyc-kyG4I-wgTHllF6AnrZqX20RR5pO8biVGZNA0RnC9VzDWPGtkrRrbbp0YmkbAQMLNlaolSuS9acdJTLPQ/w640-h368/1_wireshark_tcp_follow.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Figura 1: Captura de pacotes TCP&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Acesse o servidor HTTP via navegador &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=Firefox+browser&amp;amp;bbid=2157924926610706248&amp;amp;bpid=7087871787630575561&quot; target=&quot;_blank&quot;&gt;Firefox&lt;/a&gt; do Kali. Depois, aperte F5 para que o navegador solicite a atualização da página. No Wireshark você conseguirá identificar que o pacote foi capturado (Figura 1).&lt;/span&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3oDihl3bMGISZNIGSg6tcbuFUzKFk_o56B2NxHFcvttNaQL0FECYT8p1NCVbhAZ6nX-T9SNeLwzrbf9L7hFxKHqRBsz5Hwcr6FjbgZ8H-BTomxvJJboSgpB9sDOMg78FeSVgHNZ8xbwafOGdfSnkiZjXQNkHOMs0odIR7sC4hVO2MWx4TGlZQXeTdEg/s963/2_fuzzing_script.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;333&quot; data-original-width=&quot;963&quot; height=&quot;222&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3oDihl3bMGISZNIGSg6tcbuFUzKFk_o56B2NxHFcvttNaQL0FECYT8p1NCVbhAZ6nX-T9SNeLwzrbf9L7hFxKHqRBsz5Hwcr6FjbgZ8H-BTomxvJJboSgpB9sDOMg78FeSVgHNZ8xbwafOGdfSnkiZjXQNkHOMs0odIR7sC4hVO2MWx4TGlZQXeTdEg/w640-h222/2_fuzzing_script.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Figura 2: Construído template de teste&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Com o modelo de requisição de atualização da página registrado pelo Wireshark podemos utiliza-lo&amp;nbsp;como base para construir o template de fuzzing do Spike (Figura 2).&lt;/span&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrvwKK_DYBHCoSJuQqI2yRSG3y-x1s0Ir7eEiPXUu-48i_71ai42ephSR76506kuoty68nY3uWodGLVi-ypPYHcQn8ZmaL5QebU-JUPDU-bw6vWHN_97qgWYNs7DDzLHk1ZVGYCimhwmHjnzMa8sKOvZTL_Ao_3CZNQK2QFT8Gsgs9tN0zUXUkbZjWeA/s1550/3_conexao_ok.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;821&quot; data-original-width=&quot;1550&quot; height=&quot;338&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrvwKK_DYBHCoSJuQqI2yRSG3y-x1s0Ir7eEiPXUu-48i_71ai42ephSR76506kuoty68nY3uWodGLVi-ypPYHcQn8ZmaL5QebU-JUPDU-bw6vWHN_97qgWYNs7DDzLHk1ZVGYCimhwmHjnzMa8sKOvZTL_Ao_3CZNQK2QFT8Gsgs9tN0zUXUkbZjWeA/w640-h338/3_conexao_ok.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Figura 3: Teste conexão&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Antes de elaborar um template completo, teste se o básico está funcionando (Figura 3). Para executar o script de fuzzing utilize do comando: &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=generic_send_tcp&amp;amp;bbid=2157924926610706248&amp;amp;bpid=7087871787630575561&quot; target=&quot;_blank&quot;&gt;generic_send_tcp&lt;/a&gt; ip_alvo porta script.spk 0 0&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWJ8ohwPh5M646q69F4oJFzHzQJUK-CgViUex282WA8-iXNR1MD6q-bKxZTo4ds6EqemyJB-Q_YLXKW53r7GUTaMXxgoglSqaZlZyHEyF6b4UgV4x7zOpZ0KfKh9pls331gwngrAaX-Il3sd0MmmqXFuCl8k9hU6F_qOR2YOGe8Z6XDDaEPOSTQnAAVw/s966/codigo_geral.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;627&quot; data-original-width=&quot;966&quot; height=&quot;416&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWJ8ohwPh5M646q69F4oJFzHzQJUK-CgViUex282WA8-iXNR1MD6q-bKxZTo4ds6EqemyJB-Q_YLXKW53r7GUTaMXxgoglSqaZlZyHEyF6b4UgV4x7zOpZ0KfKh9pls331gwngrAaX-Il3sd0MmmqXFuCl8k9hU6F_qOR2YOGe8Z6XDDaEPOSTQnAAVw/w640-h416/codigo_geral.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Figura 4: Template de fuzzing do Spike&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Identificado o funcionamento visualizando um pacotes das requisições enviadas, construa um template para realizar fuzzing. Para esta aplicação vamos variar 8 strings com o comando s_string_variable() (Figura 4).&lt;/span&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyiAImkCAqRt1kIWoF8JIctr19-gcSJ58895yYtWKwFgxckKwJ91SOy3PHfo8OD4VXzQKZ0rhBX4ZdXQbW4XHeLxt16lSfb7GCEEJIabHbkSO91E9sl9PNuXW7nHKP2wRJjRHl35ueMgEUlO65qir41-0thlNdqjhNT3Chn9QZJKr2bOr-J1LjqsJitA/s1714/crash.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;756&quot; data-original-width=&quot;1714&quot; height=&quot;282&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyiAImkCAqRt1kIWoF8JIctr19-gcSJ58895yYtWKwFgxckKwJ91SOy3PHfo8OD4VXzQKZ0rhBX4ZdXQbW4XHeLxt16lSfb7GCEEJIabHbkSO91E9sl9PNuXW7nHKP2wRJjRHl35ueMgEUlO65qir41-0thlNdqjhNT3Chn9QZJKr2bOr-J1LjqsJitA/w640-h282/crash.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Figura 5: Crash na aplicação&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Identificado crash na aplicação ao executar a fuzzing variable de número 7. Como são 8 de 0 a 7 então o erro se dá na s_string_variable referente a &quot;If-Modified-Since:&quot; (Figura 5).&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Utilizando o software Immunity, mencionado em aulas anteriores, é possível visualizar que o crash foi causado pela string &quot;&quot;DAV:displayname&quot; from scope()&quot;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifIMQlOt-wdMKGRVgoHc_oCEXp5_8Bh8TJDRLp1--zNADvqVxzyn5jSnyXy6_NHxjsDRTF55k9B0F-ZdPOk6xLoqdV3hhzS_W915dTTGfsEoQAUfDtAJl6LadtJxlcPiX5l-aXvTRD0ERb1v6vEMU0EpxjqP55KPOPFhkNU0FNHEUJMZpSSu7tk24sAw/s969/1_variable.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;386&quot; data-original-width=&quot;969&quot; height=&quot;254&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifIMQlOt-wdMKGRVgoHc_oCEXp5_8Bh8TJDRLp1--zNADvqVxzyn5jSnyXy6_NHxjsDRTF55k9B0F-ZdPOk6xLoqdV3hhzS_W915dTTGfsEoQAUfDtAJl6LadtJxlcPiX5l-aXvTRD0ERb1v6vEMU0EpxjqP55KPOPFhkNU0FNHEUJMZpSSu7tk24sAw/w640-h254/1_variable.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Figura 6: Reconstrução template&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;No Wireshark é certo que apareceu centenas de requisições. Então para filtrar menos requisições, o template foi reconstruído&amp;nbsp;com apenas uma fuzzing variable (Figura 6).&lt;/span&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJwCfdzvoPtIXErDBkq1QHuxs6lMm9jo59c3AWTlijmUsJt55viL8YR1MkHidrVcumRPZ2St0UPQaC37MyC15_4UxquKFJ4YE658pCh8ECVYj60TXiPS-sYWaeeXtEhjjskqbhLfybSZhgpa9Pj6cFwVd1NY2_4tQpis-ftzx5yztja0Fgy3V48MNAUA/s491/2_start_fuzzing.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;266&quot; data-original-width=&quot;491&quot; height=&quot;346&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJwCfdzvoPtIXErDBkq1QHuxs6lMm9jo59c3AWTlijmUsJt55viL8YR1MkHidrVcumRPZ2St0UPQaC37MyC15_4UxquKFJ4YE658pCh8ECVYj60TXiPS-sYWaeeXtEhjjskqbhLfybSZhgpa9Pj6cFwVd1NY2_4tQpis-ftzx5yztja0Fgy3V48MNAUA/w640-h346/2_start_fuzzing.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Figura 7: Realizando fuzzing&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Reinicie o Wireshark e realize o fuzzing (Figura 7).&lt;/span&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDruNYFM2hlwTkAg0MUfxvq0Pyapy1Tt4VjCC9JtwXHLnLpKWwxJZqFegeR8xlxcnPACAUtHt7y48o40ttcFeZCkMr0X803PyeOQZA_hNBdEHc9dCHFAPXrEFf1rrWcX4DJLP0HxOqQnwsQiFsyrFSMaxkVjMkftFL6CtN42lVTHDKAeEl8sfy0adfgw/s1757/3_crash.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;928&quot; data-original-width=&quot;1757&quot; height=&quot;338&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDruNYFM2hlwTkAg0MUfxvq0Pyapy1Tt4VjCC9JtwXHLnLpKWwxJZqFegeR8xlxcnPACAUtHt7y48o40ttcFeZCkMr0X803PyeOQZA_hNBdEHc9dCHFAPXrEFf1rrWcX4DJLP0HxOqQnwsQiFsyrFSMaxkVjMkftFL6CtN42lVTHDKAeEl8sfy0adfgw/w640-h338/3_crash.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Figura 8: Identificando causa do crash&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;A requisição que causou o crash foi identificada no Wireshark (Figura 8). No caso o crash ocorre após o primeiro caractere de &quot;espaço&quot; na string de &quot;If-Modified-Since:&quot; .&lt;/span&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEqZ_cUH03cuT8zbENqefUTVfyI_ASrMSMutlyQ3QXoAi26qVKqMY5Zel-cUSFZeTkQlgdsrFh4gB5HuBnqgKrw5_juuqsKE2DDNccteuxiBK3fSJuQrpAyVqXihkP-bddbhZMS7T20OuBexa33YySTYqoBCCQKq6UAQvLQ9XYadrUgm9NWnS9ekMcGA/s1274/4_exploit_crash.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;758&quot; data-original-width=&quot;1274&quot; height=&quot;380&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEqZ_cUH03cuT8zbENqefUTVfyI_ASrMSMutlyQ3QXoAi26qVKqMY5Zel-cUSFZeTkQlgdsrFh4gB5HuBnqgKrw5_juuqsKE2DDNccteuxiBK3fSJuQrpAyVqXihkP-bddbhZMS7T20OuBexa33YySTYqoBCCQKq6UAQvLQ9XYadrUgm9NWnS9ekMcGA/w640-h380/4_exploit_crash.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Figura 9: Código e envio entrada maliciosa para a aplicação&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Agora podemos construir um script simples em python para enviar essa entrada maliciosa identificada e confirmar o disparo do erro na aplicação alvejada (Figura 9). Note que&amp;nbsp;para evitar o error &quot;TypeError: a bytes-like object is required, not &#39;str&#39; &quot; utilize &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=python+2.7&amp;amp;bbid=2157924926610706248&amp;amp;bpid=7087871787630575561&quot; target=&quot;_blank&quot;&gt;python 2.7&lt;/a&gt; em vez de &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=python+3&amp;amp;bbid=2157924926610706248&amp;amp;bpid=7087871787630575561&quot; target=&quot;_blank&quot;&gt;python 3&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;A partir de agora você consegue desenvolver um exploit para explorar a vulnerabilidade de &lt;a data-preview=&quot;&quot; href=&quot;https://www.google.com/search?ved=1t:260882&amp;amp;q=Buffer+Overflow&amp;amp;bbid=2157924926610706248&amp;amp;bpid=7087871787630575561&quot; target=&quot;_blank&quot;&gt;Buffer Overflow&lt;/a&gt; na aplicação. Caso não consiga desenvolver, pesquise no &lt;a href=&quot;https://www.exploit-db.com/exploits/4450&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Exploit-db&lt;/a&gt; alguns exemplos.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana; text-align: left;&quot;&gt;Próxima aula,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2b00fe; font-family: verdana; text-align: left;&quot;&gt;&lt;a href=&quot;https://www.limontec.com/2023/11/guia-em-seguranca-ofensiva.html&quot;&gt;clique aqui&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font-family: verdana; text-align: left;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;</description><link>http://www.limontec.com/2025/10/como-fazer-fuzzing.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikJMn5LIEfrtHPEivASNGrjkvEXwlg4pIfsUmJSG3iiHB7Qq2GaWwJER5C7ACwPdzjN3mOJMzZdm6Bafmml93aqYJZ_yJFwmxuidt2RVhJnGRLXV2v545RJExEEpfLRP6o2trej48bX-8CaV9ryot9es4nMq4iCNEvPxcVUu2M8uAvqxo4gECtD5lHKw/s72-w640-h421-c/limontec_seguranca_ofensiva_software.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2157924926610706248.post-5237497862983355680</guid><pubDate>Fri, 10 Oct 2025 22:00:00 +0000</pubDate><atom:updated>2025-10-10T19:00:00.115-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">#LTCode</category><category domain="http://www.blogger.com/atom/ns#">Pentest</category><title>[0x18] Proteções de memória</title><description>&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikJMn5LIEfrtHPEivASNGrjkvEXwlg4pIfsUmJSG3iiHB7Qq2GaWwJER5C7ACwPdzjN3mOJMzZdm6Bafmml93aqYJZ_yJFwmxuidt2RVhJnGRLXV2v545RJExEEpfLRP6o2trej48bX-8CaV9ryot9es4nMq4iCNEvPxcVUu2M8uAvqxo4gECtD5lHKw/s849/limontec_seguranca_ofensiva_software.png&quot; style=&quot;font-family: verdana; margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;span&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;558&quot; data-original-width=&quot;849&quot; height=&quot;421&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikJMn5LIEfrtHPEivASNGrjkvEXwlg4pIfsUmJSG3iiHB7Qq2GaWwJER5C7ACwPdzjN3mOJMzZdm6Bafmml93aqYJZ_yJFwmxuidt2RVhJnGRLXV2v545RJExEEpfLRP6o2trej48bX-8CaV9ryot9es4nMq4iCNEvPxcVUu2M8uAvqxo4gECtD5lHKw/w640-h421/limontec_seguranca_ofensiva_software.png&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Este tutorial faz parte do GUIA COMPLETO do professional em Segurança Ofensiva de Software,&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2b00fe; font-family: verdana;&quot;&gt;&lt;a href=&quot;https://www.limontec.com/2023/11/guia-em-seguranca-ofensiva.html&quot;&gt;saiba mais&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Aula 24: Proteções&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Os ataques de exploração de vulnerabilidades, especialmente os que envolvem corrupção de memória como buffer overflows, motivaram o desenvolvimento de uma série de mecanismos de segurança no nível do sistema operacional e do compilador. Estas proteções de memória são barreiras essenciais que dificultam a execução de código malicioso e o desvio do fluxo de execução de um programa.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;b style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Aula 24.1: Canários&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Os&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Cookies (também conhecidos como Canários) são um mecanismo criado para proteger contra ataques de transbordamento de buffer de pilha (stack buffer overflow).&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Origem do Nome&lt;/b&gt;: O termo &quot;Canário&quot; tem origem histórica, referindo-se aos pássaros utilizados em minas para alertar sobre a baixa concentração de oxigénio — um alerta precoce de perigo.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Funcionamento&lt;/b&gt;: É um marcador aleatório inserido na pilha, posicionado estrategicamente entre um buffer local (como uma variável string) e o endereço de retorno da função. Se ocorrer um transbordamento no&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;buffer, o atacante terá de sobrescrever o cookie antes de atingir o endereço de retorno.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Verificação&lt;/b&gt;: Uma instrução de checagem é inserida no epílogo (o final) da função. Antes de usar o endereço de retorno, a função verifica se o valor do cookie foi alterado. Se o valor for diferente do original, o sistema detecta o ataque e aborta o processo.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXuluEsbXtCDsswpArTwJvptNRKFadQRcRRjuHze1mM5WDLf9mjJeecJwXYJPzK0M3C1Xd9Ns-QIs-XzQepTtcm_n8S-R0RwCXJOVR0NdUEgsXdZOFaF1M0e7_RRPoHSXkqo2saWkkMtknUeiZRqYqdNqGSQfLk7TBFmCH1-W36wLX04H44sLM7osXS2AU/s907/cookies_buffer.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;418&quot; data-original-width=&quot;907&quot; height=&quot;294&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXuluEsbXtCDsswpArTwJvptNRKFadQRcRRjuHze1mM5WDLf9mjJeecJwXYJPzK0M3C1Xd9Ns-QIs-XzQepTtcm_n8S-R0RwCXJOVR0NdUEgsXdZOFaF1M0e7_RRPoHSXkqo2saWkkMtknUeiZRqYqdNqGSQfLk7TBFmCH1-W36wLX04H44sLM7osXS2AU/w640-h294/cookies_buffer.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Figura 1: Exemplo de COOKIE&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Implementação&lt;/b&gt;: Pode ser inserido em tempo de compilação (método mais comum, como no GCC com a flag -fstack-protector e no Visual Studio com /GS) ou em tempo de execução por meio de &quot;funções empacotadoras&quot; (wrappers), sendo esta última opção usada para proteger sistemas legados sem a necessidade de recompilação, embora acarrete um overhead de desempenho.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Bypass&lt;/b&gt;: Técnicas avançadas, como a exploração de Tratadores de Exceções Estruturadas (SEH) no Windows, permitiam que o atacante desviasse o fluxo do programa para código malicioso antes que a checagem do cookie fosse realizada.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;p&gt;&lt;b style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Aula 24.2:&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;SafeSEH e SEHOP&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;SafeSEH (Safe Structured Exception Handling) e SEHOP (Structured Exception Handling Overwrite Protection) são proteções específicas do ambiente Windows, desenvolvidas para mitigar a exploração de uma vulnerabilidade na forma como o sistema lida com exceções estruturadas.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Motivação&lt;/b&gt;: Os ponteiros para os tratadores de exceção ficavam na pilha e podiam ser sobrescritos antes da checagem do cookie.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Objetivo&lt;/b&gt;: Estas proteções asseguram a integridade da cadeia de tratadores de exceção na pilha, impedindo que um atacante a corrompa para desviar a execução para o seu código.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Aula 24.3: ASLR&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;O&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Address Space Layout Randomization (ASLR), e seu análogo Rebase, é uma técnica fundamental para combater ataques de reutilização de código.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Funcionamento&lt;/b&gt;: Embaralha (randomiza) os endereços de memória de áreas-chave do processo, como a pilha, o heap e as bibliotecas dinâmicas (DLLs ou bibliotecas compartilhadas), a cada inicialização do programa ou do sistema.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Objetivo&lt;/b&gt;: Ao tornar os endereços imprevisíveis, o ASLR impede que um atacante saiba para onde desviar o fluxo de execução (ex: um endereço de uma função útil em ROP), o que tornaria a maioria dos ataques de reutilização de código ineficazes.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Implementação&lt;/b&gt;: Está implementado no Linux (kernel 2.6.12+), com a randomização ocorrendo durante a carga do processo, e no Windows (Vista/Server 2008+), com a randomização feita durante a inicialização do sistema operacional.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Bypass&lt;/b&gt;: Pode ser contornado se um binário ou biblioteca não for compilado com a flag de suporte a ASLR (ex: /DYNAMICBASE), fixando seus endereços. Outros bypasses incluem o uso de heap spraying, vazamento de endereços de memória ou técnicas de força bruta.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Aula 24.4:&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Pilha Não-Executável (nx-stack)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;A proteção&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;nx-stack (Non-Executable Stack) impede que um atacante execute instruções na área de memória da pilha (stack) de um processo.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Funcionamento&lt;/b&gt;: Marca a região da pilha como não-executável, prevenindo a execução de shellcode injetado na pilha.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Implementação&lt;/b&gt;: É uma proteção fundamental implementada desde 1996 nos principais sistemas operacionais, incluindo Linux, OpenBSD, Mac OS X, Solaris e Windows.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Aula 24.5: DEP&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Prevenção de Execução de Dados (DEP), também conhecida pelo princípio Write xor Execute (W^X), é uma proteção implementada no hardware (pelo bit NX/XD) e no sistema operacional.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Funcionamento&lt;/b&gt;: Impede que o código seja executado a partir de páginas de memória marcadas como dados, como as regiões de pilha (stack) e heap.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Objetivo&lt;/b&gt;: É uma medida primária contra a injeção de código, complementando a nx-stack ao estender a proteção a outras áreas de dados do processo.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Implementação&lt;/b&gt;: Está presente em sistemas como Linux (kernel 2.6.8+) e Windows (XP SP2+), sendo ativada em binários compilados com flags específicas (ex: /NXCOMPACT no Visual Studio).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Bypass&lt;/b&gt;: A DEP pode ser contornada por técnicas de reutilização de código, como Return-Oriented Programming (ROP) ou ret2libc, que utilizam trechos de código legítimo do próprio programa ou das suas bibliotecas para executar ações maliciosas.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;p&gt;&lt;b style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Aula 24.6: Filtros de dados&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Os Filtros de Dados atuam na sanitização e validação da entrada (input) de um programa, sendo uma linha de defesa crucial contra vulnerabilidades que se originam de dados não confiáveis.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Objetivo&lt;/b&gt;: Garantir que o dado introduzido por um utilizador ou por outra fonte externa seja seguro, restringindo a sua forma e conteúdo ao que é estritamente esperado.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Exemplos de Restrições&lt;/b&gt;:&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Tamanho&lt;/b&gt;: Limitar o comprimento de uma string para evitar buffer overflows (ex: máximo de 256 bytes).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Tipo de Caracteres (whitelist)&lt;/b&gt;: Permitir apenas um conjunto restrito de caracteres (ex: nome de arquivo só pode ter letras, números e hifens: a-z, A-Z, 0-9, -).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Caracteres &quot;Badchars&quot;&lt;/b&gt;: Remover ou codificar caracteres que têm um significado especial e perigoso no contexto de um ataque, como o Byte Nulo (0x00), que é usado para terminar strings e pode parar a execução de um shellcode.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Bypass&lt;/b&gt;: A técnica de bridge building é um exemplo de como atacantes tentam codificar blocos de instruções ou instruções individuais para evitar a detecção por filtros que procuram por badchars no código injetado.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;b style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Aula 24.7: Assinaturas&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;O conceito de Assinaturas é amplamente utilizado por sistemas de deteção de intrusão, antivírus e outros softwares de segurança para identificar a presença de código malicioso conhecido.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Funcionamento&lt;/b&gt;: Uma assinatura é uma sequência de bytes única de um malware ou de um binário de ataque conhecido. O sistema de segurança compara o binário (ou partes dele) com uma base de dados de assinaturas (muitas vezes otimizada com tabelas hash para agilidade).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Aplicação&lt;/b&gt;: Usado por Antivírus, Sistemas de Prevenção de Intrusão (IPS), entre outros.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Bypass&lt;/b&gt;: Os atacantes utilizam diversas técnicas para alterar o código malicioso sem mudar a sua funcionalidade, fugindo assim à deteção baseada em assinaturas:&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Encoders/Ofuscação de Código&lt;/b&gt;: Codificam o shellcode para que a sequência de bytes não corresponda à assinatura original.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Inserção de Lixo (Junk Code)&lt;/b&gt;: Adicionam instruções inócuas para modificar o padrão de bytes do programa.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;Troca de Instruções/Registos&lt;/b&gt;: Substituem instruções equivalentes (ex: usar PUSH/POP em vez de MOV) ou trocam registos e variáveis entre operações para criar um binário funcionalmente idêntico, mas com uma assinatura de bytes diferente.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Próxima aula,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2b00fe; font-family: verdana;&quot;&gt;&lt;a href=&quot;https://www.limontec.com/2023/11/guia-em-seguranca-ofensiva.html&quot;&gt;clique aqui&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;.&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;</description><link>http://www.limontec.com/2025/10/protecoes-de-memoria.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikJMn5LIEfrtHPEivASNGrjkvEXwlg4pIfsUmJSG3iiHB7Qq2GaWwJER5C7ACwPdzjN3mOJMzZdm6Bafmml93aqYJZ_yJFwmxuidt2RVhJnGRLXV2v545RJExEEpfLRP6o2trej48bX-8CaV9ryot9es4nMq4iCNEvPxcVUu2M8uAvqxo4gECtD5lHKw/s72-w640-h421-c/limontec_seguranca_ofensiva_software.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2157924926610706248.post-3304349154519819851</guid><pubDate>Fri, 03 Oct 2025 22:00:00 +0000</pubDate><atom:updated>2025-10-03T19:00:00.107-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">#LTCode</category><category domain="http://www.blogger.com/atom/ns#">Pentest</category><title>[0x17] Ataques de corrupção de memória</title><description>&lt;p&gt;&amp;nbsp;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikJMn5LIEfrtHPEivASNGrjkvEXwlg4pIfsUmJSG3iiHB7Qq2GaWwJER5C7ACwPdzjN3mOJMzZdm6Bafmml93aqYJZ_yJFwmxuidt2RVhJnGRLXV2v545RJExEEpfLRP6o2trej48bX-8CaV9ryot9es4nMq4iCNEvPxcVUu2M8uAvqxo4gECtD5lHKw/s849/limontec_seguranca_ofensiva_software.png&quot; style=&quot;font-family: verdana; margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;span&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;558&quot; data-original-width=&quot;849&quot; height=&quot;421&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikJMn5LIEfrtHPEivASNGrjkvEXwlg4pIfsUmJSG3iiHB7Qq2GaWwJER5C7ACwPdzjN3mOJMzZdm6Bafmml93aqYJZ_yJFwmxuidt2RVhJnGRLXV2v545RJExEEpfLRP6o2trej48bX-8CaV9ryot9es4nMq4iCNEvPxcVUu2M8uAvqxo4gECtD5lHKw/w640-h421/limontec_seguranca_ofensiva_software.png&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Este tutorial faz parte do GUIA COMPLETO do professional em Segurança Ofensiva de Software,&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2b00fe; font-family: verdana;&quot;&gt;&lt;a href=&quot;https://www.limontec.com/2023/11/guia-em-seguranca-ofensiva.html&quot;&gt;saiba mais&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Aula 23: Outras corrupções de memória&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;As vulnerabilidades de corrupção de memória continuam sendo uma das classes de falhas de segurança mais exploradas. Dentro deste cenário, o Heap Buffer Overflow e a falha em String de Formatação se destacam como métodos poderosos para sequestrar o fluxo de execução de um programa. Embora não entraremos em detalhes na exploração dessas vulnerabilidades, abaixo você confere uma breve introdução sobre cada uma delas. Caso deseja aprofundar no tema abordado, recomendamos&amp;nbsp;realizar os desafios Phoenix apresentados no site &lt;a href=&quot;https://exploit.education/phoenix/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Exploit Education&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Aula 23.1: Heap&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;O&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Heap é a área de memória alocada dinamicamente, crescendo do menor endereço para o maior e frequentemente usada para variáveis globais e estruturas de dados complexas, em contraste com a Stack (Pilha), que é usada para variáveis locais de função.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Assim, a vulnerabilidade de&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Heap Buffer Overflow (transbordamento de buffer no Heap) ocorre quando uma entrada de usuário excede o tamanho do bloco de memória que lhe foi alocado no Heap. Ao extrapolar o limite, os dados do atacante sobrescrevem informações adjacentes na memória.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;O ataque se torna crítico quando o buffer transbordado está localizado imediatamente antes de dados importantes, como um&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;ponteiro para função. Ponteiros de função são comumente utilizados na arquitetura de bibliotecas dinâmicas do sistema operacional. O sistema usa uma tabela com símbolos e endereços das funções de bibliotecas (como a função&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;printf) para realizar chamadas.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;O ataque envolve os seguintes passos:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhO_Yj1BDjIEZf0NJD_uROOuN7a7nKswnnG52fPlO9jRCzTa_jAUYkhFZZ80odwzgzxPzAYDsB4FRNP7aqTuWSheqzrU33Nj_ZAwwAgwF81UDV9l8LMtpuWS8EhAuUL6Y_2-AZgBCcuz-6hT8u6zbKvGi9Vp-miE6luBpUTEXkxp3ySB6HynxfFlKW072ra/s1120/heap_overflow.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;306&quot; data-original-width=&quot;1120&quot; height=&quot;174&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhO_Yj1BDjIEZf0NJD_uROOuN7a7nKswnnG52fPlO9jRCzTa_jAUYkhFZZ80odwzgzxPzAYDsB4FRNP7aqTuWSheqzrU33Nj_ZAwwAgwF81UDV9l8LMtpuWS8EhAuUL6Y_2-AZgBCcuz-6hT8u6zbKvGi9Vp-miE6luBpUTEXkxp3ySB6HynxfFlKW072ra/w640-h174/heap_overflow.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Figura 1: Heap Buffer Overflow&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;O atacante envia uma entrada de dados maliciosa que é maior do que o buffer alocado.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Essa entrada sobrescreve o ponteiro de função adjacente no Heap.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;O atacante substitui o endereço original da função legítima pelo endereço contendo um código malicioso (&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;shellcode).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Quando o programa tenta chamar a função original, o fluxo de execução é desviado para o&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;shellcode, sequestrando o controle do programa.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Aula 23.2: Format String&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;A&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;vulnerabilidade de Format String (falha em String de Formatação) é uma técnica considerada um pouco mais complexa de se executar do que um Buffer Overflow simples.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;A vulnerabilidade surge em funções que manipulam&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;strings (como as da família printf na linguagem C) quando o programador permite que uma entrada de usuário seja usada diretamente na string de formatação, sem nenhum tipo de tratativa.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBfseB0XEdu2bZRK9HTEPX8pxc9pwZScKJT5ubr-0sBrrJ7fD0TEAVhARI6gM-ua8C4nDxUGk1tOVmsmXPz-ULq5IX4-7iufQyOAqT-0CILgtBZg0iZKjfsR2KZQzhEHe60fTCaUmVlK4YfFNimbHJkx3pWH7ngg07fS6OL8VSKZW92MwAOGFoKyWELxWI/s1125/format_string_code_vuln_example.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;328&quot; data-original-width=&quot;1125&quot; height=&quot;186&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBfseB0XEdu2bZRK9HTEPX8pxc9pwZScKJT5ubr-0sBrrJ7fD0TEAVhARI6gM-ua8C4nDxUGk1tOVmsmXPz-ULq5IX4-7iufQyOAqT-0CILgtBZg0iZKjfsR2KZQzhEHe60fTCaUmVlK4YfFNimbHJkx3pWH7ngg07fS6OL8VSKZW92MwAOGFoKyWELxWI/w640-h186/format_string_code_vuln_example.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Figura 2: exemplo de código em C&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Isso permite ao atacante injetar diretamente na entrada, strings de formatação que possam ser interpretadas maliciosamente pelo programa.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;No padrão ANSI C, diversas funções são vulneráveis se não usadas corretamente, pois são utilizadas para converter tipos de dados C para representação de string. Abaixo você vê algumas das funções de formatação de string em C:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;printf: Imprime para a stream &#39;stdout&#39;.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;fprintf: Imprime para uma stream FILE.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;sprintf: Imprime em uma string.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;snprintf: Imprime em uma string com verificação de limite de tamanho.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Outras:&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;vfprintf, vprintf, vsprintf, vsnprintf, setproctitle, syslog, err*, verr*, warn*, vwarn*&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Um atacante pode explorar a falha em String de Formatação de duas maneiras principais:&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Leitura de Memória:&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;O especificador %x permite imprimir valores da pilha de execução do programa,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;para encontrar o offset (deslocamento) de exploração.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;O %s permite&amp;nbsp;visualizar de forma arbitrária a memória a partir de um endereço escolhido até encontrar um byte nulo.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div style=&quot;font-family: verdana;&quot;&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijvMj3AtC00tg2z9-rnApNL_ujWSpp8ZAcYYqlc9eMPecnBGwKFmQ_bjcw3j75wMMeyMWZc_lq08MMBA926ePO-MdCqSzczfPuEdbWul0c9P9v7SYNeYkd6DZyI2BxMIYkmhq_w_XbrbDyQx6xfCMEvXYxon79dtkou6lcwzBTYY02nQaMfNkbEhmvEyNd/s1126/format_string_stack_example.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;756&quot; data-original-width=&quot;1126&quot; height=&quot;430&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijvMj3AtC00tg2z9-rnApNL_ujWSpp8ZAcYYqlc9eMPecnBGwKFmQ_bjcw3j75wMMeyMWZc_lq08MMBA926ePO-MdCqSzczfPuEdbWul0c9P9v7SYNeYkd6DZyI2BxMIYkmhq_w_XbrbDyQx6xfCMEvXYxon79dtkou6lcwzBTYY02nQaMfNkbEhmvEyNd/w640-h430/format_string_stack_example.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Figura 3: exemplo formatação de string&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div style=&quot;font-family: verdana;&quot;&gt;&lt;ul style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Escrita de Memória:&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;O&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;%n tem a função de escrever na memória.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Ele grava no endereço de memória fornecido, o número de&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;bytes que já foram impressos pela função de formatação.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style=&quot;font-family: verdana;&quot;&gt;O %n não é amplamente conhecido e é o especificador mais perigoso por permitir que o atacante escreva um valor arbitrário na memória, sendo tipicamente utilizado para sobrescrever um endereço de retorno ou ponteiro de função. Mas como isso é possível?&lt;/div&gt;&lt;div&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li style=&quot;font-family: verdana;&quot;&gt;O atacante insere na &lt;i&gt;string&lt;/i&gt; de entrada o endereço de memória alvo que deseja modificar (por exemplo, o endereço de retorno da função).&lt;/li&gt;&lt;li style=&quot;font-family: verdana;&quot;&gt;Em seguida, ele utiliza o especificador %n em conjunto com especificadores de largura, para forçar a impressão de um número exato de bytes.&lt;/li&gt;&lt;li style=&quot;font-family: verdana;&quot;&gt;O número de bytes impresso é, na verdade, o valor que o atacante deseja escrever no endereço alvo. Ao redirecionar o fluxo de execução, o atacante ganha o controle total do programa.&lt;/li&gt;&lt;/ol&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Para mitigar Format String Vulnerabilities, deve-se sempre definir a string de formatação corretamente. Também, o uso de uma função de formatação segura como a snprintf que exige adicionar um limitador ao tamanho da string a ser fornecida pelo usuário, auxilia na mitigação contra a vulnerabilidade.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Próxima aula,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #2b00fe; font-family: verdana;&quot;&gt;&lt;a href=&quot;https://www.limontec.com/2023/11/guia-em-seguranca-ofensiva.html&quot;&gt;clique aqui&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;</description><link>http://www.limontec.com/2025/10/ataques-de-corrupcao-de-memoria.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikJMn5LIEfrtHPEivASNGrjkvEXwlg4pIfsUmJSG3iiHB7Qq2GaWwJER5C7ACwPdzjN3mOJMzZdm6Bafmml93aqYJZ_yJFwmxuidt2RVhJnGRLXV2v545RJExEEpfLRP6o2trej48bX-8CaV9ryot9es4nMq4iCNEvPxcVUu2M8uAvqxo4gECtD5lHKw/s72-w640-h421-c/limontec_seguranca_ofensiva_software.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2157924926610706248.post-3445789525126383571</guid><pubDate>Thu, 02 Oct 2025 13:56:00 +0000</pubDate><atom:updated>2025-10-02T10:56:15.811-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Artigo - Tecnologia</category><category domain="http://www.blogger.com/atom/ns#">blueteam</category><category domain="http://www.blogger.com/atom/ns#">root</category><title>3 ferramentas de packet spoofing</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJ97IPuYHdXjSrXtawvZCkuq_2u6egj1kmai8Cm3bRz0zcR_mBN4koBd9ivzdvIU961F3bSbATJgy7jKAbxQKrsJVXE28dN2BfaBpVmHEYqrmngzEnXx07ebQ5Bk7nnLTOwiXX-wSMjWcMbgioTm639WSKyHrPDsQoeEQr1DEvW9IYqW14B-68F_xvsb9A/s1042/packet_spoofing_linux_tools.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;546&quot; data-original-width=&quot;1042&quot; height=&quot;168&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJ97IPuYHdXjSrXtawvZCkuq_2u6egj1kmai8Cm3bRz0zcR_mBN4koBd9ivzdvIU961F3bSbATJgy7jKAbxQKrsJVXE28dN2BfaBpVmHEYqrmngzEnXx07ebQ5Bk7nnLTOwiXX-wSMjWcMbgioTm639WSKyHrPDsQoeEQr1DEvW9IYqW14B-68F_xvsb9A/s320/packet_spoofing_linux_tools.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;O &lt;b&gt;Spoofing&lt;/b&gt; é uma técnica frequentemente utilizada para &lt;b&gt;burlar firewalls e filtros de rede&lt;/b&gt; ao falsificar informações de identificação, como endereços IP ou MAC. Esta técnica permite um agente malicioso se passar por outra entidade confiável na rede. Conheça três ferramentas muito utilizadas nesse cenário:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Nemesis: Uma ferramenta para Linux que permite a criação e injeção de pacotes de rede de diferentes tipos, incluindo pacotes ARP e TCP, diretamente na camada de rede.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;blockquote&gt;[sudo nemesis arp -r -d eth0 -S 192.168.0.1 -D 192.168.0.2 -h 0A:0B:0C:0D:0E:0F -m 10.0.0.1]&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;O comando acima, demonstra como enviar uma resposta ARP falsificada (&lt;code&gt;-r&lt;/code&gt;) através da interface &lt;code&gt;eth0&lt;/code&gt;, simulando ser o IP de origem &lt;code&gt;192.168.0.1&lt;/code&gt; com um MAC de origem específico, e enviando-o para um destino.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Hping2: Outra ferramenta para Linux que gera pacotes, sendo frequentemente usada para enviar pacotes Ping que utilizam TCP em vez de ICMP (o protocolo padrão do ping), o que pode ser útil para testar a robustez de firewalls que bloqueiam o tráfego ICMP.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;blockquote&gt;[sudo hping2 -S -p 80 -c 3 -s 12345 ip_alvo]&lt;/blockquote&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;O comando acima envia pacotes TCP SYN (-S) para a porta 80 (-p 80) do ip_alvo, com um número específico de pacotes (-c 3) e uma porta de origem simulada (-s 12345).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Macchanger: Um popular programa de Linux que permite alterar o endereço MAC de uma interface de rede. Em cenários de segurança defensiva, pode ser usado para proteger a privacidade ou para testes.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;blockquote&gt;[sudo macchanger -r eth0]&lt;/blockquote&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;O comando acima randomiza (-r) o endereço MAC da interface eth0. É possível também especificar um MAC com o parâmetro -m.&lt;/div&gt;&lt;p&gt;&lt;/p&gt;</description><link>http://www.limontec.com/2025/10/3-ferramentas-de-packet-spoofing.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJ97IPuYHdXjSrXtawvZCkuq_2u6egj1kmai8Cm3bRz0zcR_mBN4koBd9ivzdvIU961F3bSbATJgy7jKAbxQKrsJVXE28dN2BfaBpVmHEYqrmngzEnXx07ebQ5Bk7nnLTOwiXX-wSMjWcMbgioTm639WSKyHrPDsQoeEQr1DEvW9IYqW14B-68F_xvsb9A/s72-c/packet_spoofing_linux_tools.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2157924926610706248.post-4080754445881883924</guid><pubDate>Sat, 16 Aug 2025 17:19:00 +0000</pubDate><atom:updated>2025-08-16T14:21:20.540-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Artigo - Tecnologia</category><category domain="http://www.blogger.com/atom/ns#">IA</category><category domain="http://www.blogger.com/atom/ns#">root</category><title>Workflow n8n: Automatize Feeds RSS sobre qualquer assunto com IA</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkWMgOB_okTSyGy6QclQ3kuw5fzP_ioOSKgeo0VGfvjgClHJl_z-tBs65wGB9ISQyZMA_sMBbEixNmWaETq7oxSLE2X1BJInOGZJV9T3x-l2lj9yAqGEsiUMeKAr0qWkgUOKazAl_GGYHe9dvNVp9N_pymB8AL9RfErXTwteV-fBAlx-x5wwtjcoxtBNxx/s1492/rss_n8n_ia.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;904&quot; data-original-width=&quot;1492&quot; height=&quot;194&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkWMgOB_okTSyGy6QclQ3kuw5fzP_ioOSKgeo0VGfvjgClHJl_z-tBs65wGB9ISQyZMA_sMBbEixNmWaETq7oxSLE2X1BJInOGZJV9T3x-l2lj9yAqGEsiUMeKAr0qWkgUOKazAl_GGYHe9dvNVp9N_pymB8AL9RfErXTwteV-fBAlx-x5wwtjcoxtBNxx/s320/rss_n8n_ia.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;A seguir, apresentamos um guia passo a passo para criar o fluxo de trabalho no n8n projetado para monitorar vários feeds RSS, filtrar novos artigos publicados na última hora, usar uma IA para verificar a relevância e, em seguida, postar um resumo a ser disparado em canal no Slack, por email etc.&lt;/p&gt;&lt;h3&gt;Visão Geral do Fluxo de Trabalho&lt;/h3&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;O fluxo de trabalho de exemplo opera da seguinte maneira:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Agendamento&lt;/b&gt;: É executado a cada hora para verificar novos conteúdos.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Fontes de notícias&lt;/b&gt;: Utiliza uma lista predefinida de URLs de feeds RSS focados no tema do seu projeto, exemplo: notícias de tecnologia.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Filtro de tempo&lt;/b&gt;: Filtra apenas os artigos publicados na última hora para evitar duplicatas e conteúdo antigo.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Processamento de IA&lt;/b&gt;: Cada artigo novo é enviado a um agente de IA (neste caso, um servidor local) para um resumo e para verificar se é relevante para o tema escolhido.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Publicação&lt;/b&gt;: Se a IA considerar o artigo relevante, ele será postado em um canal específico do Slack.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;Passo a Passo da Configuração&lt;/h3&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNKcWNuVugzjgkk4zoxAU9h3j6Z1eRXEwDax4qQNTFD9OkeqqxE0VGxlUPVmZkarxSdlhW4wm7ONYv3A83qH4NTY4y3J3fxItweCsRo4HhQehBek6OzB1TfqqP_pH1rRC5eESyvhNakrJxwnSrNCKk97o3Y5NEv_EHeKeWAriNb2PdQ3ZZ1aAKUpN1oxGf/s645/n8n_rssfeed_part1.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;136&quot; data-original-width=&quot;645&quot; height=&quot;84&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNKcWNuVugzjgkk4zoxAU9h3j6Z1eRXEwDax4qQNTFD9OkeqqxE0VGxlUPVmZkarxSdlhW4wm7ONYv3A83qH4NTY4y3J3fxItweCsRo4HhQehBek6OzB1TfqqP_pH1rRC5eESyvhNakrJxwnSrNCKk97o3Y5NEv_EHeKeWAriNb2PdQ3ZZ1aAKUpN1oxGf/w400-h84/n8n_rssfeed_part1.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;h4&gt;1. Configurar o Gatilho de Agendamento&lt;/h4&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;O primeiro passo é definir a frequência com que o fluxo de trabalho será executado.&lt;/p&gt;&lt;ol start=&quot;1&quot;&gt;&lt;li&gt;&lt;p&gt;Adicione um nó &lt;b&gt;Schedule Trigger&lt;/b&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Configure-o para ser executado a cada &lt;b&gt;1 hora&lt;/b&gt;. Isso garantirá que você receba as notícias mais recentes.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;h4&gt;2. Definir a Lista de Feeds RSS&lt;/h4&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;O próximo passo é criar uma lista dos feeds RSS que você deseja monitorar.&lt;/p&gt;&lt;ol start=&quot;1&quot;&gt;&lt;li&gt;&lt;p&gt;Adicione um nó &lt;b&gt;Set&lt;/b&gt; e nomeie-o como &lt;b&gt;List of RSS Feeds&lt;/b&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;No campo &lt;b&gt;Assignments&lt;/b&gt;, defina uma variável chamada &lt;code&gt;urls&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;O valor para &lt;code&gt;urls&lt;/code&gt; deve ser um array JSON contendo as URLs dos feeds RSS. Insira a lista de urls no seguinte formato:&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;blockquote&gt;[[&quot;https://feeds2.feedburner.com/limontec&quot;,&quot;https://rss.tecmundo.com.br/feed&quot;]]&lt;/blockquote&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;h4&gt;3. Processar Feeds Individualmente&lt;/h4&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Para ler cada feed RSS da lista, é necessário dividir a lista em itens separados.&lt;/p&gt;&lt;ol start=&quot;1&quot;&gt;&lt;li&gt;&lt;p&gt;Conecte o nó &lt;b&gt;List of RSS Feeds&lt;/b&gt; a um nó &lt;b&gt;Split Out&lt;/b&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;No nó &lt;b&gt;Split Out&lt;/b&gt;, selecione o campo &lt;code&gt;urls&lt;/code&gt; para dividir.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Conecte o nó &lt;b&gt;Split Out&lt;/b&gt; a um nó &lt;b&gt;RSS Feed Read&lt;/b&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;No nó &lt;b&gt;RSS Feed Read&lt;/b&gt;, no campo &lt;b&gt;URL&lt;/b&gt;, use a expressão &lt;code&gt;{{ $json.urls }}&lt;/code&gt; para que ele leia a URL de cada item que passa pelo fluxo.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8bPKj3aYDTYtQ00ls_rhKGrcw7J60FZkW6QNiSyBBBJJYNQdyFmjBUH04Z3w-we3WqBeRue3OAheyE7imVDTBjMfetljwocWdg7Rag9Wq2iTHvr2bp_TXNIwwCwVasc0MweQf6PELu6sfJZKZynaVpoQXkc-vBsDsaYtgcuIcRlaUoohmf7kFLlVs3QXE/s480/n8n_rssfeed_part2.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;128&quot; data-original-width=&quot;480&quot; height=&quot;106&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8bPKj3aYDTYtQ00ls_rhKGrcw7J60FZkW6QNiSyBBBJJYNQdyFmjBUH04Z3w-we3WqBeRue3OAheyE7imVDTBjMfetljwocWdg7Rag9Wq2iTHvr2bp_TXNIwwCwVasc0MweQf6PELu6sfJZKZynaVpoQXkc-vBsDsaYtgcuIcRlaUoohmf7kFLlVs3QXE/w400-h106/n8n_rssfeed_part2.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;h4&gt;4. Filtrar Artigos Recentes&lt;/h4&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;É importante garantir que você só processe artigos que são realmente novos.&lt;/p&gt;&lt;ol start=&quot;1&quot;&gt;&lt;li&gt;&lt;p&gt;Conecte o nó &lt;b&gt;RSS Feed Read&lt;/b&gt; a um nó &lt;b&gt;If&lt;/b&gt; e nomeie-o como &lt;b&gt;If published in the last hour&lt;/b&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Configure as seguintes condições para filtrar por data:&lt;/p&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Condição 1&lt;/b&gt;: Verifique se o campo string&amp;nbsp;&lt;code&gt;isoDate&amp;nbsp;&lt;/code&gt;existe, use a expressão:&amp;nbsp;&lt;code&gt;{{ $json.isoDate }}&lt;/code&gt;&amp;nbsp;exist.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Condição 2&lt;/b&gt;: Verifique se a data do artigo é &lt;b&gt;posterior&lt;/b&gt; a 1 hora atrás. Use a expressão:&amp;nbsp;&lt;code&gt;{{DateTime.fromISO($json.isoDate)}}&lt;/code&gt;&amp;nbsp;is after&amp;nbsp;&lt;code&gt;{{DateTime.now().minus({hour: 1})}}&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Condição 3&lt;/b&gt;: Verifique se a data do artigo é &lt;b&gt;anterior ou igual&lt;/b&gt; à data atual. Use a expressão:&amp;nbsp;&lt;code&gt;{{DateTime.fromISO($json.isoDate)}}&lt;/code&gt;&amp;nbsp;is before or equal to&amp;nbsp;&lt;code&gt;{{DateTime.now()}}&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;A condição entre a condição 1 e demais deve ser&amp;nbsp;&lt;b&gt;AND&lt;/b&gt;.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;div&gt;&lt;h4&gt;5. Gerar o Prompt para a IA&lt;/h4&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Para que a IA possa processar o conteúdo, é necessário formatar os dados de entrada antes.&lt;/p&gt;&lt;ol start=&quot;1&quot;&gt;&lt;li&gt;&lt;p&gt;Conecte a saída &lt;code&gt;True&lt;/code&gt; do nó &lt;b&gt;If published in the last hour&lt;/b&gt; a um nó &lt;b&gt;Code&lt;/b&gt; e nomeie-o como &lt;b&gt;Generate prompt&lt;/b&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Insira o código JavaScript fornecido no seu workflow para extrair e formatar o título, conteúdo e link do RSS em uma única string:&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;[for (const item of $input.all()) {&lt;/div&gt;&lt;div&gt;&amp;nbsp; let title = item.json.title || &quot;N/A&quot;;&lt;/div&gt;&lt;div&gt;&amp;nbsp; let content = item.json.content || &quot;N/A&quot;;&lt;/div&gt;&lt;div&gt;&amp;nbsp; let link = item.json.link || &quot;N/A&quot;;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; title = title.replace(/\n/g, &quot;&quot;).replace(/&quot;/g, &quot;&quot;);&lt;/div&gt;&lt;div&gt;&amp;nbsp; content = content.replace(/\n/g, &quot;&quot;).replace(/&quot;/g, &quot;&quot;);&lt;/div&gt;&lt;div&gt;&amp;nbsp; link = link.replace(/\n/g, &quot;&quot;).replace(/&quot;/g, &quot;&quot;);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; item.json.rss_content = `Título: ${title} | Conteúdo: ${content} | Link: ${link}`;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;return $input.all();]&lt;/div&gt;&lt;/blockquote&gt;É importante salientar que estamos usando uma IA treinada exclusivamente para gerar resumos dado título, conteúdo e link. Portanto pode ser que você precise alterar o trecho acima para incluir o prompt para a IA entender o que deve ser feito com essa entrada. No nosso caso, a IA já tem o prompt embutido no modelo. Saiba mais sobre como rodar um modelo de IA localmente &lt;a href=&quot;https://www.limontec.com/2025/03/ia-offline-no-pc.html&quot; target=&quot;_blank&quot;&gt;clicando aqui&lt;/a&gt;. É importante adicionar no prompt para que caso a notícia não seja relevante no contexto escolhido (exemplo, notícias sobre tecnologia), ela responda apenas:&amp;nbsp;NÃO RELEVANTE&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;No n8n tem um bloco exclusivo para utilização de modelos de IA, se preferir utilize ele e configure a API do seu modelo de linguagem preferido. Este bloco deverá substituir o bloco AI AGENT Summarized da imagem abaixo (bloco HTTP).&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;h4&gt;6. Chamar o Agente de IA para Análise&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUB3HlCYJfpmgzt1prflbu0ubkrEkZVNWN0vksiMg81xREdYl1C7V1ye9WgAPEBZmkyeuCgfpj1YYR67HCGB58RU5ggvHFOmEFiFs1x0vG4tH6TYT492-XUbKV6IPTf7ksBHgjffefo9E4PbX08A_Qr_7jUKBp4SidXJbXGflr_iQAHiBPly56uQ8I0byS/s665/n8n_rssfeed_part3.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;187&quot; data-original-width=&quot;665&quot; height=&quot;113&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUB3HlCYJfpmgzt1prflbu0ubkrEkZVNWN0vksiMg81xREdYl1C7V1ye9WgAPEBZmkyeuCgfpj1YYR67HCGB58RU5ggvHFOmEFiFs1x0vG4tH6TYT492-XUbKV6IPTf7ksBHgjffefo9E4PbX08A_Qr_7jUKBp4SidXJbXGflr_iQAHiBPly56uQ8I0byS/w400-h113/n8n_rssfeed_part3.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/h4&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Aqui você fará uma requisição para o seu servidor de IA local ou nuvem (API chatGPT por exemplo).&lt;/p&gt;&lt;ol start=&quot;1&quot;&gt;&lt;li&gt;&lt;p&gt;Conecte o nó &lt;b&gt;Generate prompt&lt;/b&gt; a um nó &lt;b&gt;Loop Over Items&lt;/b&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Conecte o nó &lt;b&gt;Loop Over Items&lt;/b&gt; a um nó &lt;b&gt;HTTP Request&lt;/b&gt; e nomeie-o como &lt;b&gt;AI AGENT Summarized&lt;/b&gt;. Note que você pode modificar esse loop para usar um nó mais adequado ao seu contexto.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Configure o nó &lt;b&gt;HTTP Request&lt;/b&gt;:&lt;/p&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Method&lt;/b&gt;: &lt;code&gt;POST&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;URL&lt;/b&gt;: &lt;code&gt;http://172.16.0.2:8080/api/chat/completions&lt;/code&gt; (ou o endereço do seu servidor de IA).&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Authentication&lt;/b&gt;: Use as credenciais &lt;code&gt;httpBearerAuth&lt;/code&gt; para se autenticar.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;Body&lt;/b&gt;: Selecione &lt;code&gt;JSON&lt;/code&gt; e cole o corpo JSON fornecido, usando a expressão &lt;code&gt;{{ $json.rss_content }}&lt;/code&gt; para enviar o conteúdo do artigo à IA:&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;[{&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;model&quot;: &quot;llama-rss&quot;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;messages&quot;: [&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;role&quot;: &quot;user&quot;,&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;content&quot;: &quot;{{ $json.rss_content }}&quot;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ]&lt;/div&gt;&lt;div&gt;}]&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;h4&gt;7. Filtrar Respostas da IA e Postar no Slack&lt;/h4&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkrJfIneRD10_pe0EvwXwgz-mYsySu0803m9_tobcTlmiFTpZ7PvOk34DObDmmdkybsx2B3tQd5LWn6afLK3f4nrjKZwCqK5PxdzjuvWfhFYnp6sHnSoYN124RGzFHYZ1SxsDk235vZvXrIhvBXsN_8pOYuXw4JOPdNOvV1J5b5Ks_vAasBxeCK_kifyFE/s525/n8n_rssfeed_part4.png&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;141&quot; data-original-width=&quot;525&quot; height=&quot;108&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkrJfIneRD10_pe0EvwXwgz-mYsySu0803m9_tobcTlmiFTpZ7PvOk34DObDmmdkybsx2B3tQd5LWn6afLK3f4nrjKZwCqK5PxdzjuvWfhFYnp6sHnSoYN124RGzFHYZ1SxsDk235vZvXrIhvBXsN_8pOYuXw4JOPdNOvV1J5b5Ks_vAasBxeCK_kifyFE/w400-h108/n8n_rssfeed_part4.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;O fluxo final verificará se a resposta da IA é relevante antes de postar no Slack.&lt;/p&gt;&lt;ol start=&quot;1&quot;&gt;&lt;li&gt;&lt;p&gt;Conecte o nó &lt;b&gt;AI AGENT Summarized&lt;/b&gt; a um nó &lt;b&gt;If&lt;/b&gt; e nomeie-o como &lt;b&gt;If cybersecurity related&lt;/b&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Neste nó, configure uma condição para verificar se o resumo da IA &lt;b&gt;não contém&lt;/b&gt; a string &lt;code&gt;&quot;NÃO RELEVANTE&quot;&lt;/code&gt;. Use a expressão &lt;code&gt;{{ $json.choices[0].message.content }}&lt;/code&gt;. Pois assim garantimos que enviaremos apenas resumos gerados para a IA que seja relevante ao contexto escolhido, por exemplo notícias de tecnologia apenas.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Conecte a saída &lt;code&gt;True&lt;/code&gt; do nó &lt;b&gt;If tech related&lt;/b&gt; a um nó &lt;b&gt;Wait&lt;/b&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;No nó &lt;b&gt;Wait&lt;/b&gt;, defina um tempo de espera para evitar problemas com limites de taxa do Slack. A espera de &lt;b&gt;30 segundos&lt;/b&gt; é uma boa prática.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Conecte o nó &lt;b&gt;Wait&lt;/b&gt; a um nó &lt;b&gt;Slack&lt;/b&gt; e nomeie-o como &lt;b&gt;Post the news&lt;/b&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Configure o nó &lt;b&gt;Slack&lt;/b&gt; com suas credenciais do Slack.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;No campo &lt;b&gt;Channel ID&lt;/b&gt;, selecione o canal para onde você quer postar (por exemplo, &lt;code&gt;#rss-news&lt;/code&gt;).&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;No campo &lt;b&gt;Text&lt;/b&gt;, use a expressão &lt;code&gt;{{ $json.choices[0].message.content }}&lt;/code&gt; para postar o resumo fornecido pela IA.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Dessa forma, seu fluxo de trabalho estará pronto para ser ativado. Ele executará de forma autônoma a cada hora, entregando resumos relevantes de notícias diretamente no seu canal do Slack. Você pode alterar o fluxo para enviar um email ou realizar outras ações.&lt;/div&gt;&lt;/div&gt;</description><link>http://www.limontec.com/2025/08/n8n-rss-feed-ai.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkWMgOB_okTSyGy6QclQ3kuw5fzP_ioOSKgeo0VGfvjgClHJl_z-tBs65wGB9ISQyZMA_sMBbEixNmWaETq7oxSLE2X1BJInOGZJV9T3x-l2lj9yAqGEsiUMeKAr0qWkgUOKazAl_GGYHe9dvNVp9N_pymB8AL9RfErXTwteV-fBAlx-x5wwtjcoxtBNxx/s72-c/rss_n8n_ia.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2157924926610706248.post-374954628971983972</guid><pubDate>Fri, 08 Aug 2025 11:00:00 +0000</pubDate><atom:updated>2025-08-08T08:00:00.109-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Artigo - Tecnologia</category><category domain="http://www.blogger.com/atom/ns#">blueteam</category><category domain="http://www.blogger.com/atom/ns#">root</category><title>5 ferramentas para descobertas de subdomínios</title><description>&lt;div _ngcontent-ng-c1770593558=&quot;&quot; class=&quot;markdown markdown-main-panel enable-updated-hr-color&quot; dir=&quot;ltr&quot; id=&quot;model-response-message-contentr_84c3904d6836451f&quot; style=&quot;--animation-duration: 400ms; --fade-animation-function: linear; animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; color: #1b1c1d; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;p style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 16px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 16px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgo7NYHV10u3Yd49lpcKq84cU_lGpOsYLYrKVpOOl6hWFHS-l1OQJCmFq5LDsuklDDk6xtuZtfvYASw3ZajPuHX60986AXKrLqhBKjbHU-JMMlKCNoawfjo9j1sDUBiB5gtvgUpqMsbUaIy-bkhCwdyiUCRFLWYC9kPvJyqNqciK4TnEMC7xg8QWCG-Zag3/s1187/subdomain_finder.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;566&quot; data-original-width=&quot;1187&quot; height=&quot;153&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgo7NYHV10u3Yd49lpcKq84cU_lGpOsYLYrKVpOOl6hWFHS-l1OQJCmFq5LDsuklDDk6xtuZtfvYASw3ZajPuHX60986AXKrLqhBKjbHU-JMMlKCNoawfjo9j1sDUBiB5gtvgUpqMsbUaIy-bkhCwdyiUCRFLWYC9kPvJyqNqciK4TnEMC7xg8QWCG-Zag3/s320/subdomain_finder.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Um &lt;/span&gt;&lt;b style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; display: inline; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; font-family: verdana; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;subdomínio&lt;/b&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt; é uma extensão criada a partir de um domínio de segundo nível, como &quot;blog&quot; em &quot;blog.exemplo.com&quot;.&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;animation: 0s ease 0s 1 normal none running none; appearance: none; background-attachment: scroll; background-clip: border-box; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; border: 0px none rgb(27, 28, 29); clear: none; clip: auto; columns: auto; contain: none; container: none; content: normal; cursor: auto; cx: 0px; cy: 0px; d: none; direction: ltr; fill: rgb(0, 0, 0); filter: none; flex: 0 1 auto; float: none; gap: normal; hyphens: manual; inset: auto; interactivity: auto; isolation: auto; line-height: 1.15; margin-bottom: 8px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; margin: 0px 0px 8px; marker: none; mask-clip: border-box; mask-composite: add; mask-image: none; mask-mode: match-source; mask-origin: border-box; mask-repeat: repeat; mask-size: auto; mask: none; offset: normal; opacity: 1; order: 0; outline: rgb(27, 28, 29) none 0px; overlay: none; padding: 0px; page: auto; perspective: none; position: static; quotes: auto; r: 0px; resize: none; rotate: none; rx: auto; ry: auto; scale: none; speak: normal; stroke: none; transform: none; transition: all; translate: none; visibility: visible; x: 0px; y: 0px; zoom: 1;&quot;&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Ferramentas que encontram subdomínio são úteis por várias razões e o processo pode ser realizado através das várias ferramentas listadas abaixo:&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://securitytrails.com/app/account&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;SecurityTrails&lt;/a&gt;&lt;/b&gt;: Permite consultar subdomínios via página web, API ou a ferramenta de linha de comando &lt;code&gt;&lt;a href=&quot;https://github.com/hakluke/haktrails&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;hacktrails&lt;/a&gt;&lt;/code&gt;. Necessário email corporativo para acesso.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://github.com/aboul3la/Sublist3r&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Sublist3r&lt;/a&gt;&lt;/b&gt;: Uma ferramenta de linha de comando que agrega resultados de múltiplas fontes.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://github.com/michenriksen/aquatone&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Aquatone&lt;/a&gt;&lt;/b&gt;: Similar ao Sublist3r, coleta dados de várias fontes e pode verificar o status de atividade e vulnerabilidades de &lt;i&gt;takeover&lt;/i&gt; dos subdomínios.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://github.com/tomnomnom/assetfinder&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Assetfinder&lt;/a&gt;&lt;/b&gt;: Outra ferramenta de linha de comando que consulta diversas fontes para encontrar subdomínios.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://subdomainfinder.c99.nl/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Subdomain Finder&lt;/a&gt;&lt;/b&gt;: Página web que permite consultar subdomínios inclusive de forma privada.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span style=&quot;font-family: verdana;&quot;&gt;Dica extra, crt.sh &lt;a href=&quot;https://www.limontec.com/2022/02/crtsh-consultar-todos-subdominios.html&quot;&gt;clique aqui &lt;/a&gt;e saiba mais.&lt;/span&gt;&lt;/div&gt;</description><link>http://www.limontec.com/2025/08/subdomain-finder-tools.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgo7NYHV10u3Yd49lpcKq84cU_lGpOsYLYrKVpOOl6hWFHS-l1OQJCmFq5LDsuklDDk6xtuZtfvYASw3ZajPuHX60986AXKrLqhBKjbHU-JMMlKCNoawfjo9j1sDUBiB5gtvgUpqMsbUaIy-bkhCwdyiUCRFLWYC9kPvJyqNqciK4TnEMC7xg8QWCG-Zag3/s72-c/subdomain_finder.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2157924926610706248.post-7665591064685265792</guid><pubDate>Fri, 04 Jul 2025 22:42:00 +0000</pubDate><atom:updated>2026-08-06T10:39:30.620-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Artigo - Tecnologia</category><category domain="http://www.blogger.com/atom/ns#">Review</category><title>Review smart tag Android MiTag</title><description>&lt;article&gt;
  &lt;!-- Imagem de Destaque / Cabeçalho --&gt;
  &lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
    &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuX5-SmQhycLQQHutcrsJe-G2mtSVYnoG3swMRyzvd2lGAsiyXBhcKve4p4P148NN0PxktUPkQLwkdmKD0MRj5C_pjjsVHqjR386C73COzpG6VsswXS2xczZQ6lUM5lHuMkiSr-or3gS6UjHe1ZZMu2rApjLDRHpY2TRM3pJZurMZeH27fiCNUqyBaUViP/s1030/mili_mitag.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;
      &lt;img alt=&quot;MiLi Smart Tracker MiTag - Rastreador Bluetooth para Android&quot; border=&quot;0&quot; data-original-height=&quot;382&quot; data-original-width=&quot;1030&quot; height=&quot;119&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuX5-SmQhycLQQHutcrsJe-G2mtSVYnoG3swMRyzvd2lGAsiyXBhcKve4p4P148NN0PxktUPkQLwkdmKD0MRj5C_pjjsVHqjR386C73COzpG6VsswXS2xczZQ6lUM5lHuMkiSr-or3gS6UjHe1ZZMu2rApjLDRHpY2TRM3pJZurMZeH27fiCNUqyBaUViP/s320/mili_mitag.png&quot; width=&quot;320&quot; /&gt;
    &lt;/a&gt;
  &lt;/div&gt;
  &lt;br /&gt;

  &lt;!-- Introdução --&gt;
  &lt;p&gt;O &lt;strong&gt;MiLi Smart Tracker MiTag&lt;/strong&gt; é um rastreador Bluetooth compacto e leve, semelhante ao Apple AirTag, Motorola MotoTag e Samsung SmartTag2. Ideal para localizar objetos como chaves, carteiras, mochilas, animais de estimação, carro e moto, sem a necessidade de GPS e internet embutida.&lt;/p&gt;
  
  &lt;p&gt;Compatível com a rede &lt;strong&gt;Google Find My&lt;/strong&gt; (atualmente chamada &lt;strong&gt;Google Find Hub&lt;/strong&gt;), esta tag oferece localização global eficiente exclusivamente para dispositivos &lt;strong&gt;Android&lt;/strong&gt;.&lt;/p&gt;
  
  &lt;p&gt;Testamos abaixo a versão HD-P16 Black.&lt;/p&gt;

  &lt;!-- Imagem secundária --&gt;
  &lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
    &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiu08ONPUpkqbomZxFTdPjXvGrXJUvQZyS7RD0VMJXo-9ygARS7yyJRXgHNqhIoZqhMw45YAEuSnSyc4IxbIUq1eCj5YS6AHVl1BTUOEgP41VleniiIG8zAC4SlkVQjehQAhXwn9idDpQ-iA3iRspgslKU0j8dV6Lhmg5i0ld6x7TcLtNncKZD0z3JdcuyX/s1504/mitag_screen_find_hub.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;
      &lt;img alt=&quot;Tela do aplicativo Google Find Hub configurando o rastreador MiTag&quot; border=&quot;0&quot; data-original-height=&quot;1504&quot; data-original-width=&quot;692&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiu08ONPUpkqbomZxFTdPjXvGrXJUvQZyS7RD0VMJXo-9ygARS7yyJRXgHNqhIoZqhMw45YAEuSnSyc4IxbIUq1eCj5YS6AHVl1BTUOEgP41VleniiIG8zAC4SlkVQjehQAhXwn9idDpQ-iA3iRspgslKU0j8dV6Lhmg5i0ld6x7TcLtNncKZD0z3JdcuyX/w184-h400/mitag_screen_find_hub.png&quot; width=&quot;184&quot; /&gt;
    &lt;/a&gt;
  &lt;/div&gt;
  
  &lt;hr /&gt;

  &lt;!-- Destaques --&gt;
  &lt;h2&gt;Destaques do MiLi MiTag&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Integração com o Google Find Hub&lt;/strong&gt;: Rastreie seus objetos diretamente pelo app de localização do Google.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Rastreamento global&lt;/strong&gt;: Ideal para uso em viagens ou deslocamentos diários.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Bateria substituível (CR2032)&lt;/strong&gt;: Longa duração e fácil reposição.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;IP65 – Resistente à água e poeira&lt;/strong&gt;: Seguro para uso ao ar livre.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Privacidade garantida&lt;/strong&gt;: Dados criptografados e protegidos pela sua conta Google.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Alerta sonoro&lt;/strong&gt;: Emite som remotamente para facilitar a localização do item.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;Segundo o anúncio, possui alcance de até &lt;strong&gt;120 metros em ambiente aberto&lt;/strong&gt;, construção em material resistente (&lt;strong&gt;PC+ABS&lt;/strong&gt;) e design discreto. Portanto, o MiTag é uma solução prática e acessível para evitar perdas.&lt;/p&gt;
  
  &lt;hr /&gt;

  &lt;!-- Pontos a Considerar --&gt;
  &lt;h2&gt;Pontos a Considerar sobre o MiTag&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;strong&gt;Limitação de rastreamento em locais isolados&lt;/strong&gt;: Por padrão, dispositivos Android &lt;strong&gt;só propagam a localização da tag se houver mais aparelhos próximos&lt;/strong&gt;. Isso evita que o acessório seja usado como rastreador espião.&lt;br /&gt;
      → Caso um usuário desative essa proteção nas configurações do Android, o celular poderá compartilhar a localização da tag mesmo em locais menos movimentados.
    &lt;/li&gt;
    &lt;li&gt;
      &lt;strong&gt;Incompatibilidade entre redes&lt;/strong&gt;: iPhones não conseguem rastrear dispositivos da rede Android (e vice-versa). Eles apenas emitem um alerta de segurança caso detectem uma tag desconhecida próxima.
    &lt;/li&gt;
    &lt;li&gt;
      &lt;strong&gt;Sem suporte para Huawei&lt;/strong&gt;: O MiTag &lt;strong&gt;não é compatível com aparelhos da Huawei&lt;/strong&gt;.
    &lt;/li&gt;
  &lt;/ul&gt;

  &lt;hr /&gt;

  &lt;!-- Como Usar --&gt;
  &lt;h2&gt;Como Usar o MiTag no Android&lt;/h2&gt;
  &lt;ol&gt;
    &lt;li&gt;Verifique se seu Android está na versão 9 ou superior.&lt;/li&gt;
    &lt;li&gt;Baixe o app &lt;strong&gt;Google Find Hub (Localizador do Google)&lt;/strong&gt;.&lt;/li&gt;
    &lt;li&gt;Ative &lt;strong&gt;Bluetooth&lt;/strong&gt; e &lt;strong&gt;Wi-Fi&lt;/strong&gt; no seu celular.&lt;/li&gt;
    &lt;li&gt;Ligue a MiTag pressionando uma vez no centro até ouvir um &lt;em&gt;beep&lt;/em&gt;.&lt;/li&gt;
    &lt;li&gt;
      Quando a tag aparecer na tela, toque em &quot;Conectar&quot; e aceite os termos.
      &lt;ul&gt;
        &lt;li&gt;⚠️ Esse processo precisa ser concluído em até &lt;strong&gt;3 minutos&lt;/strong&gt;, ou a tag será desligada automaticamente.&lt;/li&gt;
        &lt;li&gt;Se a mensagem não aparecer, &lt;strong&gt;reinicie o celular&lt;/strong&gt; e &lt;strong&gt;segure a MiTag por 5 segundos&lt;/strong&gt; para desligá-la (dois beeps serão emitidos). Depois, tente novamente.&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;Após conectar, abra o app Localizador do Google, selecione a MiTag, escolha um nome e a categoria do item.&lt;/li&gt;
  &lt;/ol&gt;

  &lt;p&gt;✅ Pronto! Agora você pode localizar o objeto sempre que precisar.&lt;/p&gt;
  
  &lt;p&gt;&lt;strong&gt;Dica extra:&lt;/strong&gt; Você pode compartilhar a tag com outra conta Google. Acesse o Localizador Google e clique na tag. Em seguida, clique na opção compartilhar e gere um link de compartilhamento. Envie este link para alguém que tem conta Google para poder compartilhar com essa pessoa a tag. Para remover uma pessoa do compartilhamento, basta acessar as configurações da tag no localizador e parar o compartilhamento.&lt;/p&gt;

  &lt;hr /&gt;

  &lt;!-- Como resetar --&gt;
  &lt;h2&gt;Como resetar e vincular a outra conta Google&lt;/h2&gt;
  &lt;p&gt;Para transferir a MiTag para outra conta:&lt;/p&gt;
  &lt;ol&gt;
    &lt;li&gt;Com a tag ligada, &lt;strong&gt;remova-a da sua conta Google&lt;/strong&gt; pelo app.&lt;/li&gt;
    &lt;li&gt;Pressione o centro da MiTag &lt;strong&gt;6 vezes rapidamente&lt;/strong&gt;. Um &lt;em&gt;beep longo&lt;/em&gt; confirmará o reset.&lt;/li&gt;
    &lt;li&gt;Agora ela poderá ser pareada com outra conta.&lt;/li&gt;
  &lt;/ol&gt;

  &lt;hr /&gt;

  &lt;!-- Resolução de Problemas --&gt;
  &lt;h2&gt;Perdeu a conexão com a MiTag? Siga o passo a passo:&lt;/h2&gt;
  
  &lt;h3&gt;1. Reconectando ao aplicativo&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Confirme se ela está ligada pressionando o botão central duas vezes. Dois beeps serão emitidos.&lt;/li&gt;
    &lt;li&gt;Se não ouvir nada, a bateria pode ter acabado ou o dispositivo estar desligado.&lt;/li&gt;
    &lt;li&gt;Reinicie o celular.&lt;/li&gt;
    &lt;li&gt;Substitua a bateria ou tente ligá-la pressionando o centro uma vez até ouvir um beep.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;2. Procedimento avançado de reconexão&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Desligue a MiTag segurando o centro dela por 5 segundos (você ouvirá dois beeps).&lt;/li&gt;
    &lt;li&gt;Reinicie o celular e abra o app Localizador Google.&lt;/li&gt;
    &lt;li&gt;Ligue a MiTag pressionando o centro uma vez (você ouvirá um beep).&lt;/li&gt;
    &lt;li&gt;Verifique se o rastreamento voltou ao normal.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;h3&gt;3. Resetando e reconfigurando (se o problema persistir)&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Resete a tag:&lt;/strong&gt; Pressione o centro da MiTag 6 vezes rapidamente. Um beep longo confirmará que o reset foi concluído.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Remova do app:&lt;/strong&gt; Abra o app Localizador Google e exclua a tag da sua conta.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Reinicie novamente:&lt;/strong&gt; Dê mais uma reiniciada no seu celular.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Prepare a conexão:&lt;/strong&gt; Certifique-se de que o Bluetooth e o Wi-Fi do celular estão ativados.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Ligue a MiTag:&lt;/strong&gt; Pressione o centro uma vez até ouvir um beep.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Pareie novamente:&lt;/strong&gt; Agora você poderá adicioná-la à sua conta pelo aplicativo.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;&lt;em&gt;Nota: Caso todas as etapas falhem, pode ser necessário adquirir um novo dispositivo, pois a tag atual pode apresentar defeito físico.&lt;/em&gt;&lt;/p&gt;

  &lt;hr /&gt;

  &lt;!-- Veredito Final --&gt;
  &lt;h2&gt;Veredito Final&lt;/h2&gt;
  &lt;p&gt;Se você é usuário Android e está em busca de um &lt;strong&gt;rastreador confiável, leve, resistente e com ótimo custo-benefício&lt;/strong&gt;, o &lt;strong&gt;MiLi MiTag&lt;/strong&gt; é uma excelente escolha.&lt;/p&gt;
  
  &lt;p&gt;🔗 [&lt;a href=&quot;https://www.limontec.com/p/ofertas.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Clique aqui para aproveitar a oferta&lt;/a&gt;] — &lt;em&gt;Dica: comprando 3 unidades o frete é grátis, o que ajuda a compensar o imposto de importação.&lt;/em&gt;&lt;/p&gt;
&lt;/article&gt;</description><link>http://www.limontec.com/2025/07/review-smart-tag-android-mitag.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuX5-SmQhycLQQHutcrsJe-G2mtSVYnoG3swMRyzvd2lGAsiyXBhcKve4p4P148NN0PxktUPkQLwkdmKD0MRj5C_pjjsVHqjR386C73COzpG6VsswXS2xczZQ6lUM5lHuMkiSr-or3gS6UjHe1ZZMu2rApjLDRHpY2TRM3pJZurMZeH27fiCNUqyBaUViP/s72-c/mili_mitag.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2157924926610706248.post-2959625168338685369</guid><pubDate>Fri, 27 Jun 2025 11:00:00 +0000</pubDate><atom:updated>2025-08-19T13:38:10.546-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Artigo - Tecnologia</category><category domain="http://www.blogger.com/atom/ns#">blueteam</category><category domain="http://www.blogger.com/atom/ns#">root</category><title>Como extrair histórico navegador com um comando</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiA-6zZuSEF79bhks_ZsVp2yDrceAPw5KTrxdoTF_XcQO3VvXbYy5ZYGWEGllfJuCWfDWBFlqe7CAI6g-LPn2o3yymW4M5HJf0L7UdTnuAkAJ_5GoftjSklrI48IykY2GsKj_RakIXrygGALmIFYpDI3-TkyTKahdQ5CVJM7cfxLfw7JHGmSCV4vAZTmva9/s583/get_history_powershell.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;298&quot; data-original-width=&quot;583&quot; height=&quot;164&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiA-6zZuSEF79bhks_ZsVp2yDrceAPw5KTrxdoTF_XcQO3VvXbYy5ZYGWEGllfJuCWfDWBFlqe7CAI6g-LPn2o3yymW4M5HJf0L7UdTnuAkAJ_5GoftjSklrI48IykY2GsKj_RakIXrygGALmIFYpDI3-TkyTKahdQ5CVJM7cfxLfw7JHGmSCV4vAZTmva9/s320/get_history_powershell.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;O script abaixo tem como objetivo ler o histórico de navegação de diferentes navegadores instalados no Windows (Chrome, Brave e Edge) e extrair URLs usando uma expressão regular, imprimindo os resultados no terminal.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;[$UserName = $env:USERNAME&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;pre style=&quot;overflow-wrap: break-word; text-wrap-mode: wrap;&quot;&gt;$Browsers = @{
    &#39;Chrome&#39; = &quot;$Env:systemdrive\Users\$UserName\AppData\Local\Google\Chrome\User Data\Default\History&quot;
    &#39;Brave&#39;  = &quot;$Env:systemdrive\Users\$UserName\AppData\Local\BraveSoftware\Brave-Browser\User Data\Default\History&quot;
    &#39;Edge&#39;   = &quot;$Env:systemdrive\Users\$UserName\AppData\Local\Microsoft\Edge\User Data\Default\History&quot;
}

$Regex = &#39;(htt(p|s))://([\w-]+\.)+[\w-]+(/[\w- ./?%&amp;amp;=]*)*?&#39; 

Write-Host &quot;Username | Browser | url&quot;

foreach ($Browser in $Browsers.Keys) {
    $Path = $Browsers[$Browser]
    
    if (-not (Test-Path -Path $Path)) {
        Write-Verbose &quot;[!] Could not find $Browser History for username: $UserName&quot;
        continue
    }

    try {
        $Value = Get-Content -Path $Path -ErrorAction Stop | Select-String -AllMatches $Regex | ForEach-Object { ($_.Matches).Value } | Sort -Unique
    } catch {
        Write-Warning &quot;[!] Failed to read history from $Browser $_&quot;
        continue
    }

	foreach ($url in $Value) {
		Write-Host $UserName $Browser $url
	}&amp;nbsp;&lt;/pre&gt;&lt;p&gt;} pause]&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Se o script não aparecer acima, &lt;a href=&quot;https://github.com/limontec/get_history.ps1/blob/main/get_history.ps1&quot; target=&quot;_blank&quot;&gt;clique aqui&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Para executar salve o código em um arquivo como .ps1 e execute-o no PowerShell (botão direito sobre o arquivo, executar com Power Shell).&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;✅ Resumo:&lt;/p&gt;&lt;p&gt;O script:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Procura os arquivos de histórico do Chrome, Brave e Edge.&lt;/li&gt;&lt;li&gt;Tenta ler o conteúdo como texto e extrair URLs usando uma regex.&lt;/li&gt;&lt;li&gt;Exibe os resultados no formato: Username | Browser | URL.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;⚠️ Limitações e observações:&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Não acessa o banco SQLite corretamente — ler o arquivo diretamente como texto pode falhar ou resultar em dados incompletos.&lt;/li&gt;&lt;li&gt;Regex limitada — pode deixar de capturar URLs válidas ou retornar strings incorretas.&lt;/li&gt;&lt;li&gt;Histórico pode estar bloqueado se o navegador estiver aberto (o arquivo pode estar em uso).&lt;/li&gt;&lt;li&gt;Funciona apenas no Windows — os caminhos são específicos da estrutura de diretórios do Windows.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;</description><link>http://www.limontec.com/2025/06/extrair-historico-chrome-cmd.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiA-6zZuSEF79bhks_ZsVp2yDrceAPw5KTrxdoTF_XcQO3VvXbYy5ZYGWEGllfJuCWfDWBFlqe7CAI6g-LPn2o3yymW4M5HJf0L7UdTnuAkAJ_5GoftjSklrI48IykY2GsKj_RakIXrygGALmIFYpDI3-TkyTKahdQ5CVJM7cfxLfw7JHGmSCV4vAZTmva9/s72-c/get_history_powershell.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2157924926610706248.post-9123637872659520048</guid><pubDate>Thu, 19 Jun 2025 15:25:00 +0000</pubDate><atom:updated>2025-11-11T12:10:19.734-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Artigo - Tecnologia</category><category domain="http://www.blogger.com/atom/ns#">Review</category><title>Como encontrar cupom de desconto automaticamente 2025</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSidKJ-7sCxgjmh30ffUnnhdk0SG2jHr7LzgrZPMKuAK5iDSyUkKQ1OEVQNq9B6rBzgOoyatVCq2s6Jks6wirKs0atz60MZde1XJhsDd1PBxqj01846a13P_vWK_a5ysnGehsWIBYDapcrGGTlPdUwIggCIVqISggBFanPoawXyUCm6s1ZDhdFl1-5vq0v/s1382/cuponomia_teste_cupons.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;657&quot; data-original-width=&quot;1382&quot; height=&quot;152&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSidKJ-7sCxgjmh30ffUnnhdk0SG2jHr7LzgrZPMKuAK5iDSyUkKQ1OEVQNq9B6rBzgOoyatVCq2s6Jks6wirKs0atz60MZde1XJhsDd1PBxqj01846a13P_vWK_a5ysnGehsWIBYDapcrGGTlPdUwIggCIVqISggBFanPoawXyUCm6s1ZDhdFl1-5vq0v/s320/cuponomia_teste_cupons.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Existem extensões para navegador que auxiliam os usuários a economizar em compras online. Instalando essas extensões ao acessar o carrinho de compra elas testam cupons automaticamente para você aplicar um bom desconto na sua compra.&lt;/p&gt;&lt;p&gt;Abaixo vamos listar as extensões que já testamos e realmente funcionam para encontrar cupons de descontos funcionando.&lt;/p&gt;&lt;p&gt;[Funcionando - Novembro 2025]&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;CUPONOMIA - &lt;a href=&quot;https://abre.ai/cpnlt&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;adicionar ao Chrome&lt;/a&gt;&amp;nbsp;(necessário cadastrar pois também tem &lt;b&gt;cashback&lt;/b&gt;)&lt;/li&gt;&lt;li&gt;ADRENALINE - &lt;a href=&quot;https://chromewebstore.google.com/detail/economize-adrenaline/bgkhpibkldkmjjpikipeklkbdamlknnc&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;adicionar ao Chrome&lt;/a&gt;&amp;nbsp;(sem cadastro)&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;Como usar? Após instalar a extensão e adicionar um produto no carrinho de compra, a extensão irá perguntar se deseja testar cupons. Aceite e aguarde o teste.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Caso não apareça a opção para testar, provavelmente a extensão não tem cupons para o site desejado.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Procurando mais ofertas? Acesse nossa página de ofertas &lt;a href=&quot;https://www.limontec.com/p/ofertas.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;clicando aqui&lt;/a&gt;.&lt;/div&gt;&lt;p&gt;&lt;/p&gt;</description><link>http://www.limontec.com/2025/06/como-encontrar-cupom-de-desconto.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSidKJ-7sCxgjmh30ffUnnhdk0SG2jHr7LzgrZPMKuAK5iDSyUkKQ1OEVQNq9B6rBzgOoyatVCq2s6Jks6wirKs0atz60MZde1XJhsDd1PBxqj01846a13P_vWK_a5ysnGehsWIBYDapcrGGTlPdUwIggCIVqISggBFanPoawXyUCm6s1ZDhdFl1-5vq0v/s72-c/cuponomia_teste_cupons.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2157924926610706248.post-3865885777729115413</guid><pubDate>Mon, 02 Jun 2025 11:00:00 +0000</pubDate><atom:updated>2025-06-02T08:00:00.117-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Artigo - Tecnologia</category><category domain="http://www.blogger.com/atom/ns#">root</category><title>Compartilhar arquivos Kali Linux com Windows via RDP</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjM2vc3DBEm2pufvFaUkb3VfvnHh8ma0uFJfXDHZll_lAn3nT71U0dPTrOredy7bMPtCOaaLRfQ1tOL0utHJ_QnASChTTR8FsSBJX1ZfIJbIfhiwNgh9NBvJHQ8V3A3k7UhZsPeek-EI5095lhYwmigoPyVGeXBKV2TZxsw3AI38EHAFlj-dpVsk9Je4rdZ/s748/kali_share_windows.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;370&quot; data-original-width=&quot;748&quot; height=&quot;158&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjM2vc3DBEm2pufvFaUkb3VfvnHh8ma0uFJfXDHZll_lAn3nT71U0dPTrOredy7bMPtCOaaLRfQ1tOL0utHJ_QnASChTTR8FsSBJX1ZfIJbIfhiwNgh9NBvJHQ8V3A3k7UhZsPeek-EI5095lhYwmigoPyVGeXBKV2TZxsw3AI38EHAFlj-dpVsk9Je4rdZ/s320/kali_share_windows.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Descubra como acessar uma máquina Windows via RDP e compartilhar uma pasta local da sua máquina Kali Linux com o Windows durante a sessão.&lt;/p&gt;&lt;p&gt;🛠️ Ferramenta usada:&lt;/p&gt;&lt;p&gt;xfreerdp — Cliente RDP de linha de comando para sistemas Linux.&lt;/p&gt;&lt;p&gt;✅ Comando exemplo:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[xfreerdp /u:user /p:password321 /cert:ignore /v:10.10.58.185 /drive:KaliShare,/root/Desktop]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;📝 Explicação dos parâmetros:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;/u:user — Nome de usuário da conta Windows.&lt;/li&gt;&lt;li&gt;/p:password321 — Senha do usuário.&lt;/li&gt;&lt;li&gt;/cert:ignore — Ignora a verificação de certificado (útil para conexões sem certificados válidos).&lt;/li&gt;&lt;li&gt;/v:10.10.58.185 — IP da máquina Windows que será acessada.&lt;/li&gt;&lt;li&gt;/drive:KaliShare,/root/Desktop — Compartilha a pasta /root/Desktop da máquina Linux com a máquina Windows, usando o nome KaliShare.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;📁 Como acessar a pasta compartilhada no Windows:&lt;/p&gt;&lt;p&gt;Durante a sessão RDP, abra o Explorador de Arquivos no Windows e vá até:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Este Computador (This PC) → Dispositivos e unidades → KaliShare&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Você verá a pasta /root/Desktop montada como uma unidade de rede.&lt;/p&gt;&lt;p&gt;⚠️ Observações importantes:&lt;/p&gt;&lt;p&gt;Certifique-se de que o diretório /root/Desktop exista e tenha permissões de leitura. Pode ser necessário rodar o comando como root (usando sudo) para acesso à pasta do root:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[sudo xfreerdp /u:user /p:password321 /cert:ignore /v:10.10.58.185 /drive:KaliShare,/root/Desktop]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;O Windows pode demorar alguns segundos para montar a unidade compartilhada.&lt;/p&gt;</description><link>http://www.limontec.com/2025/05/kali-linux-windows-rdp-share.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjM2vc3DBEm2pufvFaUkb3VfvnHh8ma0uFJfXDHZll_lAn3nT71U0dPTrOredy7bMPtCOaaLRfQ1tOL0utHJ_QnASChTTR8FsSBJX1ZfIJbIfhiwNgh9NBvJHQ8V3A3k7UhZsPeek-EI5095lhYwmigoPyVGeXBKV2TZxsw3AI38EHAFlj-dpVsk9Je4rdZ/s72-c/kali_share_windows.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2157924926610706248.post-1166871681476454147</guid><pubDate>Mon, 26 May 2025 11:00:00 +0000</pubDate><atom:updated>2025-05-26T08:00:00.121-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Artigo - Tecnologia</category><category domain="http://www.blogger.com/atom/ns#">root</category><title>Como Instalar duas versão do Python no Linux</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgz9nIIj_0wrmxOVuZWLzgmCoN1-b-i4hjwXfHjpyRqhOqM-wyuMJs0btzUdmVsUEYoaD8uoRnGteB-9GpsxpJ-VuZIqDCidodSBgXPWzphPJAhbs88IY6tPYGkYcfhSFC2hyphenhyphenAShNX-efNG8mWCH7lK0alH1GPCHv8fo7Jyu9CfXhT32HuWsoRj4ceNWDIy/s1011/python_ubuntu_snakes.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;598&quot; data-original-width=&quot;1011&quot; height=&quot;189&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgz9nIIj_0wrmxOVuZWLzgmCoN1-b-i4hjwXfHjpyRqhOqM-wyuMJs0btzUdmVsUEYoaD8uoRnGteB-9GpsxpJ-VuZIqDCidodSBgXPWzphPJAhbs88IY6tPYGkYcfhSFC2hyphenhyphenAShNX-efNG8mWCH7lK0alH1GPCHv8fo7Jyu9CfXhT32HuWsoRj4ceNWDIy/s320/python_ubuntu_snakes.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Neste tutorial você aprenderá o processo de instalação de uma versão específica do Python (neste exemplo, Python 3.10) em sistemas Linux. Usaremos o PPA deadsnakes, que oferece pacotes antigos do Python.&lt;/p&gt;&lt;p data-sourcepos=&quot;9:1-9:19&quot;&gt;&lt;strong&gt;Pré-requisitos:&lt;/strong&gt;&lt;/p&gt;&lt;ul data-sourcepos=&quot;11:1-14:0&quot;&gt;
&lt;li data-sourcepos=&quot;11:1-11:42&quot;&gt;Um sistema operacional Linux, nesse caso Ubuntu.&lt;/li&gt;
&lt;li data-sourcepos=&quot;12:1-12:36&quot;&gt;Acesso a um terminal (Ctrl+Alt+T).&lt;/li&gt;
&lt;li data-sourcepos=&quot;13:1-14:0&quot;&gt;Permissões de &lt;code&gt;sudo&lt;/code&gt; (administrador).&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;h3 data-sourcepos=&quot;17:1-17:41&quot;&gt;Passo 1: Adicionar o PPA &lt;code&gt;deadsnakes&lt;/code&gt;&lt;/h3&gt;&lt;p data-sourcepos=&quot;19:1-19:113&quot;&gt;O PPA &lt;code&gt;deadsnakes&lt;/code&gt; contém diversas versões do Python que não estão disponíveis nos repositórios padrão do Ubuntu.&lt;/p&gt;&lt;ol data-sourcepos=&quot;21:1-28:0&quot;&gt;
&lt;li data-sourcepos=&quot;21:1-28:0&quot;&gt;
&lt;p data-sourcepos=&quot;21:5-21:62&quot;&gt;Abra seu terminal e adicione o PPA com o seguinte comando:&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;blockquote&gt;[sudo add-apt-repository ppa:deadsnakes/ppa]&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Você será solicitado a pressionar &lt;code&gt;Enter&lt;/code&gt; para confirmar a adição do PPA.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3 data-sourcepos=&quot;29:1-29:41&quot;&gt;Passo 2: Atualizar a Lista de Pacotes&lt;/h3&gt;&lt;p data-sourcepos=&quot;31:1-31:134&quot;&gt;Após adicionar o novo repositório, é crucial atualizar a lista de pacotes para que seu sistema reconheça os novos pacotes disponíveis.&lt;/p&gt;&lt;ol data-sourcepos=&quot;33:1-38:0&quot;&gt;
&lt;li data-sourcepos=&quot;33:1-38:0&quot;&gt;
&lt;p data-sourcepos=&quot;33:5-33:31&quot;&gt;Execute o seguinte comando:&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;blockquote&gt;[sudo apt-get update]&lt;/blockquote&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3 data-sourcepos=&quot;39:1-39:51&quot;&gt;Passo 3: Instalar a Versão Específica do Python&lt;/h3&gt;&lt;p data-sourcepos=&quot;41:1-41:221&quot;&gt;Agora você pode instalar a versão específica do Python que deseja. Neste exemplo, instalaremos o Python 3.10, junto com os pacotes &lt;code&gt;venv&lt;/code&gt; (para ambientes virtuais) e &lt;code&gt;dev&lt;/code&gt; (necessário para compilar certos módulos Python).&lt;/p&gt;&lt;ol data-sourcepos=&quot;43:1-50:0&quot;&gt;
&lt;li data-sourcepos=&quot;43:1-50:0&quot;&gt;
&lt;p data-sourcepos=&quot;43:5-43:36&quot;&gt;Execute o comando de instalação:&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;blockquote&gt;[sudo apt install python3.10 python3.10-venv python3.10-dev]&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Se for solicitada a confirmação, digite &lt;code&gt;S&lt;/code&gt; ou &lt;code&gt;Y&lt;/code&gt; e pressione &lt;code&gt;Enter&lt;/code&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;h3 data-sourcepos=&quot;51:1-51:63&quot;&gt;Passo 4: Verificar a Instalação (Opcional, mas Recomendado)&lt;/h3&gt;&lt;p data-sourcepos=&quot;53:1-53:96&quot;&gt;Após a instalação, é uma boa prática verificar se a versão do Python foi instalada corretamente.&lt;/p&gt;&lt;ol data-sourcepos=&quot;55:1-62:0&quot;&gt;
&lt;li data-sourcepos=&quot;55:1-62:0&quot;&gt;
&lt;p data-sourcepos=&quot;55:5-55:53&quot;&gt;Você pode verificar a versão instalada digitando:&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;blockquote&gt;[python3.10 --version]&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A saída esperada deve ser &lt;code&gt;Python 3.10.x&lt;/code&gt; (onde &lt;code&gt;x&lt;/code&gt; é a versão de patch).&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;h3 data-sourcepos=&quot;63:1-63:58&quot;&gt;Passo 5: Gerenciar Versões do Python (Dica Importante)&lt;/h3&gt;&lt;p data-sourcepos=&quot;65:1-65:264&quot;&gt;É importante notar que instalar uma nova versão do Python dessa forma não a torna a versão &quot;padrão&quot; do sistema (ou seja, quando você digita &lt;code&gt;python3&lt;/code&gt;). O Python padrão do sistema é mantido para garantir a compatibilidade com scripts do próprio sistema operacional.&lt;/p&gt;&lt;p data-sourcepos=&quot;67:1-67:48&quot;&gt;&lt;strong&gt;Recomendação: Usar Ambientes Virtuais (venv)&lt;/strong&gt;&lt;/p&gt;&lt;p data-sourcepos=&quot;69:1-69:208&quot;&gt;Para projetos específicos, é &lt;strong&gt;altamente recomendado&lt;/strong&gt; usar ambientes virtuais. Isso permite que você use a versão do Python desejada sem interferir com a instalação padrão do sistema.&lt;/p&gt;&lt;p data-sourcepos=&quot;71:1-71:30&quot;&gt;&lt;strong&gt;Exemplo de uso com &lt;code&gt;venv&lt;/code&gt;:&lt;/strong&gt;&lt;/p&gt;&lt;ol data-sourcepos=&quot;73:1-106:0&quot;&gt;
&lt;li data-sourcepos=&quot;73:1-79:0&quot;&gt;
&lt;p data-sourcepos=&quot;73:5-73:39&quot;&gt;Acesse o diretório de seu projeto:&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;[cd&lt;/span&gt; meu_projeto_python]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-sourcepos=&quot;80:1-85:0&quot;&gt;
&lt;p data-sourcepos=&quot;80:5-80:66&quot;&gt;Crie um ambiente virtual usando a versão específica do Python:&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;[python3.10 -m venv .venv]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-sourcepos=&quot;86:1-93:0&quot;&gt;
&lt;p data-sourcepos=&quot;86:5-86:29&quot;&gt;Ative o ambiente virtual:&lt;br /&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;[source&lt;/span&gt; .venv/bin/activate]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
&lt;p data-sourcepos=&quot;92:5-92:154&quot;&gt;Você notará que o prompt do seu terminal mudará para indicar que você está dentro do ambiente virtual (ex: &lt;code&gt;(.venv) user@host:~/meu_projeto_python$&lt;/code&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li data-sourcepos=&quot;94:1-100:0&quot;&gt;
&lt;p data-sourcepos=&quot;94:5-94:143&quot;&gt;Dentro do ambiente virtual, &lt;code&gt;python&lt;/code&gt; e &lt;code&gt;pip&lt;/code&gt; se referirão à versão do Python que você usou para criar o ambiente (neste caso, Python 3.10).&lt;/p&gt;
&lt;response-element ng-version=&quot;0.0.0-PLACEHOLDER&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;code-block _nghost-ng-c2780030781=&quot;&quot; class=&quot;ng-tns-c2780030781-79 ng-star-inserted&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;div _ngcontent-ng-c2780030781=&quot;&quot; class=&quot;code-block ng-tns-c2780030781-79 ng-trigger ng-trigger-codeBlockRevealAnimation&quot; jslog=&quot;223238;track:impression;BardVeMetadataKey:[[&amp;quot;r_4920dac28a35abad&amp;quot;,&amp;quot;c_a25980e81534bc07&amp;quot;,null,&amp;quot;rc_f52e6b62b042afbb&amp;quot;,null,null,&amp;quot;pt&amp;quot;,null,null,null,null,1,0]]&quot;&gt;&lt;div _ngcontent-ng-c2780030781=&quot;&quot; class=&quot;code-block-decoration header-formatted gds-title-s ng-tns-c2780030781-79 ng-star-inserted&quot;&gt;&lt;blockquote&gt;[python --version]&lt;/blockquote&gt;&lt;blockquote&gt;[pip --version]&lt;/blockquote&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code-block&gt;&lt;/response-element&gt;&lt;/li&gt;
&lt;li data-sourcepos=&quot;101:1-106:0&quot;&gt;
&lt;p data-sourcepos=&quot;101:5-101:34&quot;&gt;Para sair do ambiente virtual:&lt;/p&gt;
&lt;response-element ng-version=&quot;0.0.0-PLACEHOLDER&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;code-block _nghost-ng-c2780030781=&quot;&quot; class=&quot;ng-tns-c2780030781-80 ng-star-inserted&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;div _ngcontent-ng-c2780030781=&quot;&quot; class=&quot;code-block ng-tns-c2780030781-80 ng-trigger ng-trigger-codeBlockRevealAnimation&quot; jslog=&quot;223238;track:impression;BardVeMetadataKey:[[&amp;quot;r_4920dac28a35abad&amp;quot;,&amp;quot;c_a25980e81534bc07&amp;quot;,null,&amp;quot;rc_f52e6b62b042afbb&amp;quot;,null,null,&amp;quot;pt&amp;quot;,null,null,null,null,1,0]]&quot;&gt;&lt;div _ngcontent-ng-c2780030781=&quot;&quot; class=&quot;code-block-decoration header-formatted gds-title-s ng-tns-c2780030781-80 ng-star-inserted&quot;&gt;&lt;blockquote&gt;[deactivate]&lt;/blockquote&gt;&lt;/div&gt;&lt;/div&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/code-block&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;!----&gt;&lt;/response-element&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;p data-sourcepos=&quot;109:1-109:168&quot;&gt;Com este tutorial, você pode instalar e gerenciar facilmente versões específicas do Python em seu sistema, garantindo um ambiente de desenvolvimento limpo e organizado.&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;h3 data-sourcepos=&quot;29:1-29:41&quot;&gt;&lt;/h3&gt;&lt;/div&gt;</description><link>http://www.limontec.com/2025/05/como-instalar-duas-versao-do-python.html</link><author>noreply@blogger.com (Unknown)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgz9nIIj_0wrmxOVuZWLzgmCoN1-b-i4hjwXfHjpyRqhOqM-wyuMJs0btzUdmVsUEYoaD8uoRnGteB-9GpsxpJ-VuZIqDCidodSBgXPWzphPJAhbs88IY6tPYGkYcfhSFC2hyphenhyphenAShNX-efNG8mWCH7lK0alH1GPCHv8fo7Jyu9CfXhT32HuWsoRj4ceNWDIy/s72-c/python_ubuntu_snakes.png" height="72" width="72"/></item></channel></rss>