<?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, 03 May 2026 12:31:24 +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>Teoria</category><category>IA</category><category>estudo</category><category>autor-thomaz</category><category>Programar POO</category><category>Programar Python</category><category>Review</category><category>cftv</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>1356</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><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-02-08T17:48:11.051-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; imageanchor=&quot;1&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 engana o Windows enviando 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>2025-07-09T09:53:55.904-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;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 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;p data-end=&quot;467&quot; data-start=&quot;204&quot;&gt;O &lt;strong data-end=&quot;234&quot; data-start=&quot;206&quot;&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, moto... sem a necessidade de GPS e internet embutido.&lt;/p&gt;&lt;p data-end=&quot;634&quot; data-start=&quot;469&quot;&gt;Compatível com a rede &lt;strong data-end=&quot;509&quot; data-start=&quot;491&quot;&gt;Google Find My&lt;/strong&gt; (atualmente chamada &lt;strong data-end=&quot;549&quot; data-start=&quot;530&quot;&gt;Google Find Hub&lt;/strong&gt;), esta tag oferece localização global eficiente exclusivamente para dispositivos &lt;strong data-end=&quot;633&quot; data-start=&quot;622&quot;&gt;Android&lt;/strong&gt;.&amp;nbsp;&lt;/p&gt;&lt;p data-end=&quot;634&quot; data-start=&quot;469&quot;&gt;Testamos abaixo a versão HD-P16 Black.&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/AVvXsEiu08ONPUpkqbomZxFTdPjXvGrXJUvQZyS7RD0VMJXo-9ygARS7yyJRXgHNqhIoZqhMw45YAEuSnSyc4IxbIUq1eCj5YS6AHVl1BTUOEgP41VleniiIG8zAC4SlkVQjehQAhXwn9idDpQ-iA3iRspgslKU0j8dV6Lhmg5i0ld6x7TcLtNncKZD0z3JdcuyX/s1504/mitag_screen_find_hub.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;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 data-end=&quot;639&quot; data-start=&quot;636&quot; /&gt;&lt;h3 data-end=&quot;672&quot; data-start=&quot;641&quot;&gt;🟢 &lt;strong data-end=&quot;672&quot; data-start=&quot;648&quot;&gt;Destaques do Produto&lt;/strong&gt;&lt;/h3&gt;&lt;ul data-end=&quot;1193&quot; data-start=&quot;674&quot;&gt;
&lt;li data-end=&quot;792&quot; data-start=&quot;674&quot;&gt;
&lt;p data-end=&quot;792&quot; data-start=&quot;676&quot;&gt;✅ &lt;strong data-end=&quot;722&quot; data-start=&quot;678&quot;&gt;Integração com o Google Find Hub&lt;/strong&gt;: Rastreie seus objetos diretamente pelo app de localização do Google.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;874&quot; data-start=&quot;793&quot;&gt;
&lt;p data-end=&quot;874&quot; data-start=&quot;795&quot;&gt;🌍 &lt;strong data-end=&quot;821&quot; data-start=&quot;798&quot;&gt;Rastreamento global&lt;/strong&gt;: Ideal para uso em viagens ou deslocamentos diários.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;947&quot; data-start=&quot;875&quot;&gt;
&lt;p data-end=&quot;947&quot; data-start=&quot;877&quot;&gt;🔋 &lt;strong data-end=&quot;913&quot; data-start=&quot;880&quot;&gt;Bateria substituível (CR2032)&lt;/strong&gt;: Longa duração e fácil reposição.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1020&quot; data-start=&quot;948&quot;&gt;
&lt;p data-end=&quot;1020&quot; data-start=&quot;950&quot;&gt;💦 &lt;strong data-end=&quot;990&quot; data-start=&quot;953&quot;&gt;IP65 – Resistente à água e poeira&lt;/strong&gt;: Seguro para uso ao ar livre.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1109&quot; data-start=&quot;1021&quot;&gt;
&lt;p data-end=&quot;1109&quot; data-start=&quot;1023&quot;&gt;🔐 &lt;strong data-end=&quot;1051&quot; data-start=&quot;1026&quot;&gt;Privacidade garantida&lt;/strong&gt;: Dados criptografados e protegidos pela sua conta Google.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1193&quot; data-start=&quot;1110&quot;&gt;
&lt;p data-end=&quot;1193&quot; data-start=&quot;1112&quot;&gt;🔊 &lt;strong data-end=&quot;1132&quot; data-start=&quot;1115&quot;&gt;Alerta sonoro&lt;/strong&gt;: Emite som remotamente para facilitar a localização do item.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;p data-end=&quot;1376&quot; data-start=&quot;1195&quot;&gt;Segundo o anúncio, possui alcance de até &lt;strong data-end=&quot;1247&quot; data-start=&quot;1214&quot;&gt;120 metros em ambiente aberto&lt;/strong&gt;, construção em material resistente (&lt;strong data-end=&quot;1294&quot; data-start=&quot;1284&quot;&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 data-end=&quot;1381&quot; data-start=&quot;1378&quot; /&gt;&lt;h3 data-end=&quot;1413&quot; data-start=&quot;1383&quot;&gt;🔻 &lt;strong data-end=&quot;1413&quot; data-start=&quot;1390&quot;&gt;Pontos a Considerar&lt;/strong&gt;&lt;/h3&gt;&lt;ul data-end=&quot;2090&quot; data-start=&quot;1415&quot;&gt;
&lt;li data-end=&quot;1798&quot; data-start=&quot;1415&quot;&gt;
&lt;p data-end=&quot;1798&quot; data-start=&quot;1417&quot;&gt;📡 &lt;strong data-end=&quot;1468&quot; data-start=&quot;1420&quot;&gt;Limitação de rastreamento em locais isolados&lt;/strong&gt;: Por padrão, dispositivos Android &lt;strong data-end=&quot;1573&quot; data-start=&quot;1503&quot;&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 data-end=&quot;1639&quot; data-start=&quot;1636&quot; /&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;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;2001&quot; data-start=&quot;1800&quot;&gt;
&lt;p data-end=&quot;2001&quot; data-start=&quot;1802&quot;&gt;📱 &lt;strong data-end=&quot;1838&quot; data-start=&quot;1805&quot;&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;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;2090&quot; data-start=&quot;2003&quot;&gt;
&lt;p data-end=&quot;2090&quot; data-start=&quot;2005&quot;&gt;🚫 &lt;strong data-end=&quot;2035&quot; data-start=&quot;2008&quot;&gt;Sem suporte para Huawei&lt;/strong&gt;: O MiTag &lt;strong data-end=&quot;2089&quot; data-start=&quot;2045&quot;&gt;não é compatível com aparelhos da Huawei&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;hr data-end=&quot;2095&quot; data-start=&quot;2092&quot; /&gt;&lt;h3 data-end=&quot;2117&quot; data-start=&quot;2097&quot;&gt;📲 &lt;strong data-end=&quot;2117&quot; data-start=&quot;2104&quot;&gt;Como Usar&lt;/strong&gt;&lt;/h3&gt;&lt;ol data-end=&quot;2810&quot; data-start=&quot;2119&quot;&gt;
&lt;li data-end=&quot;2176&quot; data-start=&quot;2119&quot;&gt;
&lt;p data-end=&quot;2176&quot; data-start=&quot;2122&quot;&gt;Verifique se seu Android está na versão 9 ou superior.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;2236&quot; data-start=&quot;2177&quot;&gt;
&lt;p data-end=&quot;2236&quot; data-start=&quot;2180&quot;&gt;Baixe o app &lt;strong data-end=&quot;2235&quot; data-start=&quot;2192&quot;&gt;Google Find Hub (Localizador do Google)&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;2287&quot; data-start=&quot;2237&quot;&gt;
&lt;p data-end=&quot;2287&quot; data-start=&quot;2240&quot;&gt;Ative &lt;strong data-end=&quot;2259&quot; data-start=&quot;2246&quot;&gt;Bluetooth&lt;/strong&gt; e &lt;strong data-end=&quot;2271&quot; data-start=&quot;2262&quot;&gt;Wi-Fi&lt;/strong&gt; no seu celular.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;2356&quot; data-start=&quot;2288&quot;&gt;
&lt;p data-end=&quot;2356&quot; data-start=&quot;2291&quot;&gt;Ligue a MiTag pressionando uma vez no centro até ouvir um &lt;em data-end=&quot;2355&quot; data-start=&quot;2349&quot;&gt;beep&lt;/em&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;2699&quot; data-start=&quot;2357&quot;&gt;
&lt;p data-end=&quot;2430&quot; data-start=&quot;2360&quot;&gt;Quando a tag aparecer na tela, toque em &quot;Conectar&quot; e aceite os termos.&lt;/p&gt;
&lt;ul data-end=&quot;2699&quot; data-start=&quot;2434&quot;&gt;
&lt;li data-end=&quot;2537&quot; data-start=&quot;2434&quot;&gt;
&lt;p data-end=&quot;2537&quot; data-start=&quot;2436&quot;&gt;⚠️ Esse processo precisa ser concluído em até &lt;strong data-end=&quot;2495&quot; data-start=&quot;2482&quot;&gt;3 minutos&lt;/strong&gt;, ou a tag será desligada automaticamente.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;2699&quot; data-start=&quot;2541&quot;&gt;
&lt;p data-end=&quot;2699&quot; data-start=&quot;2543&quot;&gt;Se a mensagem não aparecer, &lt;strong data-end=&quot;2593&quot; data-start=&quot;2571&quot;&gt;reinicie o celular&lt;/strong&gt; e &lt;strong data-end=&quot;2629&quot; data-start=&quot;2596&quot;&gt;segure a MiTag por 5 segundos&lt;/strong&gt; para desligá-la (dois beeps serão emitidos). Depois, tente novamente.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;2810&quot; data-start=&quot;2701&quot;&gt;
&lt;p data-end=&quot;2810&quot; data-start=&quot;2704&quot;&gt;Após conectar, abra o app Localizador do Google, selecione a MiTag, escolha um nome e a categoria do item.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;p data-end=&quot;2877&quot; data-start=&quot;2812&quot;&gt;✅ Pronto! Agora você pode localizar o objeto sempre que precisar.&lt;/p&gt;&lt;p data-end=&quot;2877&quot; data-start=&quot;2812&quot;&gt;Dica extra: Você pode compartilhar a tag com outras 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 data-end=&quot;2882&quot; data-start=&quot;2879&quot; /&gt;&lt;h3 data-end=&quot;2939&quot; data-start=&quot;2884&quot;&gt;🔄 &lt;strong data-end=&quot;2939&quot; data-start=&quot;2891&quot;&gt;Como resetar e vincular a outra conta Google&lt;/strong&gt;&lt;/h3&gt;&lt;p data-end=&quot;2982&quot; data-start=&quot;2941&quot;&gt;Para transferir a MiTag para outra conta:&lt;/p&gt;&lt;ol data-end=&quot;3187&quot; data-start=&quot;2983&quot;&gt;
&lt;li data-end=&quot;3046&quot; data-start=&quot;2983&quot;&gt;
&lt;p data-end=&quot;3046&quot; data-start=&quot;2986&quot;&gt;Com a tag ligada, &lt;strong data-end=&quot;3036&quot; data-start=&quot;3004&quot;&gt;remova-a da sua conta Google&lt;/strong&gt; pelo app.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;3138&quot; data-start=&quot;3047&quot;&gt;
&lt;p data-end=&quot;3138&quot; data-start=&quot;3050&quot;&gt;Pressione o centro da MiTag &lt;strong data-end=&quot;3101&quot; data-start=&quot;3078&quot;&gt;6 vezes rapidamente&lt;/strong&gt;. Um &lt;em data-end=&quot;3118&quot; data-start=&quot;3106&quot;&gt;beep longo&lt;/em&gt; confirmará o reset.&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;3187&quot; data-start=&quot;3139&quot;&gt;
&lt;p data-end=&quot;3187&quot; data-start=&quot;3142&quot;&gt;Agora ela poderá ser pareada com outra conta.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;hr data-end=&quot;3192&quot; data-start=&quot;3189&quot; /&gt;&lt;h3 data-end=&quot;3219&quot; data-start=&quot;3194&quot;&gt;🧾 &lt;strong data-end=&quot;3219&quot; data-start=&quot;3201&quot;&gt;Veredito Final&lt;/strong&gt;&lt;/h3&gt;&lt;p data-end=&quot;3384&quot; data-start=&quot;3221&quot;&gt;Se você é usuário Android e está em busca de um &lt;strong data-end=&quot;3339&quot; data-start=&quot;3269&quot;&gt;rastreador confiável, leve, resistente e com ótimo custo-benefício&lt;/strong&gt;, o &lt;strong data-end=&quot;3357&quot; data-start=&quot;3343&quot;&gt;MiLi MiTag&lt;/strong&gt; é uma excelente escolha.&lt;/p&gt;&lt;p&gt;



















&lt;/p&gt;&lt;p data-end=&quot;3525&quot; data-start=&quot;3386&quot;&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 data-end=&quot;3525&quot; data-start=&quot;3430&quot;&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;</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><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2157924926610706248.post-962352116052278648</guid><pubDate>Tue, 13 May 2025 23:00:00 +0000</pubDate><atom:updated>2025-05-16T08:54:36.824-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>Tutorial compilar e usar Deep Live Cam no Windows</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/AVvXsEh_wFQ88MguhgVDs4l0OB51kqwB2Lzchcf-Oh-fFfD49lWQERqlOoNafNswc7YSPvj9Dix5-3zdBglOrISEU6qExAz9yAl4vjA7Z8HLOGQBx2CsZZt7qrDxyBCtIqu68fw_Vm8OP9YkBFtdQIMI-ynoYFWT0K2tLVrjKEzZtr36QrrK6bpgOQwkD3q5w9Cv/s825/deep-live-cam-github-edition-intro.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;411&quot; data-original-width=&quot;825&quot; height=&quot;159&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_wFQ88MguhgVDs4l0OB51kqwB2Lzchcf-Oh-fFfD49lWQERqlOoNafNswc7YSPvj9Dix5-3zdBglOrISEU6qExAz9yAl4vjA7Z8HLOGQBx2CsZZt7qrDxyBCtIqu68fw_Vm8OP9YkBFtdQIMI-ynoYFWT0K2tLVrjKEzZtr36QrrK6bpgOQwkD3q5w9Cv/s320/deep-live-cam-github-edition-intro.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Este tutorial irá guiá-lo passo a passo na configuração do ambiente necessário para executar o Deep-Live-Cam de graça no seu computador com Windows com suporte a CPU ou GPU. Em 2018 publicamos um &lt;a href=&quot;https://www.limontec.com/2018/02/deepfakes-criando-videos-porn-falsos.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;tutorial sobre deep fake&lt;/a&gt;, de lá para cá a tecnologia evoluiu permitindo você fazer a troca de rosto em tempo real e com custo computacional menor. Siga as instruções abaixo para realizar o procedimento em seu computador.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 data-sourcepos=&quot;5:1-5:37&quot;&gt;Passo 1: Instalando o Python 3.10&lt;/h3&gt;&lt;p data-sourcepos=&quot;7:1-7:100&quot;&gt;O Deep-Live-Cam requer o Python 3.10 para funcionar corretamente. Siga estas etapas para instalá-lo:&lt;/p&gt;&lt;ol data-sourcepos=&quot;9:1-16:0&quot;&gt;
&lt;li data-sourcepos=&quot;9:1-9:173&quot;&gt;&lt;strong&gt;Acesse o site do Python:&lt;/strong&gt; Abra seu navegador e vá para &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;!----&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;link-block class=&quot;ng-star-inserted&quot;&gt;&lt;!----&gt;&lt;a _nghost-ng-c672049950=&quot;&quot; class=&quot;ng-star-inserted&quot; externallink=&quot;&quot; href=&quot;https://www.python.org/downloads/release/python-3100/&quot; jslog=&quot;197247;track:generic_click,impression;BardVeMetadataKey:[[&amp;quot;r_1521e9b1717df4c6&amp;quot;,&amp;quot;c_e3491d92e8bde071&amp;quot;,null,&amp;quot;rc_19686cccfad21ef7&amp;quot;,null,null,&amp;quot;pt&amp;quot;,null,1,null,null,1,0]]&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://www.python.org/downloads/release/python-3100/&lt;/a&gt;&lt;!----&gt;&lt;/link-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;/response-element&gt;.&lt;/li&gt;
&lt;li data-sourcepos=&quot;10:1-10:160&quot;&gt;&lt;strong&gt;Baixe o instalador:&lt;/strong&gt; Localize e clique no link para baixar a versão executável do Python 3.10 para Windows.&lt;/li&gt;
&lt;li data-sourcepos=&quot;11:1-11:88&quot;&gt;&lt;strong&gt;Execute o instalador:&lt;/strong&gt; Após o download, execute o arquivo &lt;code&gt;.exe&lt;/code&gt; que você baixou.&lt;/li&gt;
&lt;li data-sourcepos=&quot;12:1-14:65&quot;&gt;&lt;strong&gt;Marque as opções importantes:&lt;/strong&gt; Durante o processo de instalação, &lt;strong&gt;certifique-se de marcar as seguintes opções:&lt;/strong&gt;
&lt;ul data-sourcepos=&quot;13:5-14:65&quot;&gt;
&lt;li data-sourcepos=&quot;13:5-13:65&quot;&gt;&lt;strong&gt;Install for all users&lt;/strong&gt; (Instalar para todos os usuários)&lt;/li&gt;
&lt;li data-sourcepos=&quot;14:5-14:65&quot;&gt;&lt;strong&gt;Add Python 3.10 to PATH&lt;/strong&gt; (Adicionar Python 3.10 ao PATH)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-sourcepos=&quot;15:1-16:0&quot;&gt;&lt;strong&gt;Prossiga com a instalação:&lt;/strong&gt; Clique em &quot;Install Now&quot; e siga as instruções na tela para concluir a instalação. Certifique-se de que a opção &quot;Add to PATH&quot; esteja selecionada. O caminho de instalação padrão é: &lt;code&gt;C:\Users\usuario\AppData\Local\Programs\Python\Python310&lt;/code&gt;.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;h3 data-sourcepos=&quot;17:1-17:47&quot;&gt;Passo 2: Verificando a Instalação do Python&lt;/h3&gt;&lt;p data-sourcepos=&quot;19:1-19:107&quot;&gt;Após a instalação, é importante verificar se o Python 3.10 foi instalado corretamente e adicionado ao PATH.&lt;/p&gt;&lt;ol data-sourcepos=&quot;21:1-34:0&quot;&gt;
&lt;li data-sourcepos=&quot;21:1-21:129&quot;&gt;&lt;strong&gt;Abra o Terminal:&lt;/strong&gt; Pressione a tecla Windows, digite &lt;code&gt;cmd&lt;/code&gt; ou &lt;code&gt;PowerShell&lt;/code&gt; e pressione Enter para abrir a linha de comando.&lt;/li&gt;
&lt;li data-sourcepos=&quot;22:1-25:7&quot;&gt;&lt;strong&gt;Verifique a versão:&lt;/strong&gt; No terminal, digite o seguinte comando e pressione Enter:&lt;br /&gt;&lt;blockquote&gt;[python --version]&lt;/blockquote&gt;&lt;/li&gt;
&lt;li data-sourcepos=&quot;26:1-30:84&quot;&gt;&lt;strong&gt;Resultado esperado:&lt;/strong&gt; Se a instalação foi bem-sucedida, você deverá ver uma saída semelhante a:&lt;br /&gt;&lt;blockquote&gt;[Python 3.10.x]&lt;/blockquote&gt;
O &quot;x&quot; representa o número da versão específica do Python 3.10 que você instalou.&lt;/li&gt;
&lt;li data-sourcepos=&quot;31:1-34:0&quot;&gt;&lt;strong&gt;Em caso de erro:&lt;/strong&gt; Se você não vir a versão correta (ou nenhuma versão for exibida), siga estas etapas:
&lt;/li&gt;&lt;ul data-sourcepos=&quot;32:5-34:0&quot;&gt;
&lt;li data-sourcepos=&quot;32:5-32:120&quot;&gt;&lt;strong&gt;Outras versões existentes:&lt;/strong&gt;&amp;nbsp;especifique a versão que quer usar, exemplo&lt;br /&gt;&lt;blockquote&gt;[py -3.10 --version]&lt;/blockquote&gt;&lt;/li&gt;
&lt;li data-sourcepos=&quot;33:5-34:0&quot;&gt;&lt;strong&gt;Reinstale o Python 3.10:&lt;/strong&gt; Repita o Passo 1, certificando-se de marcar as opções &quot;Install for all users&quot; e &quot;Add Python 3.10 to PATH&quot;.&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;div&gt;&lt;h3 data-sourcepos=&quot;35:1-35:32&quot;&gt;Passo 3: Instalando o FFmpeg&lt;/h3&gt;&lt;p data-sourcepos=&quot;37:1-37:143&quot;&gt;O FFmpeg é uma ferramenta essencial para o Deep-Live-Cam, pois lida com o processamento de vídeo. Siga estas etapas para instalá-lo no Windows:&lt;/p&gt;&lt;ol data-sourcepos=&quot;39:1-59:0&quot;&gt;
&lt;li data-sourcepos=&quot;39:1-39:131&quot;&gt;&lt;strong&gt;Acesse o site do FFmpeg:&lt;/strong&gt; Abra seu navegador e vá para &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;!----&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;link-block class=&quot;ng-star-inserted&quot;&gt;&lt;!----&gt;&lt;a _nghost-ng-c672049950=&quot;&quot; class=&quot;ng-star-inserted&quot; externallink=&quot;&quot; href=&quot;https://ffmpeg.org/download.html&quot; jslog=&quot;197247;track:generic_click,impression;BardVeMetadataKey:[[&amp;quot;r_1521e9b1717df4c6&amp;quot;,&amp;quot;c_e3491d92e8bde071&amp;quot;,null,&amp;quot;rc_19686cccfad21ef7&amp;quot;,null,null,&amp;quot;pt&amp;quot;,null,1,null,null,1,0]]&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;https://ffmpeg.org/download.html&lt;/a&gt;&lt;!----&gt;&lt;/link-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;/response-element&gt;.&lt;/li&gt;
&lt;li data-sourcepos=&quot;40:1-40:185&quot;&gt;&lt;strong&gt;Escolha a sua plataforma:&lt;/strong&gt; Na página de download, procure pela seção &quot;Get the packages&quot; e clique no ícone do Windows. Isso geralmente o levará a uma lista de builds de terceiros.&lt;/li&gt;
&lt;li data-sourcepos=&quot;41:1-41:248&quot;&gt;&lt;strong&gt;Selecione um build:&lt;/strong&gt; Uma opção popular é o build fornecido por &quot;gyan.dev&quot;. Procure por um link que contenha &quot;git&quot; e a arquitetura do seu sistema (geralmente &quot;win64&quot; para sistemas de 64 bits). Clique no link para acessar a página de download.&lt;/li&gt;
&lt;li data-sourcepos=&quot;42:1-42:206&quot;&gt;&lt;strong&gt;Baixe o arquivo zip:&lt;/strong&gt; Na página de gyan.dev, procure pela seção &quot;Latest stable builds&quot; ou similar e baixe o arquivo zip que contém os binários do FFmpeg (algo como &lt;code&gt;ffmpeg-git-xxxxxx-win64-gpl.zip&lt;/code&gt;).&lt;/li&gt;
&lt;li data-sourcepos=&quot;43:1-43:248&quot;&gt;&lt;strong&gt;Extraia os arquivos:&lt;/strong&gt; Após o download, extraia o conteúdo do arquivo zip para uma pasta de fácil acesso no seu computador. Por exemplo, você pode criar uma pasta chamada &lt;code&gt;FFmpeg&lt;/code&gt; no seu disco &lt;code&gt;C:&lt;/code&gt; e extrair os arquivos para lá (&lt;code&gt;C:\FFmpeg&lt;/code&gt;).&lt;/li&gt;
&lt;li data-sourcepos=&quot;44:1-53:93&quot;&gt;&lt;strong&gt;Adicione o FFmpeg ao PATH:&lt;/strong&gt; Para que o sistema reconheça os comandos do FFmpeg, você precisa adicionar a pasta &lt;code&gt;bin&lt;/code&gt; dentro da pasta extraída à variável de ambiente PATH do Windows. Siga estas etapas:
&lt;ul data-sourcepos=&quot;45:5-53:93&quot;&gt;
&lt;li data-sourcepos=&quot;45:5-45:110&quot;&gt;&lt;strong&gt;Abra o Painel de Controle:&lt;/strong&gt; Pressione a tecla Windows, digite &quot;Painel de Controle&quot; e pressione Enter.&lt;/li&gt;
&lt;li data-sourcepos=&quot;46:5-46:71&quot;&gt;&lt;strong&gt;Vá para Sistema e Segurança:&lt;/strong&gt; Clique em &quot;Sistema e Segurança&quot;.&lt;/li&gt;
&lt;li data-sourcepos=&quot;47:5-47:49&quot;&gt;&lt;strong&gt;Clique em Sistema:&lt;/strong&gt; Clique em &quot;Sistema&quot;.&lt;/li&gt;
&lt;li data-sourcepos=&quot;48:5-48:123&quot;&gt;&lt;strong&gt;Clique em Configurações avançadas do sistema:&lt;/strong&gt; No menu à esquerda, clique em &quot;Configurações avançadas do sistema&quot;.&lt;/li&gt;
&lt;li data-sourcepos=&quot;49:5-49:123&quot;&gt;&lt;strong&gt;Clique em Variáveis de Ambiente:&lt;/strong&gt; Na janela &quot;Propriedades do Sistema&quot;, clique no botão &quot;Variáveis de Ambiente...&quot;.&lt;/li&gt;
&lt;li data-sourcepos=&quot;50:5-50:120&quot;&gt;&lt;strong&gt;Localize a variável &quot;Path&quot;:&lt;/strong&gt; Na seção &quot;Variáveis do Sistema&quot;, localize a variável chamada &quot;Path&quot; e selecione-a.&lt;/li&gt;
&lt;li data-sourcepos=&quot;51:5-51:56&quot;&gt;&lt;strong&gt;Clique em Editar:&lt;/strong&gt; Clique no botão &quot;Editar...&quot;.&lt;/li&gt;
&lt;li data-sourcepos=&quot;52:5-52:225&quot;&gt;&lt;strong&gt;Adicione o caminho do FFmpeg:&lt;/strong&gt; Na janela &quot;Editar variável de ambiente&quot;, clique em &quot;Novo&quot; e adicione o caminho completo para a pasta &lt;code&gt;bin&lt;/code&gt; dentro da pasta onde você extraiu o FFmpeg. No exemplo, seria &lt;code&gt;C:\FFmpeg\bin&lt;/code&gt;.&lt;/li&gt;
&lt;li data-sourcepos=&quot;53:5-53:93&quot;&gt;&lt;strong&gt;Clique em OK:&lt;/strong&gt; Clique em &quot;OK&quot; em todas as janelas abertas para salvar as alterações.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-sourcepos=&quot;54:1-59:0&quot;&gt;&lt;strong&gt;Verifique a instalação do FFmpeg:&lt;/strong&gt; Abra um novo terminal (cmd ou PowerShell) e digite o seguinte comando:&lt;br /&gt;&lt;blockquote&gt;[ffmpeg -version]&lt;/blockquote&gt;
Se o FFmpeg estiver instalado corretamente, você verá informações sobre a versão do FFmpeg.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;h3 data-sourcepos=&quot;60:1-60:69&quot;&gt;Passo 4: Instalando as Ferramentas de Compilação do Microsoft C++&lt;/h3&gt;&lt;p data-sourcepos=&quot;62:1-62:97&quot;&gt;Algumas dependências do Deep-Live-Cam podem exigir as ferramentas de compilação do Microsoft C++.&lt;/p&gt;&lt;ol data-sourcepos=&quot;64:1-69:0&quot;&gt;
&lt;li data-sourcepos=&quot;64:1-64:202&quot;&gt;&lt;strong&gt;Acesse o site do Visual Studio:&lt;/strong&gt; Abra seu navegador e vá para &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;!----&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;link-block class=&quot;ng-star-inserted&quot;&gt;&lt;!----&gt;&lt;a _nghost-ng-c672049950=&quot;&quot; class=&quot;ng-star-inserted&quot; externallink=&quot;&quot; href=&quot;https://visualstudio.microsoft.com/pt-br/visual-cpp-build-tools/&quot; jslog=&quot;197247;track:generic_click,impression;BardVeMetadataKey:[[&amp;quot;r_1521e9b1717df4c6&amp;quot;,&amp;quot;c_e3491d92e8bde071&amp;quot;,null,&amp;quot;rc_19686cccfad21ef7&amp;quot;,null,null,&amp;quot;pt&amp;quot;,null,1,null,null,1,0]]&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://visualstudio.microsoft.com/pt-br/visual-cpp-build-tools/&lt;/a&gt;&lt;!----&gt;&lt;/link-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;/response-element&gt;.&lt;/li&gt;
&lt;li data-sourcepos=&quot;65:1-65:145&quot;&gt;&lt;strong&gt;Baixe as Build Tools:&lt;/strong&gt; Localize e clique no link para baixar as &quot;Ferramentas de Construção para Visual Studio 2022&quot; ou uma versão similar.&lt;/li&gt;
&lt;li data-sourcepos=&quot;66:1-66:88&quot;&gt;&lt;strong&gt;Execute o instalador:&lt;/strong&gt; Após o download, execute o arquivo &lt;code&gt;.exe&lt;/code&gt; que você baixou.&lt;/li&gt;
&lt;li data-sourcepos=&quot;67:1-67:186&quot;&gt;&lt;strong&gt;Selecione os componentes:&lt;/strong&gt; Durante a instalação, certifique-se de selecionar a carga de trabalho &quot;&lt;strong&gt;Ferramentas de construção C++&lt;/strong&gt;&quot;. Você pode desmarcar outras opções se desejar.&lt;/li&gt;
&lt;li data-sourcepos=&quot;68:1-69:0&quot;&gt;&lt;strong&gt;Prossiga com a instalação:&lt;/strong&gt; Clique em &quot;Instalar&quot; e aguarde a conclusão do processo.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3 data-sourcepos=&quot;70:1-70:71&quot;&gt;Passo 5: Clonando o Repositório Deep-Live-Cam e Baixando os Modelos&lt;/h3&gt;&lt;p data-sourcepos=&quot;72:1-72:85&quot;&gt;Agora, vamos baixar o código do Deep-Live-Cam e os modelos pré-treinados necessários.&lt;/p&gt;&lt;p data-sourcepos=&quot;72:1-72:85&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;Atenção&lt;/span&gt;&lt;/b&gt;, este tutorial foi escrito e testado na versão 1.8. Se preferir use o fork do projeto em nosso github nos procedimentos abaixo. Link:&amp;nbsp;https://github.com/limontec/Deep-Live-Cam&lt;/p&gt;&lt;ol data-sourcepos=&quot;74:1-92:0&quot;&gt;
&lt;li data-sourcepos=&quot;74:1-74:187&quot;&gt;&lt;strong&gt;Abra o PowerShell como Administrador:&lt;/strong&gt; Pressione a tecla Windows, digite &lt;code&gt;powershell&lt;/code&gt;, clique com o botão direito em &quot;Windows PowerShell&quot; e selecione &quot;Executar como administrador&quot;.&lt;/li&gt;
&lt;li data-sourcepos=&quot;75:1-79:116&quot;&gt;&lt;strong&gt;Clone o repositório:&lt;/strong&gt; No PowerShell, digite o seguinte comando e pressione Enter:&lt;br /&gt;&lt;blockquote&gt;[git clone https://github.com/hacksider/Deep&lt;span class=&quot;hljs-literal&quot;&gt;-Live&lt;/span&gt;&lt;span class=&quot;hljs-literal&quot;&gt;-Cam&lt;/span&gt;.git]&lt;/blockquote&gt;
Isso criará uma pasta chamada &lt;code&gt;Deep-Live-Cam&lt;/code&gt; no seu diretório atual e baixará todos os arquivos do repositório. Caso não possua GIT, acesse o repositório em&amp;nbsp;&lt;a href=&quot;https://github.com/hacksider/Deep-Live-Cam&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://github.com/hacksider/Deep-Live-Cam&lt;/a&gt; e clique em &quot;Code&quot; &amp;gt; &quot;Download ZIP&quot;. Extraia tudo para uma pasta de fácil acesso e navegue até ela via PowerShell.&lt;/li&gt;
&lt;li data-sourcepos=&quot;80:1-83:7&quot;&gt;&lt;strong&gt;Navegue até a pasta de modelos:&lt;/strong&gt; Digite o seguinte comando e pressione Enter:&lt;br /&gt;&lt;blockquote&gt;[cd Deep&lt;span class=&quot;hljs-literal&quot;&gt;-Live&lt;/span&gt;&lt;span class=&quot;hljs-literal&quot;&gt;-Cam&lt;/span&gt;\models]&lt;/blockquote&gt;&lt;/li&gt;
&lt;li data-sourcepos=&quot;84:1-92:0&quot;&gt;&lt;strong&gt;Baixe os modelos:&lt;/strong&gt; Execute os seguintes comandos um por um para baixar os modelos pré-treinados necessários dentro da pasta models:&lt;br /&gt;&lt;response-element ng-version=&quot;0.0.0-PLACEHOLDER&quot;&gt;&lt;code-block _nghost-ng-c713111524=&quot;&quot; class=&quot;ng-tns-c713111524-116 ng-star-inserted&quot;&gt;&lt;blockquote&gt;[Invoke-WebRequest &lt;span class=&quot;hljs-literal&quot;&gt;-Uri&lt;/span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;https://huggingface.co/hacksider/deep-live-cam/resolve/main/GFPGANv1.4.pth&quot;&lt;/span&gt; &lt;span class=&quot;hljs-literal&quot;&gt;-OutFile&lt;/span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;GFPGANv1.4.pth&quot;]&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class=&quot;hljs-built_in&quot;&gt;[Invoke-WebRequest&lt;/span&gt; &lt;span class=&quot;hljs-literal&quot;&gt;-Uri&lt;/span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;https://huggingface.co/hacksider/deep-live-cam/resolve/main/inswapper_128_fp16.onnx&quot;&lt;/span&gt; &lt;span class=&quot;hljs-literal&quot;&gt;-OutFile&lt;/span&gt; &lt;span class=&quot;hljs-string&quot;&gt;&quot;inswapper_128_fp16.onnx&quot;]&lt;/span&gt;&lt;/blockquote&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;/response-element&gt;
Esses comandos baixarão os arquivos &lt;code&gt;GFPGANv1.4.pth&lt;/code&gt; e &lt;code&gt;inswapper_128_fp16.onnx&lt;/code&gt; para a pasta &lt;code&gt;Deep-Live-Cam\models&lt;/code&gt;.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;h3 data-sourcepos=&quot;93:1-93:79&quot;&gt;Passo 6: Criando e Ativando o Ambiente Virtual e Instalando as Dependências&lt;/h3&gt;&lt;p data-sourcepos=&quot;95:1-95:85&quot;&gt;É recomendável usar um ambiente virtual para isolar as dependências do Deep-Live-Cam.&lt;/p&gt;&lt;ol data-sourcepos=&quot;97:1-117:0&quot;&gt;
&lt;li data-sourcepos=&quot;97:1-101:72&quot;&gt;&lt;strong&gt;Crie o ambiente virtual:&lt;/strong&gt; Ainda no PowerShell (dentro da pasta &lt;code&gt;Deep-Live-Cam&lt;/code&gt;), execute o seguinte comando:&lt;br /&gt;&lt;blockquote&gt;[python &lt;span class=&quot;hljs-literal&quot;&gt;-m&lt;/span&gt; venv venv]&lt;/blockquote&gt;
Isso criará uma pasta chamada &lt;code&gt;venv&lt;/code&gt; que conterá o ambiente virtual. Caso possua mais de uma versão do python instalada, use o comando:&lt;br /&gt;&lt;blockquote&gt;[py -3.10 -m venv venv]&lt;/blockquote&gt;&lt;/li&gt;
&lt;li data-sourcepos=&quot;102:1-106:129&quot;&gt;&lt;strong&gt;Configure a política de execução:&lt;/strong&gt; Execute o seguinte comando para permitir a execução de scripts dentro do ambiente virtual:&lt;br /&gt;&lt;blockquote&gt;[Set-ExecutionPolicy &lt;span class=&quot;hljs-literal&quot;&gt;-ExecutionPolicy&lt;/span&gt; RemoteSigned &lt;span class=&quot;hljs-literal&quot;&gt;-Scope&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;Process]&lt;/span&gt;&lt;/blockquote&gt;
Responda sim para todos se for solicitado. Esta alteração é temporária e se aplica apenas à sessão atual do PowerShell.&lt;/li&gt;
&lt;li data-sourcepos=&quot;107:1-111:98&quot;&gt;&lt;strong&gt;Ative o ambiente virtual:&lt;/strong&gt; Execute o seguinte comando:&lt;br /&gt;&lt;blockquote&gt;[venv\Scripts\activate]&lt;/blockquote&gt;
Você verá &lt;code&gt;(venv)&lt;/code&gt; no início da linha de comando, indicando que o ambiente virtual está ativo.&lt;/li&gt;
&lt;li data-sourcepos=&quot;112:1-117:0&quot;&gt;&lt;strong&gt;Instale as dependências:&lt;/strong&gt; Execute o seguinte comando para instalar todas as bibliotecas necessárias listadas no arquivo &lt;code&gt;requirements.txt&lt;/code&gt;:&lt;br /&gt;&lt;blockquote&gt;[pip3.&lt;span class=&quot;hljs-number&quot;&gt;10&lt;/span&gt; install &lt;span class=&quot;hljs-literal&quot;&gt;-r&lt;/span&gt; requirements.txt]&lt;/blockquote&gt;
Este processo pode levar alguns minutos, pois várias bibliotecas serão baixadas e instaladas.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;h3 data-sourcepos=&quot;118:1-118:39&quot;&gt;Passo 7: Executando o Deep-Live-Cam&lt;/h3&gt;&lt;p data-sourcepos=&quot;120:1-120:74&quot;&gt;Agora que o ambiente está configurado, você pode executar o Deep-Live-Cam.&lt;/p&gt;&lt;ul data-sourcepos=&quot;122:1-126:0&quot;&gt;
&lt;li data-sourcepos=&quot;122:1-126:0&quot;&gt;&lt;strong&gt;Para executar sem GPU (usando a CPU):&lt;/strong&gt; No PowerShell (com o ambiente virtual ativo), navegue de volta para a pasta raiz do &lt;code&gt;Deep-Live-Cam&lt;/code&gt; (se você não estiver lá) e execute o seguinte comando:&lt;br /&gt;&lt;blockquote&gt;[python run.py]&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;h3 data-sourcepos=&quot;127:1-127:40&quot;&gt;Passo 8: Resolvendo Problemas Comuns (parte 1)&lt;/h3&gt;&lt;p data-sourcepos=&quot;129:1-129:112&quot;&gt;Durante a execução, você pode encontrar alguns problemas. Aqui estão algumas soluções para os erros mais comuns:&lt;/p&gt;&lt;ul data-sourcepos=&quot;131:1-157:0&quot;&gt;
&lt;li data-sourcepos=&quot;131:1-139:0&quot;&gt;
&lt;p data-sourcepos=&quot;131:3-131:253&quot;&gt;&lt;strong&gt;Erro de módulo não encontrado (exemplo: &lt;code&gt;ModuleNotFoundError: No module named &#39;pygrabber&#39;&lt;/code&gt;):&lt;/strong&gt; Se um módulo estiver faltando, o erro indicará o nome do módulo. Para instalá-lo, execute o seguinte comando no PowerShell (com o ambiente virtual ativo):&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;[pip3.10 install nome_do_modulo]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
&lt;p data-sourcepos=&quot;135:5-135:42&quot;&gt;No exemplo fornecido, você executaria:&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;[pip3.10 install pygrabber]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-sourcepos=&quot;140:1-157:0&quot;&gt;
&lt;p data-sourcepos=&quot;140:3-140:101&quot;&gt;&lt;strong&gt;Tela preta no rosto:&lt;/strong&gt; Se você ver um quadrado preto no lugar do rosto trocado, tente o seguinte:&lt;/p&gt;
&lt;ol data-sourcepos=&quot;141:5-157:0&quot;&gt;
&lt;li data-sourcepos=&quot;141:5-144:11&quot;&gt;&lt;strong&gt;Desinstale as versões existentes do onnxruntime:&lt;br /&gt;&lt;/strong&gt;&lt;blockquote&gt;[pip3.&lt;span class=&quot;hljs-number&quot;&gt;10&lt;/span&gt; uninstall onnxruntime onnxruntime&lt;span class=&quot;hljs-literal&quot;&gt;-directml]&lt;/span&gt;&lt;/blockquote&gt;&lt;span class=&quot;hljs-literal&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li data-sourcepos=&quot;145:5-148:11&quot;&gt;&lt;strong&gt;Instale uma versão específica do onnxruntime-directml:&lt;br /&gt;&lt;/strong&gt;&lt;blockquote&gt;[pip3.&lt;span class=&quot;hljs-number&quot;&gt;10&lt;/span&gt; install onnxruntime&lt;span class=&quot;hljs-literal&quot;&gt;-directml&lt;/span&gt;==&lt;span class=&quot;hljs-number&quot;&gt;1.15&lt;/span&gt;.&lt;span class=&quot;hljs-number&quot;&gt;1]&lt;/span&gt;&lt;/blockquote&gt;&lt;span class=&quot;hljs-number&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li data-sourcepos=&quot;149:5-152:11&quot;&gt;&lt;strong&gt;Execute o programa usando o provedor de execução DML:&lt;br /&gt;&lt;/strong&gt;&lt;blockquote&gt;[python run.py -&lt;span class=&quot;hljs-literal&quot;&gt;-execution&lt;/span&gt;&lt;span class=&quot;hljs-literal&quot;&gt;-provider&lt;/span&gt; dml]&lt;/blockquote&gt;&lt;/li&gt;
&lt;li data-sourcepos=&quot;153:5-157:0&quot;&gt;&lt;strong&gt;Se a troca de rosto ainda estiver ruim, tente usar a CPU:&lt;br /&gt;&lt;/strong&gt;&lt;blockquote&gt;[python run.py -&lt;span class=&quot;hljs-literal&quot;&gt;-execution&lt;/span&gt;&lt;span class=&quot;hljs-literal&quot;&gt;-provider&lt;/span&gt; cpu]&lt;/blockquote&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;p data-sourcepos=&quot;158:1-158:299&quot;&gt;Pronto, você configurou com sucesso o ambiente para executar o Deep-Live-Cam no seu Windows. Agora você pode experimentar a aplicação. Lembre-se de executar o ambiente virtual sempre que for executar o Deep-Live-Cam.&lt;/p&gt;&lt;h3 data-sourcepos=&quot;70:1-70:83&quot;&gt;Passo 9: Instalando o CUDA 11.8.0 (Apenas para quem possui GPU NVIDIA dedicada)&lt;/h3&gt;&lt;p data-sourcepos=&quot;72:1-72:118&quot;&gt;&lt;span class=&quot;citation-10 contradictory citation-end-10&quot; role=&quot;button&quot; tabindex=&quot;0&quot;&gt;Se o seu computador possui uma GPU NVIDIA dedicada, você pode instalá-lo para acelerar o processamento, caso contrário, ignore os passos abaixo (9 ao 12)!&lt;/span&gt;&lt;/p&gt;&lt;ol data-sourcepos=&quot;74:1-82:0&quot;&gt;&lt;li data-sourcepos=&quot;74:1-75:300&quot;&gt;&lt;strong&gt;Acesse o link de download do CUDA 11.8.0:&lt;/strong&gt; Abra seu navegador e vá para:
&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;!----&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;link-block class=&quot;ng-star-inserted&quot;&gt;&lt;!----&gt;&lt;a _nghost-ng-c672049950=&quot;&quot; class=&quot;ng-star-inserted&quot; externallink=&quot;&quot; href=&quot;https://developer.nvidia.com/cuda-11-8-0-download-archive?target_os=Windows&amp;amp;target_arch=x86_64&amp;amp;target_version=11&amp;amp;target_type=exe_local&quot; jslog=&quot;197247;track:generic_click,impression;BardVeMetadataKey:[[&amp;quot;r_d2bc0bf93e9c11b5&amp;quot;,&amp;quot;c_e3491d92e8bde071&amp;quot;,null,&amp;quot;rc_740e81ba6c7a889c&amp;quot;,null,null,&amp;quot;pt-PT&amp;quot;,null,1,null,null,1,0]]&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;https://developer.nvidia.com/cuda-11-8-0-download-archive?target_os=Windows&amp;amp;target_arch=x86_64&amp;amp;target_version=11&amp;amp;target_type=exe_local&lt;/a&gt;&lt;!----&gt;&lt;/link-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;/response-element&gt;&lt;/li&gt;
&lt;li data-sourcepos=&quot;76:1-76:105&quot;&gt;&lt;strong&gt;Baixe o instalador local:&lt;/strong&gt; Clique no link para baixar o instalador local do CUDA (arquivo &lt;code&gt;.exe&lt;/code&gt;).&lt;/li&gt;
&lt;li data-sourcepos=&quot;77:1-77:72&quot;&gt;&lt;strong&gt;Execute o instalador:&lt;/strong&gt; Após o download, execute o arquivo &lt;code&gt;.exe&lt;/code&gt;.&lt;/li&gt;
&lt;li data-sourcepos=&quot;78:1-80:277&quot;&gt;&lt;span class=&quot;citation-11 contradictory&quot; role=&quot;button&quot; tabindex=&quot;0&quot;&gt; &lt;/span&gt;&lt;strong&gt;Tipo de instalação:&lt;/strong&gt;&lt;span class=&quot;citation-11 contradictory citation-end-11&quot; role=&quot;button&quot; tabindex=&quot;0&quot;&gt; O instalador verificará a compatibilidade dos seus drivers NVIDIA.&lt;/span&gt;
&lt;ul data-sourcepos=&quot;79:5-80:277&quot;&gt;
&lt;li data-sourcepos=&quot;79:5-79:283&quot;&gt;&lt;strong&gt;Se seus drivers forem a versão mais recente ou superior:&lt;/strong&gt; Escolha a opção de &lt;strong&gt;&quot;Instalação Personalizada&quot;&lt;/strong&gt;. Na lista de componentes, &lt;strong&gt;mantenha apenas a opção &quot;CUDA&quot; marcada&lt;/strong&gt; e desmarque todas as outras opções (como &quot;NVIDIA GeForce Experience&quot;). Prossiga com a instalação.&lt;/li&gt;
&lt;li data-sourcepos=&quot;80:5-80:277&quot;&gt;&lt;strong&gt;Se não possui drivers NVIDIA ainda:&lt;/strong&gt;&lt;span class=&quot;citation-12 contradictory citation-end-12&quot; role=&quot;button&quot; tabindex=&quot;0&quot;&gt; Você deve optar por uma instalação expressa.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-sourcepos=&quot;81:1-82:0&quot; style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;Conclua a instalação:&lt;/strong&gt; &lt;span class=&quot;citation-13 contradictory citation-end-13&quot; role=&quot;button&quot; tabindex=&quot;0&quot;&gt;Siga as instruções na tela para finalizar a instalação do CUDA.&lt;span style=&quot;font-family: Arial;&quot;&gt;&lt;span style=&quot;background-color: #f0f0f0; font-size: 13.3333px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;O caminho de instalação padrão é geralmente &lt;code&gt;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8&lt;/code&gt;.&lt;/li&gt;&lt;/ol&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;h3 data-sourcepos=&quot;83:1-83:59&quot;&gt;Passo 10: Instalando a Versão Correta do onnxruntime-gpu&lt;/h3&gt;&lt;p data-sourcepos=&quot;85:1-85:91&quot;&gt;Agora, vamos instalar a versão específica do &lt;code&gt;onnxruntime-gpu&lt;/code&gt; necessária para o CUDA 11.8.&lt;/p&gt;&lt;ol data-sourcepos=&quot;87:1-97:0&quot;&gt;
&lt;li data-sourcepos=&quot;87:1-87:216&quot;&gt;&lt;strong&gt;Abra o PowerShell como Administrador:&lt;/strong&gt; Se ainda não estiver aberto, pressione a tecla Windows, digite &lt;code&gt;powershell&lt;/code&gt;, clique com o botão direito em &quot;Windows PowerShell&quot; e selecione &quot;Executar como administrador&quot;.&lt;/li&gt;
&lt;li data-sourcepos=&quot;88:1-92:69&quot;&gt;&lt;strong&gt;Desinstale qualquer versão existente do onnxruntime-gpu:&lt;/strong&gt; Execute o seguinte comando:&lt;br /&gt;&lt;blockquote&gt;[pip3.&lt;span class=&quot;hljs-number&quot;&gt;10&lt;/span&gt; uninstall onnxruntime&lt;span class=&quot;hljs-literal&quot;&gt;-gpu]&lt;/span&gt;&lt;/blockquote&gt;
Se não estiver instalado, você verá uma mensagem informando isso.&lt;/li&gt;
&lt;li data-sourcepos=&quot;93:1-97:0&quot;&gt;&lt;strong&gt;Instale a versão específica do onnxruntime-gpu:&lt;/strong&gt; Execute o seguinte comando:
&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-c713111524=&quot;&quot; class=&quot;ng-tns-c713111524-277 ng-star-inserted&quot;&gt;&lt;!----&gt;&lt;!----&gt;&lt;div _ngcontent-ng-c713111524=&quot;&quot; class=&quot;code-block ng-tns-c713111524-277 ng-trigger ng-trigger-codeBlockRevealAnimation&quot; jslog=&quot;223238;track:impression;BardVeMetadataKey:[[&amp;quot;r_d2bc0bf93e9c11b5&amp;quot;,&amp;quot;c_e3491d92e8bde071&amp;quot;,null,&amp;quot;rc_740e81ba6c7a889c&amp;quot;,null,null,&amp;quot;pt-PT&amp;quot;,null,1,null,null,1,0]]&quot;&gt;&lt;div _ngcontent-ng-c713111524=&quot;&quot; class=&quot;code-block-decoration header-formatted gds-title-s ng-tns-c713111524-277 ng-star-inserted&quot;&gt;&lt;blockquote&gt;[pip3.&lt;span class=&quot;hljs-number&quot;&gt;10&lt;/span&gt; install onnxruntime&lt;span class=&quot;hljs-literal&quot;&gt;-gpu&lt;/span&gt;==&lt;span class=&quot;hljs-number&quot;&gt;1.16&lt;/span&gt;.&lt;span class=&quot;hljs-number&quot;&gt;3]&lt;/span&gt;&lt;/blockquote&gt;&lt;span class=&quot;hljs-number&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code-block&gt;&lt;/response-element&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;h3 data-sourcepos=&quot;98:1-98:42&quot;&gt;Passo 11: Baixando e Instalando o cuDNN&lt;/h3&gt;&lt;p data-sourcepos=&quot;100:1-100:93&quot;&gt;&lt;span class=&quot;citation-14 entailed citation-end-14&quot; role=&quot;button&quot; tabindex=&quot;0&quot;&gt;O cuDNN é uma biblioteca da NVIDIA.&lt;/span&gt;&lt;/p&gt;&lt;ol data-sourcepos=&quot;102:1-111:0&quot;&gt;
&lt;li data-sourcepos=&quot;102:1-103:262&quot;&gt;&lt;strong&gt;Acesse o site da NVIDIA para download do cuDNN:&lt;/strong&gt; Abra seu navegador e vá para:
&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;!----&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;link-block class=&quot;ng-star-inserted&quot;&gt;&lt;!----&gt;&lt;a _nghost-ng-c672049950=&quot;&quot; class=&quot;ng-star-inserted&quot; externallink=&quot;&quot; href=&quot;https://developer.nvidia.com/compute/cudnn/secure/8.6.0/local_installers/11.8/cudnn-windows-x86_64-8.6.0.163_cuda11-archive.zip&quot; jslog=&quot;197247;track:generic_click,impression;BardVeMetadataKey:[[&amp;quot;r_d2bc0bf93e9c11b5&amp;quot;,&amp;quot;c_e3491d92e8bde071&amp;quot;,null,&amp;quot;rc_740e81ba6c7a889c&amp;quot;,null,null,&amp;quot;pt-PT&amp;quot;,null,1,null,null,1,0]]&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;https://developer.nvidia.com/compute/cudnn/secure/8.6.0/local_installers/11.8/cudnn-windows-x86_64-8.6.0.163_cuda11-archive.zip&lt;/a&gt;&lt;!----&gt;&lt;/link-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;/response-element&gt;&lt;/li&gt;
&lt;li data-sourcepos=&quot;104:1-104:130&quot;&gt;&lt;strong&gt;Crie uma conta (se necessário):&lt;/strong&gt; Você precisará criar uma conta no site da NVIDIA ou fazer login para poder baixar o cuDNN.&lt;/li&gt;
&lt;li data-sourcepos=&quot;105:1-105:262&quot;&gt;&lt;strong&gt;Baixe o cuDNN para CUDA 11.x:&lt;/strong&gt; Localize e baixe o arquivo zip correspondente a &quot;&lt;strong&gt;cuDNN v8.6.0 (October 3rd, 2022) for CUDA 11.x Local Installers for Windows&lt;/strong&gt;&quot; (o nome do arquivo deve ser semelhante a &lt;code&gt;cudnn-windows-x86_64-8.6.0.163_cuda11-archive.zip&lt;/code&gt;).&lt;/li&gt;
&lt;li data-sourcepos=&quot;106:1-106:209&quot;&gt;&lt;span class=&quot;citation-15 contradictory&quot; role=&quot;button&quot; tabindex=&quot;0&quot;&gt; &lt;/span&gt;&lt;strong&gt;Extraia o conteúdo do arquivo zip:&lt;/strong&gt;&lt;span class=&quot;citation-15 contradictory citation-end-15&quot; role=&quot;button&quot; tabindex=&quot;0&quot;&gt; Após o download, extraia o conteúdo do arquivo zip para uma pasta temporária no seu computador.&lt;/span&gt;&amp;nbsp;Você verá três pastas dentro: &lt;code&gt;bin&lt;/code&gt;, &lt;code&gt;include&lt;/code&gt; e &lt;code&gt;lib&lt;/code&gt;.&lt;/li&gt;
&lt;li data-sourcepos=&quot;107:1-107:159&quot;&gt;&lt;strong&gt;Copie os arquivos para a pasta do CUDA:&lt;/strong&gt; Abra o diretório de instalação do CUDA (o padrão é &lt;code&gt;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8&lt;/code&gt;).&lt;/li&gt;
&lt;li data-sourcepos=&quot;108:1-108:231&quot;&gt;&lt;strong&gt;Copie o conteúdo da pasta &lt;code&gt;bin&lt;/code&gt; do cuDNN para a pasta &lt;code&gt;bin&lt;/code&gt; do CUDA:&lt;/strong&gt; Abra a pasta &lt;code&gt;bin&lt;/code&gt; que você extraiu do cuDNN e copie todos os arquivos para a pasta &lt;code&gt;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\bin&lt;/code&gt;.&lt;/li&gt;
&lt;li data-sourcepos=&quot;109:1-109:221&quot;&gt;&lt;strong&gt;Copie o conteúdo da pasta &lt;code&gt;include&lt;/code&gt; do cuDNN para a pasta &lt;code&gt;include&lt;/code&gt; do CUDA:&lt;/strong&gt; Abra a pasta &lt;code&gt;include&lt;/code&gt; do cuDNN e copie tudo&amp;nbsp;para a pasta &lt;code&gt;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\include&lt;/code&gt;.&lt;/li&gt;
&lt;li data-sourcepos=&quot;110:1-111:0&quot;&gt;&lt;strong&gt;Copie o conteúdo da pasta &lt;code&gt;lib&lt;/code&gt;&amp;nbsp;do cuDNN para a pasta &lt;code&gt;lib&lt;/code&gt;&amp;nbsp;do CUDA:&lt;/strong&gt; Abra a pasta &lt;code&gt;lib&lt;/code&gt; dentro do cuDNN e, em seguida,&amp;nbsp; copie todos os arquivos &lt;code&gt;.lib&lt;/code&gt; para a pasta &lt;code&gt;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\lib&lt;/code&gt;.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;h3 data-sourcepos=&quot;98:1-98:42&quot;&gt;Passo 12: Executando o Deep-Live-Cam com Suporte a GPU&lt;/h3&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;response-element ng-version=&quot;0.0.0-PLACEHOLDER&quot;&gt;&lt;code-block _nghost-ng-c713111524=&quot;&quot; class=&quot;ng-tns-c713111524-286 ng-star-inserted&quot;&gt;&lt;div _ngcontent-ng-c713111524=&quot;&quot; class=&quot;code-block ng-tns-c713111524-286 ng-trigger ng-trigger-codeBlockRevealAnimation&quot; jslog=&quot;223238;track:impression;BardVeMetadataKey:[[&amp;quot;r_d2bc0bf93e9c11b5&amp;quot;,&amp;quot;c_e3491d92e8bde071&amp;quot;,null,&amp;quot;rc_740e81ba6c7a889c&amp;quot;,null,null,&amp;quot;pt-PT&amp;quot;,null,1,null,null,1,0]]&quot;&gt;&lt;div _ngcontent-ng-c713111524=&quot;&quot; class=&quot;code-block-decoration header-formatted gds-title-s ng-tns-c713111524-286 ng-star-inserted&quot;&gt;&lt;p data-sourcepos=&quot;162:1-162:107&quot;&gt;&lt;span class=&quot;citation-18 contradictory citation-end-18&quot; role=&quot;button&quot; tabindex=&quot;0&quot;&gt;Agora que o ambiente está configurado com suporte a GPU, você pode executar o Deep-Live-Cam.&lt;/span&gt;&lt;/p&gt;&lt;ul data-sourcepos=&quot;164:1-168:0&quot;&gt;
&lt;li data-sourcepos=&quot;164:1-168:0&quot;&gt;&lt;strong&gt;Para executar com GPU:&lt;/strong&gt; No PowerShell (com o ambiente virtual ativo), navegue de volta para a pasta raiz do &lt;code&gt;Deep-Live-Cam&lt;/code&gt; (se você não estiver lá) e execute o seguinte comando:&lt;br /&gt;&lt;blockquote&gt;[python run.py --execution-provider cuda]&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Pronto,&amp;nbsp;você configurou com sucesso o ambiente para executar o Deep-Live-Cam no seu Windows, com suporte para GPU NVIDIA.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;Passo 13: Execução&lt;/h3&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Sempre que for executar use os comandos abaixo:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Abrir PowerShell&lt;/li&gt;&lt;li&gt;Navegue até a pasta do seu&amp;nbsp;Deep-Live-Cam&lt;/li&gt;&lt;li&gt;Atualize a política de execução&lt;br /&gt;&lt;blockquote&gt;[Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process]&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Inicialize o ambiente virtual&lt;br /&gt;&lt;blockquote&gt;[venv\Scripts\activate]&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Execute a ferramenta&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Com GPU:&lt;br /&gt;&lt;blockquote&gt;[python run.py --execution-provider cuda]&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Sem GPU:&lt;br /&gt;&lt;blockquote&gt;[python run.py --execution-provider cpu]&lt;/blockquote&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;/div&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/AVvXsEiSWOpopc5OrFW3jjjoE0S27GdgTEnA9cR6C9kvlm6Yvz_2KFa2Y_k8dt2j60T_GomdWhXBPkDTg5OtOr967i5nGCAL3sYaKVFWTS2vCLbo5ulc0kBsEn6IQU2KE_mNyWCPXAFlhdyqLB0EqM-h8in3M1cG9vwJoiG-NEX-PuABv4kes_-jvQxCddyGzuw6/s1142/deep-live-cam-github-edition.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;975&quot; data-original-width=&quot;1142&quot; height=&quot;546&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSWOpopc5OrFW3jjjoE0S27GdgTEnA9cR6C9kvlm6Yvz_2KFa2Y_k8dt2j60T_GomdWhXBPkDTg5OtOr967i5nGCAL3sYaKVFWTS2vCLbo5ulc0kBsEn6IQU2KE_mNyWCPXAFlhdyqLB0EqM-h8in3M1cG9vwJoiG-NEX-PuABv4kes_-jvQxCddyGzuw6/w640-h546/deep-live-cam-github-edition.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Quando a janela do programa abrir, clique em &quot;Select a face&quot; e escolha uma foto de quem você quer usar o rosto (baixe na internet). Em seguida selecione sua webcam, provavelmente estará como &quot;Integrated Webcam&quot; e por fim clique em &quot;Live&quot; para conferir o resultado.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3 data-sourcepos=&quot;127:1-127:40&quot;&gt;Passo 14: Resolvendo Problemas Comuns (parte 2)&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Se a troca de rosto está estranha, a imagem está tentando ser gerada mas não consegue ou está embaçada (blurry)...&amp;nbsp;tente baixar outro modelo inswapper_128_fp16.onnx &lt;a href=&quot;https://github.com/facefusion/facefusion-assets/releases/download/models-3.0.0/inswapper_128_fp16.onnx&quot; target=&quot;_blank&quot;&gt;clicando aqui&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Se ao executar a ferramenta aparecer error relacionado ao CUDA ou sua máquina não suportar CUDA 11.8 , desinstale o onnxruntime&lt;span class=&quot;hljs-literal&quot;&gt;-gpu e instale uma versão compatível com seu CUDA e CUDNN, &lt;a href=&quot;https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html&quot; target=&quot;_blank&quot;&gt;clique aqui&lt;/a&gt; e descubra as versões compatíveis. Por exemplo,&amp;nbsp;se estiver executando CUDA 12.x e CUDNN 9.x , opte pelo onnxruntime-gpu versão 1.18.1 ou superior (teste todas até uma funcionar) está dica é boa para quem está tentando executar a ferramenta no Ubuntu 24.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;span class=&quot;hljs-number&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code-block&gt;&lt;/response-element&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description><link>http://www.limontec.com/2025/05/tutorial-deep-live-cam-windows.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/AVvXsEh_wFQ88MguhgVDs4l0OB51kqwB2Lzchcf-Oh-fFfD49lWQERqlOoNafNswc7YSPvj9Dix5-3zdBglOrISEU6qExAz9yAl4vjA7Z8HLOGQBx2CsZZt7qrDxyBCtIqu68fw_Vm8OP9YkBFtdQIMI-ynoYFWT0K2tLVrjKEzZtr36QrrK6bpgOQwkD3q5w9Cv/s72-c/deep-live-cam-github-edition-intro.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2157924926610706248.post-4675972627707132051</guid><pubDate>Sun, 04 May 2025 19:40:00 +0000</pubDate><atom:updated>2025-05-04T16:40:04.383-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>[Resolvido] Erro ERRCONNECT_TLS_CONNECT_FAILED no xfreerdp</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/AVvXsEigCBuTIAHPfNs6p43gQ4qiYRCRRK2MAZarj-vqueihW1E_ivwFbVAKT2h_0-TgGJ9JE_joseFHkd0vyMj1SIjtEZNz-jxQJRufIo2U9-uywVvrJ-Xhkd83_TCHQmu_0qtCjmguFLqQdJCnWHgxZ3XqNfRi_A78VcgmzP543hCgUysacvMiSxBoyPoOjNeO/s986/xfreerdp.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;575&quot; data-original-width=&quot;986&quot; height=&quot;374&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigCBuTIAHPfNs6p43gQ4qiYRCRRK2MAZarj-vqueihW1E_ivwFbVAKT2h_0-TgGJ9JE_joseFHkd0vyMj1SIjtEZNz-jxQJRufIo2U9-uywVvrJ-Xhkd83_TCHQmu_0qtCjmguFLqQdJCnWHgxZ3XqNfRi_A78VcgmzP543hCgUysacvMiSxBoyPoOjNeO/w640-h374/xfreerdp.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;xfreerdp mensagem de error:&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;[[6372:6373] [ERROR][com.freerdp.core] - transport_connect_tls:freerdp_set_last_error_ex ERRCONNECT_TLS_CONNECT_FAILED [0x00020008]]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Esse erro normalmente ocorre quando o cliente tenta estabelecer uma conexão TLS (camada de segurança) com o servidor, mas a negociação falha. Isso pode acontecer por incompatibilidade com o protocolo de segurança usado pelo servidor.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Adicione o argumento /sec:rdp ao comando xfreerdp para forçar o uso do protocolo RDP padrão (sem TLS).&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[xfreerdp /u:user /p:password321 /cert:ignore /v:10.10.178.138 /sec:rdp]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Se ainda não funcionar, verifique:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Se a porta 3389 (padrão do RDP) está aberta e acessível.&lt;/li&gt;&lt;li&gt;Se o serviço RDP está habilitado no servidor.&lt;/li&gt;&lt;li&gt;Se há firewall bloqueando a conexão.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;</description><link>http://www.limontec.com/2025/05/xfreerdp-error-tsl.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/AVvXsEigCBuTIAHPfNs6p43gQ4qiYRCRRK2MAZarj-vqueihW1E_ivwFbVAKT2h_0-TgGJ9JE_joseFHkd0vyMj1SIjtEZNz-jxQJRufIo2U9-uywVvrJ-Xhkd83_TCHQmu_0qtCjmguFLqQdJCnWHgxZ3XqNfRi_A78VcgmzP543hCgUysacvMiSxBoyPoOjNeO/s72-w640-h374-c/xfreerdp.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2157924926610706248.post-152070619153719178</guid><pubDate>Fri, 02 May 2025 14:33:00 +0000</pubDate><atom:updated>2025-05-02T12:03:40.302-03:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Criptomoeda</category><category domain="http://www.blogger.com/atom/ns#">root</category><title>Como usar o BitCrack com GPU</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/AVvXsEi8CPBkVLZuk4EL_gQ-8Y9FY4ETbMx7_o-w72zfQceX7q8T6fVUGS9LHv-ZVEh_DNj-zsME0RB02ihyphenhyphensNJ-2AzbPWCcfnxxJOghZUyrLZK_sHCxpt-X2QTwsy_IAtgftk2SC2JfmtLZ52sCX9JF3RkXyiQnBF_JPmLQzu93REmg-kbCiw4_BZQcU_KMEA-i/s1045/bitcrack_teste.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;596&quot; data-original-width=&quot;1045&quot; height=&quot;183&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8CPBkVLZuk4EL_gQ-8Y9FY4ETbMx7_o-w72zfQceX7q8T6fVUGS9LHv-ZVEh_DNj-zsME0RB02ihyphenhyphensNJ-2AzbPWCcfnxxJOghZUyrLZK_sHCxpt-X2QTwsy_IAtgftk2SC2JfmtLZ52sCX9JF3RkXyiQnBF_JPmLQzu93REmg-kbCiw4_BZQcU_KMEA-i/s320/bitcrack_teste.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Em 2015, um usuário anônimo lançou um desafio para a comunidade de Bitcoin. Uma série de quebra-cabeça criptográficos criados com o propósito de ilustrar a imensidão do espaço de chaves privadas do Bitcoin. Ele encheu com bitcoin endereços frágeis&amp;nbsp;com o objetivo de acompanhar o avanço do poder computacional capaz de quebrar chaves privadas de Bitcoin.&lt;/p&gt;&lt;p&gt;São 160 endereços, com diferentes dificuldades.&amp;nbsp;Com o tempo, alguns desses desafios foram solucionados. Os primeiros por força bruta, graças à sua posição em intervalos mais estreitos. No entanto, à medida que os intervalos se tornam mais amplos e complexos, a dificuldade aumenta exponencialmente.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Para começar a tentar resolver este puzzle você vai precisar de um computador potente e um programinha que tente quebrar essas chaves.&lt;/p&gt;&lt;p&gt;Para demonstração vamos utilizar o BitCrack com uma placa de vídeo Nvidia. Acesse &lt;a href=&quot;https://github.com/brichard19/BitCrack/releases&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://github.com/brichard19/BitCrack/releases&lt;/a&gt; e faça download do release&amp;nbsp;cuBitCrack.exe .&lt;/p&gt;&lt;p&gt;Antes de continuar certifique que os drivers da sua placa de vídeo estejam atualizado. Feito o download, coloque o executável&amp;nbsp; em uma pasta qualquer. Dentro desta pasta crie um arquivo com nome executar.bat com o seguinte conteúdo:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;[@echo off&lt;/p&gt;&lt;p&gt;cuBitCrack.exe --keyspace 10:1f -c 1E6NuFjCi27W5zoXg8TRdcSRq84zJeBW3k&lt;/p&gt;&lt;p&gt;pause]&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Em seguida execute o arquivo .bat e confira o resultado (imagem acima).&lt;/p&gt;&lt;p&gt;Caso apareça a mensagem de error:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;[A execução de código não pode continuar porque&amp;nbsp;cudart64_101.dll não foi encontrado. Reinstalando o programa para corrigir o problema.]&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Procure o arquivo cudart64_101.dll em seu computador. Provavelmente estará no caminho abaixo, copie o arquivo para a mesma pasta que está o executável cuBitCrack.exe .&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[C:\ProgramData\NVIDIA Corporation\Downloader\latest\GFExperience.NvStreamSrv\amd64\server]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Após quebrar a chave privada, você verá o resultado em seu terminal. O endereço testado acima já foi quebrado a um tempo, portanto utilizamos ele apenas para teste.&lt;/p&gt;&lt;p&gt;Agora para participar do desafio, acesse o endereço&amp;nbsp;&lt;a href=&quot;https://privatekeys.pw/puzzles/bitcoin-puzzle-tx&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://privatekeys.pw/puzzles/bitcoin-puzzle-tx&lt;/a&gt; e copie o &quot;Bitcoin Address&quot; e &quot;Private Key Range&quot; de qualquer um dos desafios que estão marcados em verde como &quot;UNSOLVED&quot;.&lt;/p&gt;&lt;p&gt;Por exemplo, para o desafio #71 (ainda não resolvido no momento de publicação deste tutorial), monte seu arquivo .bat da seguinte forma:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;[@echo off&lt;/p&gt;&lt;p&gt;cuBitCrack.exe --keyspace 400000000000000000:7fffffffffffffffff -c 1PWo3JeB9jrGwfHDNpdGK54CRas7fsVzXU --continue save&lt;/p&gt;&lt;p&gt;pause]&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;O argumento &quot;--continue save&quot; permitirá que você continue de onde parou caso feche o programa. Note que talvez seja mais inteligente você aleatorizar o endereço de busca em vez de percorrer cada endereço... ai entra algoritmos específicos para resolver este tipo de problema que não explicaremos aqui.&lt;/p&gt;&lt;p&gt;Boa sorte.&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Fonte:&amp;nbsp;&lt;a href=&quot;https://x.com/narcelio/status/1918087230612226356&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://x.com/narcelio/status/1918087230612226356&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description><link>http://www.limontec.com/2025/05/bitcoin-puzzle-bitcrack-tutorial.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/AVvXsEi8CPBkVLZuk4EL_gQ-8Y9FY4ETbMx7_o-w72zfQceX7q8T6fVUGS9LHv-ZVEh_DNj-zsME0RB02ihyphenhyphensNJ-2AzbPWCcfnxxJOghZUyrLZK_sHCxpt-X2QTwsy_IAtgftk2SC2JfmtLZ52sCX9JF3RkXyiQnBF_JPmLQzu93REmg-kbCiw4_BZQcU_KMEA-i/s72-c/bitcrack_teste.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2157924926610706248.post-5489826966178874569</guid><pubDate>Fri, 02 May 2025 13:44:00 +0000</pubDate><atom:updated>2025-05-09T10:12:50.239-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>Como instalar Docling com interface</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/AVvXsEgOk5Rtyu81nlAuKitQw7cTf5TpDwwTQxRXjp9YV8J2-cXJXdDi8yjPXtixMn2nX-QVFjcL44Qk_DnQ3MKddQ5MbrH5nyStbLSmhXmKVTK6wC34tr8SeQFIeBNdQ-NGZEFnsnbFBzBn-m4KZOfPK3uG2qzQpt65jr0nRlhfelMaFMOiC3wh_NS2PXkANx-v/s831/docling_serve.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;356&quot; data-original-width=&quot;831&quot; height=&quot;137&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOk5Rtyu81nlAuKitQw7cTf5TpDwwTQxRXjp9YV8J2-cXJXdDi8yjPXtixMn2nX-QVFjcL44Qk_DnQ3MKddQ5MbrH5nyStbLSmhXmKVTK6wC34tr8SeQFIeBNdQ-NGZEFnsnbFBzBn-m4KZOfPK3uG2qzQpt65jr0nRlhfelMaFMOiC3wh_NS2PXkANx-v/s320/docling_serve.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Docling é uma biblioteca de processamento de documentos com suporte a PDF, Word, Excel, HTML e imagens. Docling transforma tudo isso em dados estruturados, como JSON ou Markdown. Com suporte integrado para detecção de layout, análise de tabelas e processamento com reconhecimento de idioma, o Docling agiliza a preparação de documentos para aplicações de IA, como pesquisa e resumo, tudo isso por meio de uma interface.&lt;/p&gt;&lt;p&gt;Antes de continuar, certifique de ter instalado Docker em sua máquina. Portanto acesse o site&amp;nbsp;&lt;a href=&quot;https://docs.docker.com/desktop/setup/install/windows-install/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://docs.docker.com/desktop/setup/install/windows-install/&lt;/a&gt; e siga o procedimento normal de instalação em seu sistema.&lt;/p&gt;&lt;p&gt;Depois, com o Docker executando em sua máquina abra o prompt de comando (terminal / CMD) e digite o comando abaixo para instalar o Docling:&lt;/p&gt;&lt;p&gt;Caso não possua placa de vídeo dedicada utilize:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[docker run&amp;nbsp;-d -p 5001:5001 -e DOCLING_SERVE_ENABLE_UI=true quay.io/docling-project/docling-serve]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Com placa de vídeo dedicada:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[docker run&amp;nbsp;-d --gpus all -p 5001:5001 -e DOCLING_SERVE_ENABLE_UI=true quay.io/docling-project/docling-serve]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Após enviar o comando, aguarde o download e configuração do Docling.&lt;/p&gt;&lt;p&gt;Quando instalado com sucesso, a aplicação estará disponível no endereço&amp;nbsp;&amp;nbsp;http://0.0.0.0:5001/ui conforme ilustra a imagem abaixo:&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/AVvXsEj6_ZEP5HBVJqa9H1nQtk_PfmYmHxDAEGkG_ESD2a5c9UNOYWfRpe63NYgXnQMl0e4vncw2TA-cxpwxILt9hiVG1qm0qGqf5IDGm-3Dzdi7v7klG_SNfNq-3mGcBo5Js52U66XJdbA2WzoiWB3p4FW-aw2jPLTmsmfqlBeo1jNOioVv2xCMcpOaBhWjEn-1/s1101/docling_install_with_docker.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;637&quot; data-original-width=&quot;1101&quot; height=&quot;370&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6_ZEP5HBVJqa9H1nQtk_PfmYmHxDAEGkG_ESD2a5c9UNOYWfRpe63NYgXnQMl0e4vncw2TA-cxpwxILt9hiVG1qm0qGqf5IDGm-3Dzdi7v7klG_SNfNq-3mGcBo5Js52U66XJdbA2WzoiWB3p4FW-aw2jPLTmsmfqlBeo1jNOioVv2xCMcpOaBhWjEn-1/w640-h370/docling_install_with_docker.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;Ou simplesmente acesse&amp;nbsp;&lt;a href=&quot;http://localhost:5001/ui/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://localhost:5001/ui/&lt;/a&gt; . A interface é bem intuitiva, selecione &quot;Convert File&quot; e faça upload de um arquivo do seu computador.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Depois de subir o arquivo, clique em &quot;Process File&quot; e aguarde. Finalizado a conversão, navegue nas guias&amp;nbsp;Docling (JSON), Markdown, para ver o resultado e salvar em seu computador.&lt;/p&gt;&lt;p&gt;Agora você pode subir o novo arquivo na sua IA favorita. Você notará que a IA fornecerá resultados mais precisos que anteriormente.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Dicas:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Caso veja a mensagem de error abaixo em seu &lt;a href=&quot;https://www.limontec.com/2025/03/ia-offline-no-pc.html&quot; target=&quot;_blank&quot;&gt;OpenWebUI&lt;/a&gt;, altere a URL do Content Extraction Engine para http://ip-local:5001/ , onde ip-local deve ser substituído pelo IP da sua máquina em vez de localhost ou 0.0.0.0 .&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[HTTPConnectionPool(host=&#39;localhost&#39;, port=5001): Max retries exceeded with url: /v1alpha/convert/file (Caused by NewConnectionError(&#39;&amp;lt;urllib3.connection.HTTPCo nnection object at 0x7f8f4c1b1050&amp;gt;: Failed to establish a new connection: [Errno 111] Connection refused&#39;))]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</description><link>http://www.limontec.com/2025/05/como-instalar-docling-com-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/AVvXsEgOk5Rtyu81nlAuKitQw7cTf5TpDwwTQxRXjp9YV8J2-cXJXdDi8yjPXtixMn2nX-QVFjcL44Qk_DnQ3MKddQ5MbrH5nyStbLSmhXmKVTK6wC34tr8SeQFIeBNdQ-NGZEFnsnbFBzBn-m4KZOfPK3uG2qzQpt65jr0nRlhfelMaFMOiC3wh_NS2PXkANx-v/s72-c/docling_serve.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2157924926610706248.post-4904288326904328009</guid><pubDate>Mon, 21 Apr 2025 18:25:00 +0000</pubDate><atom:updated>2025-04-23T11:02:20.430-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>Como Usar Ollama com LangChain em Python</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/AVvXsEj76U3P-4fX-HoIsJAM_Zh-FU3IbfBkjXYu5NLzJlGm4uLjF2sd5BL0PAaJY88sSPJLqC9i3w1gKclfkJCBcwX7RK96riDz3UTU9222Ufkiok0beORZSxgGJ_2ZWPjc8hBLc43KiKj43g5-iaLHpE2Xdl0ewFNTWuuU97plnVumOm6JFBCorTMWcL4yQWKq/s1011/ia_langchain_ollama.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;527&quot; data-original-width=&quot;1011&quot; height=&quot;167&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj76U3P-4fX-HoIsJAM_Zh-FU3IbfBkjXYu5NLzJlGm4uLjF2sd5BL0PAaJY88sSPJLqC9i3w1gKclfkJCBcwX7RK96riDz3UTU9222Ufkiok0beORZSxgGJ_2ZWPjc8hBLc43KiKj43g5-iaLHpE2Xdl0ewFNTWuuU97plnVumOm6JFBCorTMWcL4yQWKq/s320/ia_langchain_ollama.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;O Ollama permite rodar LLMs localmente com performance otimizada, sem necessidade de conexão com a nuvem. No artigo anterior, aprendemos a&amp;nbsp;&lt;a href=&quot;https://www.limontec.com/2025/03/ia-offline-no-pc.html&quot; target=&quot;_blank&quot;&gt;como executar um modelo de IA no PC&lt;/a&gt; com Ollama. Neste artigo vamos continuar o projeto configurando um ambiente virtual Python e instalar a biblioteca langchain-ollama para utilizar com o modelo de IA local, nosso Ollama. Antes de continuar é importante que seu modelo esteja já executando localmente, acesse o artigo anterior para rodar seu modelo.&lt;/p&gt;&lt;p&gt;Os comandos apresentados abaixo foram executados em um diretório criado para o projeto via terminal utilizando o Visual Studio Code no Windows.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Passo 1: Criar o ambiente virtual&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Primeiramente, crie um ambiente virtual para isolar as dependências do projeto:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[python -m venv venv]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Passo 2: Ativar o ambiente virtual&lt;/b&gt;&lt;/p&gt;&lt;p&gt;No PowerShell (Windows), ative o ambiente com o comando:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[.\venv\Scripts\Activate.ps1]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Passo 3: Instalar a biblioteca langchain-ollama&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Instale a biblioteca que integra o LangChain com modelos servidos via Ollama:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[pip install -U langchain-ollama]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Exemplo de código: Consultando um modelo local via Ollama&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Após a instalação, podemos fazer perguntas a um modelo LLM rodando localmente. No exemplo abaixo, usamos o modelo dolphin3, mas você pode substituí-lo por qualquer outro modelo disponível no Ollama, como mistral, gemma, llama3, entre outros.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;script src=&quot;https://gist.github.com/limontec/1596d88dc5816efa0989485e2a6ccb03.js&quot;&gt;&lt;/script&gt;&lt;/p&gt;&lt;p&gt;Se o exemplo acima não carregar &lt;a href=&quot;https://gist.github.com/limontec/1596d88dc5816efa0989485e2a6ccb03&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;clique aqui&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Note que para inicializar o modelo use o trecho de código abaixo no qual &#39;seu-modelo&#39; é o nome do modelo listado no ollama e a url é padrão caso não tenha alterado:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[model = OllamaLLM(model=&#39;seu-modelo&#39;, base_url=&#39;http://localhost:11434&#39;)]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Para listar os modelos disponíveis localmente em sua máquina utilize o comando:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[ollama list]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Se ficou curioso, a saída da execução do código acima foi:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;[Resposta do modelo:&lt;/p&gt;&lt;p&gt;&amp;nbsp;LLM significa &quot;Language Model&quot;, que é um tipo de modelo de inteligência artificial treinado para gerar texto baseado em entradas de texto fornecidas por usuários. Ele pode entender e responder a perguntas, criar histórias e realizar tarefas linguísticas complexas com base no seu conhecimento acumulado durante o treinamento.]&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Agora que entendeu o básico, você pode utilizar a criatividade para programar seus projetos.&lt;/p&gt;</description><link>http://www.limontec.com/2025/04/langchain-ollama-modelo-llm-local.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/AVvXsEj76U3P-4fX-HoIsJAM_Zh-FU3IbfBkjXYu5NLzJlGm4uLjF2sd5BL0PAaJY88sSPJLqC9i3w1gKclfkJCBcwX7RK96riDz3UTU9222Ufkiok0beORZSxgGJ_2ZWPjc8hBLc43KiKj43g5-iaLHpE2Xdl0ewFNTWuuU97plnVumOm6JFBCorTMWcL4yQWKq/s72-c/ia_langchain_ollama.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2157924926610706248.post-3081691662933465690</guid><pubDate>Mon, 21 Apr 2025 17:34:00 +0000</pubDate><atom:updated>2025-04-21T15:17:45.182-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>[Resolvido] chromadb error failed to build</title><description>&lt;p&gt;&amp;nbsp;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrKn9MN9ud-zwMxdOBvzKBbtUESlIdT5ylRW1lfxlGyfdIXuYIyOXF5lMXCiVLw6D9BgJx2ElFwtseC2f1diW_7mzMvBS3I9bmkQDf_TCDM57oBwjwgNuvTc5xNkTDdkyf83l4hwAQO3CQuwsH0v4AbbxFyj2m1wDYD5qcAScYMbbMjOaDej5i4XcibYSJ/s1300/chromadb_error.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;371&quot; data-original-width=&quot;1300&quot; height=&quot;91&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrKn9MN9ud-zwMxdOBvzKBbtUESlIdT5ylRW1lfxlGyfdIXuYIyOXF5lMXCiVLw6D9BgJx2ElFwtseC2f1diW_7mzMvBS3I9bmkQDf_TCDM57oBwjwgNuvTc5xNkTDdkyf83l4hwAQO3CQuwsH0v4AbbxFyj2m1wDYD5qcAScYMbbMjOaDej5i4XcibYSJ/s320/chromadb_error.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Se após executar o comando &quot;pip install chromadb&quot; você se deparar com a mensagem de error abaixo:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[ERROR: Failed to build installable wheels for some pyproject.toml based projects (chroma-hnswlib)]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Utilize o método abaixo para resolver este error.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Acesse&amp;nbsp;&lt;a href=&quot;https://visualstudio.microsoft.com/pt-br/visual-cpp-build-tools/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://visualstudio.microsoft.com/pt-br/visual-cpp-build-tools/&lt;/a&gt; e faça download da&amp;nbsp;Ferramentas de compilação do Microsoft C++ .&lt;/li&gt;&lt;li&gt;Execute o arquivo baixado e em &quot;Workloads&quot; selecione &quot;Desktop development with C++&quot;, ou seja, selecione para instalação o desenvolvimento com C++.&lt;/li&gt;&lt;li&gt;Reinicie a máquina e rode novamente o comando &quot;pip install chromadb&quot;&lt;/li&gt;&lt;li&gt;Instalação concluída com sucesso.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;</description><link>http://www.limontec.com/2025/04/erro-chroma-hnswlib-pip-install.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/AVvXsEgrKn9MN9ud-zwMxdOBvzKBbtUESlIdT5ylRW1lfxlGyfdIXuYIyOXF5lMXCiVLw6D9BgJx2ElFwtseC2f1diW_7mzMvBS3I9bmkQDf_TCDM57oBwjwgNuvTc5xNkTDdkyf83l4hwAQO3CQuwsH0v4AbbxFyj2m1wDYD5qcAScYMbbMjOaDej5i4XcibYSJ/s72-c/chromadb_error.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2157924926610706248.post-231423644599195994</guid><pubDate>Tue, 11 Mar 2025 11:00:00 +0000</pubDate><atom:updated>2025-05-09T10:11:21.307-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>Como executar um modelo de IA no PC</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/AVvXsEh9VBtqQyVEDQdDVjDbtwD1dFOqklrhW7jp3FfJFLMCs3iRNMUO2xqev9l1pqexF-u5h1yppGnw2qZI7Rq0CzLoOxwwxo46lhUE77IOD_AA5FlZPDm00KaHtVTOQdEuYBUozsm0M6xTncoEuQKeIz76RHnHeGRIBwnm9TnT7PfiHB04WHFaOtXX9T0zdA6A/s738/chatgpt_interface_ia.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;297&quot; data-original-width=&quot;738&quot; height=&quot;161&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9VBtqQyVEDQdDVjDbtwD1dFOqklrhW7jp3FfJFLMCs3iRNMUO2xqev9l1pqexF-u5h1yppGnw2qZI7Rq0CzLoOxwwxo46lhUE77IOD_AA5FlZPDm00KaHtVTOQdEuYBUozsm0M6xTncoEuQKeIz76RHnHeGRIBwnm9TnT7PfiHB04WHFaOtXX9T0zdA6A/w400-h161/chatgpt_interface_ia.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p data-pm-slice=&quot;1 1 []&quot;&gt;O Ollama é uma ferramenta que permite rodar modelos de inteligência artificial localmente no seu computador. Ele é ideal para quem deseja utilizar modelos de linguagem sem depender da nuvem, garantindo maior privacidade e controle.&lt;/p&gt;&lt;p data-pm-slice=&quot;1 1 []&quot;&gt;Primeiramente, acesse &lt;a disabled=&quot;false&quot; href=&quot;https://ollama.com/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Ollama&lt;/a&gt; e faça o download da ferramenta conforme seu sistema operacional (Windows, Linux ou macOS). Em seguida, realize o processo de instalação padrão.&lt;/p&gt;&lt;p&gt;Após instalar, abra seu navegador e acesse: &lt;a disabled=&quot;false&quot; href=&quot;http://localhost:11434/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://localhost:11434/&lt;/a&gt;. Se a instalação ocorreu corretamente, você verá a mensagem &lt;strong&gt;&quot;Ollama is running&quot;&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;Agora, visite a página &lt;a disabled=&quot;false&quot; href=&quot;https://ollama.com/models&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Ollama Models&lt;/a&gt; e escolha um modelo. Para esta instalação, usaremos o &lt;strong&gt;dolphin3&lt;/strong&gt;, que ocupará cerca de 5GB no HD.&lt;/p&gt;&lt;p&gt;O dolphin3 é um modelo de inteligência artificial baseado em grandes modelos de linguagem (LLMs), projetado para fornecer respostas rápidas e precisas em diversos contextos sem censura.&lt;/p&gt;&lt;p&gt;Se desejar alterar o local onde os modelos são armazenados, siga estes passos no &lt;b&gt;Windows&lt;/b&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/AVvXsEjx5fATFjELjr5KAPPV5DRUiMjQjmyQ84uDh9-LH4jvomCkdazZ38dHJgvIjkWGzj17F_lSiqsNcUlVJ0jWx4aEksBMIVW_Q5Gq4vAGVEdhEI8jek2IrtSj8x-c36L-c1WSen_whhNbnAHTulr-475xc-opKYObg4htulcsez2Yjc7EzkiJ9i-O1UkUWwE_/s1032/IA_MODELS_FOLDER.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;341&quot; data-original-width=&quot;1032&quot; height=&quot;212&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjx5fATFjELjr5KAPPV5DRUiMjQjmyQ84uDh9-LH4jvomCkdazZ38dHJgvIjkWGzj17F_lSiqsNcUlVJ0jWx4aEksBMIVW_Q5Gq4vAGVEdhEI8jek2IrtSj8x-c36L-c1WSen_whhNbnAHTulr-475xc-opKYObg4htulcsez2Yjc7EzkiJ9i-O1UkUWwE_/w640-h212/IA_MODELS_FOLDER.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Finalize o Ollama e acesse as Variáveis de Ambiente do Windows.&lt;/li&gt;&lt;li&gt;Em Variáveis do Sistema, defina um nome para a variável.&lt;/li&gt;&lt;li&gt;Depois defina um novo caminho para a pasta onde deseja armazenar os modelos.&lt;/li&gt;&lt;li&gt;Salve as alterações e reinicie o Ollama.&lt;/li&gt;&lt;li&gt;Verifique se a pasta escolhida contém uma subpasta chamada blobs, indicando que a configuração foi aplicada corretamente.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Agora, abra o terminal (ou prompt de comando no Windows) e digite o comando abaixo para baixar e rodar o modelo escolhido:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[ollama run dolphin3]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Isso iniciará o modelo dolphin3, permitindo que você interaja com ele diretamente pelo terminal.&lt;/p&gt;&lt;p&gt;Com isso, sua instalação e configuração do Ollama estão concluídas! Agora você pode explorar diferentes modelos e utilizar a IA localmente no seu computador.&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/AVvXsEgGT4hx9VFkb0-WGFQeXgTow6q0SCi42i-GE4p0nswbb5DBBZgflwm6KN5rZI_jf13KOEbB4a69f1eLXb3Xn3ItCIfr1EarcpI_YA-AI_3Rr2RctoJmlRAljW7P9K_OxxJ0XvKBhLtBtDL3htn7v_gIcYBO3uaJHXsH5SIFOhNnD1BTOE-1uZWPQGIVhcMd/s737/ollama_prompt_instalado.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;383&quot; data-original-width=&quot;737&quot; height=&quot;332&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGT4hx9VFkb0-WGFQeXgTow6q0SCi42i-GE4p0nswbb5DBBZgflwm6KN5rZI_jf13KOEbB4a69f1eLXb3Xn3ItCIfr1EarcpI_YA-AI_3Rr2RctoJmlRAljW7P9K_OxxJ0XvKBhLtBtDL3htn7v_gIcYBO3uaJHXsH5SIFOhNnD1BTOE-1uZWPQGIVhcMd/w640-h332/ollama_prompt_instalado.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Para utilizar sua IA com uma interface semelhante ao ChatGPT, você precisará utilizar o Open WebUI.&lt;/p&gt;&lt;p data-pm-slice=&quot;1 1 []&quot;&gt;O &lt;strong&gt;Open WebUI&lt;/strong&gt; é uma interface gráfica de código aberto para modelos de IA locais. Ele permite uma experiência interativa semelhante ao ChatGPT, facilitando a comunicação com os modelos sem necessidade de usar o terminal.&lt;/p&gt;&lt;p&gt;Antes de instalar o Open WebUI, instale o &lt;strong&gt;Docker&lt;/strong&gt; acessando &lt;a disabled=&quot;false&quot; href=&quot;https://www.docker.com/&quot;&gt;Docker&lt;/a&gt; e seguindo o processo de instalação conforme seu sistema operacional.&lt;/p&gt;&lt;p&gt;Com o Docker em execução, abra o terminal e execute o seguinte comando:&lt;/p&gt;&lt;p&gt;No &lt;b&gt;Linux&lt;/b&gt;:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[docker run -d -p 3000:8080 -e OLLAMA_BASE_URL=https://localhost:11434/&amp;nbsp;-v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main]&lt;/blockquote&gt;&lt;p&gt;No &lt;b&gt;Windows&lt;/b&gt;:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[docker run -d -p 3000:8080 -e OLLAMA_BASE_URL=https://host.docker.internal:11434/&amp;nbsp;-v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main]&amp;nbsp;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Quando a instalação for concluída, você verá que a aplicação já está funcionando no endereço http://localhost:3000.&lt;/p&gt;&lt;p&gt;No Open WebUI, vá até a seção de modelos e adicione o modelo escolhido à lista de modelos disponíveis. Pronto! Agora você tem uma IA disponível offline, sem restrições, acessível por uma interface gráfica intuitiva.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Dicas:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Caso use GPU, utilize o comando abaixo:&lt;/p&gt;&lt;p&gt;No &lt;b&gt;Linux&lt;/b&gt; (antes instale o NVIDIA container, saiba mais&amp;nbsp;&lt;a href=&quot;https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;clicando aqui&lt;/a&gt;):&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[docker run -d -p 3000:8080&amp;nbsp;--gpus all -e OLLAMA_BASE_URL=http://localhost:11434/ -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:cuda]&lt;/blockquote&gt;&lt;p&gt;No &lt;b&gt;Windows&lt;/b&gt; (certifique de possuir os drivers da NVIDIA atualizado):&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[docker run -d -p 3000:8080&amp;nbsp;--gpus all -e OLLAMA_BASE_URL=http://host.docker.internal:11434/ -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:cuda]&amp;nbsp;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Caso o modelo não apareça na interface no &lt;b&gt;Linux&lt;/b&gt;, utilize&amp;nbsp; &quot;--network=host&quot; no lugar de &quot;-p 3000:8080&quot; . Então acesse a página da interface via localhost:8080. Exemplo:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[docker run -d --network=host --gpus all -e OLLAMA_BASE_URL=http://localhost:11434/ -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:cuda]&lt;/blockquote&gt;&lt;p&gt;Para manter seu OpenWebUI sempre atualizado, execute o comando abaixo para ficar verificando por nova versão a cada 5 minutos (remova a flag&amp;nbsp; &quot;--gpus all&quot; caso não use GPU):&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[docker run -d --gpus all --name watchtower --volume /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower -i 300 open-webui]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</description><link>http://www.limontec.com/2025/03/ia-offline-no-pc.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/AVvXsEh9VBtqQyVEDQdDVjDbtwD1dFOqklrhW7jp3FfJFLMCs3iRNMUO2xqev9l1pqexF-u5h1yppGnw2qZI7Rq0CzLoOxwwxo46lhUE77IOD_AA5FlZPDm00KaHtVTOQdEuYBUozsm0M6xTncoEuQKeIz76RHnHeGRIBwnm9TnT7PfiHB04WHFaOtXX9T0zdA6A/s72-w400-h161-c/chatgpt_interface_ia.png" height="72" width="72"/></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-2157924926610706248.post-2926648616224797804</guid><pubDate>Mon, 10 Mar 2025 16:51:00 +0000</pubDate><atom:updated>2025-03-10T13:51:27.359-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 reverter um commit após um merge e push no Git</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/AVvXsEg4mVFqv2REF-jZFQJrnWdbrD_rGpHrBE0UWpgiXyjsCN4HqFFORe02I44OD2tynaNlJQaTZWACj1ruDYUadKXqJqHOeHqj0T19JH4UpKeRqfUfS5iYd6cERtNsDf80Hx4MOlIXDfl6S-o-pUBNlLS96uXg5rSvsWEqGDeOyn1JNE5iNgKmEXJw9Dl0vkol/s1020/reverter_commit.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;645&quot; data-original-width=&quot;1020&quot; height=&quot;202&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4mVFqv2REF-jZFQJrnWdbrD_rGpHrBE0UWpgiXyjsCN4HqFFORe02I44OD2tynaNlJQaTZWACj1ruDYUadKXqJqHOeHqj0T19JH4UpKeRqfUfS5iYd6cERtNsDf80Hx4MOlIXDfl6S-o-pUBNlLS96uXg5rSvsWEqGDeOyn1JNE5iNgKmEXJw9Dl0vkol/s320/reverter_commit.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Se você fez um commit por engano e já enviou (&lt;code data-end=&quot;106&quot; data-start=&quot;100&quot;&gt;push&lt;/code&gt;) para o repositório remoto, siga este tutorial para voltar ao estado anterior.&lt;/p&gt;&lt;p&gt;Para encontrar o hash do commit antes do push indesejado, use:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;[git log --oneline]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p data-end=&quot;463&quot; data-start=&quot;385&quot;&gt;Isso exibirá uma lista resumida dos commits. Anote o hash do commit correto.&lt;/p&gt;&lt;p data-end=&quot;463&quot; data-start=&quot;385&quot;&gt;Execute o seguinte comando, substituindo &amp;lt;commit-hash&amp;gt; pelo hash do commit correto:&amp;nbsp;&lt;/p&gt;&lt;p data-end=&quot;463&quot; data-start=&quot;385&quot;&gt;&lt;/p&gt;&lt;blockquote&gt;[git reset --hard &amp;lt;commit-hash&amp;gt;]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p data-end=&quot;755&quot; data-start=&quot;652&quot;&gt;Isso faz seu branch local voltar exatamente ao estado desse commit, descartando mudanças posteriores.&lt;/p&gt;&lt;p data-end=&quot;755&quot; data-start=&quot;652&quot;&gt;Agora, para sobrescrever o histórico remoto com a versão corrigida, execute:&lt;/p&gt;&lt;p data-end=&quot;755&quot; data-start=&quot;652&quot;&gt;&lt;/p&gt;&lt;blockquote&gt;[git push --force]&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p data-end=&quot;755&quot; data-start=&quot;652&quot;&gt;Atenção: O --force pode causar problemas para outros colaboradores que já baixaram a versão errada. Se estiver trabalhando em equipe, avise antes de fazer isso.&amp;nbsp;Seguindo esses passos, seu branch voltará ao estado correto, eliminando commits indesejados do histórico remoto.&amp;nbsp;&lt;/p&gt;</description><link>http://www.limontec.com/2025/03/reverter-commit.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/AVvXsEg4mVFqv2REF-jZFQJrnWdbrD_rGpHrBE0UWpgiXyjsCN4HqFFORe02I44OD2tynaNlJQaTZWACj1ruDYUadKXqJqHOeHqj0T19JH4UpKeRqfUfS5iYd6cERtNsDf80Hx4MOlIXDfl6S-o-pUBNlLS96uXg5rSvsWEqGDeOyn1JNE5iNgKmEXJw9Dl0vkol/s72-c/reverter_commit.png" height="72" width="72"/></item></channel></rss>