<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2portuguesefull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>0fx66</title>
	
	<link>http://0fx66.com/blog</link>
	<description>O blog do von :)</description>
	<lastBuildDate>Fri, 03 May 2013 11:00:40 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/0fx66" /><feedburner:info uri="0fx66" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license><image><link>http://creativecommons.org/licenses/by-nc-sa/3.0/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image><feedburner:emailServiceId>0fx66</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2F0fx66" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2F0fx66" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2F0fx66" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/0fx66" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2F0fx66" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2F0fx66" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2F0fx66" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2F0fx66" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2F0fx66" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2F0fx66" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsalloy.com/?rss=http%3A%2F%2Ffeeds.feedburner.com%2F0fx66" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2F0fx66" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2F0fx66" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://www.yourminis.com/subscribe.aspx?u=http%3A%2F%2Ffeeds.feedburner.com%2F0fx66" src="http://www.yourminis.com/images/addtoyourminisbadge.gif">Subscribe with Yourminis.com</feedburner:feedFlare><feedburner:feedFlare href="http://download.attensa.com/app/get_attensa.html?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2F0fx66" src="http://www.attensa.com/blogs/attensa/WindowsLiveWriter/BadgeredintoBadges_10C02/attensa_feed_button5.gif">Subscribe with Attensa for Outlook</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2F0fx66" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://hub.netomat.net/account/account.autoSubscribe.jspa?urls=http%3A%2F%2Ffeeds.feedburner.com%2F0fx66" src="http://www.netomat.net/blogger/images/icon_netomat_feedbutton.gif">Subscribe with netomat Hub</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2F0fx66" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.flurry.com/pushRssFeed.do?r=fb&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2F0fx66" src="http://www.flurry.com/images/flurry_rss_logo2.gif">Subscribe with Flurry</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2F0fx66" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2F0fx66" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><item>
		<title>Procon SP atualiza lista de lojas online não recomendadas</title>
		<link>http://feedproxy.google.com/~r/0fx66/~3/HLvf4Ay68HY/</link>
		<comments>http://0fx66.com/blog/procon-sp-atualiza-lista-de-lojas-online-nao-recomendadas/#comments</comments>
		<pubDate>Fri, 03 May 2013 11:00:40 +0000</pubDate>
		<dc:creator>VonNaturAustreVe</dc:creator>
				<category><![CDATA[Outros]]></category>
		<category><![CDATA[Lojas]]></category>
		<category><![CDATA[Procon]]></category>
		<category><![CDATA[Utilidade]]></category>

		<guid isPermaLink="false">http://0fx66.com/blog/?p=279</guid>
		<description><![CDATA[<p>O título é auto explicativo, considero bastante relevante divulgar aqui a publicação, sempre tomem cuidado com lojas onlines e lembre-se que o reclameaqui e seu amigo! Lista de sites não recomendados []&#8216;s</p><p>The post <a href="http://0fx66.com/blog/procon-sp-atualiza-lista-de-lojas-online-nao-recomendadas/">Procon SP atualiza lista de lojas online não recomendadas</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss yarpp-related-none'>

Nenhum post relacionado.
</div>
]]></description>
				<content:encoded><![CDATA[<p>O título é auto explicativo, considero bastante relevante divulgar aqui a publicação, sempre tomem cuidado com lojas onlines e lembre-se que o <a href="http://www.reclameaqui.com.br/" target="_blank">reclameaqui</a> e seu amigo!</p>
<p><a href="http://www.procon.sp.gov.br/pdf/acs_sitenaorecomendados.pdf" title="Sites de compras não recomendados." target="_blank">Lista de sites não recomendados</a></p>
<p>[]&#8216;s</p>
<p>The post <a href="http://0fx66.com/blog/procon-sp-atualiza-lista-de-lojas-online-nao-recomendadas/">Procon SP atualiza lista de lojas online não recomendadas</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss yarpp-related-none'>
<p>Nenhum post relacionado.</p>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/0fx66?a=HLvf4Ay68HY:_FSp-yzxujI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=HLvf4Ay68HY:_FSp-yzxujI:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/0fx66?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=HLvf4Ay68HY:_FSp-yzxujI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/0fx66?i=HLvf4Ay68HY:_FSp-yzxujI:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=HLvf4Ay68HY:_FSp-yzxujI:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=HLvf4Ay68HY:_FSp-yzxujI:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/0fx66?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=HLvf4Ay68HY:_FSp-yzxujI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/0fx66?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=HLvf4Ay68HY:_FSp-yzxujI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/0fx66?i=HLvf4Ay68HY:_FSp-yzxujI:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=HLvf4Ay68HY:_FSp-yzxujI:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/0fx66?i=HLvf4Ay68HY:_FSp-yzxujI:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/0fx66/~4/HLvf4Ay68HY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://0fx66.com/blog/procon-sp-atualiza-lista-de-lojas-online-nao-recomendadas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://0fx66.com/blog/procon-sp-atualiza-lista-de-lojas-online-nao-recomendadas/</feedburner:origLink></item>
		<item>
		<title>Criptografia RSA – Algoritmos e Implementações</title>
		<link>http://feedproxy.google.com/~r/0fx66/~3/MlaXxdsbQyI/</link>
		<comments>http://0fx66.com/blog/criptografia-rsa-algoritmos-e-implementacoes/#comments</comments>
		<pubDate>Thu, 02 May 2013 13:57:10 +0000</pubDate>
		<dc:creator>VonNaturAustreVe</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[Criptografia]]></category>
		<category><![CDATA[Segurança]]></category>
		<category><![CDATA[Programação em C]]></category>
		<category><![CDATA[RSA]]></category>

		<guid isPermaLink="false">http://0fx66.com/blog/?p=273</guid>
		<description><![CDATA[<p>=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= =-[03]-=[Criptografia RSA - Algoritmos e Implementações]-=&#124;RoOtLiQuiD&#124;=-=-=-=-= =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; CRIPTOGRAFIA RSA ALGORITMOS E IMPLEMENTACOES By RoOtLiQuiD rootliquid@m&#8230; www.motdlabs.org &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;- INDICE: &#8212;&#8212;&#8212;&#8212;- 1.0 :: INTRODUÇÃO CHATA QUE NINGUÉM LÊ &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;. LINE 39 2.0 :: Breve comentário sobre Curvas Elípticas &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.. LINE 100 3.0 :: Introdução ao RSA &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230; LINE 128 4.0 :: Funcionamento do RSA [...]</p><p>The post <a href="http://0fx66.com/blog/criptografia-rsa-algoritmos-e-implementacoes/">Criptografia RSA &#8211; Algoritmos e Implementações</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss yarpp-related-none'>

Nenhum post relacionado.
</div>
]]></description>
				<content:encoded><![CDATA[<p>=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=<br />
=-[03]-=[Criptografia RSA - Algoritmos e Implementações]-=|RoOtLiQuiD|=-=-=-=-=<br />
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>CRIPTOGRAFIA RSA<br />
ALGORITMOS E IMPLEMENTACOES</p>
<p>By RoOtLiQuiD<br />
rootliquid@m&#8230;<br />
www.motdlabs.org</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>&#8212;&#8212;&#8212;&#8212;-<br />
INDICE:<br />
&#8212;&#8212;&#8212;&#8212;-</p>
<p>1.0 :: INTRODUÇÃO CHATA QUE NINGUÉM LÊ &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;. LINE 39<br />
2.0 :: Breve comentário sobre Curvas Elípticas &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.. LINE 100<br />
3.0 :: Introdução ao RSA &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230; LINE 128<br />
4.0 :: Funcionamento do RSA &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230; LINE 212<br />
4.1 :: Gerando as chaves &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230; LINE 220<br />
4.2 :: Encriptando &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230; LINE 283<br />
4.3 :: Desencriptando &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230; LINE 308<br />
4.4 :: Resumo do funcionamento do RSA &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.. LINE 325<br />
5.0 :: Breve Comentário sobre &#8220;DELAYED CODES&#8221; &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230; LINE 360<br />
6.0 :: SOURCE CODES &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.. LINE 403<br />
6.1 :: Simple RSA in C &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.. LINE 432<br />
6.2 :: Simple RSA in LISP &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.. LINE 720<br />
6.3 :: COMPLETE RSA IN C USING GNU MP LIBRARY &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230; LINE 907</p>
<p><strong>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
1.0 :: INTRODUÇÃO CHATA QUE NINGUÉM LÊ<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</strong></p>
<p>Como vc já deve saber, a criptografia eh a arte de transformar informações em MULHER, ou seja, algo que você realmente não consegue entender. Existem dois tipos de criptografia, a chamada Criptografia Simétrica, e<br />
Assimétrica.</p>
<p><strong>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
..:: Criptografia Simétrica :<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</strong></p>
<p>Durante a primeira guerra mundial o cientista Gilbert Vernam inventou um método para esconder as mensagens enviadas às tropas.</p>
<p>Uma palavra ou frase qualquer aleatoriamente escolhida servia de chave para esconder qualquer texto. O método era bem simples, as duas pessoas que queriam se comunicar deveriam ter essa mesma chave, e cada vez que uma fosse enviar um<br />
texto para a outra, deveria ser feita uma operação lógica de XOR da chave com o texto, assim os dados do texto ficavam &#8220;misturados&#8221; com a chave, não sendo possível distinguir os dois. Para decifrar o texto, a outra pessoa deveria<br />
possuir a mesma chave, bastando para isso apenas fazer o XOR novamente no texto cifrado fazendo-o virar novamente o texto original.</p>
<p>Esse método é chamado de simétrico porque os dois lados da comunicação precisam ter a mesma chave, exatamente igual, tanto para encriptar, quanto para desencriptar. Isso é um grande problema pois você precisa entregar essa chave de<br />
modo seguro a pessoa certa, pois qualquer um que tiver a mesma chave poderá decifrar a mensagem. Apesar disso, ainda hoje ele é usado, pois com esse método podemos encriptar dados em O(1), pois basta uma operação (XOR) para cada bit a<br />
ser encriptado, no método assimétrico a coisa já eh bem diferente&#8230;</p>
<p>Para gerar chaves para criptografia simétrica existem muitos algoritmos como o DES, MD5, SHA, etc&#8230;<br />
Particularmente quem se interessar pode dar uma olhada no algoritmo SKIPJACK da NSA, veja mais em: <a href="http://www.tropsoft.com/strongenc/skipjack.htm">http://www.tropsoft.com/strongenc/skipjack.htm</a> ou procure no google: Skipjack NSA algorithm</p>
<p><strong>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
..:: Criptografia Assimétrica :<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</strong></p>
<p>Nela, você tem duas chaves, uma chamada de chave pública, que é usada apenas para encriptar os dados e com ela não eh possível desencripta-los, e uma chave chamada de privada, que eh usada para desencriptar os dados. Nesse método você<br />
entrega para a outra pessoa a sua chave pública para que ela possa te mandar mensagens cifradas com a sua chave.</p>
<p>Para você mandar mensagens cifradas para a outra pessoa você precisa da chave pública dela, e vice-versa. Na criptografia assimétrica os dados não são encriptados com XOR, mas sim com cálculos matemáticos, e por isso encriptar uma grande quantidade de dados com esse método pode ser muito lento.</p>
<p>A criptografia RSA usa o método assimétrico, eu vou explicar como funciona, mas antes um breve comentário sobre as Curvas Elípticas (que também usam o método assimétrico).</p>
<p><strong>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
2.0 :: Breve comentário sobre Curvas Elípticas<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</strong></p>
<p>Atualmente o que há de mais avançado em cifragem de dados eh a criptografia baseada em Curvas Elípticas. O único algoritmo que conheço que usa isso, chama-se ECC.</p>
<p>Para o RSA, o tamanho do problema é o tamanho do módulo que deve ser fatorado. Já nas curvas elípticas, o tamanho do problema é o número de pontos N no grupo em que se está trabalhando.</p>
<p>A segurança das curvas elípticas se baseia na intratabilidade do problema do logaritmo discreto em grupos aritméticos definidos sobre os pontos de uma curva elíptica (Caraio! Foda hein!). Oferece o mesmo nível de segurança que os<br />
sistemas baseados em corpos de inteiros como o RSA, mas com tamanho de chave menor.</p>
<p>Um ECC de 160 bits equivale a um sistema RSA de 1024 bits (Putz!!!).</p>
<p>Para mais informações sobre Criptografia baseada em Curvas Elípticas acesse:<a href="http://www.lockabit.coppe.ufrj.br/downloads/academicos/ECCMono.pdf" target="_blank">http://www.lockabit.coppe.ufrj.br/downloads/academicos/ECCMono.pdf</a> Ou então digite no google Criptografia+Curvas+Elípticas</p>
<p><strong>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
3.0 :: Introducao ao RSA<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</strong></p>
<p>O algoritmo RSA foi inventado pelos professores do MIT: Ronald L. Rivest, Adi Shamir, e Leonard Adleman em 1977.</p>
<p>A empresa RSA Security que originalmente era controlada pelos inventores, detêm a patente do algoritmo. Mas pelo que eu sei essa bosta de patente só é válida nos EUA, portanto pode ficar tranquilo que o FBI não vai bater à sua<br />
porta porque vc fez um programa que usa esse algoritmo!</p>
<p>Leia mais sobre essa patente em: <a href="http://www.cyberlaw.com/rsa.html">http://www.cyberlaw.com/rsa.html</a><br />
Ah, eu ouvi dizer que essa patente expirava em junho de 2000, só que eu não consegui achar nada que confirmasse&#8230; Se alguém souber &#8230;.</p>
<p>Como já foi dito, o RSA usa criptografia assimétrica. Para que haja segurança nesse método, devemos ter um algoritmo que gera uma chave pública e uma privada de modo que seja impossível (ou quase, hehe) de determinar a chave<br />
privada mesmo sabendo a chave pública.</p>
<p>Para isso, a chave pública eh gerada através de uma &#8220;<em>one-way function</em>&#8220;, uma função matemática onde dado uma certa entrada é relativamente fácil de determinar o resultado, porém sabendo o resultado, é praticamente impossível<br />
determinar a entrada.</p>
<p>Matematicamente falando: dado X, computamos F(x) facilmente, porém, dado F(x), é impossível computar X.<br />
Funções não inversíveis são um exemplo de uma &#8220;<em>one-way function</em>&#8220;.</p>
<p>No caso do RSA, a função usada é a multiplicação de dois números primos. Dae, você deve estar pensando: &#8220;mas essa função eh inversível, se eu fatorar o resultado eu acho os dois números primos&#8221;. Pois eh, isso funciona se tivermos<br />
números pequenos, como 7 e 13, que dá 91. Se dividirmos 91 por todos os primos anteriores vamos acabar descobrindo que 91/13 dah 7 e não sobra resto, o que quer dizer que encontramos a entrada (7 e 13).</p>
<p>Apesar dessa função ser inversível, se multiplicarmos números primos muito grandes, a quantidade de números que precisaremos testar para descobrir a entrada vai ser tão grande, que torna esse trabalho impraticável. Por isso, para<br />
que essa função seja segura, devemos estar certos de que os dois números escolhidos são realmente primos e que sejam números muito grandes.</p>
<p>Por exemplo, quando dizemos que estamos trabalhando com uma chave de 1024 bits no RSA, isso quer dizer, que a chave pública tem 1024 bits, ou seja, precisamos de 1024 bits para representar o número que foi gerado pela multiplicação dos dois primos, portanto cada número primo deveria ter 512 bits.</p>
<p>Para se ter uma ideia, um número de 1024 bits é da ordem de 1 x 10^308 na representação decimal, imagine quantos números antes desse devemos testar para encontrar os dois números primos que o geraram!!! Com o computador que está na<br />
sua frente agora, você levaria mais tempo do que a idade do universo para conseguir fatorar esse número, heheheh que exagero, na verdade eu não sei quanto tempo levaria, mas seria tanto tempo que mesmo com os computadores mais modernos<br />
existentes, fatorar esse número seria uma tarefa quase impossível. O problema, é que com a computação quântica, o poder computacional seria aumentado muito, pois seria possível fazer vários cálculos ao mesmo tempo usando os vários estados que podem ter um qbit.</p>
<p>Certamente a criptografia atual não eh páreo para a computação quântica. Um cálculo que no computador comum poderia levar milhares de anos para ser concluído, com um processador quântico esse tempo pode ser reduzido para algumas horas.</p>
<p>Para tentar driblar esse problema de fatorar uma multiplicação de dois números primos existem algoritmos e teoremas que otimizam e diminuem o trabalho, não sendo preciso testar o número com todos os primos anteriores, porém ainda<br />
assim não foi encontrada uma fórmula que consiga fatorar números grandes de forma suficientemente eficiente para que ameace a criptografia atual.</p>
<p>Na prática para se fazer um sistema de criptografia seguro que usa o RSA, você vai enfrentar 3 problemas principais:</p>
<ol>
<li>Como pegar dados verdadeiramente aleatórios, para gerar os números primos.</li>
<li>Como saber se um número qualquer é realmente primo.</li>
<li>Como fazer cálculos numéricos com números de representação maior que 32 bits.</li>
</ol>
<p>Mais a frente isso será explicado.</p>
<p><strong>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
4.0 :: Funcionamento do RSA<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</strong></p>
<p>O algoritmo RSA é muito simples, ele usa apenas 3 fórmulas matemáticas, uma para gerar as chaves,uma para encriptar, e outra para desencriptar.</p>
<p><strong>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
4.1 :: Gerando as chaves<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</strong></p>
<p>Primeiro devemos gerar a chave publica e a privada, essa é a parte mais complicada. Para gerar as chaves devemos ter dois números primos aleatórios P e Q.</p>
<p><strong>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
..:: A chave pública:<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</strong></p>
<p>A chave pública é composta por dois números, N e E. O número N é a multiplicação dos dois números primos P e Q:</p>
<pre>N = P * Q</pre>
<p>Para calcular o número E, precisamos ainda calcular outro número que vai nos auxiliar, o número PHI. Que é calculado pela multiplicação dos dois primos menos 1, veja:</p>
<pre>PHI = (P-1)*(Q-1)</pre>
<p>O número E deve ser calculado de maneira que o MDC (máximo divisor comum) entre E e PHI seja 1, ou seja, de maneira que E seja relativamente primo de PHI. O número E deve satisfazer a condição:</p>
<pre>MDC( E, PHI ) == 1</pre>
<p>Para conseguir fazer isso, vamos ter que usar algumas gambiarras matemáticas.</p>
<p>OBS: O número E , sempre resulta num número pequeno (com um pequeno # de bits) como 3, 17, 50003 e etc..</p>
<p>A chave pública são apenas os números E e N, o PHI não deve de maneira nenhuma ser fornecido, pois com ele geramos o número D que é a chave privada.</p>
<p><strong>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
..:: A chave privada:<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</strong></p>
<p>A chave privada eh composta pelo número D e o N também. O número D eh o número que multiplicado por E, módulo PHI, eh igual a 1, ou seja:</p>
<p>O número D deve satisfazer a condição:</p>
<pre>( E*D ) % PHI == 1</pre>
<p>O D é também chamado de o inverso de E módulo PHI. No código exemplo eu calculo isso usando o &#8220;<em>Bizarre Extended Euclidian Algorithm</em>&#8221; ;-) Mas eu não sei bem como esse treco funciona, eu só peguei o algoritmo no google e usei! hehehe, eu sou um geek não um matemático pervertido! Veja mais em: <a href="http://www.grc.nasa.gov/WWW/price000/pfc/htc/zz_xeuclidalg.html" target="_blank">http://www.grc.nasa.gov/WWW/price000/pfc/htc/zz_xeuclidalg.html</a></p>
<p><strong>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
4.2 :: Encriptando<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</strong></p>
<p>Para encriptar qualquer tipo de dados, seja texto, imagem ou o que for, você deverá transformar tudo em números, trabalhando com 32 bits, fica fácil de fazer isso, basta pegar 4 bytes de cada vez dos dados que você quer encriptar. O número deve ser sempre unsigned long.</p>
<p>Para encriptar uma mensagem qualquer, convertemos ela em um número M, e fazemos o seguinte cálculo:</p>
<p>Mensagem encriptada (C) é igual a (Mensagem Original elevado a E) módulo N:</p>
<pre>C = M^E mod N</pre>
<p>Devemos fazer isso para todos os pedaços da mensagem. Se dividirmos uma mensagem de 20 bytes em 5 partes de 4 bytes, devemos fazer isso 5 vezes e guardar separadamente o número encriptado que foi gerado.</p>
<p>Veja que na encriptação usamos os dois números gerados para a chave pública, o N e o E.</p>
<p><strong>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
4.3 :: Desencriptando<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</strong></p>
<p>Para desencriptar a mensagem basta fazer o seguinte cálculo:</p>
<p>Mensagem Original é igual (Mensagem Encriptada elevada a D) módulo N.</p>
<pre>M = C^D mod N</pre>
<p>Depois de feito isso vc terá o número M original que faz parte da mensagem. Veja que para desencriptar precisamos saber o número D gerado para a chave pública e o N.</p>
<p><strong>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
4.4 :: Resumo do que acabou de ser dito<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</strong></p>
<p>Gerando as chaves:</p>
<p>Chave Pública: E e N<br />
Chave Privada: D e N</p>
<pre>N = P * Q
PHI = (P-1)*(Q-1)
</pre>
<p>E satisfaz a condição: MDC( E, PHI ) == 1<br />
D satisfaz a condição: ( E*D ) % PHI == 1</p>
<p>Encriptando:</p>
<pre>C = M^E mod N</pre>
<p>Desencriptando:</p>
<pre>M = C^D mod N</pre>
<p>Observe que para desencriptar você precisa saber o número D, e para saber o número D você precisa saber o número PHI, e para saber o número PHI vc precisa saber os primos P e Q. Portanto, esses números não devem de forma alguma serem revelados para terceiros. Obtendo quaisquer um dos números D, PHI, P e Q vc pode desencriptar a mensagem.</p>
<p>Na chave pública, é distribuído apenas os números E e N, o método mais comum para se atacar uma criptografia RSA é tentar fatorar o número N (que é conhecido) nos dois números primos P e Q para que assim se possa gerar a chave<br />
privada D.</p>
<p><strong>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
5.0 :: Breve Comentário sobre &#8220;DELAYED CODES&#8221;<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</strong></p>
<p>Deve-se notar que o tempo de processamento necessário para encriptar é muitas vezes menor do que o tempo necessário para desencriptar. Isso se deve por que na desencriptação, elevamos um número grande C ao expoente D que também<br />
é um número grande, enquanto na encriptação elevamos um número grande M ao expoente E, que como vimos anteriormente, é um numero pequeno, portanto o cálculo é muito mais rápido. Essa característica do RSA é pervertidamente aproveitada para gerar os chamados &#8220;<em>DELAYED CODES</em>&#8220;.</p>
<p>Quando surge um novo vírus, rapidamente os fabricantes de antivírus criam um código para detectá-lo e depois de algum período de tempo, todos os computadores infectados serão curados, o &#8220;<em>DELAYED CODE</em>&#8221; é usado para prolongar<br />
o período de tempo que os computadores ficam infectados.</p>
<p>Para que o antivírus não detecte o vírus pode-se mudar partes do código do vírus ou alguma característica do vírus após 2 meses por exemplo. Mas nesse caso o antivírus poderia ter duas versões da vacina, sendo uma com o código<br />
modificado, aí é que entra o Delayed Code. Para esconder o código fará a modificação basta criptografá-lo de maneira que demore 2 meses (ou qualquer período de tempo) para descriptografar.</p>
<p>Usando o RSA, encripta-se <em>n</em> vezes o código a ser escondido, e coloca-se a chave privada junto do código original do vírus, usando a chave privada o próprio vírus pode descriptografar o código escondido, ou ainda, os próprios fabricantes de antivírus podem descriptografar, porém, levará 2 meses para conseguir isso, pois o código foi encriptado <em>n</em> vezes e terá que ser descriptografado o mesmo número de vezes, como o tempo de encriptação eh muitas vezes menor do que o de desencriptação, isso torna possível gerar um código que leva algumas horas ou dias para criptografar mas leva meses para descriptografar. Com isso, consegue-se atrasar a análise do código do vírus<br />
para que este possa ter mais tempo para infectar computadores.</p>
<p>Essa é a ideia básica do Delayed Code, para saber mais detalhes leia: <a href="http://z0mbie.host.sk/dpgn_eng.txt" target="_blank">http://z0mbie.host.sk/dpgn_eng.txt</a></p>
<p><strong>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
6.0 :: SOURCE CODES<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</strong></p>
<p>Os tópicos seguintes trazem códigos de programas que eu fiz para implementar a criptografia RSA de 3 maneiras.</p>
<p>Na primeira ( 6.1 ) eu fiz de maneira simples usando apenas as funções aritméticas padrão do C e sem otimizar nada, por isso é lento e não consegue gerar chaves RSA maiores que 32 bits, e gera números primos aleatórios (devem<br />
ser definidos com #define antes).</p>
<p>Na segunda ( 6.2 ) eu fiz usando os mesmos algoritmos usados na 6.1, ou seja, sem otimização nenhuma, mas eu fiz em LISP e por isso podemos usar a aritmética de precisão infinita que a própria linguagem tem, e portanto podemos<br />
gerar chaves RSA maiores que 32 bits, mas eu reparei que chaves maiores q 64 bits deixam os cálculos muiiiiiito lerdos.</p>
<p>Na terceira eu fiz em C e usei a biblioteca GNU MP( <a href="http://www.swox.com/gmp/" target="_blank">http://www.swox.com/gmp/</a> ). Por isso podemos usar chaves de qualquer tamanho e eu usei funções da<br />
biblioteca para gerar os números primos aleatórios. Além disso, por ter todos os cálculos otimizados pela própria biblioteca, o programa consegue gerar chaves de 2048 bits por exemplo e encriptar/desencriptar os dados rapidamente.</p>
<p><strong>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
6.1 :: Simple RSA in C<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</strong></p>
<pre name="code" class="cpp">
/******************************************************************************/
/* SIMPLE RSA IN C */
/* BY RoOtLiQuId */
/******************************************************************************/
/* */
/* NESTA VERSAO EU IMPLEMENTEI O RSA BEM SIMPLES DE MANEIRA QUE FIQUE FACIL */
/* DE ENTENDER */
/* NAO USEI NENHUMA BIBLIOTECA, E POR ISSO A MAIOR CHAVE RSA QUE PODEMOS TER */
/* VAI SER DE 32 BITS DEVIDO A LIMITACAO DA ARITMETICA PADRAO DA LINGUAGEM C */
/******************************************************************************/
#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;

#define ULONG unsigned long long
#define LONG long long

/* como nao ensinei um jeito de achar numeros primos,
aki vao 2 numeros primos predefinidos*/
#define PRIMO1 17863
#define PRIMO2 17851

typedef struct RSA_PublicKEY {
ULONG N;
ULONG E;
} RSA_PublicKEY;


typedef struct RSA_KEY {

/* Private Key : */ ULONG D;

RSA_PublicKEY publicKey;

} RSA_KEY;


/******************************************************************************/
/* Aqui se faz o calculo do "modular inverse of an integer when that integer */
/* is relatively prime to the modulus" */
/* hehehehe, ou seja: */
/* Devemos achar D tal que : ( E*D ) % PHI == 1 */
/* Portanto usamos o Fuckin Bizzarre "Extended Euclidian Algorithm" */
/*Veja mais em http://www.grc.nasa.gov/WWW/price000/pfc/htc/zz_xeuclidalg.html*/
/******************************************************************************/
ULONG RSA_extend(ULONG E, ULONG PHI) {
LONG q, u2, u3, v2, v3, t2, t3;

u2 = 0;
u3 = (LONG)PHI;
v2 = 1;
v3 = (LONG)E;

while (v3 != 0)
{
q = u3/v3 ;
t2 = u2 - q * v2;
t3 = u3 - q * v3;

u2 = v2;
u3 = v3;

v2 = t2;
v3 = t3;
}
printf("u2 = %d u3 = %d\n", u2, u3);

if (u2 &lt; 0)
return (ULONG)u2 + PHI;
else
return (ULONG)u2;
}

/******************************************************************************/
/* Calculo do GREATEST COMMON DIVISOR */
/* ou seja, Maior Divisor Comum ou MDC */
/******************************************************************************/
ULONG RSA_GCD( ULONG e, ULONG PHI ) {
ULONG a, great;

if (e &gt; PHI) {
while (e%PHI != 0) {
a = e%PHI;
e = PHI;
PHI = a;
}
great = PHI;
} else {
while (PHI%e != 0) {
a = PHI%e;
PHI = e;
e = a;
}
great = e;
}
return great;
}

/******************************************************************************/
/* Calculo necessario para encontrar o E da formula: */
/* E satisfaz a condição: MDC( E, PHI ) == 1 */
/******************************************************************************/
ULONG RSA_tofindE( ULONG PHI, ULONG P, ULONG Q ) {
ULONG great;
ULONG e;

great = 0;
e = 2;

while (great != 1) {
e = e + 1;
great = RSA_GCD(e,PHI);
}
return e;
}


/******************************************************************************/
/* Aqui vamos usar os numeros primos PRIMO1 e PRIMO2 definidos lah em cima */
/* para gerar as chaves publicas e privadas */
/******************************************************************************/
void RSA_generateKey( RSA_KEY * key ){
ULONG P, Q, PHI;

P = PRIMO1 ;

Q = PRIMO2 ;

PHI = (P - 1) * (Q - 1);
key-&gt;publicKey.E = RSA_tofindE( PHI, P, Q );
key-&gt;publicKey.N = P * Q;
key-&gt;D = RSA_extend( key-&gt;publicKey.E, PHI );


printf( "PHI %u ", PHI );
printf( " N %u ", key-&gt;publicKey.N );
printf( " E %u ",key-&gt;publicKey.E );
printf( " D %u ",key-&gt;D );
printf( "\n\n" );
}

/******************************************************************************/
/* Funcao usada para encriptar um numero ULONG data */
/* precisamos apenas da chave publica */
/* */
/* Cripted = Message^E mod N; */
/******************************************************************************/
ULONG RSA_PublicEncrypt( ULONG data, RSA_PublicKEY publicKey ){
ULONG C, F, i;


/* Metodo ruin:
C = (ULONG)pow(data, publicKey.E) % publicKey.N;

Este metodo eh ruin pois vc vai elevar um numero grande a outro muito
grande e depois com esse resultado vai fazer um modulo pelo numero N
Ao inves de fazer assim, podemos simplismente fazer um loop onde vamos
multiplicando o numero por ele mesmo e jah vai fazendo modulo por N
Assim economizamos precisao, pois nunca teremos um numero super
gigantesco, ele vai ficar sempre no maximo do tamanho de N
*/

if ( publicKey.E % 2 == 0) {
C = 1;
F = (data*data) % publicKey.N;

for ( i = 1; i &lt;= publicKey.E/2; i++) {
C = (F*C) % publicKey.N;
}

} else {
C = data;
F = (data*data) % publicKey.N;

for ( i = 1; i &lt;= publicKey.E/2; i++) {
C = (F*C) % publicKey.N;
}

}


printf( " %u Encripted is:", data );
printf(" %u \n", C );

return C;
}


/******************************************************************************/
/* funcao usada para desencriptar um numero ULONG C */
/* Precisaremos da chave privada */
/* */
/* Message = Cripted^D mod N */
/******************************************************************************/
ULONG RSA_PrivateDecrypt( ULONG C, RSA_KEY key ){
ULONG G, F;
ULONG i;

/* metodo Ruin:
G = (ULONG)(pow( C, key.D )) % key.publicKey.N;
pelo mesmo motivo anterior
*/

if ( key.D % 2 == 0) {
G = 1;
F = (C*C) % key.publicKey.N;
for ( i = 1; i &lt;= key.D/2; i++) {
G = (F*G) % key.publicKey.N;
}
} else {
G = C;
F = (C*C) % key.publicKey.N;
for ( i = 1; i &lt;= key.D/2; i++) {
G = (F*G) % key.publicKey.N;
}
}

printf( " %u Decripted is:", C );
printf( " %u \n\n", G );

}

/* Fuckin Main Function */
int main(){

RSA_KEY key; /* declaracao da nossa chave */

printf("\n");

RSA_generateKey( &amp;key ); /* Geramos a chave */

/* Encriptamos o numero 123456789 */
ULONG c = RSA_PublicEncrypt( (ULONG)(123456789), key.publicKey );

/* Pegamos o numero encriptado e descriptografamos para ver se fica
igual ao inicial */
RSA_PrivateDecrypt( c, key );

printf("\n");

return 0;
}
/******************************************************************************/
/* END OF SIMPLE RSA IN C */
/******************************************************************************/
</pre>
<pre name="code" class"lisp">
--------------------------------------------------
6.2 :: Simple RSA in LISP
--------------------------------------------------


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; SIMPLE RSA IN LISP ;;
;; By RoOtLiQuId ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; ESTA VERSAO ESTA IMPLEMENTADA DE FORMA BEM SIMPLES, MAS O LISP USA ;;
;; ARITMETICA ABITRARIA POR PADRAO, POR ISSO PODEMOS GERAR CHAVES RSA DE ;;
;; QUAISQUER TAMANHOS DE BITS: 512, 1024, 2048, MAS EU PERCEBI QUE CHAVES ;;
;; MAIORES QUE 64 BITS FAZEM OS CALCULOS FICAREM MUITO LENTOS, POIS NESSA ;;
;; IMPLEMENTACAO EU NAO OTIMIZEI NADA ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Esquema do RSA: ;;
;; Chave P?blica: E e N ;;
;; Chave Privada: D e N ;;
;; ;;
;; N = P * Q ;;
;; PHI = (P-1)*(Q-1) ;;
;; E satisfaz a condi??o: MDC( E, PHI ) == 1 ;;
;; D satisfaz a condi??o: ( E*D ) % PHI == 1 ;;
;; ;;
;; Encriptando: ;;
;; C = M^E mod N ;;
;; ;;
;; Desencriptando: ;;
;; M = C^D mod N ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; findE_helper
;;; Desc: Funcao auxiliar de findE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun findE_helper ( phi p q great e )
(if (= great 1)
(- e 1)
(findE_helper phi p q (GCD e phi) (+ e 1) )
)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; findE
;;; Desc: Funcao usada para encontrar o valor de E que satizfaz a
;;; condicao MDC( E, PHI ) == 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun findE ( phi p q )
(findE_helper phi p q 0 2 )
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; extend_helper
;;; Desc: Funcao auxiliar de extend
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun extend_helper( e phi u2 u3 v2 v3 )
(let ( (q (floor (/ u3 v3 ) ) ) )
(let ( (t2 (- u2 (* q v2 ) ) )
(t3 (- u3 (* q v3 ) ) )
)

(if (not (= t3 0) )
(extend_helper e phi v2 v3 t2 t3 )
(if (&lt; v2 0)
(+ v2 phi)
v2
)
)
)
)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; extend
;;; Desc: Funcao baseada no extended euclidian algorithm para
;;; encontrar D tal que D satisfaz a condi??o: ( E*D ) % PHI == 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun extend( e phi )
(extend_helper e phi 0 phi 1 e )
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; expt_mod_helper
;;; Desc: Funcao auxiliar de expt_mod
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun expt_mod_helper( x y n k )
(if (= y 1)
k
(expt_mod_helper x (- y 1) n (mod (* k x ) n ) )
)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; expt_mod
;;; Desc: Funcao gambiarra matematica usada pra fazer x^y % n
;;; sem precisar calcular o valor de x^y, pois esse valor poderia
;;; ser muito alto.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun expt_mod( x y n )
(expt_mod_helper x y n x )
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; encript
;;; Desc: Funcao usada para encriptar um dado numero com a chave
;;; publica E e N previamente calculada
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun encript ( number e n )
;(mod (expt number e) n)
(expt_mod number e n )
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; decript
;;; Desc: Funcao usada para desencriptar um dado numero com a chave
;;; privada D e N previamente calculada
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun decript ( number d n )
;(mod (expt number d) n)
(expt_mod number d n )
)


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; chamadas e calculos:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Numeros Primos definidos
(setf P 1021 )
(setf Q 2689 )


(setf N (* P Q) )

(setf PHI (* (- P 1 ) (- Q 1 ) ) )
(setf E (findE PHI P Q ) )
(setf D (extend E PHI ) )


'Encriptando_o_numero_1234567
(setf enc (encript 1234567 E N ) )

'Decriptando
(setf dec (decript enc D N ) )

'resultado
dec



(quit)
</pre>
<p><strong>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
6.3 :: COMPLETE RSA IN C USING GNU MP LIBRARY<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</strong></p>
<pre name="code" class="cpp">
/******************************************************************************/
/* COMPLETE RSA IN C USING GNU MP LIBRARY */
/* BY RoOtLiQuId */
/******************************************************************************/
/* NESTA VERSAO EU USO A GNU MP LIBRARY PARA FAZER OS CALCULOS COM PRECISAO */
/* ABITRARIA, OU SEJA, PODEMOS FAZER CALCULOS COM NUMEROS MAIORES QUE 64 BITS */
/* PORTANTO DAH PRA FAZER RSA COM CHAVES BEM GRANDES, 512, 1024, */
/* 2048 BITS E MAIORES */
/* */
/* PARA SABER MAIS E BAIXAR A GNU MP ENTRE EM: */
/* http://www.swox.com/gmp/ */
/******************************************************************************/
/* */
/* OBSERVACOES: */
/* Esse programa pode usar qualquer quantidade de bits para */
/* gerar as chaves RSA */
/* Ele apenas encripta e desencripta um numero qualquer com o tamanho maximo */
/* de bits da chave RSA */
/* Para encriptar um texto ou um arquivo qualquer voce vai ter que fazer uma */
/* funcao que quebre o texto ou arquivo em varios pedacos e codifique esses */
/* pedacos em numeros que serao encriptados, de forma que posteriormente esses*/
/* numeros possam ser convertidos novamente no texto ou no arquivo original */
/* */
/* Se eu tiver tempo, depois vou fazer uma versao completa que pode encriptar */
/* e descriptar qualquer arquivo ou texto ou outro tipo de dados */
/******************************************************************************/

#include &lt;stdio.h&gt;
#include &lt;gmp.h&gt;
#include &lt;stdlib.h&gt;

typedef struct RSA_PublicKEY {
mpz_t N;
mpz_t E;
} RSA_PublicKEY;

typedef struct RSA_KEY {

/* Private Key : */ mpz_t D;

RSA_PublicKEY publicKey;

} RSA_KEY;


/******************************************************************************/
/* Gerar os dois numeros primos randonomicos */
/******************************************************************************/
void genRandomPrimes( mpz_t* prime1, mpz_t* prime2, char* seed_num,
unsigned long int seed_tick, unsigned int keySize )
{
gmp_randstate_t state;
mpz_t rand_number;
mpz_t seed;


mpz_init ( rand_number );
gmp_randinit_default( state );

printf( "%s", seed_num );

if( mpz_init_set_str (seed, seed_num, 10) != 0 ){
printf( "Erro fazendo mpz_init_set_str \n" );
exit(0);
}

if( seed_tick &lt;=0 )
seed_tick = 1;
mpz_mul_ui( seed, seed, seed_tick );


gmp_randseed( state, seed );

mpz_urandomb( rand_number, state, keySize/2 );
mpz_nextprime( *prime1, rand_number);

mpz_nextprime( *prime2, *prime1);


gmp_randclear( state );
mpz_clear( seed );
mpz_clear( rand_number );

}


/******************************************************************************/
/* Calcular o E */
/******************************************************************************/
void toFindE( mpz_t* PHI, mpz_t* e )
{
mpz_t great;

mpz_init_set_ui ( great , 0 );
mpz_set_ui ( *e, 2 );


while ( mpz_cmpabs_ui( great, 1) != 0 ) {
mpz_add_ui ( *e, *e, 1);
mpz_gcd ( great, *e , *PHI);
}

mpz_clear( great );
}

/******************************************************************************/
/* Calcular o D */
/******************************************************************************/
void extend( mpz_t* E, mpz_t* PHI, mpz_t* D) {
mpz_t q, u2, u3, v2, v3, t2, t3;
mpz_init( q );
mpz_init( u2 );
mpz_init( u3 );
mpz_init( v2 );
mpz_init( v3 );
mpz_init( t2 );
mpz_init( t3 );


mpz_set_ui (u2, 0);
mpz_set (u3, *PHI);
mpz_set_ui (v2, 1);
mpz_set (v3, *E);


while ( mpz_sgn( v3 ) != 0 )
{
mpz_cdiv_q ( q, u3, v3);

mpz_set (t2, u2);
mpz_submul (t2, q, v2); /* t2 = t2 - q times v2. */

mpz_set (t3, u3);
mpz_submul (t3, q, v3); /* t3 = t3 - q times v3. */

mpz_set (u2, v2);
mpz_set (u3, v3);

mpz_set (v2, t2);
mpz_set (v3, t3);
}

if ( mpz_sgn( u2 ) &lt; 0)
mpz_add ( *D, u2, *PHI);
else
mpz_set (*D, u2);

mpz_clear( q );
mpz_clear( u2 );
mpz_clear( u3 );
mpz_clear( v2 );
mpz_clear( v3 );
mpz_clear( t2 );
mpz_clear( t3 );
}



/******************************************************************************/
/* Gerar a chave, sem verificar se eh uma chave que funciona */
/******************************************************************************/
void makeKey( RSA_KEY* key, char* seed_num,
unsigned long int seed_tick, unsigned int keySize )
{
mpz_t prime1, prime2, prime1b, prime2b;
mpz_t PHI;


mpz_init ( prime1 );
mpz_init ( prime2 );
mpz_init ( PHI );
mpz_init ( key-&gt;publicKey.N );
mpz_init ( key-&gt;publicKey.E );
mpz_init ( key-&gt;D );



genRandomPrimes( &amp;prime1, &amp;prime2, seed_num, seed_tick, keySize );

printf( "Prime1 = %s \n", mpz_get_str (NULL, 10, prime1) );
printf( "Prime2 = %s \n", mpz_get_str (NULL, 10, prime2) );



/* N = P * Q */
mpz_mul ( key-&gt;publicKey.N, prime1, prime2);
printf( "N = %s \n", mpz_get_str (NULL, 10, key-&gt;publicKey.N) );



/* PHI = (P-1)*(Q-1) */
mpz_init ( prime1b );
mpz_init ( prime2b );
mpz_sub_ui( prime1b, prime1, 1);
mpz_sub_ui( prime2b, prime2, 1);
mpz_mul ( PHI, prime1b, prime2b );
mpz_clear( prime1b );
mpz_clear( prime2b );
printf( "PHI = %s \n", mpz_get_str (NULL, 10, PHI) );




/* E satisfaz a condição: MDC( E, PHI ) == 1 */
toFindE( &amp;PHI, &amp;key-&gt;publicKey.E );
printf( "E = %s \n", mpz_get_str (NULL, 10, key-&gt;publicKey.E) );



/* D satisfaz a condição: ( E*D ) % PHI == 1 */
extend( &amp;key-&gt;publicKey.E, &amp;PHI, &amp;key-&gt;D );


printf( "D = %s \n", mpz_get_str (NULL, 10, key-&gt;D) );




mpz_clear( prime1 );
mpz_clear( prime2 );
mpz_clear( PHI );
}




/******************************************************************************/
/* Encriptar */
/******************************************************************************/
void publicEncrypt( mpz_t data, RSA_PublicKEY publicKey, mpz_t cripted )
{
mpz_powm ( cripted, data, publicKey.E, publicKey.N);
}

/******************************************************************************/
/* Decriptar */
/******************************************************************************/
void publicDecrypt( mpz_t cripted, RSA_KEY key, mpz_t data )
{
mpz_powm ( data, cripted, key.D, key.publicKey.N);
}




/******************************************************************************/
/* Gerar a chave, e verificar se eh uma chave que funciona, se nao for, */
/* gera outra aumentando o seed_tick */
/* Eu tive que fazer isso, pois a funcao que gera os dois numeros primos pode */
/* errar, ela nao eh 100% confiavel, ela pode gerar um numero que nao eh primo*/
/* e o algoritmo do RSA soh funciona quando os dois numeros sao primos */
/* verdadeiros, por isso temos que testar se a chave funciona */
/******************************************************************************/
void InitAndMakeValidKey( RSA_KEY* key, char* seed_num, unsigned int keySize )
{
unsigned long int seed_tick = 1;
mpz_t data, cripted, decripted;


mpz_init( cripted );
mpz_init( decripted );
mpz_init_set_str( data, "12345", 10);

do{
makeKey( key, seed_num, seed_tick, keySize );

publicEncrypt( data, key-&gt;publicKey, cripted );
publicDecrypt( cripted, *key, decripted );

seed_tick++;
}while( mpz_cmp( data, decripted ) != 0 );
}









/* Fuckin Main Function */
int main()
{
/* OBS: a random seed deve ser uma string de um numero bem grande */
/* O melhor seria pedir pro usuario entrar com um numero aleatorio */
#define RANDOM_SEED "9423477068029340805793923728080760045047333655414855309485"

/* Tamanho em BITS da chave RSA */
#define KEY_SIZE 1024


RSA_KEY key;
InitAndMakeValidKey( &amp;key, RANDOM_SEED, KEY_SIZE );
mpz_t data, cripted, decripted;

mpz_init( cripted );
mpz_init( decripted );

/* Inicializar os dados que serao encriptados */
mpz_init_set_str( data, "55555555555555555555555555555555555555555555", 10);


printf( "\n\n\n" );
printf( "N = %s \n", mpz_get_str (NULL, 10, key.publicKey.N) );
printf( "DATA = %s \n", mpz_get_str (NULL, 10, data) );

/* encriptar */
publicEncrypt( data, key.publicKey, cripted );
publicDecrypt( cripted, key, decripted );

/* decriptar */
printf( "CRIPTED = %s \n", mpz_get_str (NULL, 10, cripted) );
printf( "DECRIPTED = %s \n", mpz_get_str (NULL, 10, decripted) );

return 0;
}


/******************************************************************************/
/* END OF COMPLETE RSA IN C USING GNU MP LIBRARY */
/******************************************************************************/
</pre>
<p>The post <a href="http://0fx66.com/blog/criptografia-rsa-algoritmos-e-implementacoes/">Criptografia RSA &#8211; Algoritmos e Implementações</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss yarpp-related-none'>
<p>Nenhum post relacionado.</p>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/0fx66?a=MlaXxdsbQyI:Vqa_Wx9qNmM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=MlaXxdsbQyI:Vqa_Wx9qNmM:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/0fx66?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=MlaXxdsbQyI:Vqa_Wx9qNmM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/0fx66?i=MlaXxdsbQyI:Vqa_Wx9qNmM:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=MlaXxdsbQyI:Vqa_Wx9qNmM:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=MlaXxdsbQyI:Vqa_Wx9qNmM:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/0fx66?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=MlaXxdsbQyI:Vqa_Wx9qNmM:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/0fx66?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=MlaXxdsbQyI:Vqa_Wx9qNmM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/0fx66?i=MlaXxdsbQyI:Vqa_Wx9qNmM:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=MlaXxdsbQyI:Vqa_Wx9qNmM:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/0fx66?i=MlaXxdsbQyI:Vqa_Wx9qNmM:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/0fx66/~4/MlaXxdsbQyI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://0fx66.com/blog/criptografia-rsa-algoritmos-e-implementacoes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://0fx66.com/blog/criptografia-rsa-algoritmos-e-implementacoes/</feedburner:origLink></item>
		<item>
		<title>FLISOL DF 2013</title>
		<link>http://feedproxy.google.com/~r/0fx66/~3/BDJmcutTcgw/</link>
		<comments>http://0fx66.com/blog/flisol-df-2013/#comments</comments>
		<pubDate>Sat, 20 Apr 2013 18:04:59 +0000</pubDate>
		<dc:creator>VonNaturAustreVe</dc:creator>
				<category><![CDATA[Outros]]></category>
		<category><![CDATA[eventos]]></category>
		<category><![CDATA[flisol]]></category>

		<guid isPermaLink="false">http://0fx66.com/blog/?p=266</guid>
		<description><![CDATA[<p>Iae galera quem vai no flisol-df deste ano levanta a mão: o/ FLISOL? Que diabos é isso? O Festival Latino Americano de Instalação de Software Livre – FLISol é um evento internacional, realizado anualmente, e que ocorre de forma simultânea em diversas cidades da América Latina. O Flisol é um evento descentralizado, onde diversas comunidades organizam e realizam [...]</p><p>The post <a href="http://0fx66.com/blog/flisol-df-2013/">FLISOL DF 2013</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss yarpp-related-none'>

Nenhum post relacionado.
</div>
]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;">Iae galera quem vai no flisol-df deste ano levanta a mão: o/<br />
<a href="http://0fx66.com/blog/wp-content/uploads/2013/04/banner2013-300x171.png"><img class="aligncenter size-full wp-image-267" alt="Banner do FLISOL-DF 2013" src="http://0fx66.com/blog/wp-content/uploads/2013/04/banner2013-300x171.png" width="300" height="171" /></a></p>
<h2 style="text-align: justify;">FLISOL? Que diabos é isso?</h2>
<p style="text-align: justify;">O <b>Festival Latino Americano de Instalação de Software Livre – FLISol</b> é um evento internacional, realizado anualmente, e que ocorre de forma simultânea em diversas cidades da <a title="América Latina" href="http://pt.wikipedia.org/wiki/Am%C3%A9rica_Latina">América Latina</a>. O Flisol é um evento descentralizado, onde diversas comunidades organizam e realizam seu festival, de forma voluntária, tendo como principal objetivo promover o uso de software livre, apresentando sua filosofia, alcance, avanços e desenvolvimento ao público em geral.</p>
<p style="text-align: justify;">O Flisol acontece, historicamente, no 4º sábado de abril (em 2006 foi no 25 de março; em 2007, 28 de abril; 2008, 26 de abril; 2009 e 2010, no dia 24 de abril; 2011, no dia 9 de abril; 2012, no dia 28 de abril). O Flisol 2013 está marcado para o dia 27 de abril.</p>
<p style="text-align: justify;">O evento é gratuito e aberto a todo o público: curiosos, interessados e amantes do <a title="Software Livre" href="http://pt.wikipedia.org/wiki/Software_Livre">Software Livre</a>. Nesse dia os voluntários propõe a instalação de <a title="Software Livre" href="http://pt.wikipedia.org/wiki/Software_Livre">Software Livre</a>, como distribuições de <a title="Gnu" href="http://pt.wikipedia.org/wiki/Gnu">Gnu</a>/<a title="Linux" href="http://pt.wikipedia.org/wiki/Linux">Linux</a>, sistemas <a title="BSD" href="http://pt.wikipedia.org/wiki/BSD">BSD</a>, e aplicativos livres para <a title="Windows" href="http://pt.wikipedia.org/wiki/Windows">Windows</a> em geral. Alguns eventos também contam com palestras, oficinas, sala de degustação e gravações de mídias (live-CD/DVD e/ou pendrives).</p>
<h2 style="text-align: justify;">Aonde vai ser nesse ano?</h2>
<p style="text-align: justify;">IESB OESTE – Ceilândia Norte QNN 31 – Áreas Especiais B/C/D/E &#8211; Ceilândia – DF, <a title="Mapa da IESB OESTE unidade ceilândia." href="http://wikimapia.org/#lat=-15.8103944&amp;lon=-48.1254843&amp;z=18&amp;l=9&amp;m=b&amp;search=iesb%20oeste" target="_blank">aqui</a> o mapa.</p>
<h2 style="text-align: justify;">Quando vai ser?</h2>
<p style="text-align: justify;">Vai ser 27 abril 2013 das 09 às 17 horas xD</p>
<p style="text-align: justify;">Mais informações <a title="Site do FLISOLDF" href="http://flisoldf.blog.br/" target="_blank">aqui</a>.</p>
<p style="text-align: justify;">Vejo vocês lá :)</p>
<p>The post <a href="http://0fx66.com/blog/flisol-df-2013/">FLISOL DF 2013</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss yarpp-related-none'>
<p>Nenhum post relacionado.</p>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/0fx66?a=BDJmcutTcgw:BlIbekvv3gs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=BDJmcutTcgw:BlIbekvv3gs:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/0fx66?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=BDJmcutTcgw:BlIbekvv3gs:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/0fx66?i=BDJmcutTcgw:BlIbekvv3gs:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=BDJmcutTcgw:BlIbekvv3gs:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=BDJmcutTcgw:BlIbekvv3gs:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/0fx66?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=BDJmcutTcgw:BlIbekvv3gs:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/0fx66?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=BDJmcutTcgw:BlIbekvv3gs:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/0fx66?i=BDJmcutTcgw:BlIbekvv3gs:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=BDJmcutTcgw:BlIbekvv3gs:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/0fx66?i=BDJmcutTcgw:BlIbekvv3gs:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/0fx66/~4/BDJmcutTcgw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://0fx66.com/blog/flisol-df-2013/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://0fx66.com/blog/flisol-df-2013/</feedburner:origLink></item>
		<item>
		<title>CouchDB vs MongoDB</title>
		<link>http://feedproxy.google.com/~r/0fx66/~3/3V7H6KKWpjM/</link>
		<comments>http://0fx66.com/blog/couchdb-vs-mongodb/#comments</comments>
		<pubDate>Sun, 07 Apr 2013 18:06:44 +0000</pubDate>
		<dc:creator>VonNaturAustreVe</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[NoSQL]]></category>
		<category><![CDATA[banco de dados]]></category>
		<category><![CDATA[couchDB]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[nosql]]></category>

		<guid isPermaLink="false">http://0fx66.com/blog/?p=261</guid>
		<description><![CDATA[<p>Segue abaixo uma excelente apresentação de slides contendo um comparativo muito bom para os indecisos :) CouchDB Vs MongoDB from Gabriele Lana Podemos encontrar outros benchmarks aqui e aqui também! Até o momento tive boas experiências utilizando mongoDB. []&#8216;s</p><p>The post <a href="http://0fx66.com/blog/couchdb-vs-mongodb/">CouchDB vs MongoDB</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss yarpp-related-none'>

Nenhum post relacionado.
</div>
]]></description>
				<content:encoded><![CDATA[<p>Segue abaixo uma excelente apresentação de slides contendo um comparativo muito bom para os indecisos :)</p>
<p><iframe src="http://www.slideshare.net/slideshow/embed_code/2982288?rel=0" width="512" height="421" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen webkitallowfullscreen mozallowfullscreen> </iframe>
<div style="margin-bottom:5px"> <strong> <a href="http://www.slideshare.net/gabriele.lana/couchdb-vs-mongodb-2982288" title="CouchDB Vs MongoDB" target="_blank">CouchDB Vs MongoDB</a> </strong> from <strong><a href="http://www.slideshare.net/gabriele.lana" target="_blank">Gabriele Lana</a></strong> </div>
<p>Podemos encontrar outros benchmarks <a href="http://www.kchodorow.com/blog/2009/06/29/couchdb-vs-mongodb-benchmark/" title="Couchdb vs Mongodb benchmark" target="_blank">aqui</a> e <a href="http://www.scalabiliti.com/blog/mongodb_vs_mysql" title="MongoDb vs MySql - Fight !! · Scalabiliti" target="_blank">aqui</a> também!</p>
<p>Até o momento tive boas experiências utilizando mongoDB.</p>
<p>[]&#8216;s</p>
<p>The post <a href="http://0fx66.com/blog/couchdb-vs-mongodb/">CouchDB vs MongoDB</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss yarpp-related-none'>
<p>Nenhum post relacionado.</p>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/0fx66?a=3V7H6KKWpjM:7iho1VzfNJI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=3V7H6KKWpjM:7iho1VzfNJI:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/0fx66?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=3V7H6KKWpjM:7iho1VzfNJI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/0fx66?i=3V7H6KKWpjM:7iho1VzfNJI:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=3V7H6KKWpjM:7iho1VzfNJI:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=3V7H6KKWpjM:7iho1VzfNJI:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/0fx66?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=3V7H6KKWpjM:7iho1VzfNJI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/0fx66?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=3V7H6KKWpjM:7iho1VzfNJI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/0fx66?i=3V7H6KKWpjM:7iho1VzfNJI:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=3V7H6KKWpjM:7iho1VzfNJI:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/0fx66?i=3V7H6KKWpjM:7iho1VzfNJI:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/0fx66/~4/3V7H6KKWpjM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://0fx66.com/blog/couchdb-vs-mongodb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://0fx66.com/blog/couchdb-vs-mongodb/</feedburner:origLink></item>
		<item>
		<title>Aprendo utilizando a técnica shuhari</title>
		<link>http://feedproxy.google.com/~r/0fx66/~3/S7BJFNcA6yo/</link>
		<comments>http://0fx66.com/blog/aprendo-com-a-tecnica-shuhari/#comments</comments>
		<pubDate>Tue, 02 Apr 2013 14:20:41 +0000</pubDate>
		<dc:creator>VonNaturAustreVe</dc:creator>
				<category><![CDATA[Pensamentos]]></category>
		<category><![CDATA[Aprendizado]]></category>
		<category><![CDATA[artes marciais]]></category>
		<category><![CDATA[Filosofia]]></category>

		<guid isPermaLink="false">http://0fx66.com/blog/?p=246</guid>
		<description><![CDATA[<p>Hoje vou falar sobre uma metodologia muito interessante para o aprendizado, infelizmente não vejo ela ser utilizada fora do berço das artes marciais apesar de seu grande potencial&#8230; O termo shuhari tem origem nas artes marciais, e a principal e mais utilizada forma de aprendizado neste campo. Que significa: Shu: obedecer/protejer; Ha: romper/modificar; Ri: separar/superar; [...]</p><p>The post <a href="http://0fx66.com/blog/aprendo-com-a-tecnica-shuhari/">Aprendo utilizando a técnica shuhari</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/a-parabola-da-faixa-preta/' rel='bookmark' title='A parábola da faixa preta'>A parábola da faixa preta</a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p><a href="http://0fx66.com/blog/wp-content/uploads/2013/04/shuhari.jpg"><img src="http://0fx66.com/blog/wp-content/uploads/2013/04/shuhari.jpg" alt="shuhari" width="400" height="244" class="aligncenter size-full wp-image-251" /></a>Hoje vou falar sobre uma metodologia muito interessante para o aprendizado, infelizmente não vejo ela ser utilizada fora do berço das artes marciais apesar de seu grande potencial&#8230;</p>
<p>O termo shuhari tem origem nas artes marciais, e a principal e mais utilizada forma de aprendizado neste campo. Que significa:</p>
<ul>
<li>Shu: obedecer/protejer;</li>
<li>Ha: romper/modificar;</li>
<li>Ri: separar/superar;</li>
</ul>
<p>Só pelo significado podemos observar que ela é segmentada em três pontos ou etapas.</p>
<p>Na primeira etapa o shu, o aprendiz deve apenas observar e repetir o que foi visto, repete o movimento/ação nos mínimos detalhes sem questionamentos, pois o importante nesta etapa é obter uma base dos movimentos ou seja ter um ponto de partida. Por exemplo um karateca vai repetir o kata igual ao demonstrado pelo seu sensei.</p>
<p>Na segunda etapa o ha, o discípulo começa a questionar aqueles movimentos que foram aprendiz na etapa anterior, pensa na real motivação daquele movimento/ação ou seja vai começar a pensar. Por exemplo é realizado um movimento durante a execução é o karateca vai pensar na necessidade daquele golpe dentro do kata, entender a aplicação dele dessa forma ele começa a entender por que aquele golpe e desferido naquela etapa do katar e qual o próximo golpe que melhor se encaixa naquele katar.</p>
<p>Na terceira é etapa o ri, também chamada de etapa da transcendência, e onde com base na experiência, princípios, instintos o aprendiz deixa de ser um aprendiz e agora é um mestre de si mesmo, não mais repetindo o caminho do mestre, mas definindo o seu próprio.</p>
<p>Como podem observar esta metodologia pode muito bem aplicada para o aprendizado de programação, matemática, física, filosofia entre outras ciências.</p>
<p>&nbsp;</p>
<p>Referências:</p>
<p><a href="http://techbot.me/2011/05/criando-um-programador/" title="Criando um programador" target="_blank">http://techbot.me/2011/05/criando-um-programador/</a><br />
<a href="http://www.cao.pt/surya/jc_5_1.htm" title="OS ESTÁDIOS DE EVOLUÇÃO DO KATA: SHU HA RI" target="_blank">http://www.cao.pt/surya/jc_5_1.htm</a></p>
<p>[]&#8216;s</p>
<p>The post <a href="http://0fx66.com/blog/aprendo-com-a-tecnica-shuhari/">Aprendo utilizando a técnica shuhari</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/a-parabola-da-faixa-preta/' rel='bookmark' title='A parábola da faixa preta'>A parábola da faixa preta</a></li>
</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/0fx66?a=S7BJFNcA6yo:KikU0AIoI9Y:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=S7BJFNcA6yo:KikU0AIoI9Y:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/0fx66?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=S7BJFNcA6yo:KikU0AIoI9Y:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/0fx66?i=S7BJFNcA6yo:KikU0AIoI9Y:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=S7BJFNcA6yo:KikU0AIoI9Y:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=S7BJFNcA6yo:KikU0AIoI9Y:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/0fx66?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=S7BJFNcA6yo:KikU0AIoI9Y:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/0fx66?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=S7BJFNcA6yo:KikU0AIoI9Y:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/0fx66?i=S7BJFNcA6yo:KikU0AIoI9Y:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=S7BJFNcA6yo:KikU0AIoI9Y:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/0fx66?i=S7BJFNcA6yo:KikU0AIoI9Y:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/0fx66/~4/S7BJFNcA6yo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://0fx66.com/blog/aprendo-com-a-tecnica-shuhari/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://0fx66.com/blog/aprendo-com-a-tecnica-shuhari/</feedburner:origLink></item>
		<item>
		<title>Meu ambiente de desenvolvimento em 7 itens</title>
		<link>http://feedproxy.google.com/~r/0fx66/~3/4AnbGlqtb2A/</link>
		<comments>http://0fx66.com/blog/meu-ambiente-de-desenvolvimento-em-7-itens/#comments</comments>
		<pubDate>Thu, 28 Mar 2013 19:51:45 +0000</pubDate>
		<dc:creator>VonNaturAustreVe</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[Ambiente]]></category>
		<category><![CDATA[desenvolvimento]]></category>

		<guid isPermaLink="false">http://0fx66.com/blog/?p=236</guid>
		<description><![CDATA[<p>Meu ambiente de desenvolvimento em 7 itens Anda rolando um meme entre os desenvolvedores pela internet a fora, onde ele descrevem o seus ambientes de desenvolvimento. Até o momento ninguém me convidou mas como sou um bom intrometido então vamo que vamo :) Sistema Operacional/Máquina Meu sistema operacional oficial e o Ubuntu, sou ex-slacker, estou [...]</p><p>The post <a href="http://0fx66.com/blog/meu-ambiente-de-desenvolvimento-em-7-itens/">Meu ambiente de desenvolvimento em 7 itens</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss yarpp-related-none'>

Nenhum post relacionado.
</div>
]]></description>
				<content:encoded><![CDATA[<h1 style="text-align: justify;">Meu ambiente de desenvolvimento em 7 itens</h1>
<p style="text-align: justify;">Anda rolando um meme entre os desenvolvedores pela internet a fora, onde ele descrevem o seus ambientes de desenvolvimento. Até o momento ninguém me convidou mas como sou um bom intrometido então vamo que vamo :)</p>
<h2 style="text-align: justify;">Sistema Operacional/Máquina</h2>
<p style="text-align: justify;">Meu sistema operacional oficial e o Ubuntu, sou ex-slacker, estou utilizando a versão 10.10 dele com o ambiente XFCE (ahh XFCE me acompanha desde os tempos do slackware 11&#8230;), meu notebook é um humilde Lenovo modelo g475, sua configuração bastante modesta: AMD Vision Dual-Core C50, 8GB ram DDR3, 50GB, Gravador de DVD, Leitor de Cartões de 14”. Costuma me atender bem, já que desenvolvimento de verdade uso o desktop.</p>
<p style="text-align: justify;">O meu desktop com AMD Phenom 2 x4 925 (2.8Ghz com overclock em 3.7Ghz), sua placa-mãe e uma ASUS M4N68T-M LE, 16GB de memória DDR3 (4x pente Kingston DDR3 1333), 2TB de HD (com um Seagate 2.0TB 5900RPM), minha VGA é uma AMD/ATI Radeon Hd4850.</p>
<p style="text-align: justify;">Como puderam notar uso um kit AMD completo, o notebook está com xubuntu 12.10, e no desktop tem slackware 14 com windows 7 em dual boot (para os jogos hehe).</p>
<h2 style="text-align: justify;">Editor</h2>
<p style="text-align: justify;"><b>Vim:</b> Uso o vim para editar qualquer texto simples ou programar em C/C++, asm e shellscript.</p>
<p style="text-align: justify;"><b>Geany:</b> Venho usando cada vez mais o geany para programa em C/C++, encontrei essa IDE ano passado e a apresentei aos meus amigos de faculdade que buscavam uma alternativa ao Dev-C++ no Linux, acabei me apaixonando pelo geany e sua simplicidade.</p>
<p style="text-align: justify;"><b>Eclipse:</b> Sinto muito amantes do netbeans, mas o eclipse e melhor (lá vem os flames) como ganho a vida desenvolvendo na plataforma Java não tem IDE melhor para esta tecnologia que o eclipse, utilizo ele combinado com o subeclipse e Jboss tools consigo produtividade várias vezes superior ao netbeans.</p>
<h2 style="text-align: justify;">Browser</h2>
<p style="text-align: justify;">Meu navegador oficial e o Firefox, utilizo diversas extensões (já fiz uma lista das extensões que uso, <a href="http://0fx66.com/blog/wp-admin/Extensões%20interessantes%20do%20Firefox" target="_blank">aqui</a>), o meu navegador alternativo é o Chromium ou o opera.</p>
<h2 style="text-align: justify;">Terminal e Workspaces</h2>
<p style="text-align: justify;">Uso o bash, trabalho com 2 monitores simultaneamente além do notebook, então as vezes fico meio perdido kkkk</p>
<h2 style="text-align: justify;">Controle de versão</h2>
<p style="text-align: justify;">Uso o SVN para os sistemas java e o git para os pessoaos, para compartilhar arquivos (pdf, teses, monografias, textos em geral com outras pessoas) uso o <a href="http://www.4shared.com/dir/UgeSH_F4/papers.html" target="_blank" name="Meu HD virtual com diversos arquivos pdf.">4shared</a> ou hospedo via ftp aqui no blog mesmo.</p>
<h2 style="text-align: justify;">Música</h2>
<p style="text-align: justify;">Uso o amarok, até hoje não encontrei nenhum player superior ao amarok, com posso organizar de forma simples e rápida minhas playlist além de integra-lo com o mySQL (futuramente irei escrever um texto explicando como fazer isso) para deixá-lo ainda mais veloz :)</p>
<h2 style="text-align: justify;">Outros</h2>
<p style="text-align: justify;">Uso o <a href="http://freemind.sourceforge.net/" target="_blank" name="freemind"><b>freemind</b></a> para criar mapas mentais, <a href="http://gftp.seul.org/" target="_blank" name="gFTP"><b>gFTP</b></a> para acessar FTP, <b><a href="http://www.nmap.org/" target="_blank" name="nmap">nmap</a>, <a href="http://www.wireshark.org/" target="_blank" name="wireshark">wireshark</a></b>, <a href="http://netcat.sourceforge.net/" target="_blank"><b>netcat</b></a> além dos obrigatórios (ping, tracerout, whois, ssh), quando programando em C uso o <a href="http://www.gnu.org/software/gdb/" target="_blank"><b>GDB</b></a> em conjunto com <a href="http://valgrind.org/" target="_blank" name="Valgrind"><b>valgrind</b></a> para poder encontrar vazamentos de memória, o Astah<b> </b>para trabalhar com UML.</p>
<p style="text-align: justify;">[]&#8216;s</p>
<p>The post <a href="http://0fx66.com/blog/meu-ambiente-de-desenvolvimento-em-7-itens/">Meu ambiente de desenvolvimento em 7 itens</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss yarpp-related-none'>
<p>Nenhum post relacionado.</p>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/0fx66?a=4AnbGlqtb2A:urbn-VjDquU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=4AnbGlqtb2A:urbn-VjDquU:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/0fx66?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=4AnbGlqtb2A:urbn-VjDquU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/0fx66?i=4AnbGlqtb2A:urbn-VjDquU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=4AnbGlqtb2A:urbn-VjDquU:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=4AnbGlqtb2A:urbn-VjDquU:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/0fx66?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=4AnbGlqtb2A:urbn-VjDquU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/0fx66?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=4AnbGlqtb2A:urbn-VjDquU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/0fx66?i=4AnbGlqtb2A:urbn-VjDquU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=4AnbGlqtb2A:urbn-VjDquU:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/0fx66?i=4AnbGlqtb2A:urbn-VjDquU:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/0fx66/~4/4AnbGlqtb2A" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://0fx66.com/blog/meu-ambiente-de-desenvolvimento-em-7-itens/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://0fx66.com/blog/meu-ambiente-de-desenvolvimento-em-7-itens/</feedburner:origLink></item>
		<item>
		<title>Por que estou abandonando os serviços da Google</title>
		<link>http://feedproxy.google.com/~r/0fx66/~3/8-CO2eQDJfw/</link>
		<comments>http://0fx66.com/blog/estou-abandonando-os-servicos-da-google/#comments</comments>
		<pubDate>Sun, 24 Mar 2013 22:12:39 +0000</pubDate>
		<dc:creator>VonNaturAustreVe</dc:creator>
				<category><![CDATA[Pensamentos]]></category>

		<guid isPermaLink="false">http://0fx66.com/blog/?p=227</guid>
		<description><![CDATA[<p>Por que estou abandonando os serviços da Google? Sim não leram errado! Estou abandonando os serviços da Google. Tomei esta decisão depois do fim do seu serviço de leitura de feeds, o ultimamente tão aclamado Google Reader. Foi para min um choque da mesma forma que a morte do Google Wave, sendo este um serviço [...]</p><p>The post <a href="http://0fx66.com/blog/estou-abandonando-os-servicos-da-google/">Por que estou abandonando os serviços da Google</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss yarpp-related-none'>

Nenhum post relacionado.
</div>
]]></description>
				<content:encoded><![CDATA[<h1>Por que estou abandonando os serviços da Google?</h1>
<p>Sim não leram errado! Estou abandonando os serviços da Google. Tomei esta decisão depois do <a href="http://www.gizmodo.com.br/fim-google-reader/" target="_blank">fim do seu serviço de leitura de feeds</a>, o ultimamente tão aclamado Google Reader. Foi para min um choque da mesma forma que a morte do Google Wave, sendo este um serviço que eu utilizava muito, em especial quando precisava lidar com projetos em equipe a distância. A Google nunca valorizou o Reader como deveria. Ele contava com recursos sociais que eram muito bons, e que forma removido na reformulação deste.</p>
<p>O anuncio do fim do Reader pegou todo mundo surpresa, os usuários deste ficaram boquiaberto, causam uma certa repercussão pela internet afora, no dia posterior foram surgindo enumeras alternativas, algumas bastante bonitas como o <a href="http://www.feedly.com/" target="_blank">feedly</a> outras alternativas como o <a href="http://br-linux.org/2013/alternativa-ao-moribundo-google-reader-instale-o-tiny-tiny-rss-no-seu-servidor/" target="_blank">Tiny Tiny RSS</a> que permitiam maior liberdade para os usuários. Mas nenhuma me agradou, tentei até utilizar o Thunderbird (sim ele também lê RSS, como também é um ótimo cliente para chat do Facebook), acabei começando a utilizar o <a href="http://lzone.de/liferea/" target="_blank">liferea</a>, sendo este o que mais me agradou.</p>
<p>Com o fim do Reader, comecei a repensar algumas coisas, principalmente quando ao <i>buzz</i> da cloud computing, conforme já descrevi <a href="http://0fx66.com/blog/os-perigos-da-cloud-computing/" target="_blank">nesta</a> publicação, a cloud computing e bastante perigosa e precisar ser utilizada com cuidado&#8230;</p>
<p>Tomei a decisão de abandonar o uso de serviços em nuvem, vou abandonando o uso de pouco em pouco, primeiro abandonei o meu <a href="http://mail.google.com/" target="_blank">Gmail</a> e <a href="https://www.google.com/calendar" target="_blank">Calendar</a>, estou utilizando o e-mail da minha hospedagem mesmo, até que eu compre um servidor e o deixe operacional na minha casa.</p>
<p>Quando ao serviço de buscas resolvei da seguinte forma: montarei um script para realizar as buscas em vários buscadores, as vezes quando o Google cai (sim isso já aconteceu) fiquei praticamente perdido, então quero obter maior independência de serviços de busca, eis o motivo pelo qual trabalhei em um script desses, caso tenha algum interessado em participar do projeto iniciarei ele dentro de alguns dias no meu <a href="https://github.com/VonNaturAustreVe" target="_blank" name="Meu github">github</a>.</p>
<p>The post <a href="http://0fx66.com/blog/estou-abandonando-os-servicos-da-google/">Por que estou abandonando os serviços da Google</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss yarpp-related-none'>
<p>Nenhum post relacionado.</p>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/0fx66?a=8-CO2eQDJfw:ChPwECQ1jxo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=8-CO2eQDJfw:ChPwECQ1jxo:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/0fx66?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=8-CO2eQDJfw:ChPwECQ1jxo:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/0fx66?i=8-CO2eQDJfw:ChPwECQ1jxo:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=8-CO2eQDJfw:ChPwECQ1jxo:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=8-CO2eQDJfw:ChPwECQ1jxo:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/0fx66?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=8-CO2eQDJfw:ChPwECQ1jxo:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/0fx66?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=8-CO2eQDJfw:ChPwECQ1jxo:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/0fx66?i=8-CO2eQDJfw:ChPwECQ1jxo:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=8-CO2eQDJfw:ChPwECQ1jxo:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/0fx66?i=8-CO2eQDJfw:ChPwECQ1jxo:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/0fx66/~4/8-CO2eQDJfw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://0fx66.com/blog/estou-abandonando-os-servicos-da-google/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://0fx66.com/blog/estou-abandonando-os-servicos-da-google/</feedburner:origLink></item>
		<item>
		<title>Por que o Brasil tem tantos ministérios e tantos impostos?</title>
		<link>http://feedproxy.google.com/~r/0fx66/~3/GtG50H0Nl18/</link>
		<comments>http://0fx66.com/blog/por-que-o-brasil-tem-tantos-ministerios-e-tantos-impostos/#comments</comments>
		<pubDate>Sun, 17 Mar 2013 22:37:56 +0000</pubDate>
		<dc:creator>VonNaturAustreVe</dc:creator>
				<category><![CDATA[Pensamentos]]></category>
		<category><![CDATA[Brasil]]></category>
		<category><![CDATA[Crítica]]></category>
		<category><![CDATA[Política]]></category>
		<category><![CDATA[Vídeos]]></category>

		<guid isPermaLink="false">http://0fx66.com/blog/?p=212</guid>
		<description><![CDATA[<p>Nesta publicação vou expôr minha visão sobre a quantidade absurda de ministérios e os altíssimos impostos. Vou começar esse post com o seguinte vídeo, que encontrei no canal do Luiz Nobre. Um vídeo muito bem produzido e contando com excelentes argumentos, minha ao vídeo critica só vai pela ausência da conversão dos valores para a [...]</p><p>The post <a href="http://0fx66.com/blog/por-que-o-brasil-tem-tantos-ministerios-e-tantos-impostos/">Por que o Brasil tem tantos ministérios e tantos impostos?</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss yarpp-related-none'>

Nenhum post relacionado.
</div>
]]></description>
				<content:encoded><![CDATA[<p>Nesta publicação vou expôr minha visão sobre a quantidade absurda de ministérios e os altíssimos impostos. Vou começar esse post com o seguinte vídeo, que encontrei no canal do <a href="https://www.youtube.com/user/lfnobre?feature=watch" title="Canal do luiz nobre" target="_blank">Luiz Nobre</a>.</p>
<p><iframe src="https://www.youtube-nocookie.com/embed/lH14LGYIT7Y" height="315" width="560" allowfullscreen="" frameborder="0"></iframe></p>
<p>Um vídeo muito bem produzido e contando com excelentes argumentos, minha ao vídeo critica só vai pela ausência da conversão dos valores para a mesma moeda, entretanto essa conversão pode realizada com facilidade por qualquer um, basta pegar a cotação do dia em algum site (como <a href="http://economia.uol.com.br/cotacoes/" title="Site da UOL com cotações" target="_blank">esse</a> ou <a href="http://www.valor.com.br/valor-data" title="Cotação por data no site valor.com.br" target="_blank">esse</a>) e faze-la de cabeça mesmo.</p>
<p>Mesmo que no brasil tive-se a mesma qualidade em serviços públicos que o Canadá tem estaríamos pagando muito caro, um valor absurdo!</p>
<p>Mas a questão que proponho para debate neste tópico não é somente o custo com impostos, mas o por que os impostos são tão altos? O primeiro culpado disso é a maquina estatal que é super inchada, e muito pouco eficiente com gastos astronômicos.</p>
<blockquote class="twitter-tweet" lang="pt"><p>Na mesma semana que o Brasil aumentou o número de Ministérios para 39, a China cortou para 25. <a href="https://twitter.com/search/%23Acorda_Brasil">#Acorda_Brasil</a></p>
<p>&mdash; Ricardo Amorim (@Ricamconsult) <a href="https://twitter.com/Ricamconsult/status/312692414307508225">15 de março de 2013</a></p></blockquote>
<p><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<p>Um uma entrevista publicada recentemente na <a href="http://www1.folha.uol.com.br/poder/poderepolitica/1246430-para-gerdau-burrice-de-criar-mais-ministerios-esta-no-limite.shtml" title="Para Gerdau, burrice de criar mais ministérios está no limite" target="_blank">Folha de São Paulo</a>. Ele explica exatamente por que é uma burrice trabalhar com esse tanto de ministérios. Mas é claro isso não é burrice, o governo é bastante esperto, pois assim ele obtém mais poder, influência atrás dos cabides de empregos. É nos da população é claro tomamos no #$%*$3#w.</p>
<p>Se não bastasse da quantidade de ministérios que o governo tem, ainda possui um número enorme de cargos de confiança, que muitas vezes não fazem nada só servem para aumentar o poder e influência do governo, o número de cargos de confiança no Brasil chega a ser 3 (três) <a href="http://veja.abril.com.br/noticia/brasil/brasil-tem-3-vezes-mais-cargos-de-confianca-que-eua" title="Brasil tem 23 579 cargos de confiança - o triplo dos EUA" target="_blank">vezes maior</a> que no EUA!</p>
<p>Se não bastasse a máquina estatal inchada, temos um alto índice de corrupção, o Brasil <a href="http://www.correiobraziliense.com.br/app/noticia/mundo/2012/12/05/interna_mundo,337487/brasil-ocupa-69-posicao-em-ranking-de-paises-corruptos-mostra-estudo.shtml" title="Brasil ocupa 69ª posição em ranking de países corruptos, mostra estudo" target="_blank">ocupa a posição 68</a>, é no mesmo ranking temos países com o Chile e Uruguai ocupando a 20º posição!</p>
<p>O outro fator é a população burra, que não discute política como deveria, discutem ela como se fosse futebol, como se fosse uma torcida ao invés de debate de forma séria sem fanatismos, por exemplo vemos petistas fanáticos <a href="http://colunistas.ig.com.br/poderonline/2013/02/06/mensaleiros-tem-noite-de-estrela-em-festa-perista/" title="Petistas condenados no STF pelo mensalão têm noite de estrela" target="_blank">defendendo José Dirceu e outros mensaleiros</a> (que diga-se de passagem falou esses tempos um dos maiores absurdos sobre a <a href="http://oglobo.globo.com/pais/dirceu-lei-da-ficha-limpa-completamente-absurda-7643646" title="Dirceu: ‘Lei da Ficha Limpa é completamente absurda’" target="_blank">lei da ficha limpa</a>). O fanatismo politico chegou a um ponto tão grande que as pessoas se esquecem que o cara é um corrupto total, um mensaleiro <a href="http://g1.globo.com/politica/mensalao/noticia/2012/11/stf-define-pena-de-ex-ministro-da-casa-civil-jose-dirceu.html" title="TF define pena de José Dirceu: 10 anos e 10 meses de prisão" target="_blank">condenado pelo STF</a>, como e possível o cara receber um tratamento desses?</p>
<p><a href="http://0fx66.com/blog/wp-content/uploads/2013/03/odeio-política.jpg"><img src="http://0fx66.com/blog/wp-content/uploads/2013/03/odeio-política.jpg" alt="odeio política" width="407" height="480" class="aligncenter size-full wp-image-214"/></a></p>
<p>Fontes: Dispostas no corpo do texto.<br />
[]&#8216;s</p>
<p>The post <a href="http://0fx66.com/blog/por-que-o-brasil-tem-tantos-ministerios-e-tantos-impostos/">Por que o Brasil tem tantos ministérios e tantos impostos?</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss yarpp-related-none'>
<p>Nenhum post relacionado.</p>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/0fx66?a=GtG50H0Nl18:RbrjWsTqGfM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=GtG50H0Nl18:RbrjWsTqGfM:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/0fx66?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=GtG50H0Nl18:RbrjWsTqGfM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/0fx66?i=GtG50H0Nl18:RbrjWsTqGfM:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=GtG50H0Nl18:RbrjWsTqGfM:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=GtG50H0Nl18:RbrjWsTqGfM:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/0fx66?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=GtG50H0Nl18:RbrjWsTqGfM:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/0fx66?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=GtG50H0Nl18:RbrjWsTqGfM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/0fx66?i=GtG50H0Nl18:RbrjWsTqGfM:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=GtG50H0Nl18:RbrjWsTqGfM:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/0fx66?i=GtG50H0Nl18:RbrjWsTqGfM:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/0fx66/~4/GtG50H0Nl18" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://0fx66.com/blog/por-que-o-brasil-tem-tantos-ministerios-e-tantos-impostos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://0fx66.com/blog/por-que-o-brasil-tem-tantos-ministerios-e-tantos-impostos/</feedburner:origLink></item>
		<item>
		<title>Performance dos algoritmos candidatos a AES implementados em Java</title>
		<link>http://feedproxy.google.com/~r/0fx66/~3/iEWJn5Dl_PE/</link>
		<comments>http://0fx66.com/blog/performance-dos-algoritmos-candidatos-a-aes-implementados-em-java/#comments</comments>
		<pubDate>Sat, 16 Mar 2013 23:37:36 +0000</pubDate>
		<dc:creator>VonNaturAustreVe</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[AES]]></category>
		<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Criptografia]]></category>

		<guid isPermaLink="false">http://0fx66.com/blog/?p=201</guid>
		<description><![CDATA[<p>Performance dos algoritmos candidatos a AES implementados em Java Abstract We analyze the five remaining AES candidate algorithms MARS, RC6, Rijndael, Serpent, and Twofish as well as DES, Triple DES, and IDEA by examining independently developed Java implementations. We give performance measurement results on several platforms, list the memory requirements, and present a subjective estimate [...]</p><p>The post <a href="http://0fx66.com/blog/performance-dos-algoritmos-candidatos-a-aes-implementados-em-java/">Performance dos algoritmos candidatos a AES implementados em Java</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss yarpp-related-none'>

Nenhum post relacionado.
</div>
]]></description>
				<content:encoded><![CDATA[<h1>Performance dos algoritmos candidatos a AES implementados em Java</h1>
<p><strong>Abstract</strong></p>
<blockquote><p>We analyze the five remaining AES candidate algorithms MARS, RC6, Rijndael, Serpent, and Twofish as well as DES, Triple DES, and IDEA by examining independently developed Java implementations. We give performance measurement results on several platforms, list the memory requirements, and present a subjective estimate for the implementation difficulty of the algorithms. Our results indicate that all AES ciphers offer reasonable performance in Java, the fastest algorithm being about twice as fast as the slowest.</p></blockquote>
<p><strong>Resumo</strong></p>
<p>Neste artigo escrito por <a href="https://plus.google.com/109466661679025851572" title="Perfil no g+ do Andreas Sterbenz" target="_blank">Andreas Sterbenz</a> foi realizada uma analise sobre a performance, uso de memória, dificuldade na implementação dos candidatos ao AES. </p>
<p>Para ler o artigo clique <a href="http://files.0fx66.com/paper/Performance%20of%20the%20AES%20Candidate%20Algorithms%20in%20Java.pdf" title="Performance of the AES Candidate Algorithms in Java" target="_blank">aqui</a>.</p>
<p>The post <a href="http://0fx66.com/blog/performance-dos-algoritmos-candidatos-a-aes-implementados-em-java/">Performance dos algoritmos candidatos a AES implementados em Java</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss yarpp-related-none'>
<p>Nenhum post relacionado.</p>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/0fx66?a=iEWJn5Dl_PE:zJW7C3jQXUI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=iEWJn5Dl_PE:zJW7C3jQXUI:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/0fx66?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=iEWJn5Dl_PE:zJW7C3jQXUI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/0fx66?i=iEWJn5Dl_PE:zJW7C3jQXUI:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=iEWJn5Dl_PE:zJW7C3jQXUI:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=iEWJn5Dl_PE:zJW7C3jQXUI:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/0fx66?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=iEWJn5Dl_PE:zJW7C3jQXUI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/0fx66?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=iEWJn5Dl_PE:zJW7C3jQXUI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/0fx66?i=iEWJn5Dl_PE:zJW7C3jQXUI:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=iEWJn5Dl_PE:zJW7C3jQXUI:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/0fx66?i=iEWJn5Dl_PE:zJW7C3jQXUI:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/0fx66/~4/iEWJn5Dl_PE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://0fx66.com/blog/performance-dos-algoritmos-candidatos-a-aes-implementados-em-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://0fx66.com/blog/performance-dos-algoritmos-candidatos-a-aes-implementados-em-java/</feedburner:origLink></item>
		<item>
		<title>Otimizando requisições DNS no firefox</title>
		<link>http://feedproxy.google.com/~r/0fx66/~3/rHPctsHQLr0/</link>
		<comments>http://0fx66.com/blog/otimizando-requisicoes-dns-no-firefox/#comments</comments>
		<pubDate>Tue, 12 Mar 2013 15:00:28 +0000</pubDate>
		<dc:creator>VonNaturAustreVe</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Redes]]></category>

		<guid isPermaLink="false">http://0fx66.com/blog/?p=196</guid>
		<description><![CDATA[<p>Existem duas formas para otimizar as requisições DNS no firefox, a primeira é mais simples basta utilizar a extensão DNS cache ou pode fazer está configuração pelo about:config, vamos a famosa about:config e criemos dois novos registros &#8220;Network.dnsCacheExpiration&#8221; tipo inteira com valor 3600 &#8220;network.dnsCacheEntries&#8221; tipo inteira com valor 1000 Se você não usa ipv6, e [...]</p><p>The post <a href="http://0fx66.com/blog/otimizando-requisicoes-dns-no-firefox/">Otimizando requisições DNS no firefox</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/otimizando-o-firefox-com-sqlite3/' rel='bookmark' title='Otimizando o Firefox com sqlite3'>Otimizando o Firefox com sqlite3</a></li>
<li><a href='http://0fx66.com/blog/como-modificar-o-mac-address-no-linux/' rel='bookmark' title='Modificando endereço MAC no Linux'>Modificando endereço MAC no Linux</a></li>
<li><a href='http://0fx66.com/blog/compilacao-de-dicas-para-o-firefox/' rel='bookmark' title='Compilação de dicas para o Firefox'>Compilação de dicas para o Firefox</a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p><a href="http://0fx66.com/blog/wp-content/uploads/2013/02/firefox-400x300.jpg"><img src="http://0fx66.com/blog/wp-content/uploads/2013/02/firefox-400x300.jpg" alt="firefox logo" width="400" height="300" class="aligncenter size-full wp-image-67" /></a><br />
Existem duas formas para otimizar as requisições DNS no firefox, a primeira é mais simples basta utilizar a extensão <a title="Link para download da extensão &quot;DNS Cache&quot;" href="https://addons.mozilla.org/en-US/firefox/addon/5914/" target="_blank">DNS cache</a> ou pode fazer está configuração pelo about:config, vamos a famosa about:config e criemos dois novos registros</p>
<ol>
<li>&#8220;<em>Network.dnsCacheExpiration</em>&#8221; tipo inteira com valor 3600</li>
<li>&#8220;<em>network.dnsCacheEntries</em>&#8221; tipo inteira com valor 1000</li>
</ol>
<p>Se você não usa ipv6, e interessante que altere a chave &#8220;<em>network.dns.disableIPv6</em>&#8221; mude para true. Reiniciei o firefox é você irá notar  uma significativa melhoria no desempenho.</p>
<p>[]&#8216;s</p>
<p>The post <a href="http://0fx66.com/blog/otimizando-requisicoes-dns-no-firefox/">Otimizando requisições DNS no firefox</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/otimizando-o-firefox-com-sqlite3/' rel='bookmark' title='Otimizando o Firefox com sqlite3'>Otimizando o Firefox com sqlite3</a></li>
<li><a href='http://0fx66.com/blog/como-modificar-o-mac-address-no-linux/' rel='bookmark' title='Modificando endereço MAC no Linux'>Modificando endereço MAC no Linux</a></li>
<li><a href='http://0fx66.com/blog/compilacao-de-dicas-para-o-firefox/' rel='bookmark' title='Compilação de dicas para o Firefox'>Compilação de dicas para o Firefox</a></li>
</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/0fx66?a=rHPctsHQLr0:Fb_wrw06DjQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=rHPctsHQLr0:Fb_wrw06DjQ:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/0fx66?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=rHPctsHQLr0:Fb_wrw06DjQ:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/0fx66?i=rHPctsHQLr0:Fb_wrw06DjQ:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=rHPctsHQLr0:Fb_wrw06DjQ:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=rHPctsHQLr0:Fb_wrw06DjQ:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/0fx66?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=rHPctsHQLr0:Fb_wrw06DjQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/0fx66?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=rHPctsHQLr0:Fb_wrw06DjQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/0fx66?i=rHPctsHQLr0:Fb_wrw06DjQ:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=rHPctsHQLr0:Fb_wrw06DjQ:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/0fx66?i=rHPctsHQLr0:Fb_wrw06DjQ:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/0fx66/~4/rHPctsHQLr0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://0fx66.com/blog/otimizando-requisicoes-dns-no-firefox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://0fx66.com/blog/otimizando-requisicoes-dns-no-firefox/</feedburner:origLink></item>
		<item>
		<title>Calculando raízes em C usando a função pow</title>
		<link>http://feedproxy.google.com/~r/0fx66/~3/zeFvcFrnyUo/</link>
		<comments>http://0fx66.com/blog/calculando-raizes-em-c-usando-a-funcao-pow/#comments</comments>
		<pubDate>Mon, 11 Mar 2013 15:00:16 +0000</pubDate>
		<dc:creator>VonNaturAustreVe</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[Linguagem C]]></category>
		<category><![CDATA[Matemática]]></category>
		<category><![CDATA[Pow]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://0fx66.com/blog/?p=190</guid>
		<description><![CDATA[<p>Calculando raízes em C usando a função pow() No texto anterior expliquei com utilizava a função pow() para calcular potencias, e apresentei a função sqrt() e cbrt() para calcular raiz quadrada e cubica. Vou apresentar hoje uma dica de como calcular raízes usando a função pow(), existem momento onde precisamos calcular indices maiores que 2 [...]</p><p>The post <a href="http://0fx66.com/blog/calculando-raizes-em-c-usando-a-funcao-pow/">Calculando raízes em C usando a função pow</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/conhecendo-a-funcao-printf/' rel='bookmark' title='Conhecendo a função printf'>Conhecendo a função printf</a></li>
<li><a href='http://0fx66.com/blog/convertendo-string-minuscula-em-maiuscula-em-c/' rel='bookmark' title='[Linguagem C]  Convertendo string minúscula em maiúscula em C'>[Linguagem C]  Convertendo string minúscula em maiúscula em C</a></li>
<li><a href='http://0fx66.com/blog/linguagem-c-utilizando-scanf-em-strings-com-espaco/' rel='bookmark' title='[Linguagem C] Utilizando scanf em strings com espaço'>[Linguagem C] Utilizando scanf em strings com espaço</a></li>
<li><a href='http://0fx66.com/blog/trabalhando-com-potencias-e-raiz-quadrada-e-cubica-em-c/' rel='bookmark' title='Trabalhando com potencias e raiz quadrada e cubica em C'>Trabalhando com potencias e raiz quadrada e cubica em C</a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p><strong>Calculando raízes em C usando a função pow()</strong></p>
<p>No <a title="Artigo &quot;Trabalhando com potencias e raiz quadrada e cubica em C&quot;." href="http://0fx66.com/blog/trabalhando-com-potencias-e-raiz-quadrada-e-cubica-em-c/" target="_blank">texto anterior</a> expliquei com utilizava a função <strong>pow()</strong> para calcular potencias, e apresentei a função sqrt() e cbrt() para calcular raiz quadrada e cubica. Vou apresentar hoje uma dica de como calcular raízes usando a função pow(), existem momento onde precisamos calcular indices maiores que 2 e 3 nesses casos usamos a função pow().</p>
<p>Declaração: pow(radicando, 1/indice);</p>
<p>Sim e simples assim, podemos calcular qualquer raiz dessa forma.</p>
<p>Código exemplo:</p>
<pre class="brush: cpp; title: ; notranslate">
//calcula raiz com pow()
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;

int main() {
	
	double raiz,radicando,indice;

	printf(&quot;Digite o radicando: &quot;);
	scanf(&quot;%lf&quot;,&amp;radicando);

	printf(&quot;Digite o indice da raiz: &quot;);
	scanf(&quot;%lf&quot;,&amp;indice);

	//Calculo da raiz usando pow
	raiz=pow(radicando, 1/indice); //Aqui esta a magica!!! 

	printf(&quot;A raiz de %lf com indice %lf = %lf\n&quot;,radicando,indice,raiz);

	return 0;
}
</pre>
<p><strong>Nota: </strong>Esta função só trabalha com valores double, caso não use variáveis do tipo double os resultados poderão ser desastrosos.Para evitar o bug da linkagem use o parâmetro &#8220;-lm&#8221; ao compilar.</p>
<p>[]&#8216;s</p>
<p>The post <a href="http://0fx66.com/blog/calculando-raizes-em-c-usando-a-funcao-pow/">Calculando raízes em C usando a função pow</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/conhecendo-a-funcao-printf/' rel='bookmark' title='Conhecendo a função printf'>Conhecendo a função printf</a></li>
<li><a href='http://0fx66.com/blog/convertendo-string-minuscula-em-maiuscula-em-c/' rel='bookmark' title='[Linguagem C]  Convertendo string minúscula em maiúscula em C'>[Linguagem C]  Convertendo string minúscula em maiúscula em C</a></li>
<li><a href='http://0fx66.com/blog/linguagem-c-utilizando-scanf-em-strings-com-espaco/' rel='bookmark' title='[Linguagem C] Utilizando scanf em strings com espaço'>[Linguagem C] Utilizando scanf em strings com espaço</a></li>
<li><a href='http://0fx66.com/blog/trabalhando-com-potencias-e-raiz-quadrada-e-cubica-em-c/' rel='bookmark' title='Trabalhando com potencias e raiz quadrada e cubica em C'>Trabalhando com potencias e raiz quadrada e cubica em C</a></li>
</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/0fx66?a=zeFvcFrnyUo:YINq-NqUjs0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=zeFvcFrnyUo:YINq-NqUjs0:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/0fx66?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=zeFvcFrnyUo:YINq-NqUjs0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/0fx66?i=zeFvcFrnyUo:YINq-NqUjs0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=zeFvcFrnyUo:YINq-NqUjs0:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=zeFvcFrnyUo:YINq-NqUjs0:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/0fx66?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=zeFvcFrnyUo:YINq-NqUjs0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/0fx66?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=zeFvcFrnyUo:YINq-NqUjs0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/0fx66?i=zeFvcFrnyUo:YINq-NqUjs0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=zeFvcFrnyUo:YINq-NqUjs0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/0fx66?i=zeFvcFrnyUo:YINq-NqUjs0:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/0fx66/~4/zeFvcFrnyUo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://0fx66.com/blog/calculando-raizes-em-c-usando-a-funcao-pow/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://0fx66.com/blog/calculando-raizes-em-c-usando-a-funcao-pow/</feedburner:origLink></item>
		<item>
		<title>Trabalhando com potencias e raiz quadrada e cubica em C</title>
		<link>http://feedproxy.google.com/~r/0fx66/~3/JSYHUrSpLBE/</link>
		<comments>http://0fx66.com/blog/trabalhando-com-potencias-e-raiz-quadrada-e-cubica-em-c/#comments</comments>
		<pubDate>Sun, 10 Mar 2013 15:00:01 +0000</pubDate>
		<dc:creator>VonNaturAustreVe</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[Linguagem C]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://0fx66.com/blog/?p=185</guid>
		<description><![CDATA[<p>Introdução Uma dúvida bastante comum para quem é iniciante em C, como calcular potencias em c? Para calcular potencias usamos a função pow() que está contida na lib math.h, que e uma lib muito rica em funções para trabalhar com cálculos matemáticas, a função pow() calcula a base elevada à uma potencia. Para efetuamos cálculos [...]</p><p>The post <a href="http://0fx66.com/blog/trabalhando-com-potencias-e-raiz-quadrada-e-cubica-em-c/">Trabalhando com potencias e raiz quadrada e cubica em C</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/conhecendo-a-funcao-printf/' rel='bookmark' title='Conhecendo a função printf'>Conhecendo a função printf</a></li>
<li><a href='http://0fx66.com/blog/convertendo-string-minuscula-em-maiuscula-em-c/' rel='bookmark' title='[Linguagem C]  Convertendo string minúscula em maiúscula em C'>[Linguagem C]  Convertendo string minúscula em maiúscula em C</a></li>
<li><a href='http://0fx66.com/blog/linguagem-c-utilizando-scanf-em-strings-com-espaco/' rel='bookmark' title='[Linguagem C] Utilizando scanf em strings com espaço'>[Linguagem C] Utilizando scanf em strings com espaço</a></li>
<li><a href='http://0fx66.com/blog/calculando-raizes-em-c-usando-a-funcao-pow/' rel='bookmark' title='Calculando raízes em C usando a função pow'>Calculando raízes em C usando a função pow</a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p><strong>Introdução</strong></p>
<p>Uma dúvida bastante comum para quem é iniciante em C, como calcular potencias em c? Para calcular potencias usamos a função pow() que está contida na lib math.h, que e uma lib muito rica em funções para trabalhar com cálculos matemáticas, a função pow() calcula a base elevada à uma potencia. Para efetuamos cálculos de raiz quadrada usamos a função sqrt() calcula a raiz quadrada de um número.</p>
<p><strong>Potencias</strong></p>
<p>Em C existe uma função, a pow(), que realiza a exponenciação de um número por outro.<br />
Declaração: pow(base,expoente)</p>
<p>Código exemplo:</p>
<pre class="brush: cpp; title: ; notranslate">
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;
int main() {
	//codigo de exemplo para a execucao da funcao pow()
	int base,expoente,resultado;

	printf(&quot;Digite a base: &quot;);
	scanf(&quot;%d&quot;, &amp;base);

	printf(&quot;Digite o expoente: &quot;);
	scanf(&quot;%d&quot;,&amp;expoente);

	//efetua a exponenciacao.
	resultado=pow(base,expoente);

	printf(&quot;O numero %i elevado a %i e igual a %i&quot;,base,expoente,resultado);

	return 0;
}

</pre>
<p>Observação: No gcc pode apresentar erro ao compilar o programa acima!</p>
<p>Adicione o parâmetro “-lm” indica que a lib math.h seja linkada ao binário, o parâmetro dependera do seu compilado, no meu caso e para quem usa o GCC o -lm resolverá este problema.</p>
<p><strong>Raiz quadrada e Cubica</strong></p>
<p>Para trabalhos com raízes temos duas opções a função ,e através da função sqrt() que também exige o uso da lib math.h.</p>
<p>Declaração:sqrt(radicando);</p>
<p>Código exemplo:</p>
<pre class="brush: cpp; title: ; notranslate">

#include &lt;stdio.h&gt;
#include &lt;math.h&gt;

int main() {
	int radicando,raiz;

	printf(&quot;Digite o radicando: &quot;);
	scanf(&quot;%i&quot;,&amp;radicando);

	raiz = sqrt(radicando); //Aqui esta a magica!!!

	printf(&quot;A raiz quadrada de %i e igual a %i\n&quot;,radicando,raiz);

	return 0;
}
</pre>
<p>Para calcular a raiz cubica usando a função cbrt()</p>
<p>Declaração: cbrt(radicando);</p>
<p>Código exemplo:</p>
<pre class="brush: cpp; title: ; notranslate">
#include &lt;stdio.h&gt;
#include &lt;math.h&gt;

int main() {
	int radicando,raiz;

	printf(&quot;Digite o radicando: &quot;);
	scanf(&quot;%d&quot;,&amp;radicando);

	raiz = cbrt(radicando); //Aqui esta a magica!!!

	printf(&quot;A raiz quadrada de %i e igual a %i\n&quot;,radicando,raiz);

	return 0;
}
</pre>
<p><strong>Nota:</strong> e necessário usar o parâmetro &#8220;-lm&#8221; ao compilar os códigos acima com o gcc.</p>
<p>[]&#8216;s</p>
<p>The post <a href="http://0fx66.com/blog/trabalhando-com-potencias-e-raiz-quadrada-e-cubica-em-c/">Trabalhando com potencias e raiz quadrada e cubica em C</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/conhecendo-a-funcao-printf/' rel='bookmark' title='Conhecendo a função printf'>Conhecendo a função printf</a></li>
<li><a href='http://0fx66.com/blog/convertendo-string-minuscula-em-maiuscula-em-c/' rel='bookmark' title='[Linguagem C]  Convertendo string minúscula em maiúscula em C'>[Linguagem C]  Convertendo string minúscula em maiúscula em C</a></li>
<li><a href='http://0fx66.com/blog/linguagem-c-utilizando-scanf-em-strings-com-espaco/' rel='bookmark' title='[Linguagem C] Utilizando scanf em strings com espaço'>[Linguagem C] Utilizando scanf em strings com espaço</a></li>
<li><a href='http://0fx66.com/blog/calculando-raizes-em-c-usando-a-funcao-pow/' rel='bookmark' title='Calculando raízes em C usando a função pow'>Calculando raízes em C usando a função pow</a></li>
</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/0fx66?a=JSYHUrSpLBE:RIpn_5G3i5A:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=JSYHUrSpLBE:RIpn_5G3i5A:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/0fx66?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=JSYHUrSpLBE:RIpn_5G3i5A:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/0fx66?i=JSYHUrSpLBE:RIpn_5G3i5A:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=JSYHUrSpLBE:RIpn_5G3i5A:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=JSYHUrSpLBE:RIpn_5G3i5A:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/0fx66?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=JSYHUrSpLBE:RIpn_5G3i5A:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/0fx66?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=JSYHUrSpLBE:RIpn_5G3i5A:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/0fx66?i=JSYHUrSpLBE:RIpn_5G3i5A:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=JSYHUrSpLBE:RIpn_5G3i5A:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/0fx66?i=JSYHUrSpLBE:RIpn_5G3i5A:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/0fx66/~4/JSYHUrSpLBE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://0fx66.com/blog/trabalhando-com-potencias-e-raiz-quadrada-e-cubica-em-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://0fx66.com/blog/trabalhando-com-potencias-e-raiz-quadrada-e-cubica-em-c/</feedburner:origLink></item>
		<item>
		<title>Sniffing for Dummies</title>
		<link>http://feedproxy.google.com/~r/0fx66/~3/yzgIdDSd0E0/</link>
		<comments>http://0fx66.com/blog/sniffing-for-dummies/#comments</comments>
		<pubDate>Sat, 09 Mar 2013 15:00:36 +0000</pubDate>
		<dc:creator>VonNaturAustreVe</dc:creator>
				<category><![CDATA[Redes]]></category>
		<category><![CDATA[Segurança]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[Sniffer]]></category>

		<guid isPermaLink="false">http://0fx66.com/blog/?p=183</guid>
		<description><![CDATA[<p>=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= =-[07]-=[Sniffing for Dummies]-=&#124;hallz&#124;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Introdução ao Sniffing (Sniffing for Dummies) Por hallz .:: Introdução ::. Procuro abordar aqui o funcionamento de um sniffer, os riscos que este pode trazer a uma rede, alguns truques que invasores usam para oculta-lo e também formas de detecção. Ao longo do artigo, usarei a palavra &#8216;invasor&#8217; quando me [...]</p><p>The post <a href="http://0fx66.com/blog/sniffing-for-dummies/">Sniffing for Dummies</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/conhecendo-o-tcpdump/' rel='bookmark' title='Conhecendo o Tcpdump'>Conhecendo o Tcpdump</a></li>
<li><a href='http://0fx66.com/blog/redes-basico-sobre-o-modelo-osi/' rel='bookmark' title='[Redes] Básico sobre o Modelo OSI'>[Redes] Básico sobre o Modelo OSI</a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p><code>=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=<br />
=-[07]-=[Sniffing for Dummies]-=|hallz|=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-<br />
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=<br />
Introdução ao Sniffing<br />
(Sniffing for Dummies) Por hallz</code></p>
<p><strong>.:: Introdução ::.</strong></p>
<p>Procuro abordar aqui o  funcionamento de um sniffer, os riscos que este pode trazer a uma rede, alguns truques que invasores usam para oculta-lo e também formas de detecção.  Ao longo do artigo, usarei a palavra &#8216;invasor&#8217; quando me referir a pessoa que esta &#8216;sniffando&#8217; uma  rede que não seja sua. &#8216;Invasor&#8217; neste caso, serve  para hackers, crackers e kiddies. Vale lembrar, no entanto, que as diferenças entre os termos são enormes. Hackers são pessoas com conhecimento  avançado, que estão sempre em busca de mais conhecimento, compartilham suas descobertas e seguem uma ética; Crackers violam sistemas com intenções maliciosas, causando problemas aos seus alvos; Kiddies são pessoas que não tem conhecimento  técnico, apenas usam ferramentas criadas por outros como forma de conseguir seus 15 minutos de fama. Este eh um texto básico, portanto  se você já eh &#8216;fera&#8217;, não  espere encontrar algo novo por aqui.</p>
<p><span id="more-183"></span></p>
<p><strong>.:: O que são Sniffers? ::.</strong></p>
<p>Sniffers (farejadores) são dispositivos (podem ser programas ou algum hardware especifico) que capturam  (a maioria também  analisa) o trafego  de uma rede de forma passiva,isto é, sem interferir nas comunicações, podem ser utilizados tanto por  administradores como por invasores, obviamente com propósitos diferentes. Administradores podem usar um sniffer para detectar, ou pelo menos ajudar a detectar, a causa de um problema, assim como gerar logs do trafego da rede que podem ser consultados posteriormente caso necessário (devido ao comprometimento de uma maquina, por exemplo). Já invasores podem utiliza-lo para capturar informações confidenciais que circulem em &#8216;texto-puro&#8217;, ou seja, não criptografadas. Qualquer informação não criptografada, incluindo logins e senhas de serviços como FTP, Telnet e POP, estará acessível ao invasor. Usar criptografia é altamente recomendável, porem não impede totalmente o acesso por parte do invasor as informações.</p>
<p><strong>.:: Como Funcionam ::.</strong></p>
<p>Para entender o funcionamento dos sniffers, precisamos entender o funcionamento das redes. Aqui sera abordado o padrão Ethernet, o mais utilizado hoje em dia. Cada computador em uma rede Ethernet tem o seu endereço de hardware, o MAC (Media Access Control). O MAC, um número hexadecimal de 12 dígitos, único em toda a rede (teoricamente não existem duas placas de rede com o mesmo MAC), é utilizado para identificar as maquinas. Em cada pacote enviado, logo no começo, podemos encontrar dois endereços MACs, o endereço do computador que enviou o pacote, e o endereço do computador que deve recebe-lo.</p>
<p>Na verdade, todos os computadores da rede recebem os pacotes (salvo se a rede utilizar <a title="Definição de switche" href="http://pt.wikipedia.org/wiki/Comutador_(redes)" target="_blank">switches</a> &#8211; isto sera abordado mais  adiante),  mas só responderão a pacotes destinados a elas, ou seja, apenas responderão caso o pacote em questão tenha o seu endereço MAC como destinatário; caso não possua, o pacote sera descartado(isso é feito a nível de hardware  &#8211;  interface de rede). Se conseguirmos fazer com que a interface não descarte os pacotes, poderemos capturar todo o trafego da rede! É assim que um sniffer funciona, ele faz com que a interface de rede aceite todos os pacotes. Quando uma interface se encontra nesta condição, dizemos que esta em &#8216;modo promiscuo&#8217;, estado que geralmente pode-se habilitar via software.</p>
<p>Na maioria dos sistemas operacionais atuais, para por uma interface de rede em modo promiscuo, deve-se ter privilégios de root (administrador). O sniffer pode ser utilizado com  a interface em seu estado normal, mas neste caso só serão capturados os pacotes que tenham como origem (ou destino) o computador onde ele esta sendo executado. Pode não parecer tao interessante, mas se este computador for um roteador, o invasor terá acesso a todo o trafego que por ele passar.</p>
<p>Os pacotes capturados pelo sniffer geralmente são armazenados em arquivos salvos no disco rígido, para posterior analise. Em uma  rede movimentada, este arquivo poderá ficar enorme, em poucas horas, o que facilitaria a detecção de um sniffer por parte do  administrador. Por este motivo(e também para não perder tempo), sniffers instalados furtivamente são bem seletivos; gravam apenas o que é interessante ao invasor (geralmente logins e senhas). Como estas informações geralmente localizam-se no começo do pacote, muitos sniffers não analisam o pacote inteiro, mas apenas os seus primeiros 200-300 bytes. Outros sniffers vão ainda mais longe; enviam os logins/senhas capturados para um e-mail fornecido pelo invasor. Imaginemos a seguinte situação: Um invasor, localizado no RJ, quer interceptar a conversa pela internet de João e Maria, que estão em SP, usando um sniffer. E possível?</p>
<pre>                         ----------------
                        /                \
                       /                  \
  ------       ----------                ----------        -------
 | João |---&gt; | Provedor |   INTERNET   | Provedor | &lt; --- | Maria |
  ------       ----------                ----------        -------
                       \                  /
                        \   ----------   /
                         --| Provedor |--
                            ----------
                                |
                            ---------
                           | Invasor |
                            ---------</pre>
<p>Claro! Basta que ele consiga acesso  ao computador de um dos dois (engenharia social, exploração de alguma falha, trojans&#8230;), ou a algum que esteja &#8216;no  meio do caminho&#8217; (Um  servidor do provedor de Maria ou um roteador, por exemplo) e instale la o sniffer. O invasor pode ainda fazer com que os dados passem pelo seu computador ou seja ele redireciona o trafego. Apesar de ser muito  mais trabalhoso, é possível.</p>
<p><strong>.:: Sniffers em redes comutadas ::. </strong></p>
<p>Logo acima foi dito que os pacotes  em uma rede são distribuídos por todos os computadores; Isto é verdade se for utilizado um <a title="Definição de hub." href="http://pt.wikipedia.org/wiki/Hub" target="_blank">hub</a> ou cabo coaxial para fazer a ligação dos PCs, mas não  se for utilizado um switch  (Lembrem-se que estamos falando de redes Ethernet). Os switches possuem tabelas onde  são armazenados, entre outras coisas, endereços MACs encontrados em cada uma  de suas portas. Por isso, o switch pode enviar os pacotes apenas para a porta onde esta o destinatário. Com isso, dificulta-se o sniffing (Porem  não o torna impossível :P). Mas como o switch sabe em que porta o destinatário esta? Simples! Suponhamos que João e Maria agora  estão  ligados em  uma  rede comutada.  Vejamos  o que  acontece  se João &#8216;pingar&#8217; (ICMP Echo Request) o computador de Maria.</p>
<pre>João ---&gt; ARP Request ---&gt; Broadcast
João &lt; --- ARP Response &lt;--- Maria
João ---&gt; ICMP Echo Request ---&gt; Maria
João &lt; --- ICMP Echo Response &lt;--- Maria</pre>
<p>O que acontece é o seguinte: João  quer enviar o ICMP Echo Request (o famoso Ping) para Maria, mas para isso, ele precisa saber o endereço físico (MAC) do computador de Maria. Por isso, João &#8216;grita&#8217;, para todos os computadores da rede (Broadcast): &#8220;Qual o endereço MAC de Maria?&#8221;. Isto é um <a href="http://0fx66.com/blog/redes/protocolo-arp/">ARP Request</a> (Address Resolution Protocol &#8211; o ARP traduz endereços IP para MAC). Maria então ouve o &#8216;grito&#8217; de João e o responde (ARP Response). Agora que João já  tem o endereço MAC, pode enviar o &#8216;ping&#8217; (Echo Request), que é prontamente respondido pela Maria (Echo Response). Depois disso,  caso João queira enviar mais  algum pacote para Maria (e vice-versa), não precisara enviar primeiro outro ARP Request, pois o endereço MAC de Maria já  sera conhecido, podendo ser localizado na  cache ARP de seu PC. Quando passam ARP Requests e Responses pelo switch, este verifica de qual de suas portas o pacote  foi originado e pega o endereço  MAC de origem que esta escrito no pacote. Essas informações são então registradas nas tabelas do switch. Assim ele fica sabendo em que porta estão localizados cada computador, e pode repassar os pacotes apenas para a porta onde esta o destinatário do pacote. Em redes que operem nesta forma são chamadas  de comutadas.   Porém nem  tudo são flores, e o sniffing ainda pode funcionar nestas condições. Vejamos algumas formas de fazer isso.</p>
<p><strong>+ Table Flooding</strong></p>
<p>Como já foi dito, o switch sabe para que porta enviar cada pacote devido a tabela que ele possui (CAM Table). (CAM) Table Flooding consiste em encher a tabela do switch com entradas falsas, para que ele passe a enviar os pacotes para todas as portas. Tabela do Switch ANTES do ataque:(apenas para ilustração, a tabela é mais &#8216;complexa&#8217;)</p>
<pre>--------------------------
| Porta  |  Endereço MAC   |
|--------------------------|
|   01   |   MAC de Maria  |
|   02   |   MAC de João   |
|   ...  |       ...       |
|   10   |  MAC do Invasor |
--------------------------</pre>
<p>Então o invasor, que quer capturar o trafego da rede, começa a enviar pacotes ARP para a rede, cada um com um endereço MAC  &#8211;  que não existe na rede &#8211; diferente. O switch armazena estes endereços em sua tabela, até que esta fica cheia &#8211; Sim, a CAM Table tem um limite de entradas. Tabela do Switch DURANTE o ataque:</p>
<pre>----------------------------
| Porta |    Endereço MAC    |
|----------------------------|
|  01   | MAC inexistente 1  |
|  02   | MAC inexistente 2  |
|  ...  |        ...         |
|  10   | MAC inexistente 10 |
----------------------------</pre>
<p>Assim, todo o pacote cujo destinatário não estiver listado na tabela do switch devera ser enviado para todas as portas. Ai, o invasor  pode captura-los sem problemas. O macof é um programa que aplica esta técnica.</p>
<p><strong>+ ARP Cache Poisoning</strong></p>
<p>Esta técnica consiste em enviar pacotes ARP forjados para as maquinas-alvo, de forma com que todo o trafego entre elas passe pela maquina do invasor. Vejamos o caminho (normal) dos pacotes  entre João e Maria:</p>
<pre> --------        --------        -------
|  João  | &lt; --&gt; | Switch | &lt; --&gt; | Maria |
 --------        --------        -------</pre>
<p>Para poder sniffar o trafego entre João e Maria, o invasor envia pacotes ARP (que não requerem autenticação) para João fingindo ser Maria, e pacotes ARP para Maria fingindo ser João. Assim a tabela ARP de Maria e João fica envenenada (poisoned). Vejamos as  tabelas:</p>
<p>Antes:</p>
<pre>Tabela de João ANTES do ataque           Tabela de Maria ANTES do ataque
--------------------------------          --------------------------------
|  Endereço IP  |  Endereço MAC  |        |  Endereço IP  |  Endereço MAC  |
|--------------------------------|        |--------------------------------|
| IP de Maria   | MAC de Maria   |        |  IP de João   |  MAC de João   |
| IP do Invasor | MAC do Invasor |        | IP do Invasor | MAC do Invasor |
--------------------------------          --------------------------------</pre>
<p>Durante:</p>
<pre>Tabela de João DURANTE o ataque           Tabela de Maria DURANTE o ataque
--------------------------------          --------------------------------
|  Endereço IP  |  Endereço MAC  |        |  Endereço IP  |  Endereço MAC  |
|--------------------------------|        |--------------------------------|
| IP de Maria   | MAC do Invasor |        |  IP de João   | MAC do Invasor |
| IP do Invasor | MAC do Invasor |        | IP do Invasor | MAC do Invasor |
--------------------------------          --------------------------------</pre>
<p>O invasor deve certificar-se que os  pacotes enviados por João cheguem ao seu destinatário real, Maria, e vice-versa. Isso pode ser feito facilmente através do IP Forwarding, que é suportado por muitos sistemas operacionais. Alem disso, o invasor devera enviar regularmente novos  pacotes ARP para Maria e João, pois as entradas nas tabelas ARP expiram. O caminho dos pacotes durante o ARP Poisoning:</p>
<pre> --------        --------        ---------        --------        -------
|  João  | &lt; --&gt; | Switch | &lt; --&gt; | Invasor | &lt; --&gt; | Switch | &lt; --&gt; | Maria |
 --------        --------        ---------        --------        -------</pre>
<p>Com o ARP Cache Poisoning o invasor pode não somente capturar os pacotes enviados como também altera-los (assim como cria-los) antes de enviar para o verdadeiro destinatário. Imagine se o invasor se passar por um roteador&#8230;</p>
<p><strong>+ ICMP Redirect</strong></p>
<p>Pacotes  ICMP  Redirect são usados por roteadores para fazer com que os computadores enviem seus pacotes por um caminho  diferente. Forjando ICMP Redirects o invasor pode alterar as tabelas de roteamento de uma maquina para que o trafego passe por ele.</p>
<p><strong>+ Monitor Port (SPAN, Port Mirroring, Port Monitoring)</strong></p>
<p>Muitos switches fornecem Monitor Ports, que permitem copiar todo o trafego da rede para uma  (ou mais) portas. O problema &#8211; Ou solução, depende do ponto de vista &#8211; eh que muitos administradores não alteram as senhas-padrão, permitindo assim que o invasor faca com que o switch envie todo o trafego da rede para a porta em que ele esta conectado. Caso o switch suporte realizar esta configuração via SNMP, o invasor pode tentar adivinhar a senha. Mesmo que o administrador tenha configurado o switch para  aceitar apenas pacotes SNMP vindos de um certo endereço IP, o invasor pode utilizar de spoofing.</p>
<p><strong>+ Switch Port Stealing</strong></p>
<p>Nesta  técnica  o invasor envia pacotes com o endereço MAC de origem da maquina-alvo. O switch então &#8220;aprende&#8221; que o invasor *eh* a maquina-alvo e passa a enviar os pacotes destinados a ela para o invasor. Temos dois problemas aih. O primeiro eh que se a maquina-alvo parar de receber os pacotes, a conexão se encerra, o outro problema é que a maquina-alvo continuara enviando pacotes, o que fara com que a tabela do switch volte ao seu estado normal. Para contornar o problema, podemos tirar a maquina-vitima da jogada(DoS) e enviar os pacotes com o MAC  alterado. Assim podemos tomar conta de  uma conexão já autenticada, como uma sessão Telnet. Outra possibilidade é enviar pacotes com o MAC alterado em intervalos regulares, e ao receber um pacote destinado a maquina-alvo, reenvia-lo para broadcast. Assim, a  maquina-alvo continua recebendo os pacotes.</p>
<p><strong>.:: Detectando Sniffers ::.</strong></p>
<p>Por sua natureza passiva, a detecção de sniffers pode se tornar algo complicado. Contudo, formas de detecção existem, e podem ser divididas em duas categorias: locais e remotas. A detecção local consiste basicamente em utilizar ferramentas do sistema para verificar se existem interfaces em modo promiscuo, ou algum outro indicio da existência de sniffers  na maquina. Podemos ver se uma interface esta em modo promiscuo usando o ifconfig:</p>
<p><code><br />
bash-2.05b# ifconfig -a<br />
eth0      Link encap:Ethernet  HWaddr 00:50:56:40:2A:B9<br />
inet addr:192.168.0.172  Bcast:192.168.0.191  Mask:255.255.255.224<br />
UP BROADCAST NOTRAILERS RUNNING PROMISC MULTICAST  MTU:1500  Metric:1<br />
RX packets:10 errors:0 dropped:0 overruns:0 frame:0<br />
TX packets:10 errors:0 dropped:0 overruns:0 carrier:0<br />
collisions:0 txqueuelen:100<br />
RX bytes:2282 (2.2 Kb)  TX bytes:2707 (2.6 Kb)<br />
Interrupt:10 Base address:0x10a0</code><br />
<code><br />
lo        Link encap:Local Loopback<br />
inet addr:127.0.0.1  Mask:255.0.0.0<br />
UP LOOPBACK RUNNING  MTU:16436  Metric:1<br />
RX packets:0 errors:0 dropped:0 overruns:0 frame:0<br />
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0<br />
collisions:0 txqueuelen:0<br />
RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)<br />
</code><br />
Repare a palavra &#8220;PROMISC&#8221; em eth0. Em maquinas Windows (NT, 2000, XP) pode-se utilizar o PromiscDetect. Outra ferramenta que pode ser utilizada é o  lsof (list  open files), em busca de network files abertos (sockets) ou ainda o arquivo onde o sniffer grave os dados capturados.</p>
<p>O problema da detecção local é que o invasor pode substituir as ferramentas como ifconfig ou ainda carregar módulos que façam o  computador esconder as informações que poderiam entregar a presença do sniffer. Um checador de integridade, como o tripwire, pode ajudar a resolver o problema da alteração de binários, mas se o invasor inserir um modulo no kernel que faca o sistema mentir para você, o tripwire de nada adiantara. Existem ferramentas, como o rkscan, que podem localizar rootkits conhecidos, através de assinaturas (padrões). Novamente, o rkscan de nada adiantara contra  um rootkit desenvolvido pelo próprio  invasor, já que sua assinatura não constara no rkscan. E a brincadeira de gato e rato continua. A detecção remota é um processo heurístico, ou seja, o resultado não eh 100% confiável. Nesta detecção exploram-se certas características do sistema operacional e protocolos, que possam indicar a existência de um sniffer. Vejamos algumas das técnicas que IDS e ferramentas como o antisniff utilizam para tentar identificar sniffers na rede.</p>
<p><strong>+ Método Ping</strong></p>
<p>Sem duvida o método mais conhecido, consiste em enviar um ICMP Echo Request (ping) para a maquina a ser testada, mas com o endereço MAC diferente. Como o MAC não é o da maquina, não deve haver resposta ao ping; se houver, é porque a interface de  rede não descartou o pacote, e portanto, esta rodando em modo promiscuo. Este método pode ser realizado com qualquer protocolo que gere resposta. Apesar de eficiente, pode ser  contornado facilmente; de fato vários sniffers furtivos implementam uma especie de &#8216;filtro virtual de MAC&#8217;, que inutiliza  esta técnica.</p>
<p><strong>+ Método ARP</strong></p>
<p>Existem basicamente duas possibilidades aqui. A primeira eh a mesma do Método Ping, só que utiliza-se o protocolo ARP. A segunda aproveita-se do ARP Cache. Lembram de como funciona isto? Se não lembram, releiam o texto, pois eu que não vou escrever novamente. Bem, o que se faz eh o seguinte: Envia-se um ARP para um endereço que não seja o de broadcast, e depois um  Ping para broadcast. As maquinas que  responderem o ping sem antes enviarem um ARP pedindo seu MAC *podem* te-lo obtido capturando o seu pacote ARP anterior, portanto *podem* estar executando um sniffer.</p>
<p><strong>+ Honey Pot (aka Armadilha)</strong></p>
<p>Honey Pots são utilizados para a detecção e estudo de ataques (apesar de existirem  muitas  criticas a  respeito  de seu  uso). No caso  da  detecção de sniffers, pode-se enviar informações, senhas falsas na rede, simular conexões, e esperar que alguém tente usa-las. Pode ser uma boa forma de detectar um sniffer totalmente passivo.</p>
<p><strong>+ DNS Reverso</strong></p>
<p>Alguns sniffers realizam operações resolução reversão (Reverse DNS  Lookups), isto eh, transformam endereços IP em nomes mais amigáveis (pelo menos para seres humanos normais), como google.com. Então, monitorando a utilização de resolução reversa na rede pode-se encontrar sniffers. Um exemplo pratico seria você  enviar vários pings para endereços inexistentes na rede, e monitora-la, para ver se alguma maquina tenta realizar a resolução.</p>
<p><strong>+ Inundacao ARP</strong></p>
<p>Para sniffers em redes comutadas serem funcionais, frequentemente eles necessitarão gerar grande trafego  ARP, seja para encher  a tabela do switch ou para assumir o lugar de outra maquina (Man in the middle). O monitoramento do número de anúncios ARP pode revelar a existência de sniffers na rede.</p>
<p><strong>+ Latência</strong></p>
<p>Este método pode trazer problemas a rede, portanto deve ser empregado com cuidado, e apenas quando já existir a suspeita que uma maquina esteja executando um sniffer. Ele consiste em enviar uma grande quantidade de trafego na rede. Maquinas que não estiverem suas interfaces de rede executando em modo promiscuo não serão afetadas, apenas as que estiverem, sim. Como serão afetadas? Terão um aumento do seu tempo de resposta, devido ao fato do sniffer (a maioria) analisar todos os pacotes recebidos a fim de armazenar apenas as informações que  forem interessantes. &#8216;Pingue&#8217; a maquina suspeita antes  de injetar grande quantidade de trafego na rede e anote o resultado. Depois, pingue novamente durante a &#8216;tempestade&#8217; de pacotes. Se a diferença for grande, podemos ter um sniffer ai.</p>
<p><strong>.:: Evitando o sniffing ::.</strong></p>
<p>Existem formas de tornar as coisas mais complicadas para sniffers, como o uso de entradas ARP estáticas &#8211; a cache ARP não é modificada &#8211; ou o uso de Port Security, que &#8216;prende&#8217; os endereços MAC a certas portas do switch, mas não são muito praticas. Existem ainda interfaces de  rede que não suportam o modo promiscuo, mas são difíceis de serem encontradas. A solução mais efetiva contra sniffers é o uso de criptografia, desde que seja implementada de forma correta, com algoritmos seguros, além de ser muito mais fácil de ser administrado que as soluções anteriores.</p>
<p><strong>.:: Finalizando ::.</strong></p>
<p>Espero que este artigo tenha atingido seu objetivo de servir de introdução ao sniffing, um eterno (?) problema para admins. Fico devendo (mas na o garanto que farei :P) uma parte sobre sniffing de redes wireless. Ate a próxima! :&gt;</p>
<p>hallz</p>
<p><strong>.:: Links Relacionados ::.</strong></p>
<p><a href="http://www.packetstormsecurity.nl/sniffers/">http://www.packetstormsecurity.nl/sniffers/</a><br />
<a href="http://stein.cshl.org/~lstein/talks/WWW6/sniffer/">http://stein.cshl.org/~lstein/talks/WWW6/sniffer/</a><br />
<a href="http://www.linux-sec.net/Sniffer/">http://www.linux-sec.net/Sniffer/</a><br />
<a href="http://www.datanerds.net/~mike/dsniff.html">http://www.datanerds.net/~mike/dsniff.html</a><br />
<a href="http://www.ntsecurity.nu/toolbox/promiscdetect/">http://www.ntsecurity.nu/toolbox/promiscdetect/</a><br />
<a href="http://www.securityfriday.com/ToolDownload/ScoopLM/scooplm_doc.html">http://www.securityfriday.com/ToolDownload/ScoopLM/scooplm_doc.html</a><br />
<a href="http://ettercap.sourceforge.net/">http://ettercap.sourceforge.net/</a><br />
<a href="http://www.oxid.it/cain.html">http://www.oxid.it/cain.html</a><br />
<a href="http://staff.washington.edu/dittrich/talks/agora/macof">http://staff.washington.edu/dittrich/talks/agora/macof</a><br />
<a href="http://www.robertgraham.com/pubs/sniffing-faq.html">http://www.robertgraham.com/pubs/sniffing-faq.html</a><br />
<a href="http://www.nwo.net/osall/Methodology/Novice/Sniffer_FAQ/sniffer_faq.html">http://www.nwo.net/osall/Methodology/Novice/Sniffer_FAQ/sniffer_faq.html</a><br />
<a href="http://www.packetwatch.net/documents/papers/layer2sniffing.pdf">http://www.packetwatch.net/documents/papers/layer2sniffing.pdf</a><br />
<a href="http://www.ebookhackers.net/kb/index.php?page=index_v1&amp;c=15">http://www.ebookhackers.net/kb/index.php?page=index_v1&amp;c=15</a></p>
<p>.:: EOF ::.</p>
<p>The post <a href="http://0fx66.com/blog/sniffing-for-dummies/">Sniffing for Dummies</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/conhecendo-o-tcpdump/' rel='bookmark' title='Conhecendo o Tcpdump'>Conhecendo o Tcpdump</a></li>
<li><a href='http://0fx66.com/blog/redes-basico-sobre-o-modelo-osi/' rel='bookmark' title='[Redes] Básico sobre o Modelo OSI'>[Redes] Básico sobre o Modelo OSI</a></li>
</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/0fx66?a=yzgIdDSd0E0:FbmfEsLILmE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=yzgIdDSd0E0:FbmfEsLILmE:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/0fx66?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=yzgIdDSd0E0:FbmfEsLILmE:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/0fx66?i=yzgIdDSd0E0:FbmfEsLILmE:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=yzgIdDSd0E0:FbmfEsLILmE:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=yzgIdDSd0E0:FbmfEsLILmE:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/0fx66?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=yzgIdDSd0E0:FbmfEsLILmE:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/0fx66?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=yzgIdDSd0E0:FbmfEsLILmE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/0fx66?i=yzgIdDSd0E0:FbmfEsLILmE:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=yzgIdDSd0E0:FbmfEsLILmE:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/0fx66?i=yzgIdDSd0E0:FbmfEsLILmE:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/0fx66/~4/yzgIdDSd0E0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://0fx66.com/blog/sniffing-for-dummies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://0fx66.com/blog/sniffing-for-dummies/</feedburner:origLink></item>
		<item>
		<title>Conhecendo o Tcpdump</title>
		<link>http://feedproxy.google.com/~r/0fx66/~3/FLno_3RD7nE/</link>
		<comments>http://0fx66.com/blog/conhecendo-o-tcpdump/#comments</comments>
		<pubDate>Fri, 08 Mar 2013 15:00:28 +0000</pubDate>
		<dc:creator>VonNaturAustreVe</dc:creator>
				<category><![CDATA[Redes]]></category>
		<category><![CDATA[Segurança]]></category>
		<category><![CDATA[How to]]></category>
		<category><![CDATA[tcpdump]]></category>

		<guid isPermaLink="false">http://0fx66.com/blog/?p=181</guid>
		<description><![CDATA[<p>O tcpdump é um analisador de pacotes que roda em modo texto( e também um dos sniffers mais famosos que existe). Sua utilização é simples e sem mistérios, bastando apenas ter os conhecimentos básicos de redes TCP/IP e basta roda-lo com o root que ele começa a fazer o serviço. Segue uma pequena lista com [...]</p><p>The post <a href="http://0fx66.com/blog/conhecendo-o-tcpdump/">Conhecendo o Tcpdump</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/sniffing-for-dummies/' rel='bookmark' title='Sniffing for Dummies'>Sniffing for Dummies</a></li>
<li><a href='http://0fx66.com/blog/redes-basico-sobre-o-modelo-osi/' rel='bookmark' title='[Redes] Básico sobre o Modelo OSI'>[Redes] Básico sobre o Modelo OSI</a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>O <em>tcpdump</em> é  um<a title="Artigo sobre sniffer,definição,conceito e outras explicações sobre o uso de sniffers." href="http://0fx66.com/blog/redes/sniffing-for-dummies/" target="_blank"> analisador de pacotes</a> que roda em modo texto( e também um dos sniffers mais famosos que existe). Sua utilização é simples e sem mistérios, bastando apenas ter os  conhecimentos básicos de redes <em>TCP/IP</em> e basta roda-lo com o root que ele começa a fazer o serviço. Segue uma pequena lista com alguns parâmetros.</p>
<pre>-D: interfaces vistas pelo tcpdump

-c: captura c pacotes

-e: informação de camada de enlace

-A: imprime os pacotes em ASCII

-n: não resolve nomes (mostra endereços como são)

-v : modo verbose (pode-se aumenta-lo com -vv -vvv)

-x: mostra o PDU em hexadecimal

-S: mostra números de sequência em formato absoluto (por padrão o tcpdump
mostra os números relativos aos valores iniciais estabelecidos na conexão)

-s: tamanho do pacote

-t: retira a informação de timestamp do início da linha

-ttt: mostra a diferença de tempo para uma referência em us (microssegundos)
expressão – indica que pacotes devem ser mostrados (dumped) Ex.:
tcpdump -n icmp
tcpdump src &lt;origem&gt;
tcpdump dst &lt;destino&gt;
tcpdump host &lt;máquina&gt;</pre>
<p>Agora vamos a algumas dicas o seu uso. Para armazenar a saída (em modo texto) em um arquivo digite:<br />
<code>tcpdump –c 100 &gt; trace.txt</code></p>
<p>Com esse comando abaixo ele ira sniffar os pacotes que passam pela interface eth0:<br />
<code>#tcpdump -i eth0 </code></p>
<p>Usando esse comando ele ira capturar todos os pacotes vindos de 192.168.0.2 (que também funciona com URL, que será explicado mais abaixo):<br />
<code>#tcpdump -i eth0 src host 192.168.0.2</code></p>
<p>É também e possível utiliza-lo com sites, por exemplo:<br />
<code>#tcpdump -i eth0 src host www.google.com </code></p>
<p>dessa forma ele ira capturar todos os pacotes que vem de www.google.com. Para verificar todo trafego que vem da porta de origem 666:<br />
<code>#tcpdump -i eth0 src port 666 </code></p>
<p>O argumento -n evita name service queries, a resolução de DNS:<br />
<code>#tcpdump -n icmp</code></p>
<p>Para Scaneiar restritamente  TCP ou UDP:<br />
<code>#tcpdump -n -t tcp or udp</code></p>
<p>Para scaneiar restritamente TCP port 22:<br />
<code>#tcpdump tcp port 22</code></p>
<p>Para scaneiar os dois IP (comunicação entre dois IP), excelente se o tcpdump estiver no gateway:<br />
<code>#tcpdump host \(10.10.100.100 and 10.10.200.200\)</code></p>
<p>Para scaneiar a porta 666 mas descarta host IP 192.168.0.1:<br />
<code>#tcpdump port 666 and not host 192.168.0.1</code></p>
<p>Capturando pacotes com origem em 172.25.50.1 e destino 201.XXX.XXX.XXX, com exceção da porta 666:<br />
<code>#tcpdump -i en1 -n src 172.25.50.1 and dst 201.XXX.XXX.XXX and port not 666. </code></p>
<p>Agora, um pouco mais chique, usando egrep &#8211; isso vai mostrar todos os seus pedidos da Web em tempo real:<br />
<code>#tcpdump-i eth0-Um porta-n 80 | egrep-i (GET. / | POST. / | Host:)</code></p>
<p>Se você esqueceu sua senha pop3, mas tê-lo guardado no cliente, isto também se aplica às senhas para a web, eu tenho utilizado este um  lote, em vez de o &#8220;esqueci senha&#8221; mecanismo&#8230;<br />
<code>#tcpdump-i eth0-n port 110-A | egrep-i (user | pass)</code></p>
<p>Obtêm somente os segmentos com SYN ligado:<br />
<code>#tcpdump 'tcp[13] &amp; 2==2'</code></p>
<p>Para filtrar pacotes com cabeçalhos maiores de 20 bytes:<br />
<code>#tcpdump 'ip[0] &amp; 0x0f &gt; 5'</code></p>
<p>Para filtra o 10º byte ou 9º offset  (protocol field) &#8211;  TCP = port 6  UDP = port 17, por exemplo:<br />
<code>#tcpdump ‘ip[9] = 6’ </code></p>
<p>Capturar o tráfego de pacotes TCP que tenham o flag SYN ligado (ou seja apenas os pacotes de solicitações de conexão). Use o comando abaixo:<br />
<code>#tcpdump -i eth0 'tcp[13] &amp; 2 == 2' –w syn.cap –c 5</code></p>
<p><strong>Referências e links</strong></p>
<ul>
<li><a title="Link Oficial do tcpdump." href="http://www.tcpdump.org/" target="_blank">Site oficial do projeto.</a></li>
<li><a title="Guia de referência do tcpdump." href="http://ricardo-iramar.com.br/docs/doc10.html" target="_blank">Guia de referência</a> em português escrito por <em>Ricardo Iramar dos Santos </em>aka<em> Agent Smith.</em></li>
<li><a href="http://www.ietf.org/rfc/rfc0791.txt">http://www.ietf.org/rfc/rfc0791.txt</a></li>
<li><a href="http://www.ietf.org/rfc/rfc0793.txt">http://www.ietf.org/rfc/rfc0793.txt</a></li>
<li>Dicas <a title="Uma séria de dicas do tcpdump." href="http://www.vivaolinux.com.br/dica/tcpdump-Monitorando-conexoes/" target="_blank">aqui</a> e <a title="Mais algumas dicas sobre o tcpdump." href="http://www.johns-company.com/index.php?lang=pt&amp;cat=196&amp;month=2009-06&amp;id=44231" target="_blank">aqui</a> sobre o tcpdump</li>
<li><a title="Tradução da man page do tcpdump" href="http://www.kernelhacking.com/rodrigo/docs/Tcpdump.pdf" target="_blank">Tradução da man page</a> do tcpdump</li>
</ul>
<p>[]&#8216;s</p>
<p>The post <a href="http://0fx66.com/blog/conhecendo-o-tcpdump/">Conhecendo o Tcpdump</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/sniffing-for-dummies/' rel='bookmark' title='Sniffing for Dummies'>Sniffing for Dummies</a></li>
<li><a href='http://0fx66.com/blog/redes-basico-sobre-o-modelo-osi/' rel='bookmark' title='[Redes] Básico sobre o Modelo OSI'>[Redes] Básico sobre o Modelo OSI</a></li>
</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/0fx66?a=FLno_3RD7nE:4DOwXp7O0WU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=FLno_3RD7nE:4DOwXp7O0WU:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/0fx66?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=FLno_3RD7nE:4DOwXp7O0WU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/0fx66?i=FLno_3RD7nE:4DOwXp7O0WU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=FLno_3RD7nE:4DOwXp7O0WU:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=FLno_3RD7nE:4DOwXp7O0WU:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/0fx66?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=FLno_3RD7nE:4DOwXp7O0WU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/0fx66?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=FLno_3RD7nE:4DOwXp7O0WU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/0fx66?i=FLno_3RD7nE:4DOwXp7O0WU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=FLno_3RD7nE:4DOwXp7O0WU:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/0fx66?i=FLno_3RD7nE:4DOwXp7O0WU:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/0fx66/~4/FLno_3RD7nE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://0fx66.com/blog/conhecendo-o-tcpdump/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://0fx66.com/blog/conhecendo-o-tcpdump/</feedburner:origLink></item>
		<item>
		<title>O Entendo o funcionamento dos Chipsets.</title>
		<link>http://feedproxy.google.com/~r/0fx66/~3/OU8zMUxIw-g/</link>
		<comments>http://0fx66.com/blog/o-entendo-o-funcionamento-dos-chipsets/#comments</comments>
		<pubDate>Thu, 07 Mar 2013 15:00:16 +0000</pubDate>
		<dc:creator>VonNaturAustreVe</dc:creator>
				<category><![CDATA[Arquitetura de Computadores]]></category>
		<category><![CDATA[Chipsets]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[How to]]></category>

		<guid isPermaLink="false">http://0fx66.com/blog/?p=178</guid>
		<description><![CDATA[<p>Security Darkers Darkers Zine Membros:_Dr4k0_,Storm,gbr,nibbles,OnlyOne,Sthealt,Dark_Side,Fylhoth,rog Autor: _Dr4k0_ Contato: wWw.darkers.com.br/smf +---------+ &#124; Chipsets&#124; +---------+ &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;Índice&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- Introdução Conteúdo: Chipsets&#8212;&#8212;&#8212;&#8212;-Uma visão Geral circuitos componentes do chipset Características Pontes&#8212;&#8212;&#8212;&#8212;&#8211;Ponte Norte Ponte Sul &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;Introdução&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; Este artigo sobre Chipsets foi escrito por mim(_Dr4k0_),depois de muito esforço, Pesquisas,estudos&#8230;Este é um artigo que explica como funciona os *Chipsets* Para você que adora ou [...]</p><p>The post <a href="http://0fx66.com/blog/o-entendo-o-funcionamento-dos-chipsets/">O Entendo o funcionamento dos Chipsets.</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/cisc-vs-risc/' rel='bookmark' title='CISC vs RISC'>CISC vs RISC</a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<pre>                  Security Darkers
                    Darkers Zine

Membros:_Dr4k0_,Storm,gbr,nibbles,OnlyOne,Sthealt,Dark_Side,Fylhoth,rog
Autor: _Dr4k0_                  
Contato: wWw.darkers.com.br/smf                                           

+---------+
| Chipsets|
+---------+</pre>
<p><strong>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;Índice&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</strong></p>
<p>Introdução<br />
Conteúdo:<br />
Chipsets&#8212;&#8212;&#8212;&#8212;-Uma visão Geral<br />
circuitos componentes do chipset<br />
Características<br />
Pontes&#8212;&#8212;&#8212;&#8212;&#8211;Ponte Norte<br />
Ponte Sul</p>
<p><strong>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;Introdução&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</strong><br />
Este artigo sobre Chipsets foi escrito por mim(_Dr4k0_),depois de muito esforço, Pesquisas,estudos&#8230;Este é um artigo que explica como funciona os *Chipsets* Para você que adora ou é um viciado em hardware leia que irá gostar&#8230;Porém se apenas &#8220;gosta&#8221; porém não pretende estudar mais afundo e gosta apenas do simples não recomendo..Pois irá achar um texto muito chato e monótomo. Porém é um texto bom que na minha opinião todos deveriam ler..não é grande, e você não tem nada a perder :D</p>
<p><strong>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;Conteúdo&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</strong></p>
<p><strong>Chipsets:</strong></p>
<p>Chipsets é um conjunto de circuitos eletrônicos montados num tablete de silício. Silício é um metal semicondutor. Chipsets são construídos com tecnologia VLSI (Very Large Scale Integration). As modernas placas de CPU trazem um chipset incorporado ou vários.O chipset engloba todos os circuitos adicionais. Por isso é também chamado de Circuito de Apoio ou Lógica Adicional.<br />
O chipset contém circuitos de apoio ao processador as memórias as interfaces ao barramento. Esses circuitos geram os controles necessários para o trabalho do processador.</p>
<p>Entre os circuitos componentes do chipset, podemos citar:</p>
<p>-Circuito de Refresh<br />
-Circuito de controle da memória cache<br />
-Circuito de controle do bus de 16 bits<br />
-circuito de controle do bus de 32 bits<br />
-Circuito de DMA<br />
-Circuito de IRQ</p>
<p><strong>Características de Chipsets:</strong></p>
<p>Memória RAM máxima que o chipset endereça.<br />
Memória cache máxima que o chipset acessa.<br />
Memória RAm máxima que o chipset acessa utilizando a memória cache externa L2, quando a placa-mãe possui L2 externa.<br />
Tipos de memória RAM que o chipset acessa. Tipos de cache L2 que o chipset reconhece quando a placa mãe possui L2 externo.<br />
Capacidade de operação com mais de um processador.<br />
Padrões de disco rígido UDMA/33 UDMA/66  e UDMA/100.<br />
Barramento que o chipset pode acessar como AGP USB e Firewire.<br />
Frequência máxima de operação.<br />
Modo de operação do baramento AGP/PCI-X.</p>
<p>As Principais caraterísticas de uma placa mãe estão relacionadas com o seu chipset. A diferença entre placas-mãe,está no chipset que elas utilizam. Placas-mãe de fabricantes diferentes possuem o mesmo desempenho quando utilizam o mesmo chipset. Isso é tão importante que as placas-mãe geralmente têm a marca do chipset se fose seu sobrenome. Ponte Norte e Ponte Sul são dois circuitos de grande importância para o funcionamento da placa mãe.</p>
<p><strong>Ponte Norte</strong></p>
<p>Esse circuito é de grande importância, ele controla o sistema, o desempenho da placa-mãe depende dele. O circuito Ponte Norte controla a memória a ponte barramento local-PCI e a ponte barramento local-AGP, em placas-mãe soquete 7 mais antigas a memória cache L2 era também controlada por esse circuito. Placas mais recentes trazem a ponte norte com dissipador de calor. Outras trazem um cooler acoplado ao dissipador(OMG!), ponte norte é um circuito de grande importância para o chipset pois faz controle da memória RAM e da memória Cache. Ele determina a quantidade máxima de memória RAM que a placa-mãe pode endereçar os padrões de memória que reconhece assim como a quantidade máxima de memória cache aceitável, cada chip utiliza uma quantidade de ciclos mínimos segundo as especificações técnicas cedidas pelo fabricantes. É possível aumentar a quantidade de pulsos de clock, conforme a configuração de wait states.</p>
<p><strong>Ponte Sul</strong></p>
<p>Esse circuito faz o controle de periféricos portanto é chamado de controlador de periféricos, ou seja, ele faz ponte entre o barramento PCI e o barramento ISA controla os periféricos onboard como as portas IDE 1 e IDE 2. Faz controle de barramentos externo de expansão. A ponte sul contém o controlador de DMA o controlador de interrupções a CMOS e o relógio de tempo real, o circuito super I/O controla o teclado unidades de disquete e portas serias e paralela. O super I/O está ligado a ponte sul. Em alguns chipsets as funções do super I/O estão integradas à ponte sul, em outros o circuito faz controle de outros periféricos integrados como vídeo som e modem. A ponte norte e ponte sul em alguns chipsets antigos vinham acompanhadas de dois circuitos chamados de buffers de dados entre o processador e a memória RAM chipsets atuais trazem esse circuito dentro da ponte norte</p>
<p><strong>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</strong></p>
<p>The post <a href="http://0fx66.com/blog/o-entendo-o-funcionamento-dos-chipsets/">O Entendo o funcionamento dos Chipsets.</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/cisc-vs-risc/' rel='bookmark' title='CISC vs RISC'>CISC vs RISC</a></li>
</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/0fx66?a=OU8zMUxIw-g:82VT1fXP1zk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=OU8zMUxIw-g:82VT1fXP1zk:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/0fx66?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=OU8zMUxIw-g:82VT1fXP1zk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/0fx66?i=OU8zMUxIw-g:82VT1fXP1zk:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=OU8zMUxIw-g:82VT1fXP1zk:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=OU8zMUxIw-g:82VT1fXP1zk:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/0fx66?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=OU8zMUxIw-g:82VT1fXP1zk:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/0fx66?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=OU8zMUxIw-g:82VT1fXP1zk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/0fx66?i=OU8zMUxIw-g:82VT1fXP1zk:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=OU8zMUxIw-g:82VT1fXP1zk:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/0fx66?i=OU8zMUxIw-g:82VT1fXP1zk:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/0fx66/~4/OU8zMUxIw-g" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://0fx66.com/blog/o-entendo-o-funcionamento-dos-chipsets/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://0fx66.com/blog/o-entendo-o-funcionamento-dos-chipsets/</feedburner:origLink></item>
		<item>
		<title>[Redes] Básico sobre o Modelo OSI</title>
		<link>http://feedproxy.google.com/~r/0fx66/~3/KLdSoBGdBvs/</link>
		<comments>http://0fx66.com/blog/redes-basico-sobre-o-modelo-osi/#comments</comments>
		<pubDate>Wed, 06 Mar 2013 15:00:31 +0000</pubDate>
		<dc:creator>VonNaturAustreVe</dc:creator>
				<category><![CDATA[Redes]]></category>
		<category><![CDATA[OSI]]></category>

		<guid isPermaLink="false">http://0fx66.com/blog/?p=176</guid>
		<description><![CDATA[<p>=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= =-[08]-=[Básico sobre o Modelo OSI]=-&#124;d4rwin&#124;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= !AVISO!: O objetivo deste texto não é nem de longe dar todos os detalhes sobre este modelo de referência, porém fornecer uma visão básica sobre ele, permitindo a compreensão de onde entram protocolos como o TCP e o IP por exemplo, ou então sobre como os dados trafegam [...]</p><p>The post <a href="http://0fx66.com/blog/redes-basico-sobre-o-modelo-osi/">[Redes] Básico sobre o Modelo OSI</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/conhecendo-o-tcpdump/' rel='bookmark' title='Conhecendo o Tcpdump'>Conhecendo o Tcpdump</a></li>
<li><a href='http://0fx66.com/blog/sniffing-for-dummies/' rel='bookmark' title='Sniffing for Dummies'>Sniffing for Dummies</a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p><strong>=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=<br />
=-[08]-=[Básico sobre o Modelo OSI]=-|d4rwin|-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=<br />
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-</strong>=</p>
<p>!AVISO!:  O objetivo deste texto não é nem de longe dar todos os detalhes sobre este modelo de referência, porém fornecer uma visão básica sobre ele, permitindo a compreensão de onde entram protocolos como o TCP e o IP por exemplo, ou então sobre como os dados trafegam na rede.</p>
<p><strong><br />
=======================================<br />
=            .,ÍNDICE.,               =<br />
=======================================<br />
=                                     =<br />
=  1.0&#8230;Introdução                   =<br />
=   |                                 =<br />
=  2.0&#8230;Camadas                      =<br />
=   |-&gt;   2.1&#8230;Aplicação             =<br />
=   |-&gt;   2.2&#8230;Apresentação          =<br />
=   |-&gt;   2.3&#8230;Sessão                =<br />
=   |-&gt;   2.4&#8230;Transporte            =<br />
=   |-&gt;   2.5&#8230;Rede                  =<br />
=   |-&gt;   2.6&#8230;Enlace de dados       =<br />
=   |-&gt;   2.7&#8230;Física                =<br />
=   |                                 =<br />
=  3.0&#8230;Exemplo prático              =<br />
=   |                                 =<br />
=  4.0&#8230;Alegoria                     =<br />
=   |                                 =<br />
=  5.0&#8230;Os protocolos e o Modelo OSI =<br />
=   |                                 =<br />
=  6.0&#8230;Conclusão                    =<br />
=   |                                 =<br />
=  7.0&#8230;Referências bibliográficas   =<br />
=                                     =<br />
=======================================</strong></p>
<p><strong>&#8211;=[ 1.0 &#8211; Introdução</strong></p>
<p>O modelo de referência OSI(Open Systems Interconnection) foi criado pela ISO (International Standards Organization) para interconexão de redes heterogêneas/sistemas abertos, visando por um fim à incompatibilidade até então enfrentada pelas redes de computadores da época.</p>
<p><strong>&#8211;=[ 2.0 &#8211; Camadas</strong></p>
<p>Basicamente, pode-se  dividi-lo em sete camadas, classificadas de acordo com suas funções. Todo o processo de comunicação entre computadores, segue o padrão de encapsulamento, isto é,  a camada de nível mais alto é encapsulada na de nível inferior. Cada camada não possui um protocolo específico, mas uma função determinada, que é preenchida por algum protocolo desenvolvido para tal.</p>
<p><strong>&#8211;=&#8211;=[ 2.1 &#8211; Aplicação </strong></p>
<p>Está é a camada mais superior do modelo OSI. É nela que as requisições a serviços são realizadas,  como visualizar uma página web (HTTP), transferir arquivos(FTP),  ou então receber e enviar emails(POP3 e SMTP).  Também gerencia e administra os processos de aplicação, faz o controle de acesso, realiza o monitoramento e recuperação dos dados, etc.</p>
<p><strong>&#8211;=&#8211;=[ 2.2 &#8211; Apresentação </strong></p>
<p>É responsável pela interpretação e tradução dos dados vindos da camada precedente, cuidando da sintaxe das informações transmitidas. Quando se trata do receptor, as informações que vêm da camada 5 (Sessão) são preparadas na camada 6 (Apresentação)  para a sua utilização por aplicativos  presentes na  camada 7 (Aplicação). Pode ter outras utilidades, como compressão de dados e criptografia. No caso da compressão, os dados serão descomprimidos na camada correspondente pelo receptor.</p>
<p><strong>&#8211;=&#8211;=[ 2.3 &#8211; Sessão </strong></p>
<p>Aqui é onde se inicia o verdadeiro processo de comunicação. A camada de sessão permite estabelecer a conexão entre computadores distintos. Ela inicia e termina a sessão de diálogo entre duas máquinas, assim como gerencia e sincroniza as informações trafegadas, também realizando a marcação dos dados para o caso de interrupção na comunicação, quando a conexão é restabelecida,  sabe-se onde parou. Em outras palavras, permite que as máquinas se entendam. Fazendo uma analogia com a vida real, seria como um homem em meio a duas mulheres, administrando o momento certo de cada uma falar.</p>
<p><strong>&#8211;=&#8211;=[ 2.4 &#8211; Transporte</strong></p>
<p>Dentre as 7 camadas sintetizadoras do Modelo  OSI, dois grupos podem ser formados. O primeiro composto pelas  camadas 7, 6, 5 (Aplicação,  Apresentação e Sessão respectivamente). Este  primeiro grupo se preocupa apenas com  os  dados, não importando a maneira como estão sendo transportados. O segundo grupo,  conta com as camadas 3,  2, 1 (Rede, Enlace  de dados e Física  respectivamente). Este grupo por sua vez, preocupa-se com a transmissão dos dados em si. Você deve  ter notado a falta da camada 4 (Transporte). É ela quem interliga estes dois grupos.</p>
<p>A camada de transporte realiza a segmentação dos dados provenientes  da camada de sessão. Após dividi-los em pacotes repassa à camada de rede. A camada de sessão estabelece a conexão,  e a de transporte  fornece e gerencia o canal para troca de dados. Exerce também o controle de fluxo (ordenação dos dados caso não estejam na ordem correta) e executa  correção de erros, através de mensagens de recebimento do pacote. No receptor, realiza a junção dos pacotes (multiplexação) vindos da camada 3 para enviar a camada 5.</p>
<p><strong>&#8211;=&#8211;=[ 2.5 &#8211; Rede</strong></p>
<p>Realiza o encaminhamento dos pacotes entre redes distintas, roteando os pacotes e lidando com as adversidades que venham a surgir durante a transmissão, como congestionamentos. Portanto, faz a conversão dos endereços lógico em endereços físicos.  Cabe a ela encontrar o computador destino no meio de tantos outros e controlar condições de tráfego e prioridade para o roteamento.</p>
<p><strong>&#8211;=&#8211;=[ 2.6 &#8211; Enlace de dados</strong></p>
<p>Também conhecida como camada de Link de Dados,  tem por função pegar os pacotes fornecidos pela camada de rede e transformá-los em quadros,  garantindo uma transmissão confiável através da rede.  Esses quadros  possuem  informações pertinentes, como endereços da placa de rede do transmissor e receptor,  payload (os dados em questão)  e o CRC, para  checar a integridade dos  dados (caso  não seja  enviada  nenhuma  mensagem  de  sucesso  no  transporte,  os  quadros  são reenviados pela camada 2). Um exemplo de protocolo que trabalha nesta camada   é o Ethernet, largamente utilizado nas redes de computadores atuais.</p>
<p><strong>&#8211;=&#8211;=[ 2.7 &#8211; Física</strong></p>
<p>É a camada de mais baixo nível no modelo OSI, sendo o último elo de conexão entre duas máquinas. Sua função principal é fazer a conversão dos quadros que vêm da camada inferior em sinais elétricos ou luminosos (no caso das fibras ópticas), mantendo a compatibilidade com o meio de transmissão. Ou seja, a camada física faz a tradução dos quadros vindos da camada 2 em  0s e 1s e em seguida encaminha os bits através das interfaces de rede.</p>
<p>OBS.: A camada física  não inclui o meio  em que os dados  trafegam, como  cabos por exemplo.</p>
<p><strong>&#8211;=[ 3.0 &#8211; Exemplo prático</strong></p>
<p>Para  facilitar o entendimento de como  funciona o modelo de referência, irei propor uma situação hipotética, porém prática da utilização do mesmo para a construção de um  arquitetura de rede. Lembrando que as  camadas superiores são encapsuladas nas inferiores.</p>
<p>Supomos  que um  usuário gostaria  de visualizar  seus e-mails presentes em um servidor.</p>
<ul>
<li> Camada 7</li>
</ul>
<p>O primeiro passo é abrir o cliente  de e-mails, que entrará em contato com o servidor, utilizando o protocolo POP3. O ato de requisitar o servidor usando este protocolo, encaixa o mesmo na camada de aplicação do modelo OSI.</p>
<ul>
<li>Camada 6</li>
</ul>
<p>A requisição feita pelo usuário usando a camada de aplicação é traduzida para  uma linguagem padrão para que os dados sejam transportados.</p>
<ul>
<li>Camada 5</li>
</ul>
<p>Na camada de Sessão a conexão é estabelecida com o host destino (200.124.1.66,   *número  fictício). Esta camada irá cuidar do  diálogo entre as máquinas, interrupções na conexão, avisando o emissor caso alguma coisa aconteça.</p>
<ul>
<li> Camada 4</li>
</ul>
<p>Aqui é criado o &#8220;túnel&#8221; fim-a-fim para o transporte dos  dados, que serão segmentados em pacotes, e repassados para a camada 3. Protocolos que trabalham  nesta camada  são o TCP (Transmission Control Protocol) e UDP(User Datagram Protocol).</p>
<ul>
<li>Camada 3</li>
</ul>
<p>Como sabido, esta camada é responsável pelo encaminhamento e roteamento dos pacotes, função essa exercida pelo IP (Internet Protocol) e roteadores. O ICMP(Internet Control Message Protocol) também age nesta camada, geralmente casado com o IP.</p>
<ul>
<li>Camadas 2 e 1</li>
</ul>
<p>A camada 2, onde os pacotes são transformados em quadros para serem repassados a camada física, possui o Ethernet. Ele procura  pelo endereço físico da interface de rede destino (MAC Adress) para então enviar os quadros, de acordo com as especificações de cabeamento e sinais elétricos.</p>
<p>Quando os bits chegam na interface de rede destino (placa  de rede), estes percorrem o caminho inverso ao exercido na máquina emissora.</p>
<p><strong><br />
&#8211;=[ 4.0 &#8211; Alegoria<br />
</strong><br />
No tópico acima foi visto um exemplo prático da aplicação do modelo OSI para a construção de uma arquitetura, onde um usuário requisitou a um servidor ver os e-mails presentes no mesmo. Agora vou propor uma situação fora do mundo da informática, para quem sabe esclarecer ainda mais o funcionamento do OSI.</p>
<p>A Silvia Saint vai estrelar um novo filme, e precisa ir de uma cidade à outra para filmar.  Por isso ela vai até a rodoviária e compra uma  passagem de ônibus convencional, porque leito é mais caro. O ato de comprar a passagem, representa a camada de aplicação no modelo OSI. Ao chegar até a porta do ônibus, Silvia dá uma boa olhada no motorista, motorista dá uma boa olhada em Silvia, e então&#8230;pede a passagem dela para autenticar e suas malas para marcar. Esta é a camada de apresentação. Muito bem, começa a viagem e o ônibus se dirige até seu destino, estabelecendo a &#8220;conexão&#8221;.  Aí temos a camada 5, Sessão.  O ônibus não pode andar em cima do nada, para  isso é preciso uma estrada, que representa  o protocolo TCP ou UDP, presentes na camada 4 (Transporte). Todavia surge um problema, Silvia é a única passageira do ônibus (huhun) e está atrasadíssima para as filmagens. O motorista então tem de optar pela melhor rota para chegar até o destino. Encaixamos o IP.  Caso algum imprevisto ocorra, como um pneu furado, o ICMP entra em ação, e avisa a Central Rodoviária que o ônibus quebrou.  Agora, para representar as camadas remanescentes, como não encontrei nada melhor, vou utilizar o combustível do  ônibus. O Ethernet cuidará para que o motorista não abasteça o veículo com Diesel ao invés de Gasolina. Fim.</p>
<p><strong>&#8211;=[ 5.0 &#8211; Os protocolos e o Modelo OSI</strong></p>
<p>A figura 1.0 mostra a estrutura do modelo de referência OSI.   *Ilustração retirada do livro Redes de Computadores, 4ª Edição.</p>
<p>A figura 1.1 mostra os protocolos utilizados tanto na internet como em redes  de computadores em geral.   *Ilustração retirada do Wikipedia, vide referências bibliográficas.</p>
<pre>###########################################################################################
#                                                                                         #
# Camada                                                             Nome da unidade      #
#                                                                     intercambiada       #
# ____________                                                        ____________        #
#|            |             Protocolo de aplicação                   |            |       #
#| Aplicação  |------------------------------------------------------| Aplicação  | APDU  #
#|____________|                                                      |____________|       #
# ______|_____                                                        ____________        #
#|            |             Protocolo de apresentação                |            |       #
#|Apresentação|------------------------------------------------------|Apresentação| PPDU  #
#|____________|                                                      |____________|       #
# ______|_____                                                        ____________        #
#|            |              Protocolo de sessão                     |            |       #
#|  Sessão    |------------------------------------------------------|  Sessão    | SPDU  #
#|____________|                                                      |____________|       #
# ______|_____                                                        ____________        #
#|            |             Protocolo de transporte                  |            |       #
#| Transporte |------------------------------------------------------| Transporte | TPDU  #
#|____________|            Limite da Sub-Rede de Comunicação         |____________|       #
# ______|_____      ___________________||_____________________        ____________        #
#|            |    |   PDRI = Protocolo da Sub-Rede Interna   |      |            |       #
#|   Rede     |--1-|       ******           ******            |------|   Rede     | Pacote#
#|____________|  | |       *Rede* ========= *Rede*            |      |____________|       #
# ______|_____   | |       ******           ******            |       ____________        #
#|            |  | |        PDRI                              |      |            |       #
#|   Enlace   |- 2-|       ********         ********          |------|   Enlace   | Quadro#
#|____________|  | |       *Enlace* ======= *Enlace*          |      |____________|       #
# ______|_____   | |       ********         ********          |       ____________        #
#|            |  | |        PDRI                              |      |            |       #
#|   Física   |--3-|       ********         ********          |------|   Física   | Bit   #
#|____________|  | |       *Física* ======= *Física*          |      |____________|       #
#                | |       ********         ********          |                           #
#  Host A        | |       Roteador         Roteador          |         Host B            #
#  ^^^^ ^        | |__________________________________________|         ^^^^ ^            #
#                |_________;1 Protocolo de roteador/host da camada de rede                #
#                |_________;2 Protocolo de roteador/host da camada de enlace de dados     #
#                |_________;3 Protocolo de roteador/host da camada física                 #
###########################################################################################
                                      Figura 1.0</pre>
<pre>#################################################
#            Protocolos de Internet             #
#################################################
# Aplicação   #   HTTP, SMTP, FTP, SSH, IRC,    #
#             #   SMTP, NNTP, POP3, IMAP, etc.  #
# ----------- # ------------------------------- #
# Transporte  #   TCP, UDP, SCTP, RTP, DCCP     #
# ----------- # ------------------------------- #
# Rede        #   IPv4, IPv6, ARP, ICMP         #
# ----------- # ------------------------------- #
# Ligação     #   Ethernet, 802.11 WiFi, Token  #
#             #   Ring, FDDI, PPP, etc.         #
# ----------- # ------------------------------- #
# Física      #   RS-232, EIA-422, RS-449, etc. #
#################################################
 Figura 1.1
</pre>
<p><strong>&#8211;=[ 6.0 &#8211; Conclusão</strong></p>
<p>Termino por aqui este pequeno artigo sobre o Modelo OSI. Como o próprio título do artigo propõe,  foi exposto aqui apenas o básico, mas isso não significa que seja o necessário. Não se prenda e vá atrás de mais informações a respeito, dê uma olhada nos links do Referências Bibliográficas. É isso ae, qualquer coisa mail-me.</p>
<p><strong>&#8211;=[ 7.0 &#8211; Referências Bibliográficas</strong></p>
<p>Arquitetura OSI<br />
<a href="http://penta.ufrgs.br/Marco/arqosi.html "> http://penta.ufrgs.br/Marco/arqosi.html </a></p>
<p>Modelo de Referência OSI<br />
<a href="http://www.forumweb.com.br/artigos/artigos.php?action=file&amp;id=268" target="_blank"> http://www.forumweb.com.br/artigos/artigos.php?action=file&amp;id=268</a></p>
<p>Entendendo os protocolos<br />
<a href="http://www.clubedasredes.eti.br/rede0013.htm" target="_blank"> http://www.clubedasredes.eti.br/rede0013.htm</a></p>
<p>Ethernet<br />
<a href="http://pt.wikipedia.org/wiki/Ethernet" target="_blank"> http://pt.wikipedia.org/wiki/Ethernet</a></p>
<p>O Modelo OSI de Interconexão de Sistemas Abertos<br />
<a href="http://www.teleco.com.br/tutoriais/tutorialosi/default.asp" target="_blank"> http://www.teleco.com.br/tutoriais/tutorialosi/default.asp</a></p>
<p>Comunicação de dados (Normas)<br />
<a href="http://www2.ufp.pt/~lmbg/textos/norma_osi.html#camadasois" target="_blank"> http://www2.ufp.pt/~lmbg/textos/norma_osi.html#camadasois</a></p>
<p>Livro &#8220;Redes de Computadores&#8221;, 4ª Edição<br />
Livro &#8220;Universidade H4CK3R&#8221;, 1ª Edição</p>
<p>|&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br />
||                                            ||<br />
||           d4rwin at motdlabs.org           ||<br />
||          http://www.d4rwin.cjb.net         ||<br />
||                                            ||<br />
|| MSN/GoogleTalk &gt; d4rwin@gmail.com          ||<br />
|| YahooMessenger &gt; d4rwinetico@yahoo.com.br  ||<br />
|| IRC            &gt; irc.freenode.net -j #motd ||<br />
||                                            ||<br />
|&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;</p>
<p>&#8220;Quem tem boca vai a Roma. Meu fogão tem 4 e não saiu da cozinha.&#8221;<br />
(Desconhecido)</p>
<p>&#8220;Bill Gates não é Adão, mais comeu a  Apple. E quem paga os pecados é o  usuário<br />
do Windows.&#8221;<br />
(Desconhecido)</p>
<p>_EOF_</p>
<p>The post <a href="http://0fx66.com/blog/redes-basico-sobre-o-modelo-osi/">[Redes] Básico sobre o Modelo OSI</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/conhecendo-o-tcpdump/' rel='bookmark' title='Conhecendo o Tcpdump'>Conhecendo o Tcpdump</a></li>
<li><a href='http://0fx66.com/blog/sniffing-for-dummies/' rel='bookmark' title='Sniffing for Dummies'>Sniffing for Dummies</a></li>
</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/0fx66?a=KLdSoBGdBvs:xB-FAf0eYG8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=KLdSoBGdBvs:xB-FAf0eYG8:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/0fx66?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=KLdSoBGdBvs:xB-FAf0eYG8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/0fx66?i=KLdSoBGdBvs:xB-FAf0eYG8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=KLdSoBGdBvs:xB-FAf0eYG8:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=KLdSoBGdBvs:xB-FAf0eYG8:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/0fx66?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=KLdSoBGdBvs:xB-FAf0eYG8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/0fx66?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=KLdSoBGdBvs:xB-FAf0eYG8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/0fx66?i=KLdSoBGdBvs:xB-FAf0eYG8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=KLdSoBGdBvs:xB-FAf0eYG8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/0fx66?i=KLdSoBGdBvs:xB-FAf0eYG8:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/0fx66/~4/KLdSoBGdBvs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://0fx66.com/blog/redes-basico-sobre-o-modelo-osi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://0fx66.com/blog/redes-basico-sobre-o-modelo-osi/</feedburner:origLink></item>
		<item>
		<title>[Linguagem C] Utilizando scanf em strings com espaço</title>
		<link>http://feedproxy.google.com/~r/0fx66/~3/EEb58GheRsI/</link>
		<comments>http://0fx66.com/blog/linguagem-c-utilizando-scanf-em-strings-com-espaco/#comments</comments>
		<pubDate>Tue, 05 Mar 2013 15:00:50 +0000</pubDate>
		<dc:creator>VonNaturAustreVe</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Linguagem C]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://0fx66.com/blog/?p=170</guid>
		<description><![CDATA[<p>Algumas pessoas tem problema com o uso de scanf, principalmente no uso de espaços nas strings, para resolver isso tem um macete muito simples. Digamos o código abaixo: Compile: gcc frase.c -o frase Resultado: bash-3.1$ frase Digite a uma frase: joao caiu feio A frase digitada foi: joao bash-3.1$ Para resolve esse problema do scanf [...]</p><p>The post <a href="http://0fx66.com/blog/linguagem-c-utilizando-scanf-em-strings-com-espaco/">[Linguagem C] Utilizando scanf em strings com espaço</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/conhecendo-a-funcao-printf/' rel='bookmark' title='Conhecendo a função printf'>Conhecendo a função printf</a></li>
<li><a href='http://0fx66.com/blog/convertendo-string-minuscula-em-maiuscula-em-c/' rel='bookmark' title='[Linguagem C]  Convertendo string minúscula em maiúscula em C'>[Linguagem C]  Convertendo string minúscula em maiúscula em C</a></li>
<li><a href='http://0fx66.com/blog/trabalhando-com-potencias-e-raiz-quadrada-e-cubica-em-c/' rel='bookmark' title='Trabalhando com potencias e raiz quadrada e cubica em C'>Trabalhando com potencias e raiz quadrada e cubica em C</a></li>
<li><a href='http://0fx66.com/blog/calculando-raizes-em-c-usando-a-funcao-pow/' rel='bookmark' title='Calculando raízes em C usando a função pow'>Calculando raízes em C usando a função pow</a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>Algumas pessoas tem problema com o uso de scanf, principalmente no uso de espaços nas strings, para resolver isso tem um macete muito simples. Digamos o código abaixo:</p>
<pre class="brush: cpp; title: ; notranslate">
#include &lt;stdio.h&gt;

int main() {
	char frase[50];
	printf(&quot;Digite a uma frase: &quot;);
	scanf(&quot;s&quot;, &amp;frase);
	printf(&quot;A frase digitada foi: %s\n&quot;, frase);
	
	return 0;
}
</pre>
<p>Compile: <code>gcc frase.c -o frase</code></p>
<p>Resultado:</p>
<pre>
bash-3.1$ frase
Digite a uma frase: joao caiu feio
A frase digitada foi: joao
bash-3.1$</pre>
<p>Para resolve esse problema do scanf não capturando o resto da frase usando o parâmetro %[^\n] ao invés de %s, por exemplo:</p>
<pre class="brush: cpp; title: ; notranslate">
#include &lt;stdio.h&gt;

int main(){
	char frase[50];
	printf(&quot;Digite a uma frase: &quot;);
	scanf(&quot;%[^\n]&quot;, frase);
	printf(&quot;A frase digitada foi: %s\n&quot;, frase);
	
	return 0;
}
</pre>
<p>Compile:<code> gcc frase2.c -o frase2</code></p>
<p>Resultado:</p>
<pre>
bash-3.1$ ex6
Digite a uma frase: joao caiu feio
A frase digitada foi: joao caiu feio
bash-3.1$
</pre>
<p>Agora a frase foi devidamente capturando, para evitarmos overflows no uso desse parâmetro no scanf, colocando %limite[^\n], sendo limite igual ao valor máximo de caracteres que a função scanf ira armazenar na variável. Ficando desta forma.</p>
<pre class="brush: cpp; title: ; notranslate">
#include &lt;stdio.h&gt;

int main() {
	char frase[50];
	printf(&quot;Digite a uma frase: &quot;);
	scanf(&quot;%49[^\n]&quot;, frase);
	printf(&quot;A frase digitada foi: %s\n&quot;, frase);
	
	return 0;
}
</pre>
<p>Para limpar o buffer após o uso de scanf com este parâmetro, usamos <code>getchar() </code> após o scanf.</p>
<pre class="brush: cpp; title: ; notranslate">
#include &lt;stdio.h&gt;

int main() {
	char frase[50];
	printf(&quot;Digite a uma frase: &quot;);
	scanf(&quot;%49[^\n]&quot;, frase);
        getchar();
	printf(&quot;A frase digitada foi: %s\n&quot;, frase);
	
	return 0;
}
</pre>
<p>Espero que a dica sirva para poderem resolver seus problemas o uso de scanf e strings. Bons estudos a todos. Nas referências tem um link com um tabela informando uma serie de parâmetros interessantes para o uso de scanf, no segundo link tem uma artigo do com diversas dicas para printf e scanf a dupla dinâmica.</p>
<p><strong>Referência:</strong></p>
<p><a href="http://wiki.portugal-a-programar.org/c:scanfparastrings" target="_blank">Como usar o scanf() para strings com espaços</a><br />
<a href="http://www.vivaolinux.com.br/artigo/Parametros-interessantes-do-scanf-e-do-printf-em-C?pagina=1" target="_blank">Parâmetros interessantes do scanf e do printf em C</a></p>
<p>The post <a href="http://0fx66.com/blog/linguagem-c-utilizando-scanf-em-strings-com-espaco/">[Linguagem C] Utilizando scanf em strings com espaço</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/conhecendo-a-funcao-printf/' rel='bookmark' title='Conhecendo a função printf'>Conhecendo a função printf</a></li>
<li><a href='http://0fx66.com/blog/convertendo-string-minuscula-em-maiuscula-em-c/' rel='bookmark' title='[Linguagem C]  Convertendo string minúscula em maiúscula em C'>[Linguagem C]  Convertendo string minúscula em maiúscula em C</a></li>
<li><a href='http://0fx66.com/blog/trabalhando-com-potencias-e-raiz-quadrada-e-cubica-em-c/' rel='bookmark' title='Trabalhando com potencias e raiz quadrada e cubica em C'>Trabalhando com potencias e raiz quadrada e cubica em C</a></li>
<li><a href='http://0fx66.com/blog/calculando-raizes-em-c-usando-a-funcao-pow/' rel='bookmark' title='Calculando raízes em C usando a função pow'>Calculando raízes em C usando a função pow</a></li>
</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/0fx66?a=EEb58GheRsI:oKo9jF-9EBo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=EEb58GheRsI:oKo9jF-9EBo:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/0fx66?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=EEb58GheRsI:oKo9jF-9EBo:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/0fx66?i=EEb58GheRsI:oKo9jF-9EBo:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=EEb58GheRsI:oKo9jF-9EBo:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=EEb58GheRsI:oKo9jF-9EBo:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/0fx66?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=EEb58GheRsI:oKo9jF-9EBo:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/0fx66?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=EEb58GheRsI:oKo9jF-9EBo:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/0fx66?i=EEb58GheRsI:oKo9jF-9EBo:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=EEb58GheRsI:oKo9jF-9EBo:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/0fx66?i=EEb58GheRsI:oKo9jF-9EBo:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/0fx66/~4/EEb58GheRsI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://0fx66.com/blog/linguagem-c-utilizando-scanf-em-strings-com-espaco/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://0fx66.com/blog/linguagem-c-utilizando-scanf-em-strings-com-espaco/</feedburner:origLink></item>
		<item>
		<title>Otimizando o Firefox com sqlite3</title>
		<link>http://feedproxy.google.com/~r/0fx66/~3/-4ugfFUq6N4/</link>
		<comments>http://0fx66.com/blog/otimizando-o-firefox-com-sqlite3/#comments</comments>
		<pubDate>Mon, 04 Mar 2013 15:00:58 +0000</pubDate>
		<dc:creator>VonNaturAustreVe</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Otimização]]></category>

		<guid isPermaLink="false">http://0fx66.com/blog/?p=162</guid>
		<description><![CDATA[<p>A dica vinda do blog do andre noel é bem facil e eficiente para ser feita. Primeiramente instalei o sqlite3. Após instalar o sqlite3,vá em: cd ~/.mozilla/firefox/perfil do firefox.default Você vai ver que essa pasta possui vários arquivos com a extensão .sqlite, que é o que queremos otimizar. Para isso, feche o Firefox depois simplesmente [...]</p><p>The post <a href="http://0fx66.com/blog/otimizando-o-firefox-com-sqlite3/">Otimizando o Firefox com sqlite3</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/otimizando-requisicoes-dns-no-firefox/' rel='bookmark' title='Otimizando requisições DNS no firefox'>Otimizando requisições DNS no firefox</a></li>
<li><a href='http://0fx66.com/blog/compilacao-de-dicas-para-o-firefox/' rel='bookmark' title='Compilação de dicas para o Firefox'>Compilação de dicas para o Firefox</a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>A dica vinda do blog do <a href="ttp://andrenoel.com.br/2009/07/27/melhorando-a-performance-do-firefox-aspirando-o-sqlite" target="_blank">andre noel</a> é bem facil e eficiente para ser feita.</p>
<p>Primeiramente instalei o <a href="http://www.sqlite.org/download.html" target="_blank">sqlite3</a>. Após instalar o sqlite3,vá em:</p>
<pre> cd ~/.mozilla/firefox/perfil do firefox.default</pre>
<p>Você vai ver que essa pasta possui vários arquivos com a extensão .sqlite, que é o que queremos otimizar. Para isso, feche o Firefox depois simplesmente digite, para cada arquivo:</p>
<pre>sqlite3 nome_do_arquivo.sqlite vacuum</pre>
<p>Tem como fazer em todos os arquivos de uma vez? Claro. Você está mexendo em um terminal Linux! Para fazer todos de uma vez, digite:</p>
<pre>for i in *.sqlite; do sqlite3 $i vacuum; done</pre>
<p>Basicamente o <i>vacuum</i> que isto faz é executar um <a href="https://dev.mysql.com/doc/refman/5.1/en/optimize-table.html" title="optmize table mysql" target="_blank">&#8220;OPTIMIZE TABLE&#8221;</a> nos arquivos do sqlite, como o firefox utiliza o sqlite para o armazenamento de suas informações, o vacuum irá dar uma geral nos arquivos .sqlite fazendo com o que firefox tenha uma leve melhoria em sua performance, principalmente se você possui muitos itens favoritados hehehe</p>
<p>Para saber mais sobre o vacuum recomendo ler a <a href="https://sqlite.org/lang_vacuum.html" title="Documentação do comando vaccum">documentação</a> do sqlite.</p>
<p><center><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="468" height="60" id="afiliados2" align="middle"><param name="movie" value="http://static.kinghost.net/swf/1.swf?nomedosite=0fx66.com&#038;corbg=745BB7&#038;cortxt=ffffff&#038;desconto=10&#038;mes=24&#038;codigo=46Z648ZS9L7KP&#038;" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /><embed src="http://static.kinghost.net/swf/1.swf?nomedosite=0fx66.com&#038;corbg=745BB7&#038;cortxt=ffffff&#038;desconto=10&#038;mes=24&#038;codigo=46Z648ZS9L7KP&#038;" quality="high" bgcolor="#ffffff" width="468" height="60" name="afiliados2" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /></object></center></p>
<p>[]&#8216;s</p>
<p>The post <a href="http://0fx66.com/blog/otimizando-o-firefox-com-sqlite3/">Otimizando o Firefox com sqlite3</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/otimizando-requisicoes-dns-no-firefox/' rel='bookmark' title='Otimizando requisições DNS no firefox'>Otimizando requisições DNS no firefox</a></li>
<li><a href='http://0fx66.com/blog/compilacao-de-dicas-para-o-firefox/' rel='bookmark' title='Compilação de dicas para o Firefox'>Compilação de dicas para o Firefox</a></li>
</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/0fx66?a=-4ugfFUq6N4:TsIYVDZRl1c:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=-4ugfFUq6N4:TsIYVDZRl1c:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/0fx66?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=-4ugfFUq6N4:TsIYVDZRl1c:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/0fx66?i=-4ugfFUq6N4:TsIYVDZRl1c:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=-4ugfFUq6N4:TsIYVDZRl1c:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=-4ugfFUq6N4:TsIYVDZRl1c:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/0fx66?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=-4ugfFUq6N4:TsIYVDZRl1c:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/0fx66?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=-4ugfFUq6N4:TsIYVDZRl1c:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/0fx66?i=-4ugfFUq6N4:TsIYVDZRl1c:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=-4ugfFUq6N4:TsIYVDZRl1c:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/0fx66?i=-4ugfFUq6N4:TsIYVDZRl1c:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/0fx66/~4/-4ugfFUq6N4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://0fx66.com/blog/otimizando-o-firefox-com-sqlite3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://0fx66.com/blog/otimizando-o-firefox-com-sqlite3/</feedburner:origLink></item>
		<item>
		<title>Conhecendo a função printf</title>
		<link>http://feedproxy.google.com/~r/0fx66/~3/pwVPi9_J3c8/</link>
		<comments>http://0fx66.com/blog/conhecendo-a-funcao-printf/#comments</comments>
		<pubDate>Sun, 03 Mar 2013 15:00:51 +0000</pubDate>
		<dc:creator>VonNaturAustreVe</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[Linguagem C]]></category>
		<category><![CDATA[printf]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://0fx66.com/blog/?p=126</guid>
		<description><![CDATA[<p>Achei aqui nos textos perdidos pelos diretórios da minha partição ~/ encontrei esse texto bastante interessante sobre a função printf, corrigi os erros de português e estou postando ele. ################################################### ### Detalhando a função printf ### ################################################### feito por Blood_Sucker! OBS: Este texto eh destinado a comunidade newbie do planeta, portanto, se você se acha [...]</p><p>The post <a href="http://0fx66.com/blog/conhecendo-a-funcao-printf/">Conhecendo a função printf</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/convertendo-string-minuscula-em-maiuscula-em-c/' rel='bookmark' title='[Linguagem C]  Convertendo string minúscula em maiúscula em C'>[Linguagem C]  Convertendo string minúscula em maiúscula em C</a></li>
<li><a href='http://0fx66.com/blog/linguagem-c-utilizando-scanf-em-strings-com-espaco/' rel='bookmark' title='[Linguagem C] Utilizando scanf em strings com espaço'>[Linguagem C] Utilizando scanf em strings com espaço</a></li>
<li><a href='http://0fx66.com/blog/trabalhando-com-potencias-e-raiz-quadrada-e-cubica-em-c/' rel='bookmark' title='Trabalhando com potencias e raiz quadrada e cubica em C'>Trabalhando com potencias e raiz quadrada e cubica em C</a></li>
<li><a href='http://0fx66.com/blog/calculando-raizes-em-c-usando-a-funcao-pow/' rel='bookmark' title='Calculando raízes em C usando a função pow'>Calculando raízes em C usando a função pow</a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>Achei aqui nos textos perdidos pelos diretórios da minha partição ~/ encontrei esse texto bastante interessante sobre a função printf, corrigi os erros de português e estou postando ele.</p>
<p><strong><br />
###################################################<br />
###                   Detalhando a função printf                     ###<br />
###################################################<br />
</strong></p>
<p>feito por Blood_Sucker!</p>
<p>OBS: Este texto eh destinado a comunidade newbie do planeta, portanto, se você se acha elite, não vera nada de bom aqui.</p>
<p><strong><br />
============<br />
Sumario  |<br />
============<br />
</strong></p>
<p>1. Introdução<br />
2. Compreendendo o printf<br />
3. Caracteres de escape definidos por C<br />
4. Quebrando uma string de caracteres em duas linhas<br />
5. Determinando o numero de caracteres que printf imprimiu<br />
6. Exibindo valores do tipo INT usando printf<br />
6.1. Imprimindo valores inteiros formatados<br />
6.1.1. Deslocando a impressão para a direita<br />
6.1.2. Precedendo de zeros um deslocamento<br />
6.2. Imprimindo um valor inteiro Octal ou Hexadecimal<br />
6.3. Imprimindo um prefixo antes dos valores Octais ou Hexadecimais<br />
6.4. Imprimindo valores do tipo unsigned int usando printf<br />
6.5. Imprimindo valores do tipo long int usando printf<br />
7. Imprimindo valores do tipo float usando printf<br />
7.1. Imprimindo valores do tipo float em formato exponencial<br />
7.2. Imprimindo valores do tipo float de outras maneiras<br />
7.3. Imprimindo valores float formatados<br />
8. Imprimindo valores do tipo char usando printf<br />
9. Imprimindo uma string de caracteres usando printf<br />
9.1. Imprimindo uma string do tipo Near e Far<br />
10. Imprimindo um endereço de um ponteiro usando printf<br />
11. Imprimindo algo precedido de uma sinal de adição ou de subtração<br />
12. ANSI<br />
12.1. Usando o controlador ANSI para limpar a sua tela(clear)<br />
12.2. Usando o controlador ANSI para exibir as cores da tela<br />
12.3. Usando o controlador ANSI para posicionar o cursor<br />
13. Considerações Finais</p>
<p><strong><br />
1. Introdução<br />
=============<br />
</strong></p>
<p>Bem amigos, eu estive lendo algumas coisas sobre C mas que nunca havia encontrado na net, e me empolguei a escrever detalhadamente sobre a função printf da linguagem C de programação, que apesar de ser uma simples função para impressão na tela contem vários macetes para se usá-la, ganhando assim tempo, espaço em código é claro, enxugando seu código ainda mais você terá um processamento mais rápido e tal&#8230;Apesar disso tudo, este texto não passa de um guia básico sobre esta função, para o compreendimento do mesmo, basta um conhecimento bem básico de C e ter noções sobre tipos de dados decimais, hexadecimais, binários e octais. Mas nada tão difícil. É um texto beeeem idiota, mas pode ser útil tanto pra quem esta começando, quanto para quem já sabe, porque apesar de simples, tem um monte detalhezinhos que eu nunca encontrei na net =]<br />
E no final eu ensino a manipular ANSI para cores e tals&#8230;Vários amigos meu não sabiam que dava pra fazer isso. E como o nash diz, somos todos newbies, temos muito a aprender. Você pode estar pensando q eu sou um imbecil que só quer escrever um textinho ridículo desses pra sair falando &#8220;ohh, eu escrevi pra unsekurity&#8221;. Se você pensa isso cara, tudo bem, eu pensaria o mesmo. Mas não tem nada haver. Eu contribuo com o q posso.</p>
<p><strong><br />
2. Compreendendo o printf<br />
=========================<br />
</strong></p>
<p>Como eu já disse na introdução, o printf é uma simples função para exibir mensagens na tela. Pois o que detalharei aqui são os diversos parâmetros ou argumentos de printf, que são apenas informações que você passa para a função trabalhar de uma determinada maneira. Vamos começar do básico, o printf é uma função definida pelo header<em> stdio.h</em>, é por isso que temos de inclui-lo no começo de qualquer programa em C para usarmos o printf. Para isso, fazemos o seguinte:</p>
<pre name="code" class="c">
#include &lt;stdio.h&gt;
</pre>
<p>Isso é bem básico, mas vou demonstrar um programa que imprime uma frase na tela:</p>
<pre name="code" class="c">
#include &lt;stdio.h&gt;
main()    // main é uma função q declara o inicio da aplicação
{
	printf("Unsekurity Scene");
}
</pre>
<p>Este simples programa ira imprimir a frase Unsekurity Scene. Bom, vou tentar começar a explicar a estrutura de parâmetros de printf (estas regrinhas não se aplicam diretamente a função printf, mas sim a linguagem C, mas vou comentá-las para familiarizarmos, ok?) Em uma função C, podem ocorrer este formato de parâmetro: nome_da_funcao(&#8220;dado a ser movimentado, aqui pode conter variáveis, ponteiros e tudo mais, porem não de uma maneira direta, é ai que a coisa fica interessante&#8221;, parâmetros para as variáveis(se houver) ); compliquei? por exemplo, se formos acrescentar variáveis a nossa função printf, ficaria da seguinte maneira:</p>
<pre name="code" class="c">
#include &lt;stdio.h&gt;
main()
{
	int numero = 10;
	printf("%d", numero);
}
</pre>
<p>Sacaram? Você deve acrescentar o tipo de variável que será definida e depois do fecho do argumento para a saída (tudo que fica entre chaves &#8221; &#8220;) colocamos a virgula (,) para passar parâmetros para o tipo de variável definida. Atenção, na função printf, não adianta você definir um tipo de variável e depois passar parâmetro de um outro tipo de variável que não dará certo. Por exemplo:</p>
<pre name="code" class="c">
#include &lt;stdio.h&gt;
main()
{
	char teste[] = "teste";
	printf("%p", teste);
}</pre>
<p>Isso esta incorreto, porque você definiu um ponteiro como variável a ser chamada e usou uma string para atribui-la, isso daria erro de compilação. Apesar de ser um erro logico.</p>
<p><strong>3. Caracteres de escape definidos por C<br />
=======================================</strong></p>
<p>Seria impossível não falar sobre isso quando se esta trabalhando com a função printf. Pois em C, existe uma tabela de caracteres de escape que podem ser usados pelas funções, principalmente por printf. Eis uma tabela com estes caracteres de escape:</p>
<pre>==================================================================================
 Caractere  |	          Significado           
 de Escape  |                                   			      
==================================================================================
 \a |(alerta) Caractere ASCII de aviso sonoro. 				     
 \b |(backspace) Muda a posição atual 1 caractere antes.		             
 \f |(form feed) Move a posição atual para o inicio da próxima pagina.	     
 \n |(new line) Move a posição atual p/ posição inicial da próxima linha.	      
 \r |(carriage return) Move a posição atual p/ a posição inicial da linha.	      
 \t |(horizontal tab) Move a posição atual p/ na posição de tabulação definida.     
 \v |(vertical tab) -&gt; Move a posição atual p/ na posição de tabulação vertical.    
 \\ |('\') Caractere para imprimir a barra invertida				     
 \' |(''') Caractere para imprimir o Apóstrofo				     
 \" |('"') Caractere para imprimir Aspas					      
 \? |("?") Caractere para imprimir o Ponto de Interrogação			     
 \nnn |Valor ASCII em octal							      
 \xnnn |Valor ASCII em hexadecimal 						      

</pre>
<p>Como você pode ver, estes caracteres são bastante uteis, não se preocupe se você não entendeu os 2 últimos, isso só sera discutido mais pra frente. Vamos dar um exemplo:</p>
<pre name="code" class="c">#include &lt;stdio.h&gt;
main()
{
	int nota = 10;
	printf("Unsekurity eh nota %d\n", nota);
}
</pre>
<p>Sem aquele \n no final do argumento, o programa ao ser executado iria imprimir a frase e logo após o ultimo caractere da frase iria aparecer já o prompt de comando. Fica meio feio né, com o acréscimo do \n o programa ao terminar de imprimir a frase, pula uma linha para voltar ao prompt de comando.<strong> </strong></p>
<p><strong>Atenção:</strong> O \n não tem nada haver com o %d que eu coloquei ali, só coloquei aquilo ali pra vocês irem se introduzindo com o printf para os nossos próximos tópicos. Outra coisa, nenhum caractere de Escape precisa de parâmetro depois da virgula. E padrão já.</p>
<p>Veja este outro exemplo para fixar legal:</p>
<pre name="code" class="c">
#include &lt;stdio.h&gt;
main()
{
	printf("Linha 1\nLinha 2\nLinha 3");
}</pre>
<p>Compile e veja no q vai dar.</p>
<p><strong>4. Quebrando uma string de caracteres em duas linhas<br />
====================================================</strong></p>
<p>Bem, as vezes quando estamos programando, não queremos fazer com q nossas linhas sejam muito grandes para que quando estivermos lendo o programa, não ter que ficar indo pra la e cá com a barra de rolagem. Em C, é padrão de printf quebrar as linhas de acordo com o código. Por exemplo:</p>
<pre name="code" class="c">
#include &lt;stdio.h&gt;
main()
{
	printf("Se nos digitarmos uma frase grande assim
	e nao quisermos ultrapassar o limite da barra de rolagem para nao fica
	ruim para ler depois, fazemos isso.\n");
}</pre>
<p>Ei, mas este programa imprimira a frase de acordo com o fonte, em TRÊS linhas :/ E se não quisermos isso? e se quisermos quebrar a linha no fonte mas na hora da compilação ele entender tudo como uma linha só?? simples, basta usar o \ veja este exemplo:</p>
<pre name="code" class="c">
#include &lt;stdio.h&gt;
main()
{
	printf("Se nos digitarmos uma frase grande assim \
	e nao quisermos ultrapassar o limite da barra de rolagem para nao fica \
	ruim para ler depois, fazemos isso.\n");
}
</pre>
<p>Ai sim ele vai imprimir tudo numa linha, e se não couber ele termina na próxima linha, e se não couber de novo, na próxima, e assim por diante&#8230;</p>
<p><strong><br />
5. Determinando o número de caracteres que printf imprimiu<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
</strong></p>
<p>Este parâmetro é muito útil, ele é usado para dizer quantos caracteres foram usados até determinado ponto que você definiu. O especificador usado para isso eh o %n. Veja o exemplo:</p>
<pre name="code" class="c">
#include &lt;stdio.h&gt;
main()
{
	int contagem;
	printf("quantos caracteres sera q eu digitei ate aqui%? %n \n", &amp;contagem);
	printf("Resposta: %d\n", contagem);
}
</pre>
<p>Compile e veja o que da. O %n pode ser usado em qualquer parte da linha, mas quando você for atribuir o numero de linhas a ele use o &#8220;E comercial &#8221; (&amp;) na frente. Como você viu no exemplo.</p>
<p><strong>6. Exibindo valores do tipo INT usando printf<br />
=============================================</strong></p>
<p>Bem, como você já deve saber, int eh um tipo de variável, mas como imprimir este tipo de variável numa função printf? simples. Basta usar o seguinte especificador: %d. Já usamos ele em alguns exemplos ai acima, vamos agora dar um exemplo pratico:</p>
<pre name="code" class="c">
#include &lt;stdio.h&gt;
main()
{
	int ano = 1984;
	int mes = 9;
	int dia = 19;
	printf("Eu nasci no dia %d do mes %d do ano de $d\n", dia, mes, ano);
}
</pre>
<p>Entenderam? Fácil né?<br />
<strong>Observação:</strong> é interessante você que esta lendo o texto, ir compilando cada programa e comparando resultados. É o melhor jeito de aprender.</p>
<p>Olha, muitos compiladores de C tratam o especificador de int no seguinte format também %i. Mas hoje em dia já esta ficando cada vez mais fácil de se encontrar programas usando %d mesmo, é bem capaz dos compiladores começarem a usar somente o %d. Então, é recomendável familiarizar-se com o %d mesmo.</p>
<p><strong>6.1. Imprimindo valores inteiros formatados<br />
===========================================</strong></p>
<p>O que seria formatar um valor? Apagar? não não, estou me referindo a formatação de texto, estilo, como o texto deve ser. Veja como é possível formatar uma saída de inteiros.<br />
<strong><br />
6.1.1. Deslocando a impressão para a direita<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</strong></p>
<p>Para deslocar uma impressão para a direita, deve-se fazer o seguinte. Use o numero de espaços que você quer por antes do especificador e depois do %. Veja o exemplo:</p>
<pre name="code" class="c">
#include &lt;stdio.h&gt;
main()
{
	int valor = 10;
	printf("%1d\n", valor);
	printf("%2d\n", valor);
	printf("%3d\n", valor);
	printf("%4d\n", valor);
	printf("%5d\n", valor);
}
</pre>
<p>Compile e veja o resultado.</p>
<p><strong>6.1.2. Precedendo de zeros um deslocamento<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</strong></p>
<p>Veja o exemplo e compile, só assim entendera.</p>
<pre name="code" class="c">
#include &lt;stdio.h&gt;
main()
{
	int valor = 10;
	printf("%01d\n", valor);
	printf("%02d\n", valor);
	printf("%03d\n", valor);
	printf("%04d\n", valor);
	printf("%05d\n", valor);
}
</pre>
<p><strong>6.2. Imprimindo um valor inteiro Octal ou Hexadecimal<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</strong></p>
<p>Vocês devem saber o que é um valor Octal(base 8) ou Hexadecimal(base 16), existem especificadores de C que instruem printf a exibir um valor inteiro em Octal ou Hexadecimal. O especificador para octal é o %o. Veja um exemplo:</p>
<pre name="code" class="c">#include &lt;stdio.h&gt;
main()
{
	int valor = 10;
	printf("%d em decimal eh o mesmo q %o em Octal\n", valor, valor);
}
</pre>
<p>Compile e veja os resultados. Já tratando-se de hexadecimais inteiros, o especificador eh o %x ou o %X. A única diferença entre os dois é que o %x imprime o valor em minusculo e o %X em maiúsculo. Geralmente é usado o %X, mas fica a critério. Exemplo:</p>
<pre name="code" class="c">#include &lt;stdio.h&gt;
main()
{
	int valor = 10;
	printf("%d em decimal eh o mesmo q %x ou %X em Hexadecimal\n", valor, valor, valor);
}
</pre>
<p><strong>6.3. Imprimindo um prefixo antes dos valores Octais ou Hexadecimais<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</strong></p>
<p>Com certeza você já viu em códigos ou textos, que valores em hexadecimal são precedidos por 0x ou 0X e valores octais são precedidos por 0. Agora você ira aprender a imprimir os valores com os precedimentos. Basta você usar o sharp(#) antes do especificador de hexa ou octal e depois do %. Veja o exemplo:</p>
<pre name="code" class="c">
#include &lt;stdio.h&gt;
main()
{
	int valor = 10;
	printf("O octal com precedimento fika assim: %#o\n", valor);
	printf("O hexa com precedimento fika assim: %#x ou %#X\n", valor, valor);
}
</pre>
<p>Compile e compreenda.</p>
<p><strong>6.4. Imprimindo valores do tipo unsigned int usando printf<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</strong></p>
<p>Como você deve saber, unsigned é um modificador de inteiros em C que imprime apenas valores positivos (maior que 0). E existe uma maneira de declarar isso direto no printf. Usando o especificador %u. Exemplo:</p>
<pre name="code" class="c">
#include &lt;stdio.h&gt;
main()
{
	unsigned int valor = 1000;
	printf("Imprimindo o valor 1000 como unsigned: %u\n", valor);
	printf("Imprimindo o valor 1000 como int: %d\n", valor);
}
</pre>
<p>Compile e veja a diferença.</p>
<p><strong>6.5. Imprimindo valores do tipo long int usando printf<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</strong></p>
<p>Você já reparou q o printf suporta especificadores de modificadores de tipo de uma variável. Existe um especificador que é usado para imprimir valores de long int, ele eh o %ld. Exemplo:</p>
<pre name="code" class="c">
#include &lt;stdio.h&gt;
main()
{
	long int valor = 1000000;
	printf("O valor 1000000 com %%ld eh: %ld", valor);
	printf("O valor 1000000 com %%d eh: %d", valor);
}
</pre>
<p>Compile e veja a diferença.</p>
<p><strong>7. Imprimindo valores do tipo float usando printf<br />
=================================================</strong></p>
<p>Bem, você sabe o que é uma variável do tipo float né? Vejamos agora o especificador para se imprimir um valor de uma variável desse tipo. Ele é o %f. Veja o exemplo.</p>
<pre name="code" class="c">
#include &lt;stdio.h&gt;
main()
{
	float nota1 = 6.7;
	float nota2 = 8.3;
	float media = (nota1 + nota2) / 2;
	printf("O aluno tirou %f na primeira prova e %f na segunda, sua media eh %f\n", nota1, nota2, media);
}
</pre>
<p>Compile e veja como funciona.</p>
<p><strong>7.1. Imprimindo valores do tipo float em formato exponencial<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</strong></p>
<p>Você já deve estar sabendo o que é um valor exponencial. Existe o especificador para isso. Ele é o %e ou %E, que como no especificador de hexadecimais(%x ou %X), a diferença entre os dois é que o %e imprime o &#8216;e&#8217; em minuscula, o o %E imprime o &#8216;e&#8217; em maiúscula. Veja o exemplo:</p>
<pre name="code" class="c">
#include &lt;stdio.h&gt;
main()
{
	float valor1 = 4.525657;
	float valor2 = 3.9890;
	printf("O valor1 multiplicado pelo valor2 com %%e eh: %e\n", valor1 * valor2);
	printf("O valor1 multiplicado pelo valor2 com %%E eh: %E\n", valor1 * valor2);
}
</pre>
<p><strong>7.2. Imprimindo valores do tipo float de outras maneiras<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</strong></p>
<p>Agora que você aprendeu a usar o %f e o %e/%E, vou ensina-los a usar um outro especificador de float. Ele é o %g ou %G. Ele é assim, você define um float e quer imprimi-lo, usando o %g ou %G, o próprio compilador escolhe a melhor maneira de se exibir a saída para o usuário, sendo ela no formato do %f ou no formato do %e/%E (eh por causa do %e/%E q existe o %g minusculo e maiúsculo também(%G)). Veja o exemplo:</p>
<pre name="code" class="c">
#include &lt;stdio.h&gt;
main()
{
	printf("Exibir 0.1234 resulta em %g\n", 0.1234);
	printf("Exibir 0.00001234 resulta em %g\n", 0.00001234);
}
</pre>
<p>Compilem e vejam, muito interessante&#8230;</p>
<p><strong>7.3. Imprimindo valores float formatados<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</strong></p>
<p>Da mesma maneira do int, formatamos o float usando o numero de espaços que serão preenchidos. Veja o exemplo para compreender melhor:</p>
<pre name="code" class="c">
#include &lt;stdio.h&gt;
main()
{
	float valor = 1.23456;
	printf("%8.1f\n", valor);
	printf("%8.3f\n", valor);
	printf("%8.5f\n", valor);
}
</pre>
<p>Compile e compreenda a diferença.</p>
<p>8<strong>. Imprimindo valores do tipo char usando printf<br />
================================================</strong></p>
<p>Para imprimir um valor de uma variável do tipo char, é usado o seguinte especificador: %c. Porém tem uma coisa interessante em char, você pode definir tanto a letra direto (que deve estar definida entre aspas simples &#8216; &#8216;) ou como o valor da letra na tabela ASCII. Veja o exemplo:</p>
<pre name="code" class="c">
#include &lt;stdio.h&gt;
main()
	printf("A letra A imprimida em char pela letra eh %c\n", 'A');
	printf("A letra A imprimida em char pelo valor ASCII eh %c\n", 65);
}
</pre>
<p>Porque 65? 65 eh o valor da letra A em maiúsculo na tabela ASCII. Sacou?</p>
<p><strong>9. Imprimindo uma string de caracteres usando printf<br />
====================================================</strong></p>
<p>Também existe um especificador para isso, é o %s. Olhe o exemplo:</p>
<pre name="code" class="c">
#include &lt;stdio.h&gt;
main()
{
	chat teste[] = "Unsekurity Scene Rocks";
	printf("%s\n", teste);
}
</pre>
<p><strong>9.1. Imprimindo uma string do tipo Near e Far<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</strong></p>
<p>Acho que você já deve saber o que é uma string de tipo near e far. Mas existe a maneira correta de joga-la no printf. Em caso de far, usamos o F que ficara entre o % e o especificador. E o mesmo com o near. Veja no exemplo:</p>
<pre name="code" class="c">
#include &lt;stdio.h&gt;
main()
{
	char *teste_near = "este eh o near";
	char far *teste_far = "este eh o far";
	printf("%Ns\n", teste_near);
	printf("%Fs\n", teste_far);
}
</pre>
<p>Compile e execute para ver no que da.</p>
<p><strong><br />
10. Imprimindo um endereço de um ponteiro usando printf<br />
======================================================</strong></p>
<p>É, você deve estar imaginando o quão grande diverso é a função printf, pois é, existe especificador pra tudo né, veja agora o especificador de um endereço de um ponteiro. Ele é o %p. Veja o exemplo:</p>
<pre name="code" class="c">
#include &lt;stdio.h&gt;
main()
{
	int valor;
	printf("O endereco de ponteiro da variavel valor eh %p\n", &amp;valor);
}
</pre>
<p>Com ponteiros usamos o E comercial (&amp;) para atribuirmos uma variável. Compile e veja o resultado.</p>
<p><strong>11. Imprimindo algo precedido de uma sinal de adição ou de subtração<br />
===================================================================</strong></p>
<p>Este é bem simples, para imprimir um valor precedido de um sinal de mais(+) ou de menos(-) não tem muito segredo, basta colocar o sinal de mais apos o % e antes do especificador. Isso se aplica a floats e a inteiros. Veja o exemplo para compreender melhor.</p>
<pre name="code" class="c">
#include &lt;stdio.h&gt;
main()
{
	int teste1 = -10;
	int teste2 = 10;
	float teste3 = -2.5;
	float teste4 = 2.5;
	printf("Os inteiros saun: %+d e %+d\n", teste1, teste2);
	printf("Os inteiros saun: %+f e %+f\n", teste3, teste4);
}
</pre>
<p>Compile é veja a diferença.</p>
<p><strong>12. ANSI<br />
========<br />
</strong></p>
<p>Finalmente chegamos na parte mais legal deste texto, ANSI. Como manipular o controlador de dispositivos ANSI. Que nada mais é do que diversas sequências de escape que podem ser usadas para manipular o cursor, cores e até limpar a tela. Se você estiver programando em um sistema windows, para trabalhar com ANSI será necessário você adicionar a seguinte linha no seu arquivo c:\config.sys (e eh logico, depois reinicializar o micro):</p>
<pre>device=C:\WINDOWS\COMMAND\Ansi.sys</pre>
<p>Se for qualquer sistema Unix-like, num precisa de nada disso(logico).</p>
<p><strong>12.1. Usando o controlador ANSI para limpar a sua tela(clear)<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</strong></p>
<p>Que eu saiba, a linguagem C não tem uma função que limpe a tela, geralmente a galera usa o system(&#8220;clear&#8221;); para fazer isso, mas vamos aprender a fazer isso com ANSI. Como eu disse, manipular ANSI, nada mais é do que manipular sequencias de escape. Por exemplo, na tabela ANSI, a seguinte sequência de escape eh usada para limpar a tela:</p>
<pre name="code" class="c">Esc[2j</pre>
<p>Mas como vamos infiltrar isso em um printf? Trocando o Esc pelo seu valor em ANSI. Q eh \033. Então vamos fazer um teste. Veja o exemplo:</p>
<pre name="code" class="c">
#include &lt;stdio.h&gt;
main()
{
	printf("\033[2J");
	printf("Simples limpador de tela, se executa-lo de novo, ele limpara a tela e imprimira esta \
	mensagem de novo\n");
}
</pre>
<p>Compile é execute, veja no que da.</p>
<p><strong><br />
12.2. Usando o controlador ANSI para exibir as cores da tela<br />
------------------------------------------------------------</strong></p>
<p>Você já aprendeu q ao manipular ANSI, deve-se usar o seguinte caractere de escape: <code>\033</code> Agora vamos manipulá-lo para usar cores de fundo e de letra(ou primeiro plano). Veja a tabela abaixo:</p>
<pre>====================================
Sequencias  |                      |
de Escape   |         Cor          |
====================================
Esc[30m    | Cor da letra preta    |
Esc[31m    | Cor da letra vermelha |
Esc[32m    | Cor da letra verde    |
Esc[33m    | Cor da letra laranja  |
Esc[34m    | Cor da letra azul     |
Esc[35m    | Cor da letra magenta  |
Esc[36m    | Cor da letra ciano    |
Esc[37m    | Cor da letra branca   |
Esc[40m    | Cor de fundo preta    |
Esc[41m    | Cor de fundo vermelha |
Esc[42m    | Cor de fundo verde    |
Esc[43m    | Cor de fundo laranja  |
Esc[44m    | Cor de fundo azul     |
Esc[45m    | Cor de fundo magenta  |
Esc[46m    | Cor de fundo ciano    |
Esc[47m    | Cor de fundo branca   |
====================================
</pre>
<p>Ok, você tem uma lista com as cores em sequencia ANSI. Agora vamos testa-las:</p>
<pre name="code" class="c">
#include &lt;stdio.h&gt;
main()
{
	printf("\033[2J");     // limpei a tela
	printf("\033[47m\033[32mTestando...\n");   // aki eu defini a cor de fundo branca e a letra verde
}
</pre>
<p>Não é tao complicado, é decoreba. Compile e veja.</p>
<p><strong><br />
12.3. Usando o controlador ANSI para posicionar o cursor<br />
--------------------------------------------------------<br />
</strong></p>
<p>Sim, existe este tipo de coisa com assim...estilo gotoxy() de pascal. Mas em ANSI. Veja a tabela de sequencias de Escape para isso:</p>
<pre>========================================================
Sequencia | 					       |
de Escape |                 Funcao		       |
========================================================
Esc[x;yH  | Posiciona o cursor na linha x, coluna y    |
Esc[xA    | Move o cursor x linhas para cima           |
Esc[xB    | Move o cursor x linhas para baixo          |
Esc[yC    | Move o cursor y colunas para a direita     |
Esc[yD    | Move o cursor y colunas para a esquerda    |
Esc[S     | Armaneza a posicao atual do cursor         |
Esc[U     | Restaura a posicao do cursor               |
Esc[2j    | Este nos ja vimos, eh o limpador, ele move |
| o cursor para o canto superior esquerdo              |
Esc[K     | Limpa ateh o final da linha atual          |
========================================================
</pre>
<p>Você já deve ter compreendido como funciona agora né? Veja este ultimo exemplo:</p>
<pre name="code" class="c">
#include &lt;stdio.h&gt;
main()
{
	printf("\033[2J");     // limpa a tela
	printf("\033[10;19H");   // Posiciona o cursor para a linha 15 e coluna 12
	printf("\033[43m");  // Pinta o fundo de laranja
	printf("\033[30mTestando minha manipulacao em ANSI");   // Pinta a letra de preto e exibe uma msg
}
</pre>
<p>Bastante interessante né?</p>
<p><strong><br />
13. Considerações Finais<br />
========================<br />
</strong></p>
<p>Galera, eu espero ter ajudado, lembrem-se que todos os controladores e especificadores podem ser usados juntos, combinados... Só um lembrete, recentemente surgiu uma falha chamada de format bug, e até onde sei, esta falha se aplica ao printf. Recomendo também uma leitura do texto do nash sobre isso. Pois é muito interessante. Este texto eu escrevi baseado em alguns tópicos de um ótimo livro de C. O C/C++ a bíblia. Unsekurity Forever! T+, Blood_Sucker! "Odiado por muitos, compreendido por poucos..."</p>
<p>[]'s</p>
<p>The post <a href="http://0fx66.com/blog/conhecendo-a-funcao-printf/">Conhecendo a função printf</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/convertendo-string-minuscula-em-maiuscula-em-c/' rel='bookmark' title='[Linguagem C]  Convertendo string minúscula em maiúscula em C'>[Linguagem C]  Convertendo string minúscula em maiúscula em C</a></li>
<li><a href='http://0fx66.com/blog/linguagem-c-utilizando-scanf-em-strings-com-espaco/' rel='bookmark' title='[Linguagem C] Utilizando scanf em strings com espaço'>[Linguagem C] Utilizando scanf em strings com espaço</a></li>
<li><a href='http://0fx66.com/blog/trabalhando-com-potencias-e-raiz-quadrada-e-cubica-em-c/' rel='bookmark' title='Trabalhando com potencias e raiz quadrada e cubica em C'>Trabalhando com potencias e raiz quadrada e cubica em C</a></li>
<li><a href='http://0fx66.com/blog/calculando-raizes-em-c-usando-a-funcao-pow/' rel='bookmark' title='Calculando raízes em C usando a função pow'>Calculando raízes em C usando a função pow</a></li>
</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/0fx66?a=pwVPi9_J3c8:a7wROEhuvFw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=pwVPi9_J3c8:a7wROEhuvFw:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/0fx66?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=pwVPi9_J3c8:a7wROEhuvFw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/0fx66?i=pwVPi9_J3c8:a7wROEhuvFw:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=pwVPi9_J3c8:a7wROEhuvFw:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=pwVPi9_J3c8:a7wROEhuvFw:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/0fx66?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=pwVPi9_J3c8:a7wROEhuvFw:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/0fx66?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=pwVPi9_J3c8:a7wROEhuvFw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/0fx66?i=pwVPi9_J3c8:a7wROEhuvFw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=pwVPi9_J3c8:a7wROEhuvFw:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/0fx66?i=pwVPi9_J3c8:a7wROEhuvFw:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/0fx66/~4/pwVPi9_J3c8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://0fx66.com/blog/conhecendo-a-funcao-printf/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://0fx66.com/blog/conhecendo-a-funcao-printf/</feedburner:origLink></item>
		<item>
		<title>[Linguagem C]  Convertendo string minúscula em maiúscula em C</title>
		<link>http://feedproxy.google.com/~r/0fx66/~3/VVk8KhwNu7M/</link>
		<comments>http://0fx66.com/blog/convertendo-string-minuscula-em-maiuscula-em-c/#comments</comments>
		<pubDate>Sat, 02 Mar 2013 15:00:47 +0000</pubDate>
		<dc:creator>VonNaturAustreVe</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[Linguagem C]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[Strings]]></category>

		<guid isPermaLink="false">http://0fx66.com/blog/?p=145</guid>
		<description><![CDATA[<p>Olá a todos, nesta curta publicação explico como converter uma string minúscula em maiúscula em C. Mas já existe uma função que faz isso? Sim existe a strupr e algumas variantes! Entretanto ela não faz parte da biblioteca padrão do C, então não é assegurada a compatibilidade dela entre outros compiladores e S.O. A primeira [...]</p><p>The post <a href="http://0fx66.com/blog/convertendo-string-minuscula-em-maiuscula-em-c/">[Linguagem C]  Convertendo string minúscula em maiúscula em C</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/conhecendo-a-funcao-printf/' rel='bookmark' title='Conhecendo a função printf'>Conhecendo a função printf</a></li>
<li><a href='http://0fx66.com/blog/linguagem-c-utilizando-scanf-em-strings-com-espaco/' rel='bookmark' title='[Linguagem C] Utilizando scanf em strings com espaço'>[Linguagem C] Utilizando scanf em strings com espaço</a></li>
<li><a href='http://0fx66.com/blog/trabalhando-com-potencias-e-raiz-quadrada-e-cubica-em-c/' rel='bookmark' title='Trabalhando com potencias e raiz quadrada e cubica em C'>Trabalhando com potencias e raiz quadrada e cubica em C</a></li>
<li><a href='http://0fx66.com/blog/calculando-raizes-em-c-usando-a-funcao-pow/' rel='bookmark' title='Calculando raízes em C usando a função pow'>Calculando raízes em C usando a função pow</a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>Olá a todos, nesta curta publicação explico como converter uma string minúscula em maiúscula em C. Mas já existe uma função que faz isso? Sim existe a strupr e algumas variantes! Entretanto ela não faz parte da biblioteca padrão do C, então não é assegurada a compatibilidade dela entre outros compiladores e S.O.</p>
<p>A primeira solução que encontrei foi combinar um loop com a função toupper(), que converter letras em maiúscula com um loop, para converter letra por letra, criei um código bastante simples abaixo. Salve e compile.</p>
<pre class="brush: cpp; title: ; notranslate">//EXEMPLO DE CONVERSAO DE STRINGS MINUSCULAS EM MAIUSCULAS EM C.
#include &lt;stdio.h&gt;
#include &lt;ctype.h&gt;// necessaria para toupper().

int main() {
	
	int i;
	char palavra[20];
	//Recebe a string.
	printf(&quot;Digite uma palavra: &quot;);
	scanf(&quot;%19[^\n]&quot;, palavra);

	//loop que efetua a conversao de letra por letra.
	for(i=0;palavra[i]!='&#92;&#48;';i++) {
		palavra[i]=toupper(palavra[i]);
	}

	//Imprimi o resultado.
	printf(&quot;%s\n&quot;,palavra);

	return 0;
}

</pre>
<p>Saída:<br />
<a href="http://0fx66.com/blog/wp-content/uploads/2013/02/convertendo-minuscula-para-maiuscula.png"><img src="http://0fx66.com/blog/wp-content/uploads/2013/02/convertendo-minuscula-para-maiuscula.png" alt="Convertendo minuscula para maiúscula" width="475" height="242" class="aligncenter size-full wp-image-148" /></a></p>
<p>Agora fica o desafio que tal escrever uma função que realize esta operação? Abaixo tema resposta para o desafio, escondida claro, não quero atrapalha a a diversão de vocês!</p>
<pre class="brush: cpp; collapse: true; light: false; title: ; toolbar: true; notranslate">
void toMaiuscula(char *string) {
	
	while(*string != '&#92;&#48;') {
		*string = toupper((unsigned char)*string);
		 string++;
	}
}
</pre>
<p>Esta função já apresenta uma pequeno grau de complicação para os iniciantes, pois já começa a trabalhar com ponteiros. Infelizmente em C não temo como trabalhar com passagem de strings sem recorrer ao uso de ponteiros. Entretanto quando estiver estudando ponteiros já vai conhecer uma utilidade no uso deles! Agora segue o código completo.</p>
<pre class="brush: cpp; title: ; notranslate">
#include &lt;stdio.h&gt;
#include &lt;ctype.h&gt;// necessaria para toupper().

void toMaiuscula(char *string);

int main() {
	
	//Variaveis
	int i;
	char palavra[20];
	
	//Recebe a string.
	printf(&quot;Digite uma palavra: &quot;);
	scanf(&quot;%19[^\n]&quot;, palavra);

	//loop que efetua a conversao de letra por letra.
	for(i=0;palavra[i]!='&#92;&#48;';i++) {
		palavra[i]=toupper(palavra[i]);
	}

	//Imprimi o resultado.
	printf(&quot;%s\n&quot;,palavra);
	
	//Utilizando a funcao!
	printf(&quot;\n\nAgora utilizando a funcao toMaiscula()\n&quot;);
	
	char palavra2[] = &quot;teste&quot;;
	printf(&quot;Original: %s\n&quot;, palavra2);
	
	//Funcao que efetua a conversao.
	toMaiuscula(&amp;palavra2[0]);
	
	printf(&quot;Apos a conversao: %s&quot;, palavra2);

	return 0;
}

void toMaiuscula(char *string) {
	
	while(*string != '&#92;&#48;') {
		*string = toupper((unsigned char)*string);
		 string++;
	}
}
</pre>
<p>Vocês viram como é simples lidar com a conversão de strings, que tal um novo desafio? É bem simples, temos uma string em caixa alta, agora o desafio é o oposto, converta de maiúsculo para minusculo.</p>
<p>[]&#8216;s</p>
<p>The post <a href="http://0fx66.com/blog/convertendo-string-minuscula-em-maiuscula-em-c/">[Linguagem C]  Convertendo string minúscula em maiúscula em C</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/conhecendo-a-funcao-printf/' rel='bookmark' title='Conhecendo a função printf'>Conhecendo a função printf</a></li>
<li><a href='http://0fx66.com/blog/linguagem-c-utilizando-scanf-em-strings-com-espaco/' rel='bookmark' title='[Linguagem C] Utilizando scanf em strings com espaço'>[Linguagem C] Utilizando scanf em strings com espaço</a></li>
<li><a href='http://0fx66.com/blog/trabalhando-com-potencias-e-raiz-quadrada-e-cubica-em-c/' rel='bookmark' title='Trabalhando com potencias e raiz quadrada e cubica em C'>Trabalhando com potencias e raiz quadrada e cubica em C</a></li>
<li><a href='http://0fx66.com/blog/calculando-raizes-em-c-usando-a-funcao-pow/' rel='bookmark' title='Calculando raízes em C usando a função pow'>Calculando raízes em C usando a função pow</a></li>
</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/0fx66?a=VVk8KhwNu7M:7ZrXYbBUrYE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=VVk8KhwNu7M:7ZrXYbBUrYE:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/0fx66?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=VVk8KhwNu7M:7ZrXYbBUrYE:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/0fx66?i=VVk8KhwNu7M:7ZrXYbBUrYE:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=VVk8KhwNu7M:7ZrXYbBUrYE:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=VVk8KhwNu7M:7ZrXYbBUrYE:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/0fx66?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=VVk8KhwNu7M:7ZrXYbBUrYE:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/0fx66?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=VVk8KhwNu7M:7ZrXYbBUrYE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/0fx66?i=VVk8KhwNu7M:7ZrXYbBUrYE:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=VVk8KhwNu7M:7ZrXYbBUrYE:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/0fx66?i=VVk8KhwNu7M:7ZrXYbBUrYE:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/0fx66/~4/VVk8KhwNu7M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://0fx66.com/blog/convertendo-string-minuscula-em-maiuscula-em-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://0fx66.com/blog/convertendo-string-minuscula-em-maiuscula-em-c/</feedburner:origLink></item>
		<item>
		<title>Entendendo a engenharia social</title>
		<link>http://feedproxy.google.com/~r/0fx66/~3/I_7fxqOfzwI/</link>
		<comments>http://0fx66.com/blog/entendendo-a-engenharia-social/#comments</comments>
		<pubDate>Fri, 01 Mar 2013 15:00:31 +0000</pubDate>
		<dc:creator>VonNaturAustreVe</dc:creator>
				<category><![CDATA[Segurança]]></category>
		<category><![CDATA[Engenharia social]]></category>

		<guid isPermaLink="false">http://0fx66.com/blog/?p=121</guid>
		<description><![CDATA[<p>Por que não existe patch para a ignorância humana! Primeiramente oque vem a ser engenharia social? São práticas utilizadas para obter acesso a informações importantes ou sigilosas em organizações ou sistemas por meio da enganação ou exploração da confiança das pessoas. Para isso, o golpista pode se passar por outra pessoa, assumir outra personalidade, fingir [...]</p><p>The post <a href="http://0fx66.com/blog/entendendo-a-engenharia-social/">Entendendo a engenharia social</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/um-pouco-mais-sobre-nmap/' rel='bookmark' title='Um pouco mais sobre nmap'>Um pouco mais sobre nmap</a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<blockquote><p>Por que não existe patch para a ignorância humana!</p></blockquote>
<p>Primeiramente oque vem a ser engenharia social? São práticas utilizadas para <strong>obter</strong> acesso a <strong>informações</strong> importantes ou sigilosas em organizações ou sistemas por meio da <strong>enganação</strong> ou exploração da confiança das pessoas. Para isso, o golpista pode se <strong>passar por outra pessoa</strong>, assumir outra personalidade, fingir que é um profissional de determinada área, etc. É uma forma de entrar em organizações que não necessita da força bruta ou de erros em máquinas. Explora as falhas de segurança das próprias pessoas que, quando não treinados para esses ataques, podem ser facilmente manipuladas. O ataque basicamente explora a o elo mais fraco da corrente da segurança, o ser humano.</p>
<p>Se utilizada para o mal, a engenharia social torna-se crime e pode ser  enquadrada nos<a title="Link para o artigo contendo o artigo 171 e 299 do código civil penal brasileiro." href="http://edutec.net/Leis/Gerais/cpb.htm" target="_blank"> artigos 171 e 299 do Código Civil Penal</a>. Trata-se de estelionato, com pena de reclusão de um a cinco anos, além de multa, e  falsidade ideológica, com pena de reclusão de um a três anos, além de  multa.</p>
<p>No texto abaixo extraído da pagina unsekurity (não mais online) o autor Blood_Sucker descreveu diversos métodos de como são aplicados ataque de engenharia social.</p>
<p style="text-align: center;"><a href="http://imagens.0fx66.com/2010/02/correntes.jpg"><img class="size-full wp-image-2751 aligncenter" title="correntes" src="http://imagens.0fx66.com/2010/02/correntes.jpg" alt="" width="551" height="399" /></a></p>
<p><span id="more-121"></span></p>
<h2>Texto: Engenharia Social escrito por Blood_Sucker.</h2>
<p><strong>OBS:</strong> Este documento foi feito apenas com intuito educacional, não estou incentivando ninguém a fazer isso e muito menos me responsabilizo pelo q possam fazer.</p>
<p><strong>=============<br />
Sumário<br />
=============</p>
<p>1. Introdução<br />
2. O que eh Engenharia Social<br />
3. Engenharia Social via telefone<br />
4. Engenharia Social via e-mail<br />
5. Engenharia Social aliada ao Phreaking<br />
6. Engenharia Social pessoalmente(In Person Social Engineering)<br />
7. Considerações Finais</strong></p>
<h3> 1. Introdução</h3>
<p>Bem, alguns de vocês já devem ter ouvido falar disso, ou não. Este tutorial é simplesmente destinado a explicar o q eh e dar algumas dicas para não ficar com cara de bobo se te pegarem com a mão na lambuja. Como sempre eh dito, eh um tuto destinado a newbies, portanto, se você é elite ou então é do tipo de cara q assistiu o filme do <a href="http://pt.wikipedia.org/wiki/Kevin_Mitnick" target="_blank">mitnick</a> e ficou dizendo &#8220;putz, olha como esse cara é amador&#8221; (coisa que já ouvi muito por ai) você não tem motivos para ler isso, já que você é profissional.</p>
<h3> 2. O que eh engenharia social?</h3>
<p>Engenharia social é a arte de se conseguir informações seja la qual for a maneira, muitos dizem ser loucura mas coisas do tipo falsificar uma carteira de identidade, ir numa universidade dizendo ser outra pessoa só para poder ter acesso ao servidor central da mesma eh engenharia social. Engenharia social conta com qualquer tipo de coisa, sejam telefonemas, e-mails, comparecimentos, qualquer coisa&#8230; Isso tudo é usado por phreakers, hackers e crackers&#8230;Mas quem eh q nunca falsificou uma copia de RG para entrar em um show, ou numa danceteria?? não deixa de ser engenharia social&#8230; Portanto não eh &#8220;coisa de hacker&#8221; como muito babaca diz por ai. Existem grandes loucuras usadas na engenharia social, temos de concordar que não é coisa para qualquer um, exige em muitos casos, mais &#8220;esperteza&#8221; do q &#8220;conhecimento técnico&#8221;. E em caso de &#8220;esperteza&#8221;, brasileiro da show =] Bem, agora que você já sabe o que é engenharia social, darei algumas pequenas dicas caso você esteja planejando algo do tipo.</p>
<h3> 3. Engenharia Social via telefone</h3>
<p>Irei aqui discutir métodos de engenharia social via telefone, com certeza é a maneira mais usada, mas isso não a diminui&#8230; Regras básicas neste tipo de engenharia social Pois é&#8230;você entrou numa pagina da internet que possuía informações de tal individuo que é dono de um empresa que possui algum dado q você quer, e simplesmente ligara para a empresa dizendo q é ele e que quer a senha do banco de dados deles, certo??? Com certeza isso não dará certo, pelo simples fato da coisa não ser tao simples assim, olha, nunca pense q você é o único espertinho no mundo, nem todo mundo eh idiota. Lembre-se disso. Primeiramente, isso é um exemplo vago, porque com você pretende fazer uma coisa dessas, não seria assim que você conseguiria. Antes de tudo vamos levar em consideração algumas &#8220;regras&#8221; quando c quer fazer este tipo de coisa. Estas regras não se aplicam somente neste tipo de engenharia social.</p>
<p>- SEMPRE USE APARELHO TELEFÔNICO PUBLICO</p>
<p>- NUNCA, MAS NUNCA MESMO TENTE ALGO SEM TER TODAS AS INFORMAÇÕES NECESSÁRIAS SOBRE O LOCAL,<br />
PESSOA(S), HORÁRIO DE TRABALHO, HORÁRIO DE ALMOÇO, TUDO, ABSOLUTAMENTE TUDO.</p>
<p>- PROCURE SABER O Q CADA PESSOA EH NA EMPRESA</p>
<p>- VOCÊ NÃO PODE SER RECONHECIDO POR NINGUÉM, EU DISSE NINGUÉM.</p>
<p>Estas regras são mais ligadas na engenharia social via telefone&#8230;mas também se aplicam a qualquer tipo. Vou explicar agora o motivo de cada regra.<br />
Primeiramente, já inventaram rastreador de chamadas e não foi recentemente, não pensem q é porque a telefônica esta oferecendo este serviço somente agora q ele eh um serviço novo. E meio que uma regra em empresas, conter rastreador de chamadas, e mesmo que você tenha certeza absoluta que a empresa que você esta tramando algo não tem este tipo de coisa, não use seu próprio telefone, NUNCA. Primeiro por que a telefônica tem um registro de C/S(Cliente/Servidor), ou seja, ela tem o registro completo de quem ligou pra quem, eu disse COMPLETO. Mas tem algumas maneiras de burlar isso, uma delas eh usando uma blue box&#8230;</p>
<p>Uma dica ai, eh logico q você não vai ligar a cobrar, e muito menos fazer aquele eskeminha de apertar o 9 como já vi muito idiota fazer e dançar. O esquema é, você liga pro lugar com o cartão e quando a pessoa atender você segura o 9 e retira o cartão, ai a ligação passa a ser a cobrar. Mas e se esta telefonista não for tão burra quanto você pensa e ao ouvir o barulho do tom do telefone ela desligar na tua cara??? ou então ela pode ter percebido e esperado você falar q eh tal pessoa para t dizer algo do tipo &#8220;O Sr. Marcos esta sentado em minha frente, como pode ser você?? hahahaha&#8221;.</p>
<p>Muita gente me chama de doente quando eu levo em conta este tipo de coisa, mas não existe crime perfeito. Nada é perfeito. E isso nos concluímos a cada falha q descobrimos =] Na segunda regra cito q você deve ter todas as informações necessárias e não necessárias. Tipo, cara, e com você liga falando que é o senhor X e que precisa urgentemente de um relatório e q enviara um motoboy pra pega-lo é a telefonista percebe q não é você simplesmente porque o senhor X é gago e porque você esta falando perfeitamente, ou porque o cara tem voz fina e você tem voz grossa?? pois é cara, tem q saber até os mínimos detalhes&#8230;e se o tal cara andava <em>comendo</em> a telefonista e você chega todo falando serio, ela vai perceber que não é você porque devido a intimidade que eles tem não era pra ele estar falando dessa maneira. Cara, são inúmeros detalhes que tem de saber, e não somente informações cadastrais. Como citado na regra 3, você tem de saber o que cada pessoa é na empresa.</p>
<p>Não adianta você conseguir o telefone do ramal de vendas e ligar pedindo uma informação sobre o banco de dados, não tem nada haver né cara. A quarta regra é a mais importante, nunca seja reconhecido por NINGUÉM. É claro que por telefone é muito difícil de ser reconhecido, mas não force sua voz para tentar parecer outra pessoa também, Bom cara, são milhares de técnicas usadas para engenharia social por telefone, mas com certeza estas regras aplicam-se em todas. Aqui vai uma dica, se ligam pra você e a voz é de uma mulher bem sensual, você deixaria de dar tal informação para uma donzela indefesa? hehehe, pode parecer machista, mas as pessoas agem com mais seriedade com as mulheres do que com os homens. Pois seria ótimo se você conseguisse que uma mulher ciente de tudo, liga-se por você. Mulher é mais delicada e paciente pra falar (nem sempre huhauha).</p>
<p>Se possível, use artifícios não ligados a empresa, isso é muito mais inteligente do que ligar dizendo ser tal pessoa e por acaso a essa que você diz ser estiver do outro lado da linha. Por exemplo, se a empresa q você esta tramando algo estiver fechando negocio com uma consultoria para configurar o servidor deles. Você pode muito bem ligar para la, dizendo trabalhar na tal consultoria, e que precisa de informações incluindo senhas. Isso funciona, é logico que você não vai pedir somente o dado especifico que você quer, por exemplo &#8220;ae, preciso da senha do root&#8221;, ninguém seria burro né cara.. Se a pessoa do outro lado da linha não cair na sua armadilha, e começar a dizer merda pra você, NÃO DISCUTA, será pior, simplesmente desligue o telefone. Outro item importante eh demonstrar seriedade, nada de risadinhas. E por ultimo, não ligue de um aparelho publico muito lotado, não deixe que as pessoas ao seu redor ouçam o que você fala. Procure sempre um orelhão vazio.</p>
<h3><strong>4. Engenharia Social via e-mail</strong></h3>
<p>Pode parecer idiotice mas com a chegada da era da internet, muita coisa passou a ser feita via e-mail, incluindo envio de dados importantíssimos. Aonde entra a engenharia social nisso? Bem, na minha opinião isso já se trata mais de hacking do que engenharia social, mas o que é que no hacking não é uma engenharia social????? busco esta resposta em todos q se consideram elites e vejo eles parados pensando e olhando seriamente para mim. Aqui aplicam-se diversas coisas, envio de e-mail como sendo outra pessoa eh a mais usada, porem e-mail anonimo pode até funcionar. Uma coisa importante eh você escrever o e-mail de uma maneira bastante seria, abusem mesmo, e pecam com urgência, digam q precisam desta informação em menos de 5 horas urgentemente se não podem perder um negocio, sei la, cabe a vocês inventarem suas próprias verdades =] O nash/fallon fez um artigo explicando como enviar um e-mail falso, só pegar la na pagina da unsek. Só para os desavisados, <strong>isso tudo aqui eh crime</strong> e gente famosa como  o Marco Nunez se ferraram fazendo isso. Relembrando. As regras na seção Engenharia Social via Telefone aplicam-se aqui também ta.</p>
<h3>5. Engenharia Social aliada ao Phreaking</h3>
<p>Engenharia Social e phreaking, duas coisas que quando bem combinadas se saem muito bem. A melhor maneira de usar phreaking na engenharia social é grampeando telefones para conseguir informações, pode parecer um pouco além de nosso alcance, mas não é tao difícil de se fazer uma coisa dessas&#8230;Pretendo começar a escrever sobre phreaking junto ao meu amigo j00nix, bom, mas a ideia já foi dada, cabe a você usa-la ou não =]</p>
<h3>6. Engenharia Social pessoalmente</h3>
<p>Chegamos a maior loucura de todas, engenharia social pessoalmente, também conhecida como &#8220;in person social engineering&#8221;. Neste caso, não eh brincadeira, se você for pego cara, não a NADA que pode ser feito, a não ser CORRER. É o único jeito, pois se te pegarem, o que você vai dizer para a policia?? q era brincadeira??</p>
<p>Se você chegou a este ponto, com certeza não foi atoa, você já deve ter usado o método via e-mail ou telefone para conseguir tais informações. Neste caso, é muito importante ter uma carteirinha de identificação falsificada, e eh sempre aquela mesma historia, saber com quem esta lidando, e ter o que é mais importante, informações completas.</p>
<p>Neste caso, tente parecer o mais serio possível, mas demonstre um pouco de &#8220;estranheza&#8221;, não no sentido que vocês estão pensando, mas no sentido de tentar parecer com o tipo de pessoa q meche na área que você esta tentando fingir ser. Compliquei? Vou dar um exemplo. Temos de concordar q a maioria dos programadores ou pessoas q mechem com informática são considerados nerds ou loucos pelas outras pessoas, não digo q isso não seja verdade, mas por exemplo, já vi programador de assembly falar sozinho, ficar olhando para um lugar e começar a viajar, ter aquele olhar de bobo, até mesmo o richard stallman na palestra dele na Linux expô , teve uma hora que parou de falar, e começou a olhar pro chão assim, do nada. Ninguém entendeu. Não estou tentando dizer para parecerem imbecis, só estou tentando faze-los entender q na engenharia social devem fingir ser o q as pessoas acham q o q você esta fingindo ser &#8220;SÃO&#8221;. (q frase doida)</p>
<h3>7. Considerações Finais</h3>
<p>Bem, expliquei aqui beeeem resumidamente o que é a tal engenharia social. Uma coisa q esta ficando cada vez mais esquecida pelo simples fato das pessoas começarem a serem mais atentas. Praticar Engenharia Social hoje em dia, principalmente pessoalmente, é muito raro, além de muito perigoso, você tem de ter total certeza do que você ta fazendo, como sempre. Deixo aqui um pedaço do meu esforço <strong>escrevendo este texto para fins informativos</strong>. Pois somos todos newbies e temos muito a aprender. Valeu galera, Unsekurity forever. T+, Blood_Sucker! &#8220;Odiado por muitos e compreendido por poucos&#8230;&#8221;</p>
<h2>O perigo mora ao lado&#8230;</h2>
<p>Em casos <strong>avançados</strong> de engenharia social envolvem <strong>conhecimento em psicologia, PNL</strong> (programação neurolinguística), <strong>análise comportamental</strong>. Agora analisemos alguns casos de engenharia social:</p>
<ul>
<li>O primeiro deles, um teste simples  realizado pelos organizadores do congresso europeu InfoSecurity, em  2003. Eles colocaram pesquisadores com crachás no metrô de Londres, que  pediam cinco minutos de atenção aos passantes. Para quem se dispusesse a  responder um pequeno questionário, entregavam uma caneta simples como  presente. Entre as questões pediam o nome da pessoa, a empresa onde  trabalhava, o departamento e a senha de entrada no sistema. 95% dos  homens e 85% das mulheres responderam de bom grado. Em 2004 a mesma  pesquisa foi realizada pelos mesmos organizadores do InfoSecurity, desta  vez oferecendo chocolate como prêmio pelas respostas ao questionário, e  os resultados foram semelhantes.</li>
<li>O segundo caso é o do técnico em informática<a href="http://www.time.com/time/magazine/article/0,9171,948323-1,00.html" target="_blank"> Stanley Rifkin</a>, que em 1978  roubou mais de 10 milhões de dólares do banco Security Pacific sem  disparar um tiro ou mesmo sem usar um computador. Ele simplesmente leu o  código diário de autorização para transferências internacionais que os  funcionários colavam num quadro de avisos para facilitar o acesso, ligou  de um orelhão se fazendo passar por um funcionário do setor de contas  internacionais, e solicitou a transferência de dez milhões e duzentos  mil dólares para uma conta que ele havia aberto na Suíça, fornecendo o  código que havia lido. Só foi pego porque usou o dinheiro para comprar  diamantes, e não sabia nada sobre como vendê-los sem chamar a atenção.</li>
<li><strong>E-mails falsos (scam):</strong> este é um dos tipos de ataque de         engenharia social mais comuns e é usado principalmente para  obter         informações financeiras da pessoa, como número de         conta-corrente e senha. Neste caso, o aspecto explorado é a  confiança.         Boa parte dos criadores desses e-mails são criminosos que  desejam         roubar o dinheiro presente em contas bancárias. Porém, os         sistemas dos bancos são muito bem protegidos e quase que  invioláveis!         Como é inviável tentar burlar a seguranças dos sistemas         bancários, é mais fácil ao criminoso tentar enganar         as pessoas para que elas forneçam suas informações         bancárias. A tática usada é a seguinte: o criminoso         adquire uma lista de e-mails usados para SPAM que contém milhões         de endereços, depois vai a um site de um banco muito conhecido,         copia o layout da página e o salva em um site provisório,         que tem a URL semelhante ao site do banco. Ataques de e-mails falsos comumente geram os famosos phisings(que ficaram para outro artigo).</li>
<li><strong>Redes sociais</strong>: Boa parte das pessoas possui perfis e contas em redes sociais, o que  facilita a engenharia social criminosa. Ao criar perfis em sites de  relacionamento<a href="http://www.emersonwendt.com.br/2010/02/seguranca-nas-redes-sociais-parte-ii.html" target="_blank"> é preciso ter cautela com os dados ali fornecidos</a>, pois  muitas vezes eles podem ser usados para prejudicar você. Não é  aconselhável colocar telefones, endereço, empresa na qual trabalha e  qualquer tipo de informação pessoal em seu perfil.</li>
<li><strong>Boatos = queda: </strong>Os boatos que circulam pela Internet podem refletir diretamente na  empresa sobre a qual se fala. Um bom exemplo dessa situação é a Apple,  que teve queda em suas ações depois que o boato sobre a suposta morte de  Steve Jobs circulou por e-mails, blogs e fóruns. Tal método é conhecido  no mercado financeiro como <em>“pump-and-dump”</em>.</li>
<li><strong>Kevin mitnick:</strong> Um caso que não poderia ficar sem ser citado, ele utilizou artimanhas da engenharia social pela primeira vez nos anos 70, ao conhecer um estudante que lidava com phreaking(hacking de linhas telefônicas), ele percebeu como os phreakers agiam, fazendo-se passar por funcionários das companhias telefônicas. Começou a tentar com amigos e professores e sentiu-se motivado após notar que tinha facilidade em conseguir informações confidenciais. ele foi evoluindo sua tática até o ponto em que nenhuma empresa estava mais segura contra os seus ataques. Sua lista de ataques inclui desde telefonemas inocentes ao setor de suporte até a incorporação de funcionários importantes para conseguir informações como senhas para obter acesso a grandes sistemas de empresas. Dessa forma ele se tornou uma lenda para a população hacker ao redor do mundo.</li>
<li><strong>Vladmir Levin:</strong> Vladmir Levin, russo, foi preso pela Interpol depois de vários meses de investigação por ter conseguido transferir 10 milhões de dólares de contas bancarias, do CitiBank.</li>
</ul>
<p>Esses foram só alguns casos a lista de casos famosos e bastante grandes.Em ambos os casos apresentados foi explorada e ingenuidade das pessoas e falta de boas praticas de segurança.</p>
<h2><strong> Como se proteger dela?</strong></h2>
<ul>
<li><strong>Bom senso: </strong>A vítima deve ficar sempre bem atenta ao receber qualquer tipo de  abordagem, seja por telefone, e-mail, carta ou até mesmo pessoalmente,  onde um pessoa (atacante) tenta o induzir a fornecer informações  confidenciais pessoais e até mesmo sobre a empresa em que trabalha.</li>
<li><strong>Informações sensíveis: </strong>Deve-se sempre estar antenado quando lhe for solicitado informações  sensíveis como, por exemplo, números de cartões de crédito, senhas e  etc. por pessoas estranhas. A vítima antes de tudo deve verificar a  autenticidade da ligação que esta recebendo, do crachá que o atacante  apresentou e etc.</li>
<li><strong>Solicitações pela internet: </strong>Nunca fornecer informações pessoais, de empresas e etc antes de  identificar e constatar a autenticidade do pedido. Por várias vezes,  vítimas recebem e-mails contendo links falsos, informações não  verdadeiras ou até mesmo solicitações de cadastro em empresas fantasmas.  Para não cair nestas armadilhas a vítima deve, por exemplo, entrar em  contato com a instituição que lhe fez a solicitação de cadastro, como  por exemplo bancos, receita federal e etc, para garantir assim uma  autenticidade do pedido, nunca clicar sobre links recebidos através de  spams e etc.</li>
<li><strong>Treinamento: </strong>E vital empresas fornecerem treinamento para seus funcionários, fim de evitar a vazão de informações sobre a estrutura da empresa.O treinamento, estabelecimento da política de segurança da informação na  empresa, baseia-se em educar os funcionários a sempre certificar-se de  que a pessoa a quem vai fornecer as informações é realmente quem diz  ser, a tomarem cuidado com o lixo pois este é uma grande fonte de  informações, desconfiarem de pessoas em chats e etc. Esta política de segurança da informação da empresa deve conter dentre  outros tópicos, planos e ações de segurança como, por exemplo, plano de  proteção física, continuidade dos negócios, análise de riscos, ações de  engenharia, plano de contingência, plano de conscientização de todos os  colaboradores, mesmo os terceirizados e etc.   Basicamente tudo se resume em reeducar toda a corporação a fim de  implantar uma nova cultura cem por cento abrangente, cem por cento, pois  qualquer falha põe novamente a corporação em risco iminente.</li>
<li><strong>Segurança Física:</strong> Permitir o acesso a dependências de uma organização apenas  às              pessoas devidamente autorizadas, bem como dispor de  funcionários de              segurança a fim de monitorar entrada e saída da organização.</li>
<li><strong>Certifique-se de que a pessoa e realmente quem diz ser: </strong>sempre<strong> </strong>peça ao menos 1 confirmação verbal e ou escrita(assinada) quando for  fazer algum tipo de troca de informações.</li>
<li><strong>Fique atento para qualquer abordagem:</strong> seja via telefone, seja  através de um e-mail, onde uma pessoa (em muitos casos falando em nome  de uma instituição) solicita informações (principalmente confidenciais) a  seu respeito. Procure não fornecer muita informação e não forneça, sob  hipótese alguma, informações sensíveis, como senhas ou números de  cartões de crédito. Nestes casos e nos casos em que receber mensagens,  procurando lhe induzir a executar programas ou clicar em um link contido  em um e-mail ou página é extremamente importante que você, antes de  realizar qualquer ação, procure identificar e entrar em contato com a   Instituição envolvida, para certificar-se sobre o caso.</li>
</ul>
<p>A melhor arma contra a engenharia social é a informação.         De nada adiante as empresas usarem sistemas ultra-protegidos se  seus funcionários         não tiverem ciência dos golpes que podem sofrer (repare que         neste caso, os golpes de engenharia social podem ocorrer não só         pela Internet, mas principalmente no próprio ambiente de  trabalho).         No caso dos usuários domésticos, os pais devem informar         a seus filhos sobre os perigos existentes e de igual forma,  devem tomar         cuidado quando estiverem navegando na Internet.</p>
<p>Fica a nota, engenharia social não só ocorre no mundo virtual, mas também no mundo real, como minha avó diz: pilantras e salafrários tem em tudo que e beco e buraco de rato.</p>
<p>Links e Referências:</p>
<p><a href="http://www.vivaolinux.com.br/artigo/Entendendo-o-que-e-Engenharia-Social/?pagina=1" target="_blank">http://www.vivaolinux.com.br/artigo/Entendendo-o-que-e-Engenharia-Social/?pagina=1</a><br />
<a href="http://www.espacoacademico.com.br/043/43amsf.htm" target="_blank">http://www.espacoacademico.com.br/043/43amsf.htm</a><br />
<a href="http://pt.kioskea.net/contents/attaques/ingenierie-sociale.php3" target="_blank">http://pt.kioskea.net/contents/attaques/ingenierie-sociale.php3</a><br />
<a href="http://www.baixaki.com.br/info/1078-cuidado-com-a-engenharia-social.htm" target="_blank">http://www.baixaki.com.br/info/1078-cuidado-com-a-engenharia-social.htm</a><br />
<a href="http://www.infowester.com/col120904.php" target="_blank">http://www.infowester.com/col120904.php</a><br />
<a href="http://www.istf.com.br/vb/etica-e-comportamento/7101-como-se-proteger-de-engenharia-social.html">http://www.istf.com.br/vb/etica-e-comportamento/7101-como-se-proteger-de-engenharia-social.html</a><br />
<a href="http://www.forumseguranca.org.br/artigos/engenharia-social-o-ciber-crime-sem-computador">http://www.forumseguranca.org.br/artigos/engenharia-social-o-ciber-crime-sem-computador</a></p>
<p><strong>Leitura complementar:</strong></p>
<p><a title="Cartilha da CERT sobre engenharia social." href="http://cartilha.cert.br/download/cartilha-04-fraudes.pdf" target="_blank">Cartilha da CERT sobre fraudes na internet.</a><br />
<a href="http://www.icpg.com.br/artigos/rev03-05.pdf" target="_blank">ENGENHARIA SOCIAL Um Perigo Eminente.</a><br />
<a href="http://www.linuxmall.com.br/produto/livro-a-arte-de-enganar.html" target="_blank">Livro A Arte de Enganar, Autor: Kevin D. Nitnick, William L. Simon, Editora: Pearson</a><br />
Livros de psicologia e PNL.</p>
<p>The post <a href="http://0fx66.com/blog/entendendo-a-engenharia-social/">Entendendo a engenharia social</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/um-pouco-mais-sobre-nmap/' rel='bookmark' title='Um pouco mais sobre nmap'>Um pouco mais sobre nmap</a></li>
</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/0fx66?a=I_7fxqOfzwI:6SCvBgI795U:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=I_7fxqOfzwI:6SCvBgI795U:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/0fx66?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=I_7fxqOfzwI:6SCvBgI795U:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/0fx66?i=I_7fxqOfzwI:6SCvBgI795U:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=I_7fxqOfzwI:6SCvBgI795U:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=I_7fxqOfzwI:6SCvBgI795U:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/0fx66?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=I_7fxqOfzwI:6SCvBgI795U:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/0fx66?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=I_7fxqOfzwI:6SCvBgI795U:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/0fx66?i=I_7fxqOfzwI:6SCvBgI795U:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=I_7fxqOfzwI:6SCvBgI795U:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/0fx66?i=I_7fxqOfzwI:6SCvBgI795U:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/0fx66/~4/I_7fxqOfzwI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://0fx66.com/blog/entendendo-a-engenharia-social/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://0fx66.com/blog/entendendo-a-engenharia-social/</feedburner:origLink></item>
		<item>
		<title>Usando o DD</title>
		<link>http://feedproxy.google.com/~r/0fx66/~3/8w6bVIDMJqc/</link>
		<comments>http://0fx66.com/blog/usando-o-dd/#comments</comments>
		<pubDate>Thu, 28 Feb 2013 15:00:28 +0000</pubDate>
		<dc:creator>VonNaturAustreVe</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[comando]]></category>
		<category><![CDATA[dd]]></category>

		<guid isPermaLink="false">http://0fx66.com/blog/?p=118</guid>
		<description><![CDATA[<p>Usando o DD O comando dd(diga-se de passagem significa de direct copy) é um clássico dos ambientes Unix-Like, com ele você pode fazer uma copia exata de um arquivo, ou seja uma copia bit a bit. Sintaxe básica: $dd if=origem of=destino Por exemplo: bash-3.1$ ls -la total 5272 drwxrwxrwx 2 v0rtex users 4096 2010-02-07 18:23 [...]</p><p>The post <a href="http://0fx66.com/blog/usando-o-dd/">Usando o DD</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/como-modificar-o-mac-address-no-linux/' rel='bookmark' title='Modificando endereço MAC no Linux'>Modificando endereço MAC no Linux</a></li>
<li><a href='http://0fx66.com/blog/permissoes-de-arquivos-unix/' rel='bookmark' title='Permissões de Arquivos UNIX'>Permissões de Arquivos UNIX</a></li>
<li><a href='http://0fx66.com/blog/montando-arquivos-nrg-mdf-img-bin-cue-no-linux/' rel='bookmark' title='Montando arquivos NRG, MDF, IMG, BIN, CUE no Linux'>Montando arquivos NRG, MDF, IMG, BIN, CUE no Linux</a></li>
<li><a href='http://0fx66.com/blog/algoritmo-de-escalonamento-kernel-2-4-versus-2-6/' rel='bookmark' title='Algoritmo de escalonamento: Kernel 2.4 Versus 2.6'>Algoritmo de escalonamento: Kernel 2.4 Versus 2.6</a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<h1>Usando o DD</h1>
<p>O comando dd(diga-se de passagem significa<em> de direct copy</em>) é um clássico dos ambientes Unix-Like, com ele você pode fazer uma copia exata de um arquivo, ou seja uma copia bit a bit. Sintaxe básica:</p>
<pre>$dd if=origem of=destino</pre>
<p>Por exemplo:</p>
<pre>bash-3.1$ ls -la
total 5272
drwxrwxrwx   2 v0rtex users    4096 2010-02-07 18:23 .
drwx--x--x 116 v0rtex users    4096 2010-02-07 18:03 ..
-rwxr-xr-x   1 v0rtex users 5375842 2007-12-25 21:04 05 - Whole Lotta Love.mp3
bash-3.1$ dd if=05\ -\ Whole\ Lotta\ Love.mp3 of=whole_lotta_love.mp3
10499+1 registros de entrada
10499+1 registros de saída
5375842 bytes (5,4 MB) copiados, 0,0682746 s, 78,7 MB/s
bash-3.1$ ls -lh
total 11M
-rwxr-xr-x 1 v0rtex users 5,2M 2007-12-25 21:04 05 - Whole Lotta Love.mp3
-rw-r--r-- 1 v0rtex users 5,2M 2010-02-07 18:23 whole_lotta_love.mp3</pre>
<p>Foi feita uma copia do arquivo &#8220;05\ -\ Whole\ Lotta\ Love.mp3&#8243; com o nome whole_lotta_love.mp3</p>
<h2>Dicas de uso</h2>
<p>Copiando um HD para um arquivo.</p>
<pre># dd if=/dev/sda of=~/backup_hd.img</pre>
<p>Com isso será feita uma copia exata do hd dentro do diretório do root(#) com o nome &#8220;backup_hd.img&#8221;. Se quiser restaurar o &#8220;backp_hd.img&#8221; no /dev/sda2(lembre o sda2 deve ter pelo menos o mesmo tamanho do arquivo &#8220;backup.hd&#8221; se não os resultados poderão ser desastrosos.</p>
<pre># dd if=backup_hd.img of=/dev/sda2</pre>
<p>Copiando HD para HD:</p>
<pre>#dd if=/dev/sda1 of=/dev/sda2</pre>
<p>Com isso será feita copia do /dev/sda1 para o /dev/sda2. Fazendo uma copia do hd para um arquivo compactado:</p>
<pre>dd if=/dev/sda1 | gzip &gt; backup_hd.img.gz</pre>
<p>Para descompactar dentro de outro HD use:</p>
<pre># gzip -d -c backup_hd.img.gz | dd of=/dev/sda2</pre>
<p>Criar um arquivo .iso:</p>
<pre>#dd if=origem of=destino.iso</pre>
<p>Para visualizar progresso de cópia de arquivos, vá em outro terminal e execute:</p>
<pre>$ watch df -h</pre>
<p>Para converter todos as letras maiúsculas de um documento para letras minúsculas:</p>
<pre>$dd if=ficheiro1 of=ficheiro2 conv=lcase</pre>
<p>Se quisermos converter todas as letras do ficheiro2 para maiúsculas:</p>
<pre>$dd if=ficheiro2 of=ficheiro3 conv=ucase</pre>
<p>Para zerar(formatar) o seu HD:</p>
<pre># dd if=/dev/zero of=/dev/hda</pre>
<p>Gerar senhas de forma (pseudo) aleatória:</p>
<pre>$ dd if=/dev/random bs=1 count=8 | base64 -</pre>
<h3>Referências:</h3>
<p><a href="http://www.freebsd.org/cgi/man.cgi?query=dd&amp;sektion=1">man DD</a></p>
<p><a href="http://br-linux.org/tutoriais/003156.html">Como copiar a imagem de um HD para outro usando o Linux:</a></p>
<p><a href="http://www.vivaolinux.com.br/dica/Comando-dd-Truque-para-visualizar-progresso-de-copia-de-arquivos">Comando dd &#8211; Truque para visualizar progresso de cópia de arquivos:</a></p>
<p><a href="http://www.boadica.com.br/dica/473/tutorial-clonar-cd-com-dd">Tutorial clonas HD com dd.</a></p>
<p>Via <a href="http://daltonmatos.wordpress.com/" target="_blank">@Dalton Barreto</a></p>
<p>[]&#8216;s</p>
<p>The post <a href="http://0fx66.com/blog/usando-o-dd/">Usando o DD</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/como-modificar-o-mac-address-no-linux/' rel='bookmark' title='Modificando endereço MAC no Linux'>Modificando endereço MAC no Linux</a></li>
<li><a href='http://0fx66.com/blog/permissoes-de-arquivos-unix/' rel='bookmark' title='Permissões de Arquivos UNIX'>Permissões de Arquivos UNIX</a></li>
<li><a href='http://0fx66.com/blog/montando-arquivos-nrg-mdf-img-bin-cue-no-linux/' rel='bookmark' title='Montando arquivos NRG, MDF, IMG, BIN, CUE no Linux'>Montando arquivos NRG, MDF, IMG, BIN, CUE no Linux</a></li>
<li><a href='http://0fx66.com/blog/algoritmo-de-escalonamento-kernel-2-4-versus-2-6/' rel='bookmark' title='Algoritmo de escalonamento: Kernel 2.4 Versus 2.6'>Algoritmo de escalonamento: Kernel 2.4 Versus 2.6</a></li>
</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/0fx66?a=8w6bVIDMJqc:frG3aLhUj6Y:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=8w6bVIDMJqc:frG3aLhUj6Y:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/0fx66?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=8w6bVIDMJqc:frG3aLhUj6Y:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/0fx66?i=8w6bVIDMJqc:frG3aLhUj6Y:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=8w6bVIDMJqc:frG3aLhUj6Y:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=8w6bVIDMJqc:frG3aLhUj6Y:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/0fx66?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=8w6bVIDMJqc:frG3aLhUj6Y:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/0fx66?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=8w6bVIDMJqc:frG3aLhUj6Y:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/0fx66?i=8w6bVIDMJqc:frG3aLhUj6Y:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=8w6bVIDMJqc:frG3aLhUj6Y:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/0fx66?i=8w6bVIDMJqc:frG3aLhUj6Y:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/0fx66/~4/8w6bVIDMJqc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://0fx66.com/blog/usando-o-dd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://0fx66.com/blog/usando-o-dd/</feedburner:origLink></item>
		<item>
		<title>Algoritmo de escalonamento: Kernel 2.4 Versus 2.6</title>
		<link>http://feedproxy.google.com/~r/0fx66/~3/XrnBnV-B7Os/</link>
		<comments>http://0fx66.com/blog/algoritmo-de-escalonamento-kernel-2-4-versus-2-6/#comments</comments>
		<pubDate>Wed, 27 Feb 2013 15:00:24 +0000</pubDate>
		<dc:creator>VonNaturAustreVe</dc:creator>
				<category><![CDATA[Arquitetura de Computadores]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[algoritmos]]></category>
		<category><![CDATA[escalonamento]]></category>
		<category><![CDATA[kernel]]></category>

		<guid isPermaLink="false">http://0fx66.com/blog/?p=115</guid>
		<description><![CDATA[<p>=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- =-[07]-=[Algoritmo de escalonamento: Kernel 2.4 Versus 2.6]=- =-&#124;Felipe Goldstein&#124;-=- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- &#8211;=[ Introdução O Algoritmo de escalonamento é o coração de um Kernel. Existem muitos algoritmos e a eficiência de cada um deles depende do tipo de aplicação que será executada. O Linux, por ser voltado para o computador pessoal, executa em sua maioria, tarefas [...]</p><p>The post <a href="http://0fx66.com/blog/algoritmo-de-escalonamento-kernel-2-4-versus-2-6/">Algoritmo de escalonamento: Kernel 2.4 Versus 2.6</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/como-modificar-o-mac-address-no-linux/' rel='bookmark' title='Modificando endereço MAC no Linux'>Modificando endereço MAC no Linux</a></li>
<li><a href='http://0fx66.com/blog/permissoes-de-arquivos-unix/' rel='bookmark' title='Permissões de Arquivos UNIX'>Permissões de Arquivos UNIX</a></li>
<li><a href='http://0fx66.com/blog/montando-arquivos-nrg-mdf-img-bin-cue-no-linux/' rel='bookmark' title='Montando arquivos NRG, MDF, IMG, BIN, CUE no Linux'>Montando arquivos NRG, MDF, IMG, BIN, CUE no Linux</a></li>
<li><a href='http://0fx66.com/blog/usando-o-dd/' rel='bookmark' title='Usando o DD'>Usando o DD</a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<pre>=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
=-[07]-=[Algoritmo de escalonamento: Kernel 2.4 Versus 2.6]=-
=-|Felipe Goldstein|-=-
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-</pre>
<p style="text-align: justify;"><strong>&#8211;=[ Introdução</strong></p>
<p style="text-align: justify;">O Algoritmo de escalonamento é o coração de um Kernel. Existem muitos algoritmos e a eficiência de cada um deles depende do tipo de aplicação que será executada. O Linux, por ser voltado para o computador pessoal, executa em sua maioria, tarefas que interagem com o usuário. Portanto o algoritmo volta-se principalmente para sistemas interativos. Aqui, discutirei em linhas gerais, o funcionamento do algoritmo de escalonamento do kernel 2.4 e suas desvantagens em relação ao do kernel 2.6.</p>
<p style="text-align: justify;"><strong>--=[ Kernel 2.4</strong></p>
<p style="text-align: justify;"><strong>--=--=[ Breve descrição do funcionamento do algoritmo de escalonamento</strong></p>
<p style="text-align: justify;">O escalonador do Linux divide o tempo de CPU em Eras (epochs). Em cada Era, cada processo tem um time-quantum que especifica o tempo que o processo vai adquirir de CPU durante a Era atual. Quando o time-quantum de um processo acaba, o escalonador é chamado e outro processo começa a rodar.</p>
<p style="text-align: justify;">Uma Era termina quando todos os time-quantum dos processos ativos acabam. Então a lista ligada dos processos é completamente varrida, e para cada processo, é calculado uma nova prioridade e um novo time-quantum. Por este motivo, o algoritmo de escalonamento do kernel 2.4 tem a ordem de O(n) no número de processos ativos. O fator linear do algoritmo vem diretamente do fato de que o acesso à lista ligada é linear, e também da necessidade de se recalcular a prioridade de cada processo entre cada mudança de Era, porém como veremos no kernel 2.6 isto pode ser feito no momento em que se insere o processo na lista.</p>
<p style="text-align: justify;">Os processos ativos dividem-se em duas listas ligadas usadas pelo escalonador. Uma guarda os processos que ainda não extinguiram todo o seu time-quantum designado para a Era atual e estão esperando para serem escalonados, chamada run-queue enquanto a outra guarda os processos que já extinguiram o seu time-quantum e estão esperando para serem escalonados na próxima era, chamada expired-queue.</p>
<p style="text-align: justify;"><strong>--=--=[ Tipos de Processos</strong></p>
<p style="text-align: justify;">Existem 2 tipos básicos de processos: Processos de Tempo Real e os processos convencionais. Os processos de Tempo Real são processos que requerem respostas em tempos determinados. Para isso eles precisam de um maior determinismo do sistema e portanto recebem maior prioridade. Estes tipos de processos recebem uma prioridade que é sempre maior que a dos outros processos convencionais e esta prioridade não muda depois que o processo começa a rodar.</p>
<p style="text-align: justify;">Os processos convencionais recebem uma prioridade que muda conforme a necessidade e no caso do kernel 2.4, basicamente a prioridade muda conforme a quantidade de time-quantum não usada pelo processo em seu último escalonamento, o que faz com que processos IO-Boud recebam maior prioridade (pois este tipo de processo deixa sempre sobrando algum time-quantum quando vai dormir esperando um evento de IO).</p>
<p style="text-align: justify;"><strong>--=--=[ Quem deve executar primeiro </strong>?</p>
<p style="text-align: justify;">Uma das principais tarefas do escalonador é fazer a escolha dentre os processos na lista run-queue de qual processo executar primeiro. A escolha é feita pegando da lista run-queue o processo com o maior fator Goodness que é calculado da seguinte maneira:</p>
<ul style="text-align: justify;">
<li>Goodness = 0 Se o processo acabou o seu time-quantum. A menos que este processo seja o primeiro processo na lista run-queue e todos os outros processos tenham também acabado seu time-quantum , este processo não será selecionado agora.</li>
<li>0 &lt; Goodness &lt; 1000 Se o processo eh convencional e ainda não acabou com seu time-quantum, Goodness é a soma da prioridade do processo com o que resta do seu time-quantum somado com 1.</li>
<li>Goodness &gt;= 1000 Se o processo é de Tempo Real, seu Goodness é a soma de 1000 com sua prioridade.</li>
</ul>
<p style="text-align: justify;">Perceba que para fazer esta escolha, todos os processos são percorridos e é calculado o fator Goodness de cada um, o que também implica uma ordem de O(n) ao algoritmo de escalonamento.</p>
<p style="text-align: justify;"><strong>--=--=[ Sistemas Multiprocessados</strong></p>
<p style="text-align: justify;">Além da escolha de qual processo rodar primeiro, o escalonador deve escolher também (num sistema multiprocessado) em qual CPU o processo vai rodar. Para melhor utilizar a memória Cache, o kernel 2.4 tenta escolher a CPU no qual o processo já estava rodando. Mas isso pode causar um overload de uma CPU enquanto outras estão ociosas. Então essa escolha é feita usando um fator que leva em conta o tamanho da memória cache do processador e sua frequência. Baseado nesse fator o escalonador decide se vale ou não a pena colocar o processo no mesmo processador. Porém ainda assim, no Kernel 2.4, existe uma situação em que um processo pode ficar 'pulando' de uma CPU para outra constantemente, desperdiçando a memória cache. Este já era um bug conhecido a tempos.</p>
<p style="text-align: justify;"><strong>--=--=[ Performance do Kernel 2.4: Desvantagens</strong></p>
<ul style="text-align: justify;">
<li>O Algoritmo não é escalável: Conforme aumenta o número de processos ativos, aumenta o overhead no escalonamento. O kernel leva mais tempo pra decidir qual processo rodar, diminuindo o desempenho do sistema.</li>
<li>Estratégia adotada para processos do tipo IO-Bound não é ótima: Dar preferência aos processos do tipo IO-Bound é uma boa estratégia, mas ela não é perfeita. Imagine que você tenha um processo rodando em background como um banco de dados que a todo momento precisa ler dados do HD, porém ele não precisa ter um tempo de resposta rápido. Com este algoritmo, este tipo de processo vai levar vantagem sobre os outros que não são IO-Bound. Outro problema acontece quando um processo que é CPU-Bound precisa também interagir rapidamente com o usuário, este tipo de processo vai ter menos prioridade por ser CPU-Bound.</li>
<li>Kernel não é preemptivo: No kernel 2.4 e anteriores, para cada operação de escalonamento e context-switch um mutex-lock global precisa ser adquirido antes de entrar na seção crítica do código. Esta seção crítica é na verdade o código completo do escalonador. Assim, num sistema multiprocessado, apenas um processador podia executar o escalonador por vez.</li>
</ul>
<p style="text-align: justify;">O mutex-lock global impede que dois ou mais processadores executem o escalonador ao mesmo tempo e isso pode representar perda de tempo de processamento, pois os processadores que estão tentando adquirir o mutex vão ter que esperar até o mutex ser liberado. Além disso, durante a execução do escalonador as interrupções são desligadas, e portanto o kernel não é preemptivo. Durante uma chamada de sistema, o código executado no espaço de kernel não pode ser interrompido. Por exemplo, por um processo de alta prioridade (pode ser de Tempo Real) que acabou de acordar e precisa executar na frente de qualquer outro tipo de processamento.</p>
<p style="text-align: justify;">Tudo isso traz péssimas implicações para processos de Tempo Real, pois diminui o determinismo da prioridade de execução de um processo de Tempo Real.</p>
<p style="text-align: justify;"><strong>--=[ Kernel 2.6 - Mudanças</strong></p>
<p style="text-align: justify;"><strong>--=--=[ Objetivos</strong></p>
<p style="text-align: justify;">Ao se projetar um novo escalonador para o kernel do linux, mantendo as boas características que o kernel 2.4 trazia e adicionando novas e interessantes, os objetivos principais foram os seguintes:</p>
<ul style="text-align: justify;">
<li>Boa performance de interatividade, mesmo durante uma sobrecarga de uso de CPU: Se o usuário clica então o sistema deve reagir instantaneamente e executar a tarefa do usuário de forma suave.</li>
<li>Justiça: Nenhum processo deixa de receber ao menos um pequeno pedaço de tempo da CPU e nenhum processo recebe injustamente um grande pedaço de tempo da CPU. Respeitando as prioridades de cada processo.</li>
<li>Prioridades: Tarefas menos importantes recebem prioridades menores, tarefas mais importantes recebem prioridades altas.</li>
<li>Eficiência em ambiente multiprocessado: Nenhuma CPU deve ficar ociosa se existe trabalho a fazer.</li>
<li>Afinidade de CPU em ambiente multiprocessado: Processos que rodaram numa CPU têm afinidade a ela, e assim que possível, permanecer executando na CPU em que já foi executada. Nenhum processo deve ficar trocando de CPU muito frequentemente.</li>
</ul>
<p style="text-align: justify;">As novas características que chamam mais atenção são as seguintes:</p>
<ul style="text-align: justify;">
<li>Escalonamento completo usando um algoritmo O(1): Sistema muito mais escalável. O número de processos executando não afeta o desempenho do kernel.</li>
<li>Kernel Preemptivo: Escalabilidade perfeita num ambiente multiprocessado. Não existe mais nenhum mutex-lock global para proteger a área de código do escalonador. Existe agora 1 lista de processos ativos (run-queue) por CPU, permitindo o acesso em paralelo às run-queues sem a necessidade de mutex.</li>
<li>Escalonamento tipo Batch: Uma grande porção dos processos CPU-Bound se beneficiam da maneira Batch de escalonamento, onde os time-quantum são grandes e os processos são escalonados por round-robin. O novo escalonador designa este tipo de escalonamento (Batch) para os processos com baixa prioridade, e a nova política de prioridade dinâmica designa menores prioridades quanto mais CPU-Bound for o processo.</li>
<li>Sistema mais confiável para processos Real Time: O fato do kernel ser Preemptivo e o algoritmo de escalonamento ser O(1) melhora o comporta mento do sistema em relação à dar prioridade às tarefas Real Time, pois agora uma chamada de sistema feita por uma tarefa de prioridade menor pode ser interrompida por uma tarefa de maior prioridade para que ela entre em execução imediatamente.</li>
</ul>
<p style="text-align: justify;"><strong>--=--=[ Vetor de Prioridades</strong></p>
<p style="text-align: justify;">Ao invés de usar só uma lista ligada gigante com todos os processos ativos, foi usado uma outra abordagem na qual temos um vetor de tamanho fixo cujo tamanho é o número de níveis de prioridades. Cada elemento do vetor aponta para uma lista ligada de processos que tem a mesma prioridade.</p>
<p style="text-align: justify;">Essa é a estrutura básica do novo escalonador: A lista run-queue, agora é um vetor de prioridades ordenado e cada CPU têm sua própria run-queue. O vetor de run-queue contém todas as tarefas que têm afinidade com a CPU e ainda têm time-quantum para executar, enquanto o vetor de expired-queue contêm as tarefas que tem afinidade com a CPU e que expiraram seu time-quantum, de maneira que este vetor expired-queue (assim como o run-queue) também é mantido ordenado.</p>
<p style="text-align: justify;">A estrutura do array de prioridades é descrita como:</p>
<pre class="cpp">struct prio_array {
    int nr_active;                       /* number of tasks */
    unsigned long  bitmap[BITMAP_SIZE];  /* priority bitmap */
    struct list_head queue[MAX_PRIO];    /* priority queues */
};</pre>
<p style="text-align: justify;">MAX_PRIO é número de níveis de prioridades do sistema. Para cada prioridade é mantida uma lista ligada dos processos que estão naquela prioridade. O escalonador escolhe para executar primeiro a lista dos processos no maior nível de prioridade e executa-os em Round-Robin.</p>
<p style="text-align: justify;">Existe um número fixo de níveis de prioridades, e para escolher um novo processo basta pegar o próximo elemento do vetor de prioridades, portanto, o algoritmo neste caso é O(1), pois temos um tempo constante executado em cada escolha de qual processo executar.</p>
<p style="text-align: justify;"><strong>--=--=[ Recalculando os time-quantum</strong></p>
<p style="text-align: justify;">No 2.4, cada vez que terminava uma Era, percorria-se todos os processos recalculando os time-quantum de cada um. No kernel 2.6, o calculo do time-quantum ocorre quando o processo termina todo seu time-quantum da Era atual. Assim, antes de ser passado para o vetor de expired-queue, seu time-quantum e também sua prioridade são recalculados. O vetor de expired-queue é mantido ordenado e contém os processo com os time-quantum já calculados da próxima Era. Quando a Era atual termina, basta trocar os ponteiros do vetor de run-queue por expired-queue e o novo vetor de processos ativos está pronto para ser executado.</p>
<p style="text-align: justify;">A abordagem do kernel 2.6 é uma mistura de lista de prioridades com escalonamento por Round-Robin. Os processos de uma mesma prioridade são escalonados por Round-Robin, mas as prioridades maiores são escalonadas primeiro.</p>
<p style="text-align: justify;"><strong>--=--=[ Resposta Rápida</strong></p>
<p style="text-align: justify;">Uma das coisas que mais deixam os usuários do sistema irritados, é a demora no tempo de resposta de um comando. No kernel 2.6 este problema é evitado da seguinte maneira: ao invés de aumentar a prioridade de processos IO-Bound, diminui-se a prioridade dos processos que querem consumir muito tempo de CPU quando tempo de CPU está escasso.</p>
<p style="text-align: justify;"><strong>--=[ Conclusão</strong></p>
<p style="text-align: justify;">Essas foram as principais mudanças do kernel 2.4 para o 2.6. O Linux sempre foi um sistema operacional voltado para o usuário de Computador Pessoal e por isso conceitos como processamento de tarefas de Tempo Real, escalabilidade no número de CPUs e no número de processos ativos não foram prioridades no desenvolvimento do seu Kernel.</p>
<p style="text-align: justify;">Um usuário de PC rodando o kernel 2.4 não vai notar a menor diferença quando fizer o upgrade para o 2.6, visto que seu PC só tem 1 processador e ele só roda no máximo, digamos, 100 processos em paralelo. Além disso não se usa o Linux como um Sistema Operacional para controlar um sistema de Tempo Real, como um piloto automático de um avião ou um sistema de controle de temperatura de uma usina nuclear. O Linux não foi projetado para esse tipo de coisa, mas com essas mudanças se consegue chegar mais perto do que seria um sistema mais escalável e confiável.</p>
<p style="text-align: justify;">Segundo Theodore Tso (um dos desenvolvedores do kernel), na conversa que teve hoje com os alunos da computação no IC (Instituto de Computação - Unicamp), as futuras versões do kernel caminham em direção a se ter mais robustez para aplicações de Tempo Real, adicionando mais predictabilidade e determinismo à execução de tarefas que exigem alta prioridade.</p>
<p style="text-align: justify;"><strong>--=[ Fontes</strong></p>
<p style="text-align: justify;">1) Livro: Understanding the Linux Kernel , By Daniel P. Bovet &amp; Marco Cesati , Editora O'Reilly</p>
<p style="text-align: justify;">2) Livro: Linux Kernel Development , By Robert Love , Editora Sams</p>
<p style="text-align: justify;">3) Email:From: Ingo Molnar<br />
To: linux-kernel-mailing-list<br />
Subject: [announce]  ultra-scalable O(1) SMP and UP scheduler<br />
Date: Fri, 4 Jan 2002 03:19:10 +0100 (CET)</p>
<p style="text-align: justify;">Este email pode ser encontrado em:<br />
<a href="http://kerneltrap.org/node/341" target="_blank">http://kerneltrap.org/node/341</a></p>
<p style="text-align: justify;">4) web: <a href="http://www.hpl.hp.com/research/linux/kernel/o1.php" target="_blank"> http://www.hpl.hp.com/research/linux/kernel/o1.php</a></p>
<p style="text-align: justify;">5) web: <a href="http://www.linuxgazette.com/node/9746" target="_blank">http://www.linuxgazette.com/node/9746</a></p>
<p style="text-align: justify;">6) web: h<a href="http://www.faqs.org/docs/kernel_2_4/lki-2.html" target="_blank">ttp://www.faqs.org/docs/kernel_2_4/lki-2.html</a></p>
<p style="text-align: justify;">_EOF_</p>
<p>The post <a href="http://0fx66.com/blog/algoritmo-de-escalonamento-kernel-2-4-versus-2-6/">Algoritmo de escalonamento: Kernel 2.4 Versus 2.6</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/como-modificar-o-mac-address-no-linux/' rel='bookmark' title='Modificando endereço MAC no Linux'>Modificando endereço MAC no Linux</a></li>
<li><a href='http://0fx66.com/blog/permissoes-de-arquivos-unix/' rel='bookmark' title='Permissões de Arquivos UNIX'>Permissões de Arquivos UNIX</a></li>
<li><a href='http://0fx66.com/blog/montando-arquivos-nrg-mdf-img-bin-cue-no-linux/' rel='bookmark' title='Montando arquivos NRG, MDF, IMG, BIN, CUE no Linux'>Montando arquivos NRG, MDF, IMG, BIN, CUE no Linux</a></li>
<li><a href='http://0fx66.com/blog/usando-o-dd/' rel='bookmark' title='Usando o DD'>Usando o DD</a></li>
</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/0fx66?a=XrnBnV-B7Os:P6J_X1rz-J0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=XrnBnV-B7Os:P6J_X1rz-J0:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/0fx66?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=XrnBnV-B7Os:P6J_X1rz-J0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/0fx66?i=XrnBnV-B7Os:P6J_X1rz-J0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=XrnBnV-B7Os:P6J_X1rz-J0:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=XrnBnV-B7Os:P6J_X1rz-J0:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/0fx66?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=XrnBnV-B7Os:P6J_X1rz-J0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/0fx66?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=XrnBnV-B7Os:P6J_X1rz-J0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/0fx66?i=XrnBnV-B7Os:P6J_X1rz-J0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=XrnBnV-B7Os:P6J_X1rz-J0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/0fx66?i=XrnBnV-B7Os:P6J_X1rz-J0:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/0fx66/~4/XrnBnV-B7Os" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://0fx66.com/blog/algoritmo-de-escalonamento-kernel-2-4-versus-2-6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://0fx66.com/blog/algoritmo-de-escalonamento-kernel-2-4-versus-2-6/</feedburner:origLink></item>
		<item>
		<title>Montando arquivos NRG, MDF, IMG, BIN, CUE no Linux</title>
		<link>http://feedproxy.google.com/~r/0fx66/~3/8C_fAjv5Yz4/</link>
		<comments>http://0fx66.com/blog/montando-arquivos-nrg-mdf-img-bin-cue-no-linux/#comments</comments>
		<pubDate>Tue, 26 Feb 2013 15:00:13 +0000</pubDate>
		<dc:creator>VonNaturAustreVe</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[BIN]]></category>
		<category><![CDATA[CUE]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[IMG]]></category>
		<category><![CDATA[MDF]]></category>
		<category><![CDATA[NRG]]></category>

		<guid isPermaLink="false">http://0fx66.com/blog/?p=113</guid>
		<description><![CDATA[<p>Mais uma dica rápida, a um tempo postei uma dica de como montar e criar arquivos iso no Linux, basta usar: # mount -o loop arquivo.iso /diretório/de/montagem Agora vou mostrar como montar arquivos de outro formato como, primeiramente é necessário converter em .iso, por exemplo. Para converter BIN e CUE em ISO, basta usar o [...]</p><p>The post <a href="http://0fx66.com/blog/montando-arquivos-nrg-mdf-img-bin-cue-no-linux/">Montando arquivos NRG, MDF, IMG, BIN, CUE no Linux</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/como-modificar-o-mac-address-no-linux/' rel='bookmark' title='Modificando endereço MAC no Linux'>Modificando endereço MAC no Linux</a></li>
<li><a href='http://0fx66.com/blog/permissoes-de-arquivos-unix/' rel='bookmark' title='Permissões de Arquivos UNIX'>Permissões de Arquivos UNIX</a></li>
<li><a href='http://0fx66.com/blog/algoritmo-de-escalonamento-kernel-2-4-versus-2-6/' rel='bookmark' title='Algoritmo de escalonamento: Kernel 2.4 Versus 2.6'>Algoritmo de escalonamento: Kernel 2.4 Versus 2.6</a></li>
<li><a href='http://0fx66.com/blog/usando-o-dd/' rel='bookmark' title='Usando o DD'>Usando o DD</a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>Mais uma dica rápida, a um tempo postei uma dica de como montar e criar <a title="Link do artigo ensinando a montar e criar arquivos iso no linux" href="http://0fx66.com/blog/linux/criando-e-montando-imagens-iso-no-linux/" target="_blank">arquivos iso</a> no Linux, basta usar:</p>
<pre># mount -o loop arquivo.iso /diretório/de/montagem</pre>
<p>Agora vou mostrar como montar arquivos de outro formato como, primeiramente é necessário converter em .iso, por exemplo. Para converter BIN e CUE em ISO, basta usar o <a href="http://he.fi/bchunk/">bchunk</a>(se tiver ele em sua maquina basta instala, instalação simples com o clássico ./configure&amp;&amp;make&amp;&amp;make install):</p>
<pre>$ bchunk arquivo.bin arquivo.cue novoarquivo.iso</pre>
<p>Para converter NRG para ISO, instale o <a href="http://gregory.kokanosky.free.fr/v4/linux/nrg2iso.en.html">nrg2iso</a> (se tiver ele em sua maquina basta instala, instalação simples com o clássico ./configure&amp;&amp;make&amp;&amp;make install):</p>
<pre>nrg2iso arquivo.nrg novaimagem.iso</pre>
<p>Para converter MDF em ISO, instale o <a href="http://developer.berlios.de/project/showfiles.php?group_id=2545">mdf2iso</a> e execute:</p>
<pre>mdf2iso arquivo.mdf novaimagem.iso</pre>
<p>Para converter IMG para ISO, instale o <a href="http://sourceforge.net/projects/ccd2iso/">ccd2iso</a> e execute:</p>
<pre>ccd2iso imagem.img imagem.iso</pre>
<p>[]&#8216;s</p>
<p>The post <a href="http://0fx66.com/blog/montando-arquivos-nrg-mdf-img-bin-cue-no-linux/">Montando arquivos NRG, MDF, IMG, BIN, CUE no Linux</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/como-modificar-o-mac-address-no-linux/' rel='bookmark' title='Modificando endereço MAC no Linux'>Modificando endereço MAC no Linux</a></li>
<li><a href='http://0fx66.com/blog/permissoes-de-arquivos-unix/' rel='bookmark' title='Permissões de Arquivos UNIX'>Permissões de Arquivos UNIX</a></li>
<li><a href='http://0fx66.com/blog/algoritmo-de-escalonamento-kernel-2-4-versus-2-6/' rel='bookmark' title='Algoritmo de escalonamento: Kernel 2.4 Versus 2.6'>Algoritmo de escalonamento: Kernel 2.4 Versus 2.6</a></li>
<li><a href='http://0fx66.com/blog/usando-o-dd/' rel='bookmark' title='Usando o DD'>Usando o DD</a></li>
</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/0fx66?a=8C_fAjv5Yz4:xHGAcYpRxvA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=8C_fAjv5Yz4:xHGAcYpRxvA:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/0fx66?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=8C_fAjv5Yz4:xHGAcYpRxvA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/0fx66?i=8C_fAjv5Yz4:xHGAcYpRxvA:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=8C_fAjv5Yz4:xHGAcYpRxvA:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=8C_fAjv5Yz4:xHGAcYpRxvA:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/0fx66?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=8C_fAjv5Yz4:xHGAcYpRxvA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/0fx66?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=8C_fAjv5Yz4:xHGAcYpRxvA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/0fx66?i=8C_fAjv5Yz4:xHGAcYpRxvA:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=8C_fAjv5Yz4:xHGAcYpRxvA:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/0fx66?i=8C_fAjv5Yz4:xHGAcYpRxvA:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/0fx66/~4/8C_fAjv5Yz4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://0fx66.com/blog/montando-arquivos-nrg-mdf-img-bin-cue-no-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://0fx66.com/blog/montando-arquivos-nrg-mdf-img-bin-cue-no-linux/</feedburner:origLink></item>
		<item>
		<title>Um pouco mais sobre nmap</title>
		<link>http://feedproxy.google.com/~r/0fx66/~3/y1gJ7I6kJ_4/</link>
		<comments>http://0fx66.com/blog/um-pouco-mais-sobre-nmap/#comments</comments>
		<pubDate>Sun, 24 Feb 2013 16:52:33 +0000</pubDate>
		<dc:creator>VonNaturAustreVe</dc:creator>
				<category><![CDATA[Segurança]]></category>
		<category><![CDATA[nmap]]></category>
		<category><![CDATA[portscanner]]></category>

		<guid isPermaLink="false">http://0fx66.com/blog/?p=109</guid>
		<description><![CDATA[<p>Tradução do artigo Darkc0de forum Autor: d3hydr8 Neste texto são apresentadas diversas dicas para o uso do scanner nmap. Usando nmap para descoberta de host. # nmap -sL 128.230.18.30-35 Host npropane.syr.edu (128.230.18.30) not scanned Host helpeiam1.syr.edu (128.230.18.31) not scanned Host tracker5-18.syr.edu (128.230.18.32) not scanned Host mirage2.syr.edu (128.230.18.33) not scanned Host backup01-18.syr.edu (128.230.18.34) not scanned Host [...]</p><p>The post <a href="http://0fx66.com/blog/um-pouco-mais-sobre-nmap/">Um pouco mais sobre nmap</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/entendendo-a-engenharia-social/' rel='bookmark' title='Entendendo a engenharia social'>Entendendo a engenharia social</a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>Tradução do <strong>artigo</strong> <a href="http://forum.darkc0de.com/index.php?action=vthread&amp;forum=19&amp;topic=1212">Darkc0de forum</a><br />
Autor: d3hydr8</p>
<p>Neste texto são apresentadas diversas dicas para o uso do scanner nmap.</p>
<p><strong>Usando nmap para descoberta de host.</strong></p>
<pre>
# nmap -sL 128.230.18.30-35
Host npropane.syr.edu (128.230.18.30) not scanned
Host helpeiam1.syr.edu (128.230.18.31) not scanned
Host tracker5-18.syr.edu (128.230.18.32) not scanned
Host mirage2.syr.edu (128.230.18.33) not scanned
Host backup01-18.syr.edu (128.230.18.34) not scanned
Host cwis01.syr.edu (128.230.18.35) not scanned
Nmap done: 6 IP addresses (0 hosts up) scanned in 6.628 seconds
</pre>
<p><strong>Utilizando como banner scan, escaneado uma faixa de ips, procurando pela porta 25 rodando um e-mail.</strong></p>
<pre>
# nmap -sV 12.150.145.135-139 -p25 | grep IMail -B 3
Interesting ports on 138.145.static.conninc.com (12.150.145.138):
PORT   STATE SERVICE VERSION
25/tcp open  smtp    IMail NT-ESMTP 6.06 28262-4
--
Interesting ports on 139.145.static.conninc.com (12.150.145.139):
PORT   STATE SERVICE VERSION
25/tcp open  smtp    IMail NT-ESMTP 6.06 28263-5
</pre>
<p>Usando como banner scan, escaneado uma faixa de ips,procurando pela porta 25 rodando um e-mail,e salvando a saída em um arquivo</p>
<pre>
# nmap -sV 12.150.145.137-139 -p25 | grep IMail -B 3 &gt;&gt; nmap.txt
# cat nmap.txt
Interesting ports on 138.145.static.conninc.com (12.150.145.138):
PORT   STATE SERVICE VERSION
25/tcp open  smtp    IMail NT-ESMTP 6.06 29384-6
Interesting ports on 139.145.static.conninc.com (12.150.145.139):
PORT   STATE SERVICE VERSION
25/tcp open  smtp    IMail NT-ESMTP 6.06 29385-7
</pre>
<p><strong>Usando a mais intensiva opção de checagem de versão.</strong></p>
<pre>
# nmap -sV --version-all 128.230.18.35 -p 80
Starting Nmap 4.50 ( http://insecure.org ) at 2008-01-17 22:37 EST
Interesting ports on cwis01.syr.edu (128.230.18.35):
PORT   STATE SERVICE VERSION
80/tcp open  http    Apache httpd
</pre>
<p><strong>Usando nmap como scanner de banners, escaneando uma faixa aleatória de IPs procurando pela porta 21 aberta, rodando o ProFTP.</strong></p>
<pre>
# nmap -sV -iR 1500 -p21 | grep ProFTPD -B 3
Starting Nmap 4.50 ( http://insecure.org ) at 2008-01-17 17:41 EST
Interesting ports on www.buford-thompson.net (161.58.19.143):
PORT   STATE SERVICE VERSION
21/tcp open  ftp     ProFTPD
</pre>
<p><strong>Usando o nmap para descobrir o sistema operacional do host</strong></p>
<pre>
# nmap -PN -O --osscan-limit 38.117.198.214 | grep Running
Running (JUST GUESSING) : ZyXEL ZyNOS (96%)
</pre>
<p><strong>Usando nmap como tracerouter verificando a porta aberta é contando os hops</strong></p>
<pre>
# nmap --traceroute 128.230.18.35
Starting Nmap 4.50 ( http://insecure.org ) at 2008-01-17 22:27 EST
Interesting ports on cwis01.syr.edu (128.230.18.35):
Not shown: 1656 closed ports, 49 filtered ports
PORT      STATE SERVICE
80/tcp    open  http
TRACEROUTE (using port 80/tcp)
HOP RTT   ADDRESS
1   2.89  192.168.1.1
2   12.18 10.114.0.1
3   9.52  172.22.5.13
4   12.33 172.22.5.69
5   10.86 172.22.33.73
6   12.48 172.22.32.106
7   15.21 12.86.87.29
8   41.73 tbr2.attga.ip.att.net (12.122.96.74)
9   41.78 tbr1.dlstx.ip.att.net (12.122.2.89)
10  73.50 ggr3.dlstx.ip.att.net (12.123.16.201)
11  42.87 br2-a3120s2.attga.ip.att.net (192.205.33.206)
12  66.36 66.192.240.226
13  74.74 64-132-176-170.static.twtelecom.net (64.132.176.170)
14  77.85 128.230.61.1
15  74.08 c6509r-srv.syr.edu (128.230.61.58)
16  73.36 cwis01.syr.edu (128.230.18.35)
Nmap done: 1 IP address (1 host up) scanned in 111.295 seconds
</pre>
<p><strong>Usando nmap para testar o estado de uma porta.</strong></p>
<pre>
# nmap --reason 128.230.18.35 -p 21
Starting Nmap 4.50 ( http://insecure.org ) at 2008-01-17 22:31 EST
Interesting ports on cwis01.syr.edu (128.230.18.35):
PORT   STATE    SERVICE REASON
21/tcp filtered ftp     no-response
</pre>
<p>Nmap done: 1 IP address (1 host up) scanned in 1.247 seconds</p>
<p><strong>Usando nmap para MAC address spoofing.</strong></p>
<pre>
# nmap –spoof-mac 08:00:69:02:01:FC -iR 3
Starting Nmap 4.50 ( http://insecure.org ) at 2008-01-17 22:51 EST
Spoofing MAC address 08:00:69:02:01:FC (Silicon Graphics)
Nmap done: 3 IP addresses (0 hosts up) scanned in 3.387 seconds
</pre>
<p>Fazendo uma varredura com IPs forjado,com uma escolha aleatória de alvos. Pode ser usado um script para gerar Ips a serem usados em: <a href="http://www.darkc0de.com/misc/ipgen1.1.py" target="_blank">http://www.darkc0de.com/misc/ipgen1.1.py</a></p>
<pre>
# nmap -D 198.162.1.100,198.162.1.101 -iR 3
Starting Nmap 4.50 ( http://insecure.org ) at 2008-01-17 23:22 EST
Nmap done: 3 IP addresses (0 hosts up) scanned in 3.082 seconds
</pre>
<p>[]’s</p>
<p>The post <a href="http://0fx66.com/blog/um-pouco-mais-sobre-nmap/">Um pouco mais sobre nmap</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/entendendo-a-engenharia-social/' rel='bookmark' title='Entendendo a engenharia social'>Entendendo a engenharia social</a></li>
</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/0fx66?a=y1gJ7I6kJ_4:9k_DcovV0aw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=y1gJ7I6kJ_4:9k_DcovV0aw:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/0fx66?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=y1gJ7I6kJ_4:9k_DcovV0aw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/0fx66?i=y1gJ7I6kJ_4:9k_DcovV0aw:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=y1gJ7I6kJ_4:9k_DcovV0aw:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=y1gJ7I6kJ_4:9k_DcovV0aw:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/0fx66?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=y1gJ7I6kJ_4:9k_DcovV0aw:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/0fx66?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=y1gJ7I6kJ_4:9k_DcovV0aw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/0fx66?i=y1gJ7I6kJ_4:9k_DcovV0aw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=y1gJ7I6kJ_4:9k_DcovV0aw:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/0fx66?i=y1gJ7I6kJ_4:9k_DcovV0aw:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/0fx66/~4/y1gJ7I6kJ_4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://0fx66.com/blog/um-pouco-mais-sobre-nmap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://0fx66.com/blog/um-pouco-mais-sobre-nmap/</feedburner:origLink></item>
		<item>
		<title>CISC vs RISC</title>
		<link>http://feedproxy.google.com/~r/0fx66/~3/fhmkiHbgBms/</link>
		<comments>http://0fx66.com/blog/cisc-vs-risc/#comments</comments>
		<pubDate>Fri, 22 Feb 2013 15:00:50 +0000</pubDate>
		<dc:creator>VonNaturAustreVe</dc:creator>
				<category><![CDATA[Arquitetura de Computadores]]></category>
		<category><![CDATA[Arquitetura]]></category>
		<category><![CDATA[CISC]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[RISC]]></category>

		<guid isPermaLink="false">http://0fx66.com/blog/?p=104</guid>
		<description><![CDATA[<p>CISC vs RISC Sem duvidas este é um dos temas mais interessantes quando tratamos de processadores. A arquitetura de processador descreve o processador que foi usado em um computador. Grande parte dos computadores vêm com identificação e literatura descrevendo o processador que contém dentro de si, arquitetura CISC e RISC. A CISC (em inglês: Complex [...]</p><p>The post <a href="http://0fx66.com/blog/cisc-vs-risc/">CISC vs RISC</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/o-entendo-o-funcionamento-dos-chipsets/' rel='bookmark' title='O Entendo o funcionamento dos Chipsets.'>O Entendo o funcionamento dos Chipsets.</a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<h1 style="text-align: justify;">CISC vs RISC</h1>
<p style="text-align: justify;">Sem duvidas este é um dos temas mais interessantes quando tratamos de <a title="Artigo sobre a origem e o funcionamento dos processadores." href="http://0fx66.com/blog/hardware/processadores-origens-e-funcionamento/" target="_blank">processadores</a>. A<strong> </strong>arquitetura de processador descreve o processador que foi usado em um computador. Grande parte dos computadores vêm com identificação e literatura descrevendo o processador que contém dentro de si, arquitetura CISC e RISC.</p>
<ul style="text-align: justify;">
<li>A CISC (em inglês: <em>Complex Instruction Set Computing</em>, Computador com um Conjunto Complexo de Instruções), usada em processadores Intel e AMD; suporta mais instruções no entanto, com isso, mais lenta fica a execução delas.</li>
<li>A RISC (em inglês: <em>Reduced Instruction Set Computing</em>, Computador com um Conjunto Reduzido de Instruções) usada em processadores PowerPC (da Apple, Motorola e IBM) e SPARC (SUN); suporta menos instruções, e com isso executa com mais rapidez o conjunto de instruções que são combinadas.</li>
</ul>
<p style="text-align: justify;">Um processador CISC (Complex Instruction Set Computer), é capaz de executar várias centenas de instruções complexas, sendo extremamente versátil. Exemplos de processadores CISC são os 386 e os 486. No começo da década de 80, a tendência era construir chips com conjuntos de instruções cada vez mais complexos, mas alguns fabricantes resolveram seguir o caminho oposto, criando o padrão RISC (Reduced Instruction Set Computer ).</p>
<p style="text-align: justify;">Ao contrário dos complexos CISC, os processadores RISC são capazes de executar apenas algumas poucas instruções simples. Justamente por isso, os chips baseados nesta arquitetura são mais simples e muito mais baratos. Outra vantagem dos processadores RISC, é que por terem um menor número de circuitos internos, podem trabalhar com clocks mais altos. Um processador RISC é capaz de executar instruções muito mais rapidamente.</p>
<p style="text-align: justify;">Assim, em conjunto com um software adequado, estes processadores são capazes de desempenhar todas as funções de um processador CISC, compensando as suas limitações com uma velocidade maior de operação. Atualmente, vemos processadores híbridos, que são essencialmente</p>
<p style="text-align: justify;">Processadores CISC, porém que possuem internamente núcleos RISC. Assim, a parte CISC do processador pode cuidar das instruções mais complexas, enquanto que o núcleo RISC pode cuidar das mais simples, nas quais é mais rápido. Parece que o futuro nos reserva uma fusão destas duas tecnologias. Um bom exemplo de processador híbrido é o Pentium Pro.</p>
<h2 style="text-align: justify;"><strong>Arquitetura CISC</strong></h2>
<p style="text-align: justify;">CISC (Complex Instruction Set Computer, ou, em uma tradução literal, &#8220;Computador com um Conjunto Complexo de Instruções&#8221;): é um processador capaz de executar centenas de instruções complexas diferentes sendo, assim, extremamente versátil. Exemplos de processadores CISC são os 386 e os 486 da Intel.</p>
<div id="attachment_132" class="wp-caption alignleft" style="width: 202px"><a href="http://0fx66.com/blog/wp-content/uploads/2013/02/Intel80486DX_b.jpg"><img class="size-full wp-image-132" alt="Intel80486" src="http://0fx66.com/blog/wp-content/uploads/2013/02/Intel80486DX_b.jpg" width="192" height="192" /></a><p class="wp-caption-text">Intel 80486</p></div>
<p style="text-align: justify;">Os processadores baseados na computação de conjunto de instruções complexas contêm uma micro programação, ou seja, um conjunto de códigos de instruções que são gravados no processador, permitindo-lhe receber as instruções dos programas e executá-las, utilizando as instruções contidas na sua micro programação. Seria como quebrar estas instruções, já em baixo nível, em diversas instruções mais próximas do hardware (as instruções contidas no microcódigo do processador). Como característica marcante esta arquitetura contém um conjunto grande de instruções, a maioria deles em um elevado grau de complexidade.</p>
<p style="text-align: justify;">Examinando do ponto de vista um pouco mais prático, a vantagem da arquitetura CISC é que já temos muitas das instruções guardadas no próprio processador, o que facilita o trabalho dos programadores de linguagem de máquina; disponibilizando, assim, praticamente todas as instruções que serão usadas em seus programas. Os processadores CISC têm a vantagem de reduzir o tamanho do código executável por já possuírem muito do código comum em vários programas, em forma de uma única instrução.</p>
<p style="text-align: justify;">Esta arquitetura processa e trata grandes e complexas instruções, nomeadamente operações de multiplicação e divisão mas também executa e/ou descodifica grandes quantidades de operações, parecendo possuir outro processador pelo facto da maioria dos algoritmos já se encontrarem no processador sendo o seu tempo de restabelecimento praticamente nulo.</p>
<p style="text-align: justify;">A CISC é implementada e guardada em micro-código no processador, sendo difícil modificar a lógica de tratamento de instruções. Esta arquitetura suporta operações do tipo &#8220;a=a+b&#8221; descrita por &#8220;add a,b&#8221;, ou seja podem simplesmente utilizar <strong>dois operandos </strong>para uma única instrução, sendo um deles fonte e destino (acumulador) e permite um ou mais operadores em memória para a realização das instruções. Com isto se comprova a necessidade de abranger um elevado leque de modelos de endereçamento, com acesso direto à memória e com apontadores para as variáveis em memória, armazenados eles próprios (ponteiros) em células de memória.</p>
<p style="text-align: justify;">A complexidade que envolve estes modelos compromete o produto a nível de comercialização e desenvolvimento, limitando ou diminuindo o aumento a frequência de relógio não só pelo tempo de acesso às memórias como devido ao reduzido número de registos.</p>
<p style="text-align: justify;">Porém, do ponto de vista da performance, os CISC&#8217;s têm algumas desvantagens em relação aos <strong>RISC&#8217;s</strong>, entre elas a impossibilidade de se alterar alguma instrução composta para se melhorar a performance. O código equivalente às instruções compostas do CISC pode ser escrito nos RISC&#8217;s da forma desejada, usando um conjunto de instruções simples, da maneira que mais se adequar. Sendo assim, existe uma disputa entre tamanho do código X desempenho.</p>
<p style="text-align: justify;">A existência de um grande número de registros nas arquiteturas RISC, aliado à evolução da tecnologia dos compiladores dos últimos anos (em especial, na geração de código), vem permitindo representar a maioria das variáveis escalares diretamente em registro, não havendo necessidade de recorrer com tanta frequência à memória. Esta organização não foi contudo economicamente viável nas gerações anteriores de microprocessadores, com destaque para a família da Motorola (<strong>M680x0</strong>) e, ainda mais antiga, a família da Intel (<strong>ix86</strong>). Estes processadores dispunham de um menor nº de registros e, consequentemente, uma diferente organização que suportasse eficientemente diversos mecanismos de acesso à memória.</p>
<p style="text-align: justify;">No caso da família <strong>M680x0</strong>, o programador tinha disponível dois bancos de 8 registros genéricos de 32 bits: um para dados (D) e outro para apontadores para a memória (A), suportando este último banco um variado leque de modos de endereçamento à memória. Apenas um dos registros (A7) é usado implicitamente em certas operações de manuseamento da stack.</p>
<p style="text-align: justify;">A família Intel é mais complexa por não ter variadamente registros de uso genérico. A arquitetura de base dispõe efetivamente de 4 registros para conter operandos aritméticos (A, B, C e D), mais 4 para trabalhar com apontadores para a memória (BP, SP, DI e SI) e outros 4 para lidar com uma memória segmentada (CS, DS, SS e ES; a única maneira de uma arquitetura de 16 bits poder aceder a mais de 64K células de memória). Cada um destes registros não pode ser considerado de uso genérico, pois quase todos eles são usados implicitamente (isto é, sem o programador explicitar o seu uso) em várias instruções (por exemplo, os registros A e D funcionam de acumuladores em operações de multiplicação e divisão, enquanto o registro C é usado implicitamente como variável de contagem em instruções de controle de ciclos). A situação complica-se ainda mais com a variação da dimensão dos registros na mesma família (de registros de 16 bits no i286 para registros de 32 bits no i386), pois o formato de instrução foi concebido para distinguir apenas operandos de 8 e de 16 bits, e um Bit bastava; para garantir compatibilidade ao longo de toda a arquitetura, os novos processadores têm de distinguir operandos de 8, 16 e 32 bits, usando o mesmo formato de instrução.</p>
<h2 style="text-align: justify;"><strong>Arquitetura RISC</strong></h2>
<p style="text-align: justify;"><strong></strong>Reduced Instruction Set Computer ou Computador com um Conjunto Reduzido de Instruções (RISC), é uma linha de arquitetura de computadores que favorece um conjunto simples e pequeno de instruções que levam aproximadamente a mesma quantidade de tempo para serem executadas. A maioria dos microprocessadores modernos são RISCs, por exemplo DEC Alpha, SPARC, MIPS, e PowerPC. O tipo de microprocessador mais largamente usado em desktops, o x86, é mais CISC do que RISC, embora chips mais novos traduzam instruções x86 baseadas em arquitetura CISC em formas baseadas em arquitetura RISC mais simples, utilizando prioridade de execução.</p>
<div id="attachment_133" class="wp-caption alignleft" style="width: 295px"><a href="http://0fx66.com/blog/wp-content/uploads/2013/02/Sun_UltraSPARCII.jpg"><img class="size-full wp-image-133" alt="processador sparc" src="http://0fx66.com/blog/wp-content/uploads/2013/02/Sun_UltraSPARCII.jpg" width="285" height="320" /></a><p class="wp-caption-text">SPARC usam arquitetura risc</p></div>
<p style="text-align: justify;">Os processadores baseados na computação de conjunto de instruções reduzido não tem micro-programação, as instruções são executadas diretamente pelo hardware. Como característica, esta arquitetura, além de não ter microcódigo, tem o conjunto de instruções reduzido, bem como baixo nível de complexidade.</p>
<p style="text-align: justify;">A ideia foi inspirada pela descoberta de que muitas das características incluídas na arquitetura tradicional de processadores para ganho de desempenho foram ignoradas pelos programas que foram executados neles. Mas o desempenho do processador em relação à memória que ele acessava era crescente. Isto resultou num número de técnicas para otimização do processo dentro do processador, enquanto ao mesmo tempo tentando reduzir o número total de acessos à memória.</p>
<p style="text-align: justify;">Esta arquitetura suporta operações do tipo &#8220;a=b+c&#8221; descrita por &#8220;add a,b,c&#8221;, ou seja, podem especificar três operandos para uma única instrução, mas exclusivamente se estes forem registos, originando em situação contrária (operadores em memória) um atraso provocado pela introdução de ações extra no processador que se reflete no funcionamento encadeado (piplining).</p>
<p style="text-align: justify;">Para garantir rapidez e eficiência do sistema, pretende-se que os operadores sejam acedidos á velocidade de funcionamento do processador, logo se justifica a utilização dos registos, e para que a representação de todas as variáveis para processamento sejam apresentadas como registos, tem que se garantir um número elevado destes, assegurando-se atualmente a maioria das variáveis escalares pela utilização de 32 registos genéricos que caracterizam a maioria da tecnologia dos compiladores atuais.</p>
<p style="text-align: justify;">Na representação de variáveis estruturadas, a sua atribuição não se apresenta de forma tão linear, a título de exemplo, um inteiro nesta arquitetura ocupa 32 bits, os reais 32 ou 64 bits (consoante a precisão) e cada célula de memória contem apenas 8 bits, logo cada variável ocupa várias células, portanto uma operação básica entre duas variáveis estruturadas implicava várias operações entre registos (efetuadas parcialmente, e implicavam elevado número de operações e registos), para isso utilizam um indicador (.align x) para alinhar a informação apenas em localizações de memória que começam por endereço par para 16 bits (x=1) ou então múltiplos de 4 para 32 bits (x=2).</p>
<p style="text-align: justify;">O comprimento das instruções em arquiteturas RISC tiveram que ser fixados devido a adoção de tecnologias como o pipilining e a maior facilidade e simplicidade e consequente redução do tempo de execução, estando o dimensionamento determinado por 32 bits para permitir especificar os três operandos.</p>
<p style="text-align: justify;">Características comuns à maior parte dos processadores RISC:</p>
<ul style="text-align: justify;">
<li>número de instruções limitado;</li>
<li>codificação de instruções em uma palavra de tamanho fixo;</li>
<li>execução sem micro-código;</li>
<li>altas taxas de execução (próximas a 1 instrução/ciclo)</li>
<li>uso intenso de pipelines;</li>
<li>poucos modos de endereçamento;</li>
<li>operações envolvendo a memória principal restritas a transferências (LOAD, STORE);</li>
<li>operações lógicas e aritméticas entre registradores, tipicamente com instruções de três endereços.</li>
</ul>
<p style="text-align: justify;"><strong>Instruções complexas: </strong>apenas incluir quando o benefício no desempenho compensar a degradação de velocidade;</p>
<p style="text-align: justify;"><strong>Uso de transistores:</strong> área de VLSI pode ser utilizada para novas instruções ou para aumentar número de registradores, incluir memória cache no chip do processador, adicionar unidades de execução;</p>
<p style="text-align: justify;"><strong>Uso de microcódigo:</strong> deve ser evitado, pois o overhead associado ao tempo de acesso a microinstruções na memória de controle passou a ser considerável a partir do momento em que a tecnologia da memória principal passou de núcleos de ferrite para dispositivos semicondutores;</p>
<p style="text-align: justify;"><strong>Papel do compilador:</strong> deve substituir eficientemente as operações complexas eliminadas do hardware. Para atingir este objetivo, otimização é fundamental; projeto de compiladores realizado juntamente com o projeto dos processadores.</p>
<p style="text-align: justify;"><strong>RISC</strong> é também a arquitetura adotada para os <strong>processadores dos videogames modernos</strong>, que proporcionam um hardware extremamente dedicado somente à execução do jogo, tornando-o muito mais rápido em relação a micro computadores com mais recursos, embora com processador x86.</p>
<h2 style="text-align: justify;"><strong>RISC versus CISC</strong></h2>
<p style="text-align: justify;">Todos os processadores dispõem de instruções de salto &#8220;de ida e volta&#8221;, normalmente designados de instruções de chamada de sub-rotinas: nestas, para além de se alterar o conteúdo do registro PC como qualquer instrução de salto, primeiro guarda-se o endereço de instrução que segue a instrução de salto ( e que se encontra no PC); nas arquiteturas CISC este valor é normalmente guardado na stack; nas arquiteturas RISC esse valor é normalmente guardado num registro.</p>
<p style="text-align: justify;"><strong>Conjunto de instruções de um processador RISC:</strong> o conjunto de instruções que cada processador suporta é bastante variado. Contudo é possível identificar e caracterizar grupos de instruções que se encontram presentes em qualquer arquitetura.</p>
<p style="text-align: justify;">Para transferência de informação: integram este grupo as instruções que transferem informação entre registros e a memória (load/store), entre registros (simulado no Assembler do MIPS, e implementando com uma soma com o registro 0), diretamente entre posições de memória (suportado por exemplo, no M680x0, mas não disponível em qualquer arquitetura RISC), ou entre registros e a stack, com incremento/decremento automático do sp (disponível em qualquer arquitetura CISC, mas incomum em arquiteturas RISC);</p>
<p style="text-align: justify;">Operações aritméticas, lógicas, &#8230;: soma, subtração e multiplicação com inteiros e fp, e operações lógicas AND, OR, NOT, ShiftLeft/Right são as mais comuns; alguns processadores suportam ainda a divisão, quer diretamente por hardware, quer por microprogramação.</p>
<p style="text-align: justify;"><strong>Acesso a operandos em memória em CISC e RISC: </strong>Uma das consequências do fato das arquiteturas CISC disporem de um menor número de registros é a alocação das variáveis escalares, em regra, a posições de memória, enquanto que nas arquiteturas RISC, a regra era a alocação a registros. Atendendo ao modelo de programação estruturada tão em voga nos anos 70, ao fato da maioria das variáveis escalares serem locais a um dado procedimento, e à necessidade do modelo de programação ter de suportar o aninhamento e recursividade de procedimentos, as arquiteturas CISC necessitavam de um leque rico de modos de endereçamento à memória, para reduzir o gap semântico entre uma HLL e a linguagem máquina.</p>
<p style="text-align: justify;">Resume-se aqui, as principais diferenças entre as arquiteturas CISC e RISC, nas facilidades de acesso a operandos que se encontram em memória:</p>
<p style="text-align: justify;">CISC: grande riqueza na especificação de modos de endereçamento; exemplo do i86: modo absoluto; por registro indireto –(R), &#8211; (SP), (SP)+; por registro base –(Rb)+desloc8,16,32, (Rb)+(R), (Rb)+desloc8,16,32; com acessos indiretos à memória, isto é, com apontadores para as variáveis sem memória armazenados em células de memória.</p>
<p style="text-align: justify;">RISC: apenas em operações load/store e apenas 1 ou 2 modos; exemplo do MIPS: apenas (R)+desloc16.</p>
<p style="text-align: justify;"><strong>Operações lógicas e aritméticas em CISC e RISC</strong>: Duas grandes diferenças se fazem notar entre estes 2 modelos: na localização dos operandos neste tipo de operações, e o nº de operandos que é possível especificar em cada instrução.</p>
<p style="text-align: justify;"><strong>CISC: </strong>1 ou mais operandos em memória (máx 1 no i86 e M68K); nem sempre se especificam 3 operandos (máx 2 no i86 eM68K).</p>
<p style="text-align: justify;"><strong>RISC:</strong> operandos sempre em registros; 3 operandos especificados (1 dest, 2 fontes).</p>
<p style="text-align: justify;">Como pode ser visto no gráfico acima, a quantidade de etapas pela qual a instrução nos processadores de arquitetura CISC e maior que as RISC, causando o efeito de demora para as instruções serem processadas.</p>
<p style="text-align: justify;">Com o aparecimento de linguagens como <strong>FORTRAN, Algol, Simula, Pascal e C</strong> em 1950-1970 ajudou ao desenvolvimento de metodologias estruturas de programas, a construções lingüísticas de mais alto nível, e a maior quantidade de pessoas a escreverem programas, exigiam suporte eficiente e adequado, para poupar o trabalho de geração de código, pelos compiladores daquelas linguagens. Esta pressão viria a influenciar decisivamente a maioria dos processadores, ao ponto, de exemplo ilustrativo, chegar a haver um CPU que suportava diretamente o tipo de dados &#8216;lista ligada&#8217;, oferecendo instruções máquina para &#8216;inserir&#8217; e &#8216;remover&#8217; elementos de uma lista em memória. <strong>Instruções de grande complexidade e um grande número de instruções, são os dois principais aspectos que caracterizam um modelo CISC (Complex Instruction Set Computer)</strong>. Os processadores atuais incorporados no computador pessoal (PC &#8211; Personal Computer) seguem esta filosofia.</p>
<h2 style="text-align: justify;"><strong>Arquitetura Híbrida</strong></h2>
<p style="text-align: justify;">Apesar de por questões de Marketing, muitos fabricantes ainda venderem seus chips, como sendo &#8220;Processadores RISC&#8221;, não existe praticamente nenhum processador atualmente que siga estritamente uma das duas filosofias. Tanto processadores da família x86, como o Pentium II, Pentium III e AMD Athlon, quanto processadores supostamente RISC, como o MIPS R10000 e o HP PA-8000, ou mesmo o G4, utilizado nos Macintoshs misturam características das duas arquiteturas, por simples questão de performance. Por que ficar de um lado ou de outro, se é possível juntar o melhor dos dois mundos? A última coisa que os fabricantes de processadores são é teimosos, sempre que aparece uma solução melhor, a antiga e abandonada.</p>
<div id="attachment_134" class="wp-caption alignleft" style="width: 341px"><a href="http://0fx66.com/blog/wp-content/uploads/2013/02/1352159362_415565307_1-Fotos-de-Processador-Athlon-64-3200.jpg"><img class="size-full wp-image-134" alt="AMD Athlon 64" src="http://0fx66.com/blog/wp-content/uploads/2013/02/1352159362_415565307_1-Fotos-de-Processador-Athlon-64-3200.jpg" width="331" height="300" /></a><p class="wp-caption-text">Um hibrido</p></div>
<p style="text-align: justify;">Examinando de um ponto de vista um pouco mais prático, a vantagem de uma arquitetura CISC é que já temos muitas das instruções guardadas no próprio processador, o que facilita o trabalho dos programadores, que já dispõe de praticamente todas as instruções que serão usadas em seus programas. No caso de um chip estritamente RISC, o programador já teria um pouco mais de trabalho, pois como disporia apenas de instruções simples, teria sempre que combinar várias instruções sempre que precisasse executar alguma tarefa mais complexa. Seria mais ou menos como se você tivesse duas pessoas, uma utilizando uma calculadora comum, e outra utilizando uma calculadora cientifica. Enquanto estivessem sendo resolvidos apenas cálculos simples, de soma, subtração, etc. quem estivesse com a calculadora simples poderia até se sair melhor, mas ao executar cálculos mais complicados, a pessoa com a calculadora científica disporia de mais recursos.</p>
<p style="text-align: justify;">A ideia de construção de um processador híbrido é bastante interessante, pois faz com que finalmente PCs possam ter um desempenho realmente astronômica. A Intel, porém, errou feio em um detalhe importante do projeto do Pentium Pro: o seu decodificador CISC foi desenvolvido basicamente para trabalhar com código de 32 bits &#8211; ou seja, com sistemas operacionais como o Windows NT, OS/2 e Netware. (Nota: o Windows 95 é um sistema operacional híbrido; apesar da Microsoft declarar que se trata de um &#8220;sistema operacional de 32 bits&#8221;, isto não é totalmente verdade. Grande parte do seu código ainda é de 16 bits de modo a tornar-se compatível com aplicativos escritos para o Windows 3.x).</p>
<p style="text-align: justify;">Isto quer dizer que, se tivermos um Pentium-200 e um Pentium Pro-200, um Windows 3.11 será mais rápido no Pentium e não no Pentium Pro, por mais incrível que possa parecer.</p>
<p style="text-align: justify;">Conclusão: Não vale a pena adquirir um micro baseado no Pentium Pro se você for utilizar MS-DOS, Windows 3.x ou Windows 95. Processadores de outros fabricantes &#8211; em especial o 6&#215;86 da Cyrix e o 5K86 da AMD &#8211; também possuem arquitetura híbrida CISC/RISC, com a vantagem de possuírem um decodificador otimizado para código tanto de 32 bits quanto de 16 bits. Nos chips atuais, que são na verdade misturas das duas arquiteturas, juntamos as duas coisas. Internamente, o processador processa apenas instruções simples. Estas instruções internas, variam de processador para processador, são como uma luva, que se adapta ao projeto do chip.</p>
<p style="text-align: justify;">As instruções internas de um K6 são diferentes das de um Pentium por exemplo. Sobre estas instruções internas, temos um circuito decodificador, que converte as instruções complexas utilizadas pelos programas em várias instruções simples que podem ser entendidas pelo processador. Estas instruções complexas sim, são iguais em todos os processadores usados em micros PC. é isso que permite que um Athlon e um Pentium III sejam compatíveis entre sí.</p>
<p style="text-align: justify;">O conjunto básico de instruções usadas em micros PC é chamado de conjunto x86. Este conjunto é composto por um total de 187 instruções, que são as utilizadas por todos os programas. Além deste conjunto principal, alguns processadores trazem também instruções alternativas, que permitem aos programas executar algumas tarefas mais rapidamente do que seria possível usando as instruções x86 padrão. Alguns exemplos de conjuntos alternativos de instruções são o MMX (usado apartir do Pentium MMX), o 3D-NOW! (usado pelos processadores da AMD, a partir do K6-2), e o SSE (suportado pelo Pentium III).</p>
<p style="text-align: justify;"><strong>Referencias:</strong><br />
<a href="https://secure.wikimedia.org/wikipedia/pt/wiki/Processadores" target="_blank">https://secure.wikimedia.org/wikipedia/pt/wiki/Processadores</a><br />
<a href="http://br.geocities.com/thiago_ferauche/aulas/arquitetura/CISCxRISC.doc" target="_blank">http://br.geocities.com/thiago_ferauche/aulas/arquitetura/CISCxRISC.doc</a><br />
<a href="http://alumni.ipt.pt/~brunobt/CISC_versus_RISC.htm#tabela" target="_blank">http://alumni.ipt.pt/~brunobt/CISC_versus_RISC.htm#tabela</a><br />
<a href="http://www.clubedohardware.com.br/printpage/857" target="_blank">http://www.clubedohardware.com.br/printpage/857</a></p>
<p style="text-align: justify;"><strong>Leitura complementar:</strong></p>
<p style="text-align: justify;"><a href="http://www.4shared.com/file/226765303/e5326018/Cisc_e_Risc.html">http://www.4shared.com/file/226765303/e5326018/Cisc_e_Risc.html</a><br />
<a href="http://www.4shared.com/file/226765412/8e61774a/Plataformas_CISC_e_RISC.html">http://www.4shared.com/file/226765412/8e61774a/Plataformas_CISC_e_RISC.html</a><br />
<a href="http://www.guiadohardware.net/artigos/risc-cisc/">http://www.guiadohardware.net/artigos/risc-cisc/</a></p>
<p style="text-align: justify;"><object id="afiliados2" width="468" height="60" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" align="middle" bgcolor="#ffffff"><param name="quality" value="high" /><param name="src" value="http://static.kinghost.net/swf/1.swf?nomedosite=0fx66.com&amp;corbg=745BB7&amp;cortxt=ffffff&amp;desconto=10&amp;mes=24&amp;codigo=46Z648ZS9L7KP&amp;" /><embed id="afiliados2" width="468" height="60" type="application/x-shockwave-flash" src="http://static.kinghost.net/swf/1.swf?nomedosite=0fx66.com&amp;corbg=745BB7&amp;cortxt=ffffff&amp;desconto=10&amp;mes=24&amp;codigo=46Z648ZS9L7KP&amp;" quality="high" align="middle" bgcolor="#ffffff" /> </object></p>
<p style="text-align: justify;">[]&#8216;s</p>
<p>The post <a href="http://0fx66.com/blog/cisc-vs-risc/">CISC vs RISC</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/o-entendo-o-funcionamento-dos-chipsets/' rel='bookmark' title='O Entendo o funcionamento dos Chipsets.'>O Entendo o funcionamento dos Chipsets.</a></li>
</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/0fx66?a=fhmkiHbgBms:DBd-0tEBiD0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=fhmkiHbgBms:DBd-0tEBiD0:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/0fx66?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=fhmkiHbgBms:DBd-0tEBiD0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/0fx66?i=fhmkiHbgBms:DBd-0tEBiD0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=fhmkiHbgBms:DBd-0tEBiD0:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=fhmkiHbgBms:DBd-0tEBiD0:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/0fx66?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=fhmkiHbgBms:DBd-0tEBiD0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/0fx66?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=fhmkiHbgBms:DBd-0tEBiD0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/0fx66?i=fhmkiHbgBms:DBd-0tEBiD0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=fhmkiHbgBms:DBd-0tEBiD0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/0fx66?i=fhmkiHbgBms:DBd-0tEBiD0:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/0fx66/~4/fhmkiHbgBms" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://0fx66.com/blog/cisc-vs-risc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://0fx66.com/blog/cisc-vs-risc/</feedburner:origLink></item>
		<item>
		<title>Entendendo a estrutura de diretórios no linux</title>
		<link>http://feedproxy.google.com/~r/0fx66/~3/OZnJGa_-JXU/</link>
		<comments>http://0fx66.com/blog/entendendo-a-estrutura-de-diretorios-no-linux/#comments</comments>
		<pubDate>Thu, 21 Feb 2013 15:00:26 +0000</pubDate>
		<dc:creator>VonNaturAustreVe</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://0fx66.com/blog/?p=98</guid>
		<description><![CDATA[<p>Entendendo a estrutura de diretórios no linux Em um sistema Linux temos uma estrutura de diretórios um pouco mais complexa. Os arquivos ali dispostos, a princípio, parecem estar jogados aleatoriamente nos diversos diretórios existentes. Mas, felizmente, há uma certa ordem é uma lógica fazendo com que cada diretório do sistema tenha uma finalidade específica. Antes [...]</p><p>The post <a href="http://0fx66.com/blog/entendendo-a-estrutura-de-diretorios-no-linux/">Entendendo a estrutura de diretórios no linux</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss yarpp-related-none'>

Nenhum post relacionado.
</div>
]]></description>
				<content:encoded><![CDATA[<h1 style="text-align: justify;">Entendendo a estrutura de diretórios no linux</h1>
<p style="text-align: justify;"><a href="http://0fx66.com/blog/wp-content/uploads/2013/02/linux2__99337_zoom.png"><img class="wp-image-107 alignright" alt="Imagem do tux" src="http://0fx66.com/blog/wp-content/uploads/2013/02/linux2__99337_zoom.png" width="113" height="170" /></a>Em um sistema Linux temos uma estrutura de diretórios um pouco mais complexa. Os arquivos ali dispostos, a princípio, parecem estar jogados aleatoriamente nos diversos diretórios existentes. Mas, felizmente, há uma certa ordem é uma lógica fazendo com que cada diretório do sistema tenha uma finalidade específica. Antes de irmos entender os diretórios precisamo dar uma pincelada e algumas informações uteis,que serão bem uteis em breve e também ajuda a entender o motivo dos diretórios(caso você esteja querendo ser um desenvolvedor ou e um).</p>
<h2 style="text-align: justify;"><strong>Diretórios </strong></h2>
<p style="text-align: justify;">Primeira coisa com que você precisa se habituar é que no Linux os discos e partições não aparecem necessariamente como unidades diferentes, como o C:, D:, E: do Windows. Tudo faz parte de um único diretório, chamado <strong>diretório raiz(root) ou simplesmente “/”.</strong><br />
Dentro deste diretório temos não apenas todos arquivos e as partições de disco, mas também o CD-ROM, drive de disquete e outros dispositivos, formando a estrutura que você vê no gerenciador de arquivos.</p>
<h2 style="text-align: justify;">Estrutura e hierarquia dos diretórios</h2>
<p style="text-align: justify;"><strong>/bin -</strong> é o diretório que contém o mínimo necessário para funcionar e poder ser manuseado pelo administrador. Serão necessárias ferramentas que se encontram em outros diretórios para que a máquina fique operacional. A maioria dos programas possui o seu arquivo executável neste diretório.</p>
<p style="text-align: justify;"><strong>/boot</strong> – contém informações para o gerenciador de inicialização do sistema. É aqui que normalmente fica o arquivo contendo o kernel da máquina e informações para o carregador do sistema operacional.</p>
<p style="text-align: justify;"><span style="font-weight: bold;">/cdrom</span> – Não é propriamente um diretório, mas sim um link para o diretório /media/cdrom (ponto de montagem do dispositivo leitor de CD/DVD da máquina;</p>
<p style="text-align: justify;"><strong>/dev – </strong> é o local onde ficam armazenadas as referências aos dispositivos presentes na máquina, para o controle destes dispositivos. Esse diretório contém apontadores para, por exemplo, o drive de disquetes, os discos da máquina, terminais virtuais, portas de acesso seriais e paralelas, etc. Os controladores são automaticamente criados durante a instalação do sistema e posteriormente podem ser criados através do comando MAKEDEV.</p>
<ul style="text-align: justify;">
<li><strong>devfs </strong> – contém todos arquivos-dispositivos, inclusive para dispositivos que não existem no computador e irá ocupar espaço em disco.</li>
<li><strong>udev</strong> – utilizado a partir do kernel 2.6.12, não ocupa espaço em disco e contém somente os arquivos-dispositivos dos devices presentes na máquina.</li>
</ul>
<p style="text-align: justify;"><strong>/etc</strong> – é um dos mais importantes diretórios da máquina. Nele ficam a maioria dos arquivos de configuração e manipulação dos serviços essenciais ao sistema, a maioria dos arquivos de configuração de acesso a rede e de comunicação, arquivos de configuração do Sistema de Janelas X, arquivos de configuração do idioma do sistema, de atualizações, enfim, de muitas funcionalidades da máquina.</p>
<p style="text-align: justify;"><strong>/home</strong> – contém os diretórios pessoais dos usuários e suas configurações(funciona como a pasta Meu Documentos,no windows).</p>
<p style="text-align: justify;"><strong>/lib</strong> – é o diretório onde ficam as bibliotecas básicas do sistema. Elas são compartilhadas por diversos programas, principalmente os que se encontram no diretório raiz.</p>
<p style="text-align: justify;"><strong>/mnt</strong> – é o diretório utilizado para o acesso a dispositivos de mídia, como disquetes e CD-ROM. Ele é utilizado como ponto de montagem para a maioria destes dispositivos.</p>
<p style="text-align: justify;"><strong>/proc</strong>- Não é bem um diretório. Trata-se de um filesystem virtual, cheio de arquivos virtuais, que na verdade são apenas referências dinâmicas dos procedures (procedimentos) do Kernel Linux, que são alteradas constantemente durante a utilização do sistema; fornece informações sobre o kernel e sobre os processos que estão rodando no momento, além de informações sobre a utilização de alguns dispositivos. Alguns parâmetros do kernel podem ser alterados diretamente nesses arquivos, fazendo com que as modificações passem a valer imediatamente. Esse diretório não ocupa espaço nenhum em disco e as informações ali presentes são geradas apenas quando solicitadas.</p>
<p style="text-align: justify;"><span style="font-weight: bold;">/root</span> &#8211; Esse é o diretório do superusuário do sistema (pode chamar de administrador se quiser, mas não perto de mim, pois me lembra do termo usado por outro sisteminha (semi)operacional proprietário do qual não gosto muito ;-)). O único usuário do sistema com permissão para realizar qualquer modificação no sistema. Aí você me pergunta: “Mas gmazk, se é uma pasta de usuário, porque não está dentro de /home ?”. E eu explico: conforme você vai ver na minha próxima publicação (a respeito de planejamento do particionamento da maquina e instalação do sistema), é conveniente durante a instalação do sistema, determinar que o diretório /home seja montado em uma partição separada da partição principal (onde estão os demais diretórios do sistema). Se o diretório root estivesse nessa partição separada (dentro de /home) e ocorresse com essa partição, o que costumo chamar de um “momento PUTZ… ferrou!”, a pasta /root também estaria inacessível, e como você já sabe, certas coisas só podem ser feitas no sistema pelo usuário root… Então você não poderia, por exemplo, inicializar o sistema para realizar uma recuperação nessa partição;</p>
<p style="text-align: justify;"><span style="font-weight: bold;">/opt</span> – Se verificar o conteúdo deste diretório, MUITO provavelmente ele estará vazio. A ideia inicial deste diretório era armazenar programas que não fizessem parte da distribuição GNU/Linux instalada em seu sistema, porém, esse método de separação quase não é utilizado; Ele pode ser útil por questões de espaço.</p>
<p style="text-align: justify;"><strong>/sbin</strong> contém ferramentas de interesse do superusuário e que geralmente são usadas por serviços básicos da máquina. Ficam nesse diretório programas como os responsáveis pela carga de módulos do kernel, ativação e interrupção das interfaces de rede, manutenção dos sistemas de arquivos e outras atividades.</p>
<p style="text-align: justify;"><span style="font-weight: bold;">/srv</span> – É um diretório que sofre do mesmo problema de esquecimento e solidão que o diretório opt, pois não é utilizado nunca… A ideia inicial era usá-lo para armazenar dados que seriam disponibilizados por qualquer programa servidor que você utilizasse no sistema, mas foi outra ideia que “não pegou”;</p>
<p style="text-align: justify;"><span style="font-weight: bold;">/sys</span> – O nome vem do sysfs (sys filesystem). É o diretório usado pelo Kernel Linux para manter dados atualizados sobre os dispositivos de hardware da máquina (não confunda, não é a mesma coisa que /dev, já que no /dev estão arquivos que servem de ligação com os dispositivos, e não informações sobre eles);</p>
<p style="text-align: justify;"><strong>/tmp</strong> serve como repositório para arquivos temporários, sendo utilizado para programas que são executados após a ativação do sistema, ou seja, este diretório serve como espaço extra para vários programas e aplicações.</p>
<p style="text-align: justify;"><strong>/var </strong>- Contém arquivos que são modificados com o decorrer do uso do sistema (e-mail , temporários, filas de impressão, manuais).</p>
<p style="text-align: justify;"><strong>Dentro do /var encontramos:</strong></p>
<ul style="text-align: justify;">
<li><strong>/var/lib </strong>- Bibliotecas que mudam enquanto o sistema está rodando.</li>
<li><strong>/var/local</strong> – Arquivos variáveis de programas que estão rodando.</li>
<li><strong>/var/lock</strong> – Travas para indicar que um programa está utilizando um determinado dispositivo.</li>
<li><strong>/var/log</strong> – Arquivos de log do sistema (erros, logins, etc..)</li>
<li><strong>/var/run</strong> – Arquivos importantes ao sistema úteis até o próximo boot (atualizações de softwares e kernel).</li>
<li><strong>/var/spool</strong> – Diretório de filas de impressão, e-mail e outros</li>
<li><strong>/var/tmp</strong> – Arquivos temporários dos programas</li>
<li><strong>/var/catman</strong> – Um cache para manuais que são formatados na hora de serem utilizados.</li>
</ul>
<p style="text-align: justify;"><strong>O diretório /usr</strong></p>
<p style="text-align: justify;">Este e um diretório interessante que preciso explicar melhor.O que tem nele?Contém os arquivos das ferramentas e dos aplicativos do usuário.</p>
<ul style="text-align: justify;">
<li><strong>/usr bin</strong> :Contém ferramentas e aplicativos de cada usuário.Ao criar uma nova conta de usuário,o sistema cria automaticamente uma pasta /usr/bin</li>
<li><strong>/usr dict </strong>:Diretório que são armazenados os dicionários(o nome dict deriva do inglês dictionary) e as listas de termos do usuário.</li>
<li><strong>/usr/doc</strong> :Esse Diretório contem a documentação do sistema em uso.</li>
<li><strong>/usr/info</strong> :Nesse Diretório encontramos os arquivos para o sistema GNU info,baseado em hipertextos</li>
<li><strong>/usr/lib</strong> :Assim como o Diretório /bin da raíz contem as bibliotecas para execução das ferramentas,dessa vez,porem,trata-se dos componentes das ferramentas,dessa vez,porem,trata-se dos componentes das ferramentas que se encontram no Diretório /usr/bin</li>
<li><strong>/usr/local </strong>:Essa pasta contem arquivos locais,ou seja,exclusivos para cada sistema(ou aplicativo),que incluem documentação(/usr/local/doc)e os programas em si(/usr/local/bin).</li>
<li><strong>/usr/man</strong> :diretório que agrupa os manuais que podem ser lidos com o comando man.</li>
<li><strong>/usr/share</strong> :Contém arquivos e componentes compartilhados por vários aplicativos.Nesse Diretório,encontramos diversos subdiretórios com arquivos de ajuda,ícones,etc.</li>
<li><strong>/usr/src </strong>: Esse diretório contem o codigo-fonte(source)dos softwares disponíveis no sistema. Esses sources podem ser visualizados e alterados livremente.</li>
<li><strong>/usr/tmp</strong> :E o diretório em que são colocados os arquivos temporários gerados pelo usuário ativo.</li>
</ul>
<p style="text-align: justify;"><strong>Comandos do Sistema de Arquivos</strong></p>
<p style="text-align: justify;">Aqui estão os comandos para lidar com o sistema de arquivos (HDs, drives e partições de rede).Para mais informações sobre o comando use o</p>
<p style="text-align: justify;"><code>$man<br />
</code></p>
<ul style="text-align: justify;">
<li><strong>badblocks</strong> – Utilizado para encontrar defeitos físicos no HD.</li>
<li><strong>cfdisk</strong> – Similar ao fdisk só que com uma interface melhorada.</li>
<li><strong>df</strong> – Mostra o espaço livre no disco.</li>
<li><strong>dosfsck</strong> -Verifica e repara sistemas FAT do DOS.</li>
<li><strong>du</strong> – Mostra o espaço que ocupa um diretório e os arquivos internos.</li>
<li><strong>dump</strong> – Usado para fazer o backup de um sistema ext2. O complemento deste comando é o restore.</li>
<li><strong>dumpe2fs</strong> – Faz o backup de blocos do HD e grupos.</li>
<li><strong>e2fsck</strong> – Verifica um volume ext2 em busca de erros.</li>
<li><strong>e2label</strong> – Muda o nome de uma partição ext2.</li>
<li><strong>fdisk</strong> – Usado para criar, editar e apagar partições no HD.</li>
<li><strong>fdformat</strong> – Formata um disquete.</li>
<li><strong>mount</strong> – Usado para “montar” um sistema de arquivos. O complemento deste comando é o umount.</li>
<li><strong>restore</strong> – Usado para restaurar um sistema ext2.</li>
<li><strong>umount</strong> – Desmonta o sistema de arquivos. O complemento é o comando mount.</li>
<li><strong>cdrecord</strong> – Grava CDs.</li>
<li><strong>cdparanoia</strong> – Grava CDs de áudio.</li>
</ul>
<p style="text-align: justify;"><strong>Manipulação de arquivos e diretórios</strong></p>
<ul style="text-align: justify;">
<li><strong>cd</strong> – Muda para um diretório. Se você não especificar nada ele muda para seu diretório HOME.</li>
<li><strong>chmod</strong> – Muda as permissões para acesso aos arquivos e diretórios (Escrita, Leitura, etc..)</li>
<li><strong>chown</strong> – Muda o proprietário e grupo de um arquivo ou diretório.</li>
<li><strong>chgrp</strong> – Muda o grupo de um arquivo ou diretório.</li>
<li><strong>cp</strong> – Copia os arquivos de um diretório/pasta para outro diretório/pasta.</li>
<li><strong>dir</strong> – Lista o conteúdo de um diretório (preferir o comando “ls”).</li>
<li><strong>find</strong> – Procura arquivos com determinadas características na árvore de diretórios.</li>
<li><strong>ln</strong> – Cria um link simbólico para um arquivo.</li>
<li><strong>ls</strong> – Lista os arquivos de um diretório.</li>
<li><strong>mc</strong> – Midinght Commander. Um gerenciador de arquivos completo para o console.</li>
<li><strong>mkdir</strong> – Cria um diretório.</li>
<li><strong>mv</strong> – Move ou renomeia um arquivo.</li>
<li><strong>rm</strong> – Exclui arquivos.</li>
<li><strong>rmdir</strong> – Exclui um diretório vazio.</li>
<li><strong>vdir</strong> – Lista o conteúdo de um diretório.</li>
<li><strong>wheris</strong> – Localiza o executável, código fonte e manual de um comando.</li>
</ul>
<p style="text-align: justify;"><a title="Artigo sobre &quot;A historia e os principais comandos do linux&quot;." href="http://0fx66.com/blog/linux/historia-e-principais-comando-do-linux/" target="_blank">Neste artigo</a> encontra mais informações sobre os comandos descritos acima.</p>
<p style="text-align: justify;"><strong>Referencias:</strong><br />
<span style="color: #0000ff;"><span style="text-decoration: underline;"><a href="http://www.guiadohardware.net/dicas/linux-entendendo-arvore-diretorios.html" target="_blank">http://www.guiadohardware.net/dicas/linux-entendendo-arvore-diretorios.html</a></span></span><br />
<span style="color: #0000ff;"><span style="text-decoration: underline;"><a href="http://www.danbp.org/linuxcom.html" target="_blank">http://www.danbp.org/linuxcom.html</a></span></span><br />
<span style="color: #0000ff;"><span style="text-decoration: underline;"><a href="http://www.conectiva.com/doc/livros/online/10.0/servidor/pt_BR/ch02.html" target="_blank">http://www.conectiva.com/doc/livros/online/10.0/servidor/pt_BR/ch02.html</a></span></span></p>
<p>The post <a href="http://0fx66.com/blog/entendendo-a-estrutura-de-diretorios-no-linux/">Entendendo a estrutura de diretórios no linux</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss yarpp-related-none'>
<p>Nenhum post relacionado.</p>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/0fx66?a=OZnJGa_-JXU:JlAeCAJHJSU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=OZnJGa_-JXU:JlAeCAJHJSU:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/0fx66?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=OZnJGa_-JXU:JlAeCAJHJSU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/0fx66?i=OZnJGa_-JXU:JlAeCAJHJSU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=OZnJGa_-JXU:JlAeCAJHJSU:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=OZnJGa_-JXU:JlAeCAJHJSU:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/0fx66?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=OZnJGa_-JXU:JlAeCAJHJSU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/0fx66?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=OZnJGa_-JXU:JlAeCAJHJSU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/0fx66?i=OZnJGa_-JXU:JlAeCAJHJSU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=OZnJGa_-JXU:JlAeCAJHJSU:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/0fx66?i=OZnJGa_-JXU:JlAeCAJHJSU:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/0fx66/~4/OZnJGa_-JXU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://0fx66.com/blog/entendendo-a-estrutura-de-diretorios-no-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://0fx66.com/blog/entendendo-a-estrutura-de-diretorios-no-linux/</feedburner:origLink></item>
		<item>
		<title>Permissões de Arquivos UNIX</title>
		<link>http://feedproxy.google.com/~r/0fx66/~3/-fxbPJMyoWo/</link>
		<comments>http://0fx66.com/blog/permissoes-de-arquivos-unix/#comments</comments>
		<pubDate>Wed, 20 Feb 2013 15:00:50 +0000</pubDate>
		<dc:creator>VonNaturAustreVe</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[FreeBSD]]></category>
		<category><![CDATA[Segurança]]></category>
		<category><![CDATA[Unix]]></category>

		<guid isPermaLink="false">http://0fx66.com/blog/?p=89</guid>
		<description><![CDATA[<p>Permissões de Arquivos UNIX .----------------------------. &#124; Permissões de Arquivos UNIX `-----------------------------------------------, &#124; Por MELEU atualizado em 08/2007 &#124; `-----------------------------------------------------------------------------' - = &#60; Í N D I C E &#62; = - 0. Introdução 1. Identificações 2. Permissões de Arquivos 2.1. Permissões Básicas 2.2. Permissões Especiais 3. Sobre Alguns Comandos 3.1. chmod 3.2. ls 3.3. find [...]</p><p>The post <a href="http://0fx66.com/blog/permissoes-de-arquivos-unix/">Permissões de Arquivos UNIX</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/como-modificar-o-mac-address-no-linux/' rel='bookmark' title='Modificando endereço MAC no Linux'>Modificando endereço MAC no Linux</a></li>
<li><a href='http://0fx66.com/blog/montando-arquivos-nrg-mdf-img-bin-cue-no-linux/' rel='bookmark' title='Montando arquivos NRG, MDF, IMG, BIN, CUE no Linux'>Montando arquivos NRG, MDF, IMG, BIN, CUE no Linux</a></li>
<li><a href='http://0fx66.com/blog/algoritmo-de-escalonamento-kernel-2-4-versus-2-6/' rel='bookmark' title='Algoritmo de escalonamento: Kernel 2.4 Versus 2.6'>Algoritmo de escalonamento: Kernel 2.4 Versus 2.6</a></li>
<li><a href='http://0fx66.com/blog/usando-o-dd/' rel='bookmark' title='Usando o DD'>Usando o DD</a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<h1>Permissões de Arquivos UNIX </h1>
<pre>.----------------------------.
| Permissões de Arquivos UNIX `-----------------------------------------------,
| Por MELEU     atualizado em 08/2007 |
`-----------------------------------------------------------------------------'</pre>
<p>- = &lt; Í N D I C E  &gt; = -</p>
<p><strong><br />
0. Introdução<br />
1. Identificações<br />
2. Permissões de Arquivos<br />
2.1. Permissões Básicas<br />
2.2. Permissões Especiais<br />
3. Sobre Alguns Comandos<br />
3.1. chmod<br />
3.2. ls<br />
3.3. find<br />
3.4. test<br />
3.5. umask<br />
3.6. chattr<br />
3.7. Outros Comandos<br />
4. Usando C<br />
4.1. Informações sobre Arquivos<br />
4.2. Mudando Permissões<br />
5. Esquemas Úteis<br />
6. Referências<br />
7. Considerações Finais<br />
Apêndice. Arquivos de Dispositivo</strong></p>
<h2>0. Introdução</h2>
<p>Como vocês podem ver isso é assunto bem NewBie mesmo, arrisco dizer que é um assunto de Wannabe Newbie. Só estou escrevendo sobre isto pois quando precisei saber detalhes sobre permissões de arquivos não encontrei nada em português que me ajudasse muito (confesso que não procurei muito :P ). E pode ser que esse texto venha a ajudar alguém numa consulta rápida sobre determinada permissão&#8230; Se você já é aquele fuçador tarimbado pode ser que você não encontre nenhuma novidade na parte que descrevo as permissões, porém a parte que envolve C pode ser de alguma utilidade. ;) E se você é elite, com certeza já sabe o conteúdo daqui e não vai querer perder seu precioso tempo&#8230;</p>
<p>Agradecimentos: Nash (por tudo), module (ainda vou morar na sua casa), eSc2(vulgo Escape Duplo), xf (se pedir por favor eu até faço :P ), Blind_Bard (e nossa partida de D&amp;D?!), Hekodangews (quer aprender, saia do IRC), klogd (pela companhia nas altas madrugadas :) ), hts (pela dica do pulltheplug),Zarro (simplesmente por ter vontade de aprender e correr atrás), Cs0 (meleca é você seu bundão! :P ) a minha namorada (por não reclamar de eu ficar horas na frente do PC e por não me decepcionar debaixo dos lençóis :-) ), ao pessoal da extinta mail list unsekurity (cuja participação foi fundamental para a realização deste texto, me tiraram algumas dúvidas), a um cara chamado Ademar  (por ter dado uma lida no texto e ter me dado uns toques legais), e a todos que ajudam a comunidade fuçadora (e que eu esqueci de mencionar) e não deixam que ela suma!</p>
<h2>1. Identificações</h2>
<p>Cada usuário cadastrado no sistema possui dois números relacionados ao seu login. Um é o UID (User IDentification) e o outro é o GID (Group IDentification). Isso é porque o UNIX não considera o nome do usuário para determinar suas permissões, ele só trabalha com números, neste caso o UID e o GID ou em outros casos o EUID (Efective User IDentification). Você pode ver os ID&#8217;s de um usuário digitando (adivinha!) &#8220;id&#8221; no prompt.</p>
<pre>/* -=-=-= exemplo =-=-=- */
root@meleu:~# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy)
/* -=-=-= exemplo =-=-=- */
</pre>
<p>Você deve ter reparado que o UID do root é 0. Qualquer pessoa (não interessa o seu username) que tiver UID 0 terá PERMISSÃO TOTAL no sistema, ou seja, nível de super-usuário. Sempre que eu falar neste texto &#8220;nível de super-usuário&#8221; eu estou querendo dizer &#8220;UID igual a 0&#8243;. Cada username cadastrado no sistema precisa de um, e somente um, UID. Dá pra ver também que o root faz parte de vários grupos. Logo concluímos que um usuário pode ter vários GID&#8217;s, quer dizer, um usuário pode pertencer a vários grupos. Além destes dois há também o EUID. Este é usado com arquivos que contenham permissões especiais (explicadas no tópico 2.2). Você vai entender sobre EUID quando ler sobre arquivos com SUID, mais adiante.</p>
<h2>2. Permissões de Arquivos</h2>
<p>Primeiro devemos saber que todas as informações sobre os arquivos vêm de uma estrutura chamada inode. O inode contém informações sobre o UID e GID do arquivo, as permissões do arquivo, o tipo do arquivo e o timestamp do arquivo (informações sobre a última modificação, último acesso, etc).Para ver o número do inode de um arquivo basta um &#8220;ls -i&#8221;. Também devemos saber que as permissões possuem 3 &#8220;níveis&#8221;:</p>
<p>+ Proprietário: só pode ser exatamente 1, o dono do arquivo;<br />
+ Grupo: engloba todos os membros de um determinado grupo;<br />
+ Outros: se refere a qualquer pessoa que não seja o proprietário e que não pertença ao grupo.</p>
<p>O proprietário de determinado arquivo/diretório é responsável pelas suas permissões de acesso. Basta um &#8220;ls -l&#8221; para ver as permissões, o dono do arquivo e o grupo. Vamos a um exemplo:</p>
<pre>
meleu:~$ ls -l
total 28
drwxr-xr-x   5 meleu    users        4096 Jul 25 10:26 GNUstep/
drwxrwx---   2 meleu    staff        4096 Dec 22 06:58 myprogs/
-rw-r--r--   1 meleu    users        4163 Nov 16 06:43 rfc1244.txt
drwxr-xr-x   2 meleu    staff        4096 Dec 28 16:09 mylibs/
-rw-------   1 meleu    users        1074 Dec 12 04:37 anotações.txt
drwxr-x---   6 meleu    users        4096 Dec 28 16:12 textos/
</pre>
<p>Note que todos os arquivos pertencem a &#8220;meleu&#8221; e uns arquivos pertencem ao grupo &#8220;users&#8221; enquanto outros pertencem ao grupo &#8220;staff&#8221;. As permissões são mostradas de fato depois do primeiro carácter de cada linha, e sempre na sequência &#8220;rwx&#8221;. O esquema é o seguinte, os 3 primeiros caracteres após o primeiro descrevem as permissões do proprietário do arquivo; os 3 seguintes dizem respeito ao grupo; e os 3 últimos são referentes aos outros (que não seja o proprietário e nem pertença ao grupo). Note que em determinados itens aparece um &#8216;d&#8217; antes das permissões, isso significa que isto é um diretório (outros tipos são explicados no tópico 3.2.).</p>
<h3>2.1. Permissões Básicas</h3>
<p>Vamos falar sobre as permissões básicas. São elas o &#8216;r&#8217;, &#8216;w&#8217; e &#8216;x&#8217;. Tais permissões possuem significados diferentes quando aplicadas a arquivos e a diretórios.</p>
<ul>
<li><strong> r &#8211; Read (Leitura):</strong></li>
</ul>
<p><strong>+ Arquivo:</strong> significa que se pode ler o arquivo (através de um &#8220;cat&#8221; por exemplo.)</p>
<p><strong>+ Diretório: </strong>significa que se pode ver o conteúdo do diretório (através de &#8220;ls&#8221; por exemplo). Porém observe a explicação sobre a      permissão de execução mais abaixo.</p>
<ul>
<li><strong>w &#8211; Write (escrita, gravação)</strong></li>
</ul>
<p><strong>+ Arquivo:</strong> significa que se pode adicionar conteúdo e alterar um arquivo.</p>
<p><strong>+ Diretório:</strong> significa que se pode criar e/ou apagar qualquer, repito QUALQUER, arquivo e/ou diretório que esteja dentro deste, mesmo que não se tenha permissão alguma para o arquivo/diretório a ser apagado. Observe a explicação sobre permissão de execução abaixo e &#8220;sticky bit&#8221; em 2.2.</p>
<p><strong> Dica:</strong> NUNCA deixe o seu diretório home com esta permissão para outros (também conhecida como world-writable).</p>
<ul>
<li><strong>x &#8211; eXecute (execução)</strong></li>
</ul>
<p><strong>+ Arquivo:</strong> pode-se executar o programa ou shell script (se um arquivo texto não for um script e tiver esta permissão e você executar vai dar um monte de &#8220;command not found&#8221;).</p>
<p><strong>+ Diretório:</strong> significa que pode-se &#8220;entrar&#8221; no diretório. Esta permissão é importante quando atribuída a um diretório. De nada adianta uma permissão &#8216;w&#8217; se não tiver &#8216;x&#8217;. Já no caso do &#8216;r&#8217; sem &#8216;x&#8217; ainda podemos ver o conteúdo do diretório, porém com algumas limitações. Mas na hora de executar um &#8220;find&#8221; (tópico 3.3.) precisamos ter &#8216;r&#8217; e &#8216;x&#8217;.Veja o exemplo abaixo, observe as permissões do diretório &#8220;pratica&#8221; (o comando &#8220;id&#8221; que aparece no começo é apenas para mostrar &#8220;quem sou eu&#8221;):</p>
<p>(ATENÇÃO: não confunda *o usuário* &#8220;hack&#8221; com *o grupo* &#8220;hack&#8221;, os nomes são iguais mas são coisas diferentes!)</p>
<pre>
meleu:/home/hack$ id
uid=1000(meleu) gid=100(users) groups=100(users)
meleu:/home/hack$ ls -l
total 20
drwxr-xr-x   5 hack     hack         4096 Jul 25 10:26 GNUstep/
drwxrwx---   2 hack     hack         4096 Dec 22 06:58 ferramentas/
drwxr-xrw-   2 hack     nogroup      4096 Dec 29 00:21 pratica/
drwxr-xr-x   2 hack     users        4096 Dec 28 16:09 progs/
drwxr-x---   6 hack     users        4096 Dec 29 00:51 textos/
meleu:/home/hack$ ls -l pratica/
/bin/ls: pratica/script.sh: Permission denied
/bin/ls: pratica/arquivo: Permission denied
/bin/ls: pratica/dir_teste: Permission denied
/bin/ls: pratica/mais_um_arquivo_teste: Permission denied
/bin/ls: pratica/arquivo_teste: Permission denied
total 0
meleu:/home/hack$ touch pratica/once_more_test
touch: pratica/once_more_test: Permission denied
</pre>
<p>Observe que eu consegui ler o conteúdo do diretório pratica, mas não consigo ver as permissões destes arquivos. E nas duas ultimas linhas do exemplo note que eu tenho não consigo criar um arquivo dentro de pratica, mesmo tendo permissão de escrita. Vamos usar o &#8220;progs&#8221; da saída do comando &#8220;ls -l&#8221; acima para uma ilustração,vamos ver o que significa cada bit:</p>
<pre>drwxr-xr-x   2 hack     users        4096 Dec 28 16:09 progs/</pre>
<p>1: &#8216;d&#8217; &#8211;&gt; diz que é um diretório;<br />
2: &#8216;r&#8217; &#8211;&gt; mostra que o dono deste diretório pode ver o seu conteúdo;<br />
3: &#8216;w&#8217; &#8211;&gt; mostra que o dono deste diretório pode criar e/ou apagar<br />
arquivos/diretórios que estejam dentro dele;<br />
4: &#8216;x&#8217; &#8211;&gt; mostra que o dono deste diretório pode entrar nele (através do<br />
comando cd)<br />
5: &#8216;r&#8217; &#8211;&gt; mostra que qualquer integrante do grupo &#8220;users&#8221; pode ver o conteúdo<br />
do diretório;<br />
6: &#8216;-&#8217; &#8211;&gt; mostra que integrantes do grupo &#8220;users&#8221; não podem criar e/ou apagar<br />
arquivos/diretórios que estejam no diretório &#8220;progs&#8221;;<br />
7: &#8216;x&#8217; &#8211;&gt; mostra que integrantes do grupo &#8220;users&#8221; podem &#8220;entrar&#8221; no diretório;<br />
8: &#8216;r&#8217; &#8211;&gt; qualquer pessoa que não seja o dono do arquivo e nem pertença ao<br />
grupo &#8220;users&#8221; pode ver o conteúdo do diretório;<br />
9: &#8216;-&#8217; &#8211;&gt; &#8220;outros&#8221; não podem criar e/ou apagar arquivos/diretórios que<br />
estejam no diretório &#8220;progs&#8221;;<br />
10: &#8216;x&#8217; &#8211;&gt; &#8220;outros&#8221; podem &#8220;entrar&#8221; no diretório.</p>
<p>É importante perceber que &#8220;outros&#8221; não significa &#8220;qualquer pessoa logada no sistema&#8221;. Como já foi dito, &#8220;outros&#8221; se refere a qualquer um que NÃO SEJA o dono do arquivo E NÃO PERTENÇA ao grupo que o arquivo/diretório está atribuído. Estou enfatizando isso porque eu já me confundi uma vez por isso. Vamos a um exemplo:</p>
<pre>
meleu:/home/hack$ id
uid=1000(meleu) gid=100(users) groups=100(users),102(hack)
meleu:/home/hack$ ls -l
total 20
drwxr-xr-x   5 hack     hack         4096 Jul 25 10:26 GNUstep/
drwxrwx---   2 hack     hack         4096 Dec 22 06:58 ferramentas/
drwxr-xrw-   3 hack     nogroup      4096 Dec 29 01:22 pratica/
drwx---r-x   2 hack     hack         4096 Dec 28 16:09 progs/
drwxr-x---   6 hack     hack         4096 Dec 29 00:51 textos/
meleu:/home/hack$ cd progs/
bash: cd: progs/: Permission denied
</pre>
<p>Observe pela saída do &#8220;id&#8221; que eu (o usuário meleu) faço parte do grupo hack, note também que o grupo hack não possui nenhuma permissão no diretório &#8220;progs&#8221; e o resto do mundo possui permissão &#8216;r&#8217; e &#8216;x&#8217;. Isso quer dizer que as permissões são verificadas da esquerda pra direita, na sequência proprietário -&gt; grupo -&gt; outros. O algoritmo desta verificação é mais ou menos assim:</p>
<pre>
Começo
Se usuário é dono do arquivo Então
permissões do dono do arquivo é atribuída ao usuário;
Senão
Se usuário pertence ao grupo do arquivo Então
permissões do grupo do arquivo é atribuída ao usuário;
Senão
permissões de outros é atribuída ao usuário;
Fim.
</pre>
<h3>2.2. Permissões Especiais</h3>
<p>Foram estas permissões que motivaram minha pesquisa e a escrita deste simples texto, vamos a elas.    Antes é importante que se saiba que para qualquer um destes atributos ter efeito é necessário permissão de execução. Para o Sticky bit é necessário &#8216;x&#8217; para outros; para o SGID bit é necessário &#8216;x&#8217; para o grupo; e para SUID é necessário &#8216;x&#8217; para o proprietário.</p>
<p><strong> * t &#8211; Save Text Attribute (vulgo &#8220;sticky bit&#8221;)</strong></p>
<p><strong>+ Arquivos: </strong>A manpage do chmod explica: &#8220;Em sistemas Unix antigos, o sticky bit fazia os arquivos executáveis serem acumulados na swap. Esta característica não funciona em sistemas modernos de Memória Virtual, e o kernel do Linux ignora o sticky bit atribuído a arquivos. Outros kernels podem usar o sticky bit em arquivos para propósitos definidos pelo sistema. Em alguns sistemas só o superusuário pode atribuir o sticky bit em arquivos&#8221;. Resumindo: na maioria dos sistemas, sticky bit em arquivos serve para NADA.</p>
<p><strong>+ Diretórios:</strong> significa que neste diretório o usuário pode apagar apenas arquivos que ele seja o proprietário. Lembra da descrição da permissão &#8220;w&#8221; em diretórios? Quem tem permissão &#8220;w&#8221; em diretório pode apagar qualquer arquivo dentro dele. Porém se o sticky bit também tiver sido atribuído ao diretório, o usuário só pode apagar arquivos dele.Geralmente esta permissão é usada em diretórios &#8220;world-writable&#8221; (por exemplo /tmp) para que não seja permitido que qualquer usuário apague arquivos que não lhe pertençam. Experimente um &#8220;ls -ld /tmp&#8221; e observe que o último caractere da lista de permissões é um &#8220;t&#8221;.</p>
<p><strong>* s &#8211; Set ID Attribute</strong><br />
Este atributo possui significados diferentes quando está relacionado ao proprietário do arquivo e quando está relacionado ao grupo, assim como também possui significados diferentes para arquivos e diretórios, em relação aos arquivos você deve saber que este atributo NÃO FAZ EFEITO em shell scripts (já ouvi rumores de que antigamente funcionava, mas desde que me tenho como fuçador [1999] nunca vi isto). Em todos os casos ele funciona como um &#8220;tempero&#8221; para a permissão de execução.</p>
<p><strong>+ SUID Attribute (relacionado ao dono do arquivo)</strong><br />
<strong>- Arquivos:</strong> SUID significa Set-User-ID, ou seja ele atribui ao EUID (Efective User ID) do usuário o UID do proprietário do arquivo quando o arquivo é executado e somente durante a execução do mesmo (logo, o arquivo precisa ser executável). Isso quer dizer que durante a execução do arquivo você tem acesso a tudo que o dono do arquivo tem.Mas lembre-se SOMENTE DURANTE A EXECUÇÃO DO ARQUIVO. No tópico 5. nós temos vários exemplos de esquemas deste famigerado atributo.<br />
<strong>- Diretórios: SEM EFEITO.</strong></p>
<p><strong>+ SGID Attribute (relacionado ao grupo)</strong></p>
<p><strong>- Arquivos:</strong> SGID significa Set-Group-ID, ele atribui ao EGID (Efective Group ID) do usuário o ID do grupo do arquivo quando o arquivo é executado e (assim como no SUID) somente durante<br />
execução do mesmo.</p>
<p><strong>- Diretórios:</strong> se forem criados arquivos dentro deste diretório o grupo do arquivo será o mesmo grupo do diretório. Não entendeu? Vamos a um exemplo:</p>
<pre>
meleu:~$ id
uid=1000(meleu) gid=100(users) groups=100(users),102(hack)
meleu:~$ mkdir teste
meleu:~$ ls -l
drwxr-x---   2 meleu    users        4096 Jan  2 09:49 teste/
meleu:~$ chgrp hack teste        #diretório teste eh do grupo hack
meleu:~$ chmod g+s teste/        #atribuindo SGID ao diretório teste
meleu:~$ ls -l
drwxr-s---   2 meleu    hack         4096 Jan  3 12:44 teste
meleu:~$ cd teste/
meleu:~/teste$ touch arquivo.teste
meleu:~/teste$ ls -l
total 0
-rw-r-----   1 meleu    hack            0 Jan  2 09:50 arquivo.teste
</pre>
<p>Acho que você percebeu que o arquivo.teste pertence ao grupo hack. :) Isso é tudo que eu sei sobre permissões de arquivos. Mas até agora vimos muita teoria. Vamos para um estudo mais pratico.</p>
<h2> 3. Sobre Alguns Comandos</h2>
<p>Aqui coloco algumas informações sobre alguns comandos que estão relacionados a permissões de arquivos.</p>
<h3>3.1. chmod</h3>
<p>O chmod serve para que você possa mudar as permissões de um arquivo, para fazer isso você deve ser o dono do arquivo (ou o root). Bom&#8230; Não vou escrever sobre como usar o comando, isso você deve ver na man page, vou escrever sobre um &#8220;método&#8221; diferente de como usá-lo. Se ligue na seguinte relação:</p>
<pre>
x = 1
w = 2
r = 4
</pre>
<p>Você pode usar esta relação para alterar as permissões de arquivos. Preste atenção na seguinte linha de comando:</p>
<pre> chmod 644 arquivo.txt
|||
dono do arquivo &lt; -'|`-&gt; outros
`-&gt; grupo</pre>
<p>Cada dígito diz respeito a um nível. Repare que no comando acima eu usei um 6, isso quer dizer que eu estou dando permissão de gravação (w = 2) e de leitura (r = 4) (4 + 2 = 6). Com o comando acima o &#8220;arquivo.txt&#8221; terá as seguintes permissões: -rw-r&#8211;r&#8211; . Veja esta tabela:</p>
<pre>
,-------,-----------,---------,
| octal | permissão | cálculo |
|-------|-----------|---------|
|   0   |    ---    |    0    |
|   1   |    --x    |    1    |
|   2   |    -w-    |    2    |
|   3   |    -wx    |   2+1   |
|   4   |    r--    |    4    |
|   5   |    r-x    |   4+1   |
|   6   |    rw-    |   4+2   |
|   7   |    rwx    |  4+2+1  |
'-------'-----------'---------'</pre>
<p>OBS.: esta tabela só é valida para as permissões &#8220;básicas&#8221; (rwx).</p>
<p>Lembre-se de que cada dígito diz respeito a um nível! Logo no comando dado como ilustração acima &#8220;chmod 644 arquivo.txt&#8221; está sendo setado ao dono do arquivo a permissão de leitura e escrita e ao grupo e outros apenas a permissão de leitura. Agora em relação as permissões &#8220;especiais&#8221;. Observe a relação abaixo:</p>
<pre> Sticky Bit = 1
SGID = 2
SUID = 4
</pre>
<p>Veja um exemplo de um comando e a explicação de o que estamos fazendo:</p>
<pre> chmod 4755 programa
||||
SUID bit '--s------' &lt; --'||`--&gt; permissão 'r-x' para outros
|`--&gt; permissão 'r-x' para o grupo
permissão 'rwx' para o dono &lt; --'</pre>
<p>Após este comando o &#8220;programa&#8221; terá as seguintes permissões: -rwsr-xr-x. O dígito relacionado às permissões especiais precisa ser o primeiro de quatro. Isso porque o chmod considera dígitos ausentes como 0. Exemplo:</p>
<pre> $ chmod 4 arquivo.txt</pre>
<p>é equivalente a</p>
<pre> $ chmod 0004 arquivo.txt</pre>
<p>Outra tabelinha de lambuja:</p>
<pre>
,-------,-----------,---------,
| octal | permissão | cálculo |
|-------|-----------|---------|
|   0   | --------- |    0    |
|   1   | --------t |    1    |
|   2   | -----s--- |    2    |
|   3   | -----s--t |   2+1   |
|   4   | --s------ |    4    |
|   5   | --s-----t |   4+1   |
|   6   | --s--s--- |   4+2   |
|   7   | --s--s--t |  4+2+1  |
'-------'-----------'---------'
</pre>
<p>Lembre-se: Os valores desta tabela são válidos apenas para o primeiro dígito dos quatro presentes no comando chmod. Relembrando que esta é apenas uma maneira de usar o chmod, uma lida na man page irá revelar outras maneiras, algumas até mais simples.</p>
<h3>3.2. ls</h3>
<p>Essa parte é só pra você entender o que a saída de um &#8220;ls&#8221; significa. Vamos repetir aqui o primeiro exemplo dado neste texto:</p>
<pre>
meleu:~$ ls -l
total 28
drwxr-xr-x   5 meleu    users        4096 Jul 25 10:26 GNUstep/
drwxrwx---   2 meleu    staff        4096 Dec 22 06:58 myprogs/
-rw-r--r--   1 meleu    users        4163 Nov 16 06:43 rfc1244.txt
drwxr-xr-x   2 meleu    staff        4096 Dec 28 16:09 mylibs/
-rw-------   1 meleu    users        1074 Dec 12 04:37 anotações.txt
drwxr-x---   6 meleu    users        4096 Dec 28 16:12 textos/
</pre>
<p>Como já foi dito, este &#8216;d&#8217; no primeiro bit de algumas linhas significa diretório. Agora vamos a uma tabela com todas as possibilidades.</p>
<pre>
,-----------,---------------------------,
| Caractere |       Significado         |
|-----------|---------------------------|
|     -     |     arquivo regular       |
|     b     |   dispositivo de blocos   |
|     c     | dispositivo de caracteres |
|     d     |        diretório          |
|     l     |      link simbólico       |
|     p     |          FIFO             |
|     s     |         socket            |
'-----------'---------------------------'
</pre>
<p>/* Só umas informações a mais&#8230; ;)<br />
Os dispositivos de blocos são periféricos (como um disco rígido, por exemplo) onde os dados são lidos e gravados, no próprio dispositivo como blocos (no disco rígido geralmente o bloco é de 1024 bytes). Nos dispositivos de caracteres os dados são lidos ou gravados em sequência e a I/O pode ser feita como bytes separados (um terminal virtual é um exemplo de dispositivo de caracteres). */</p>
<p>Observe também que no final do nome do diretório existe uma barra &#8220;/&#8221;. Isto acontece quando é dado o parâmetro -F ao comando &#8220;ls&#8221;, e geralmente existe um alias que faz isso pra você. Olhe uma tabela com outros caracteres que aparecem no final do nome para<br />
facilitar a identificação:</p>
<pre>
,---------,----------------,
| Símbolo |  Significado   |
|---------|----------------|
|    *    |   executável   |
|    /    |   diretório    |
|    =    |    socket      |
|    @    | symbolic link  |
|    |    |      FIFO      |
'---------'----------------'
</pre>
<p>Agora em relação a permissões, permissões especiais pra ser mais específico. Como já foi dito anteriormente, é necessário permissão de execução para que os atributos &#8220;especiais&#8221; tenham efeito. Portanto quando estes atributos estão sendo usados e não estão fazendo efeito algum eles aparecem em maiúsculo. Veja um exemplo:</p>
<pre>
meleu:~$ touch arquivo
meleu:~$ chmod 7000 arquivo
meleu:~$ ls -l arquivo
---S--S--T   1 hack     users           0 Jan  4 09:55 arquivo
</pre>
<p>Se quiser saber mais sobre o &#8220;ls&#8221; olhe a página man. ;-)<strong> </strong></p>
<h3>3.3. find</h3>
<p>Este comando é uma benção! :) Realmente muito útil e vale a pena você dar uma lida na página man&#8230;. Mas vamos aqui a uma pequena introdução só para você sentir um gostinho. Veja aqui uma lista dos argumentos mais usados:</p>
<pre>Argumento          Descrição

-user     procura por arquivos cujo dono seja .
-group      procura por arquivos cujo grupo seja .
-uid          procura por arquivos cujo dono tenha UID .
-gid          procura por arquivos cujo grupo tenha GID .
-name
     procura por arquivos de nome que combine com o
.
-type        procura por arquivos do tipo
-perm [-]
   procura por arquivos de permissões
 (veja abaixo).</pre>
<p>Nota-1: o parâmetro precisa estar no formato octal, e se você colocar o &#8216;-&#8217; na frente o find procurará por arquivos que tenham *no mínimo* as permissões   (veja exemplos abaixo).Nota-2: os tipos que são usados com o parâmetro -type são aquelas letras da tabela encontrada no tópico 3.2. (sobre ls), com a excessão do arquivo regular onde é usado o caracter &#8216;f&#8217;.</p>
<p>É interessante que você use redirecionamento para poder consultar o resultado da pesquisa. Só pra lembrar: &#8216;&gt;&#8217; redireciona a saída padrão e &#8217;2&gt;&#8217; redireciona a saída de erro padrão. Assim, uma boa é usar sempre &#8220;2&gt; /dev/null&#8221;. ;). Vamos a alguns exemplos&#8230; para maiores detalhes&#8230; nem precisa falar né?!</p>
<p>+ procurar por arquivos suid ou sgid:</p>
<pre> find / -perm -4000 -o -perm -2000</pre>
<p>+ procurar por arquivos suid do root executável para todos (ou seja, bons arquivos para se colocar backdoors):</p>
<pre> find / -user root -perm -4001</pre>
<p>ou melhor:</p>
<pre> find / -uid 0 -perm -4001</pre>
<p>+ procurar por arquivos world-writable que não sejam links simbólicos, nem dispositivos de caracteres, nem sockets, e nem que possuam o sticky bit (OBS-1: 0&#8242;s a esquerda das permissões podem ser omitidos; OBS-2: a exclamação &#8216;!&#8217; serve para negação de tudo que está entre parênteses; OBS-3: o &#8216;-o&#8217; é o &#8220;ou lógico&#8221; do find)</p>
<pre> find / -perm -2  ! \( -type l -o -type c -o -type s -o -perm -1000 \)</pre>
<p>Eu uso muito o find para encontrar os suid files nos WarGames (ver referências), onde você tem que encontrar o suid file do level superior ao seu. Por exemplo, quando está no level3 e quer procurar o suid file do level4, use:</p>
<pre> find / -user level4 -perm -4000 2&gt; /dev/null</pre>
<h3>3.4. test</h3>
<p>Este comando é muito usado nos shell scripts. E dá pra se fazer muita coisa interessante com ele. Não é o propósito deste texto ensinar Shell Scripting, portanto se não entender procure outras fontes (inclusive em  ).Como você deve aber (senão, fica sabendo agora :P ) o &#8220;test expressão&#8221; é a mesma coisa que usar &#8220;[expressão]&#8221; e esta última notação que irei usar. Como a página man explica tudo que se deve saber, não vou explicar sobre o test aqui. Mas aí vai um exemplo de script (o script é meio besta&#8230; somente para ilustração mesmo). Não esqueça de ler a man page.</p>
<pre>
&lt; ++&gt; Permissoes/perms.sh
#!/bin/bash

if [ $# -ne 1 ]; then
echo "Uso: `basename $0` filename" 1&gt;&amp;2
exit -1
fi

# -e verifica se o arquivo existe
if ! [ -e $1 ]; then
echo "$1 não existe"

# -k verifica se possui sticky bit
elif [ -k $1 ]; then
echo "$1 possui \"sticky bit\""

# -g verifica se possui SGID
elif [ -g $1 ]; then
echo "$1 possui Set-Group-ID"

# -u verifica se possui SUID
elif [ -u $1 ]; then
echo "$1 possui Set-User-ID"
fi

&lt; --&gt;

</pre>
<p>Agora basta aprender um pouquinho de shell scripting que dá pra fazer algumas coisas legais! ;)</p>
<h3> 3.5. umask</h3>
<p>O umask é um comando embutido no shell, e está presente nos shells mais comuns (bash, ash, ksh, csh). Dizer que o ele é um comando embutido no shell também quer dizer que não existe uma página man somente para este comando, e sim que a descrição dele está na página man do shell em questão. Tente digitar &#8220;man bash&#8221; e quando a manpage estiver sendo exibida procure por umask (geralmente isso é feito teclando /umask ). Isso deve levá-lo até a descrição do umask.O umask define as permissões que NÃO serão aplicadas aos novos arquivos a serem criados pelo usuário. Geralmente o umask padrão é atribuido em algum arquivo &#8220;profile&#8221; (algo como ~/.profile para um usuário individual, ou /etc/profile para todos usuários do sistema, mas isso pode variar muito em cada sistema). Se você achar o seu arquivo profile, tente encontrar o comando umask nele, deve estar em algum lugar.  Agora vamos visualizar um exemplo:</p>
<pre>
meleu:~$ umask
0022
meleu:~$ mkdir bla1    #0022 eh permissao de escrita para grupo e outros
meleu:~$ ls -l         #note que o dir criado NAO tem "w" para grupo e outros
total 4
drwxr-xr-x 2 meleu users 4096 2007-06-03 16:52 bla1/
meleu:~$ umask 0077    #mudei meu umask, 0077 eh rwx para grupo e outros
meleu:~$ mkdir bla2
meleu:~$ ls -l         #note que bla2 NAO tem "rwx" para grupo e outros
total 8
drwxr-xr-x 2 meleu users 4096 2007-06-03 16:52 bla1/
drwx------ 2 meleu users 4096 2007-06-03 16:53 bla2/
</pre>
<p>Então lembre-se: umask define as permissões que NÃO serão atribuídas aos novos arquivos a serem criados.</p>
<h3> 3.6. chattr</h3>
<p>ATENÇÃO: este comando é específico do Linux e do sistema de arquivos ext2 e ext3! Não existe este comando no FreeBSD ou no minix por exemplo. Mesmo assim achei interessante colocar esta seção pois o uso do Linux está muito difundido por aí. O comando chattr muda atributos de um arquivo em um sistema de arquivos ext2 ou ext3. Os atributos são identificados por um caractere. Para definir um atributo a um arquivo usa-se um sinal de &#8220;+&#8221; antes do caractere que identifica o atributo, e para retirar o atributo usa-se um &#8220;-&#8221;. Tais atributos são bem descritos na página man do chattr na seção ATTRIBUTES. Aqui vamos ilustrar o poder do chattr com o atributo &#8220;i&#8221;, o chamado imutável (immutable flag). Para atribuir o immutable flag a um arquivo o comando é o seguinte &#8220;chattr +i arquivo&#8221;, mas antes de sair fazendo isso vamos a uma explicação (retirada da página man do chattr):</p>
<p>&#8220;Um arquivo com o atributo &#8216;i&#8217; não pode ser modificado: ele não pode ser apagado nem renomeado, nenhum link pode ser criado para este arquivo e nenhum dado pode ser escrito neste arquivo. Apenas o superusuário ou um  processo possuindo a capacidade CAP_LINUX_IMMUTABLE pode ligar ou desligar este atributo.&#8221;</p>
<p>Ao ler isso nos vem logo uma pergunta à mente: nem o root pode modificar/ apagar este arquivo? Vamos a um exemplo para responder nossa pergunta. Os comentários após o &#8220;#&#8221; são para ajudar na explicação e as linhas em branco são somente para tornar a leitura mais agradável. Note que o comando lsattr serve para listar os atributos de um arquivo.</p>
<pre>
root:~# id                # sou o superusuario
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),17(audio),18(video),19(cdrom)</pre>
<pre>root:~# touch arquivo     # estou criando um arquivo para nosso teste</pre>
<pre>root:~# ls -l arquivo     # observe a seguir que tenho permissao de escrita
-rw-r--r-- 1 root root 0 2007-06-04 15:43 arquivo
</pre>
<pre>
root:~# lsattr arquivo    # vejamos os atributos deste arquivo
------------- arquivo
</pre>
<pre>root:~# echo "isto eh soh um teste" &gt;&gt; arquivo</pre>
<pre>root:~# cat arquivo       # adicionei uma linha no arquivo, veja:</pre>
<pre>isto eh soh um teste</pre>
<pre>root:~# chattr +i arquivo # atribuindo o immutable flag</pre>
<pre>root:~# lsattr arquivo    # veja o atributo i setado</pre>
<pre>----i-------- arquivo</pre>
<pre>root:~# echo "mais um pequeno teste" &gt;&gt; arquivo</pre>
<pre>-bash: arquivo: Permission denied</pre>
<pre>root:~# cat arquivo       # uau! sou o root e nao consegui escrever no arquivo!</pre>
<pre>isto eh soh um teste</pre>
<pre>root:~# rm -f arquivo     # serah que consigo apagar este miseravel?</pre>
<pre>rm: cannot remove `arquivo': Operation not permitted</pre>
<p>Viu só? Nem o root pode fazer qualquer modificação em um arquivo com o immutable flag ativado. No entanto somente o root pode ligar ou desligar este atributo de um arquivo. Logo, basta um &#8220;chattr -i arquivo&#8221; como root e tudo volta ao normal. Agora vamos a uma valiosa dica retirada do Tips-HOWTO seção 3.3. &#8220;How to use the immutable flag&#8221;:</p>
<p>&#8220;Logo após instalar e configurar seu sistema, vá no /bin, /sbin, /usr/bin, /usr/sbin e /usr/lib (e outros diretórios suspeitos) e faça uso liberal de &#8216;chattr +i comando&#8217;. Também faça isso aos arquivos do kernel na raiz. Agora faça &#8216;mkdir /etc/.dist/&#8217; e copie tudo de /etc/ naquele diretório (eu faço isso em dois passos, usando /tmp/etcdist.tar para evitar recursão). Opcionalmente você pode apenas criar /etc/.dist.tar.gz e marcar como imutável. A razão para tudo isto é limitar o dano que você pode fazer quando estiver usando a conta root. Você não irá sobrescrever arquivos com um operador de redirecionamento perdido, e não fará o sistema inutilizável com um espaço perdido dentro de um comando &#8216;rm -fr&#8217; (você ainda pode fazer bastante dano em seus dados, mas seus bin&#8217;s e libs estarão mais seguros). Isto também impossibilita ou torna mais difícil a ação de uma variedade de exploits de segurança ou denial of service (uma vez que muitos deles consistem em  sobrescrever algum arquivo pelas ações de algum programa SUID).A única inconveniência disto é quando se está desenvolvendo e fazendo seu &#8216;make install&#8217; em vários tipos de binários do sistema. Por outro lado também previne que o &#8216;make install&#8217; sobrescreva os arquivos. Quando você esquecer de ler o Makefile e fazer &#8216;chattr -i&#8217; nos arquivos que seriam sobrescritos (e nos diretórios para os quais você quer adicionar arquivos) &#8212; o make falha, você só precisa usar o comando &#8216;chattr -i&#8217; e reexecutar o make.(&#8230;)&#8221;</p>
<p>Dá pra perceber aí o quanto que vale a pena estudar o chattr, né?</p>
<h3>3.7. Outros Comandos</h3>
<p>Aqui vai uma relação de alguns comandos que tem relação com permissões de arquivos. Dê uma olhada na página man deles. <strong>chown, chgrp, newgrp, su, sudo, suauth.</strong> No momento só estou me lembrando destes&#8230; Devem haver muitos outros.</p>
<h2>4. Usando C</h2>
<p>Esta parte tem alguns pontos parecidos com a matéria de lamagra na CoreZine n. 1 (ver 6. Referências). Não me chame de copião! Acho que em português não tem nada sobre isso, por isso resolvi escrever.</p>
<h3>4.1. Informações sobre Arquivos</h3>
<p>Como já foi dito, todas as informações sobre um arquivo fica numa estrutura chamada inode. Para que possamos consultar estas informações através do C utilizamos as funções stat(), fstat() e lstat(). Aqui estão os protótipos e uma ligeira descrição:</p>
<pre>
int stat(const char *file_name, struct stat *buf);
int fstat(int filedes, struct stat *buf);
int lstat(const char *file_name, struct stat *buf);
</pre>
<ul>
<li><strong>stat: </strong> consulta informações sobre file_name no inode e armazena na estrutura buf.</li>
<li><strong>fstat: </strong>faz o mesmo só que ela acessa o arquivo através do inteiro filedes (file descriptor), como por exemplo o retornado por open()</li>
<li><strong>lstat: </strong>faz a mesmíssima coisa que stat porém quando o file_name é um link a função stat() armazena em buf informações sobre o arquivo apontado pelo link, já lstat() armazena em buf informações sobre o próprio link.</li>
</ul>
<p>Como podemos ver na página man destas funções a estrutura stat está definida da seguinte forma:</p>
<pre>
struct stat
{
dev_t         st_dev;      /* device */
ino_t         st_ino;      /* inode */
mode_t        st_mode;     /* protection */
nlink_t       st_nlink;    /* number of hard links */
uid_t         st_uid;      /* user ID of owner */
gid_t         st_gid;      /* group ID of owner */
dev_t         st_rdev;     /* device type (if inode device) */
off_t         st_size;     /* total size, in bytes */
unsigned long st_blksize;  /* blocksize for filesystem I/O */
unsigned long st_blocks;   /* number of blocks allocated */
time_t        st_atime;    /* time of last access */
time_t        st_mtime;    /* time of last modification */
time_t        st_ctime;    /* time of last change */
};
</pre>
<p>Vamos agora analisar cada elemento desta estrutura.</p>
<ul>
<li><strong>st_dev: </strong>o dispositivo em qual o arquivo está gravado, para ver o &#8220;major and minor numbers&#8221; use as macros major() e minor() definidas em sysmacros.h. OBS.: Se você não sabe o que isto significa leia o Apêndice.</li>
<li><strong>st_ino:</strong> o inode que guarda as informações sobre o arquivo (cada arquivo está relacionado a um único inode).</li>
<li><strong>st_mode: </strong>serve para ver o tipo do arquivo (se é diretório, dispositivo de bloco, etc) e também para ver as permissões. Para tais finalidades são necessários alguns artifícios que veremos no código abaixo.</li>
<li><strong>st_nlink:</strong> número de hard links para o arquivo. O mínimo é 1 (pelo menos se o arquivo existir :P ) a cada hard link soma mais 1.</li>
<li><strong>st_uid, st_gid:</strong> ID do dono e ID do grupo, respectivamente (duh!).</li>
<li><strong>st_rdev</strong>: se o arquivo é um dispositivo de bloco ou de caracteres o st_rdev irá armazenar os números maior e menor do dispositivo.</li>
</ul>
<p>A diferença deste para o st_dev é que, por exemplo, o *arquivo de dispositvo* /dev/hdd está gravado (aqui na minha máquina) em /dev/hda2, então st_dev contém os números &#8220;maior&#8221; e &#8220;menor&#8221; do /dev/hda2 ao passo que st_rdev contém os números maior e menor<br />
do próprio /dev/hdd.</p>
<ul>
<li><strong>st_size:</strong> tamanho do arquivo em bytes (duh!)</li>
<li><strong>st_blksize: </strong>é o tamanho do bloco que o sistema de arquivos usa para E/S, é usado por alguns programas para que haja uma melhor &#8220;bufferização&#8221;.</li>
<li><strong>st_blocks:</strong> o número de blocos físicos que estão sendo usados por este arquivo no disco.</li>
<li><strong>st_atime:</strong> contém o dia/ano/mês/hora/&#8230; do último acesso a este arquivo(leitura e/ou execução).</li>
<li><strong>st_mtime:</strong> contém o dia/ano/mês/hora/&#8230; da última modificação feita no arquivo.</li>
<li><strong>st_ctime:</strong> contém /dia/ano/mês/hora/&#8230; da última alteração feita *no inode*.
<p>Note que se você modificar o arquivo você estará alterando o inode também, mas se mudar o inode não quer dizer que esteja alterando o arquivo (ex.: através de chmod, chown, etc&#8230;). O que quero dizer é que se alterar st_mtime automaticamente alterará st_ctime, mas o contrário nem sempre acontece.</li>
</ul>
<p>Bom&#8230; Acho que é melhor um código-fonte de exemplo que assim é a melhor maneira de pegar as coisas. ;) Muita atenção nos comentários!</p>
<pre>
&lt; ++&gt; Permissoes/filestat.c

#include &lt;stdio.h&gt;              /* Essa você deve saber pra que serve. :P */
#include &lt;sys/stat.h&gt;           /* Necessaria para usar lstat() */
#include &lt;sys/sysmacros.h&gt;      /* Para usar major() e minor() */
#include &lt;sys/types.h&gt;          /* Para declarar variável do tipo mode_t */
#include &lt;time.h&gt;               /* Para usar ctime() */
#define TRUE  1
#define FALSE 0
#define PERMS 07777
/* Como foi dito, a variável st_mode armazena num só inteiro o tipo do
arquivo e suas permissões. E é por isso que a gente precisa usar os
bitmasks diferentes para quando queremos ver o tipo do arquivo e para
ver as permissões do arquivo. A macro PERMS declarada acima é para se
"traduzir" as permissões. */
char *FileType (mode_t tipo);
unsigned short int isdev = FALSE; /* Isso é só pra verificar se o
arquivo é um dispositivo. */
int main (int argc, char **argv) {
struct stat arq;
if (argc != 2)
{
printf ("Uso: %s \n", argv[0]);
exit (-1);
}
if (lstat (argv[1], &amp;arq))
{
perror (argv[1]);
exit (1);
}
printf ("Nome do arquivo:\t%s\n", argv[1]);
printf ("Inode:\t\t\t%d\n", arq.st_ino);
printf ("Tipo do Arquivo:\t%s\n", FileType (arq.st_mode));
if (!isdev) { /* Se NÃO for um dispositivo... */
printf ("Tamanho:\t\t%d bytes, %d blocos\n", arq.st_size, arq.st_blocks);
printf ("Bloco de E/S:\t\t%d bytes\n", arq.st_blksize);
printf ("Dispositivo onde está salvo: \tmaior: %d,", major (arq.st_dev));
printf (" menor: %d\n", minor (arq.st_dev));
}
/* Nos dois printf's acima e nos dois abaixo foram usadas as macros
major() e minor(), ambas declaradas em , estas
macros servem para retornar os números maior e menor do dispositivo
(Ver no Apêndice mais sobre estes números). */
else { /* Se for um dispositivo... */
printf ("Dispositivo verdadeiro: \tmaior: %d,", major (arq.st_rdev));
printf (" menor: %d\n", minor (arq.st_rdev));
}
printf ("Permissões:\t\t%04o\n", arq.st_mode &amp; PERMS);
/* Olhe aí a macro PERMS (que eu defini lá no começo) sendo usada. Ela
está sendo usada aqui para ver as permissões no formato octal (ver
tabelinhas do tópico 3.1.) portanto use sempre o formato "%o" para
imprimir com printf() (de preferência "%04o" para mostrar os 0's a
esquerda). Lembre-se que sempre que for fazer esta "tradução" usar
sempre 5 dígitos sendo que o primeiro dígito seja um '0', para que o
compilador entenda que é um octal. */
printf ("Numero de Hard Links:\t%d\n", arq.st_nlink);
printf ("UserID: %d,\tGroupID: %d\n", arq.st_uid, arq.st_gid);
printf ("Último acesso:\t\t\t%s", ctime (&amp;arq.st_atime));
printf ("Última modificação:\t\t%s", ctime (&amp;arq.st_mtime));
printf ("Última alteração no inode:\t%s", ctime (&amp;arq.st_ctime));
/* Nos 3 printf's acima usei ctime() para imprimir o
timestamp bonitinho. */
return 0;
}
char *FileType (mode_t tipo) {
switch (tipo &amp; S_IFMT) { /* Para saber o tipo do arquivo é necessário usar
o S_IFMT. Detalhes sobre esta e outras macros
definidas em  podem ser vistos na
manpage do stat(). */
case S_IFDIR:
return "Diretório";
case S_IFREG:
return "Arquivo Normal";
case S_IFSOCK:
return "Socket";
case S_IFLNK:
return "Link Simbólico";
case S_IFBLK:
isdev = TRUE;
return "Dispositivo de Bloco";
case S_IFCHR:
isdev = TRUE;
return "Dispositivo de Caracter";
case S_IFIFO:
isdev = TRUE;
return "FIFO";
}
return NULL;
}
/* * * EOF * * */
</pre>
<p>Note que eu usei a função lstat(), pois estou querendo informações sobre o próprio link (se o arquivo for um link!) e não sobre o arquivo apontado por ele. Para se usar a função fstat() você faria algo mais ou menos assim (só um trechinho):</p>
<pre>
/* -=-=-= usando fstat =-=-=- */
...
int fd;
...
fd = open(argv[1], O_RDONLY); /* isso normalmente fica dentro de um 'if' */
fstat (fd, &amp;arq);             /* e isso também ;) */
...
/* -=-=-= usando fstat =-=-=- */
</pre>
<h3>4.2. Mudando Permissões</h3>
<p>Para mudar as permissões de um arquivo você pode usar as seguintes funções:</p>
<pre>
int chmod(const char *path, mode_t mode);
int fchmod(int fildes, mode_t mode);
</pre>
<ul>
<li><strong>chmod:</strong> muda as permissões do arquivo/diretório path setando para mode.</li>
<li><strong>fchmod:</strong> igual chmod porém usando fildes (file descriptor) para mudar as permissões do arquivo.</li>
</ul>
<p>Em ambas funções você usa o caminho do arquivo que você quer modificar como primeiro parâmetro. E para &#8220;mode&#8221; (o segundo parâmetro) você deve usar as macros definidas em stat.h ou um número octal de 5 dígitos (sempre de 5 dígitos!). Você pode ver as macros na página man das funções stat.Evidentemente você só pode mudar as permissões de arquivos que lhe pertençam (a não ser que você seja super-usuário).</p>
<p>Para mudar as posses do arquivo (vulgo ownership) você usa as seguintes funções:</p>
<pre>
int chown(const char *path, uid_t owner, gid_t group);
int fchown(int fd, uid_t owner, gid_t group);
int lchown(const char *path, uid_t owner, gid_t group);
</pre>
<ul>
<li><strong>chown: </strong>mudar a proprietário do path para owner e o grupo para group.</li>
<li><strong>fchown:</strong> mesmo esquema só que tem aquele lance do file descriptor.</li>
<li><strong>lchown:</strong> mesmo esquema só que tem aquele lance de alterar o próprio link ao invés de alterar o arquivo apontado pelo link.</li>
</ul>
<p>Nestas funções o primeiro parâmetro é o caminho do arquivo. O segundo e o terceiro parâmetro é, respectivamente, o UID e GID que você quer atribuir ao arquivo. Quando você não quer mudar o UID ou o GID é só você usar -1.Ainda existem algumas limitações:</p>
<ul>
<li> Apenas o super-usuário pode mudar o proprietário do arquivo;</li>
<li>O proprietário do arquivo pode mudar o grupo do arquivo para qualquer um que ele faça parte;</li>
<li>O super-usuário pode mudar o grupo do arquivo para qualquer um.</li>
</ul>
<p>Olhe este pequenino programinha (sem muita utilidade) só pra ver qual é o esquema:</p>
<pre>
/* -------------------- */
&lt; ++&gt; Permissoes/mudar_permissoes.c
#include &lt;stdio.h&gt;
#include &lt;sys/stat.h&gt;
#include &lt;sys/types.h&gt;
#define PERMS 07777
#define GRUPO 666       /* O grupo que eu quero que o arquivo pertença */
#define MODE 04555      /* Permissões que eu quero que o arquivo tenha */
int main (int argc, char **argv) {
struct stat arq;
if (argc != 2) {
printf ("Uso: %s \n", argv[0]);
exit (-1);
}
if (lstat(argv[1], &amp;arq)) {
perror (argv[1]);
exit (1);
}
printf ("ANTES:\n");
printf ("\tOwnership -&gt; UID: %d,\tGID: %d\n", arq.st_uid, arq.st_gid);
printf ("\tPermissões: %04o\n\n", arq.st_mode &amp; PERMS);
if (lchown (argv[1], -1, GRUPO)) perror ("lchown");
if (chmod (argv[1], MODE)) perror ("chmod");
lstat (argv[1], &amp;arq);
printf ("DEPOIS:\n");
printf ("\tOwnership -&gt; UID: %d,\tGID: %d\n", arq.st_uid, arq.st_gid);
printf ("\tPermissões: %04o\n", arq.st_mode &amp; PERMS);
return 0;
}
&lt; --&gt;</pre>
<p>O programa mudará o grupo do arquivo para 666, se este GID não existir no sistema o lchown não funcionará como desejado. O programa muda também a permissão do arquivo para &#8220;r-sr-xr-x&#8221;, ou se preferir: 4555, de acordo com a macro MODE definida lá em cima. Por exemplo: se você quiser tornar um arquivo/diretório com acesso de leitura e execução para todo mundo você faria<br />
o seguinte:</p>
<pre> chmod ("arquivo", 00555);</pre>
<p>Nunca se esqueça: são sempre 5 dígitos para ser certinho!</p>
<p>Bom&#8230; é isso&#8230; teste alguns esquemas ae e divirta-se. Com estas funções dá pra fazer uns lances bem legais pra você verificar arquivos &#8220;perigosos&#8221; com frequência. Enfim&#8230; tenha imaginação!</p>
<h2><strong>5. Esquemas Úteis</strong></h2>
<p>Vamos ver aqui umas coisinhas interessantes de se fazer usando SUID. Antes vou logo avisando que para que as coisas mostradas neste tópico tenham alguma graça você terá que adquirir nível de outro usuário. Se não sabe como fazer isso&#8230; bem amigo&#8230; FUCE! Digamos que você conseguiu acessar a conta de outro usuário. Não perca tempo! Copie um shell e atribua SUID a ele. No exemplo abaixo imagine que eu seja &#8220;hack&#8221; mas consegui acessar a conta do usuário &#8220;meleu&#8221; (não! isso não é crise de identidade!). Então eu vou e copio um shell e atribuo SUID a ele. Veja:</p>
<pre>
meleu:~$ id
uid=1000(meleu) gid=100(users) groups=100(users),666(hack)
meleu:~$ cp /bin/ash /tmp/exemplo
meleu:~$ chmod +s /tmp/exemplo
meleu:~$ ls -l /tmp/exemplo
-rwsr-sr-x    1 meleu    users       59628 Dec  9 23:47 /tmp/exemplo*
/* -=-=-= exemplo =-=-=- */
</pre>
<p>Pronto. Agora eu entro no sistema como o usuário hack e&#8230; Veja você mesmo:</p>
<pre>
hack:/tmp$ id
uid=1005(hack) gid=100(users) groups=100(users),666(hack)
hack:/tmp$ ls -l exemplo
-rwsr-sr-x    1 meleu    users       59628 Dec  9 23:47 exemplo*
hack:/tmp$ ./exemplo
\u:\w$ id
uid=1005(hack) gid=100(users) euid=1000(meleu) groups=100(users),666(hack)
</pre>
<p>Reparaste que o EUID mudou né? Reparaste também que o PS1 no ash não se comporta como no bash? :P Agora eu (hack) tenho acesso a tudo que meleu também tem. Mas felizmente existem programadores que são pessoas preocupadas com a segurança e alguns programas não funcionam quando você está com EUID de outro usuário. Este é o caso do programa &#8220;ps&#8221;. Veja o exemplo:</p>
<pre>
\u:\w$ id
uid=1005(hack) gid=100(users) euid=1000(meleu) groups=100(users),666(hack)
\u:\w$ ps x
This /bin/ps is not secure for setuid operation.
</pre>
<p>Sacaste?</p>
<p><strong>OBSERVAÇÃO:</strong> Em versões anteriores deste texto eu afirmei que este esquema não funcionava no bash. Mas recentemente, fuçando a manpage dele, eu li que se usarmos a opção &#8220;-p&#8221; o comportamento dele para com o effective user id é diferente do que se não for passado parâmetro algum. Desta forma, é possível sim, fazer uma cópia de /bin/bash e atribuir SUID a esta cópia e depois executá-la com a opção &#8220;-p&#8221;. Fiz meus testes com a versão 3.1.17. Faça alguns testes no seu sistema aí e observe que interessante. ;-)</p>
<p>Este esquema eu testei no tcsh 6.08, bash 3.1.17, ash (não sei a versão), zsh 3.0.6, e pdksh 5.2.12 (Public Domain Korn Shell). Só funcionou no ash, zsh, pdksh, e no bash utlizando-se a opção &#8220;-p&#8221; na linha de comando.</p>
<p>Também é possível fazer outras coisas muito interessantes&#8230;Uma boa a se fazer é copiar e atribuir SUID a um editor de textos. Só testei este esquema com o &#8220;vi&#8221; (o editor mais fácil de se achar nos sistemas que existem por aí). Tendo um editor com SUID você pode editar/criar arquivos como se fosse o outro usuário. Consequentemente você pode editar/criar um profile para a &#8220;vítima&#8221;, e quando falamos nisso logo pensamos em (tchan tchan tchan!) Trojan Horses. E se você tiver um editor SUID para root você pode mecher nos arquivos de configuração do sistema (geralmente localizados em /etc ), visualizar o tão cobiçado /etc/shadow e mais uma infinidade de coisas. Isso foi só um pontapé inicial. Não vou ensinar aqui como editar profiles e nem como fazer Trojans. Mas posso te indicar onde aprender: para aprender a fazer/editar profiles você tem que aprender shell script e para aprender a fazer Trojans você tem que aprender a programar. Existem diversos textos sobre o assunto, inclusive em http://unsekurity.virtualave.net (Veja mais em 6. Referências).</p>
<p><strong>ATENÇÃO:</strong> Se o administrador do sistema tiver um mínimo de competência ele rodará um find (ver tópico 3.3.) com frequência para dar uma monitorada nos arquivos SUID. Portanto não fique dando bobeira usando estes esquemas tão &#8220;fuleiros&#8221;.</p>
<h2>6. Referências</h2>
<p><em>Dominando o Linux -&gt; Foi onde li sobre as permissões básicas e sobre arquivos de dispositivo (do Apêndice). Este livro já foi A Bíblia do Linux, hoje em dia não sei. Estou meio desatualizado. Podia ser comprado em <a href="http://www.lcm.com.br" target="_blank">http://www.lcm.com.br</a> Hoje em dia não tem mais. Mas para quem lê bem em inglês, vai em irc.nullus.net e entra no canal #bw ;-) Satisfação garantida!</em></p>
<p><em>Security-HOWTO -&gt; Li sobre SUID, SGID, e sticky bit. Você pode encontrar em <a href="http://www.tldp.org" target="_blank">http://www.tldp.org</a> ou /usr/doc/Linux-HOWTOs</em></p>
<p><em>Tips-HOWTO -&gt; A dica sobre o immutable flag encontra-se neste documento na seção 3.3. Pode ser consultado em http://www.tldp.org ou<br />
/usr/doc/Linux-HOWTOs</em></p>
<p><em>Bash-Prog-Intro-HOWTO &#8212;&#8212;&#8212;,-&gt; Textos sobre shell script. Úteis para você Advanced Bash-Scripting Guide -&#8217;   aprender a criar/editar profiles. Ambos se encontram em <a href="http://www.tldp.org" target="_blank">http://www.tldp.org</a></em></p>
<p><em>Cursos de Linguagem C -&gt; Dois ótimos lugares para se aprender a programar em Linguagem C: (português)<a href=" http://ead1.eee.ufmg.br/cursos/C " target="_blank"> http://ead1.eee.ufmg.br/cursos/C </a>e (inglês, muito bom! voltado especificamente para ambiente UNIX) <a href="http://www.cs.cf.ac.uk/Dave/C/CE.html" target="_blank">http://www.cs.cf.ac.uk/Dave/C/CE.html</a></em></p>
<p><em>Backdoors e Trojans -&gt; Bom texto que explica sobre como fazer backdoors e trojan horses, feito pelo NashLeon, algumas usando e abusando da permissão SUID. Como não existe mais a página da unsekurity scene, aí vai um mirror <a href="http://www.ataliba.net/sections/old-hacking/unsekurity" target="_blank">http://www.ataliba.net/sections/old-hacking/unsekurity</a> Gostaria de externar o meu mais profundo agradecimento ao cara que teve a excelente ideia de fazer um mirror dos arquivos da unsek. Seria uma grande perda&#8230;</em></p>
<p><em>Barata Eletrica n. 20 -&gt; Tem um texto sobre UNIX e foi lá que eu vi aquelas tabelas do topic 3.2. A URL é <a href="http://www.inf.ufsc.br/barata/" target="_blank">http://www.inf.ufsc.br/barata/</a></em></p>
<p><em>CoreZine n. 01 -&gt; Li sobre a parte de C. A CoreZine não existe mais e não achei mirror algum via google. Achei um arquivo onde tem o texto que usei:<br />
<a href="http://www.abunasar.net/mirrors/h0h0.com/hwa/hwa-hn52.txt" target="_blank">http://www.abunasar.net/mirrors/h0h0.com/hwa/hwa-hn52.txt</a></em></p>
<p><em>man pages -&gt; Sobre os comandos do tópico 3 e as system calls.</em></p>
<p><em>Linux Allocated Devices -&gt; Maiores detalhes sobre os arquivos de dispositivo. Você pode encontrar em /usr/src/linux/Documentation/devices.txt</em></p>
<p><em><a href="http://www.rootthisbox.org" target="_blank">www.rootthisbox.org</a> -,-&gt; Dê uma olhada aqui se quiser saber mais<a href="http://www.pulltheplug.com" target="_blank"> www.pulltheplug.com</a> -|   sobre wargames (OBS: vale muito a pena!!). <a href="http://www.hackerslab.org" target="_blank">www.hackerslab.org</a> &#8211;&#8217;</em></p>
<p><em>extinta mail list da unsekurity -&gt; Se não fosse a mail list esse texto seria um lixo ou até mesmo nem sairia! Infelizmente (ou felizmente, depende do ponto de vista) a lista não existe mais.</em></p>
<h2>7. Considerações Finais</h2>
<p>Bem como esse texto é para o pessoal que está bem no começo mesmo, vou dar uma dica em forma de relato &#8220;baseado em fatos reais&#8221;. :P</p>
<p>O lance é que quando eu comecei a estudar profundamente permissões de arquivos, eu comecei a fuçar nos txts da vida e determinado assunto puxava outro, e para compreender melhor o outro tinha que ler outro mais (arquivos de dispositivo é um exemplo)&#8230; e por aí vai&#8230; E de tanto ir saltando de txt em txt eu acabava aprendendo um monte de coisa útil.</p>
<p>Onde quero chegar?!   Estou querendo dizer que ao invés de ficar procurando ajuda em canais de IRC você tem que correr atrás das infos você mesmo ou pedir indicação de um txt pra alguém&#8230; Você acaba aprendendo muitas outras coisas! É lógico que não é todo  undo que dispõe de tempo pra ficar fazendo isso. Portanto não pense que estou condenando quem fica pedindo ajuda&#8230; As vezes<br />
precisamos de uma solução rápida e talz&#8230; Mas conseguir aprender as coisas por conta própria a muito gratificante (pelo menos pra mim).<br />
Eu costumava apurrinhar o pessoal da extinta mail list da unsekurity com dicas de leitura e outras coisas&#8230; Se você, fuçador iniciante, também encontrar um meio de trocar informações vai sair lucrando! Dividir experiências com os outros faz a informação fluir mais facilmente e vai que alguém já passou pelo mesmo problema que você e encontrou um txt sarado sobre o assunto! =]</p>
<p>Vou terminando aqui&#8230; Um abraço irmãos! E não se esqueçam de ler as man pages sempre que houver alguma dúvida! ;)</p>
<h2><strong>Apêndice</strong></h2>
<h3>Arquivos de Dispositivo</h3>
<p>Os arquivos de dispositivo são um artifício para que os programas possam interagir com os dispositivos de hardware através do kernel. Eles não são &#8220;arquivos&#8221; de verdade (ou são?). Mas os programas os usam como se fossem, e assim o kernel reconhece a solicitação de E/S e envia para o driver correspondente. Como vocês já sabem os arquivos de dispositvos ficam no /dev. Ao listar o conteúdo do /dev com um &#8220;ls -l&#8221; você ve algo incomum. Veja um exemplo:</p>
<pre>/* -=-=-= exemplo =-=-=- */
meleu:~$ ls -l /dev/hda2
brw-r-----   1 root     disk       3,   2 Apr 27  1995 /dev/hda2
/* -=-=-= exemplo =-=-=- */</pre>
<p>Você deve ter observado que o primeiro bit das permissões é um &#8216;b&#8217; o que mostra que é um dispositivo de bloco (ver tópico 3.2.). Mas não é disso que falo quando digo &#8220;algo incomum&#8221;. Estou falando são destes dois números separados por uma vírgula (3 e 2). O primeiro valor é o número maior (major) do dispositivo e o segundo é o número menor (minor). Isso é para que o kernel saiba que dispositivo está sendo usado. Quando um arquivo de dispositivo é acessado o kernel recebe essa informação em forma de número maior e número menor. O maior número especifica um determinado driver de dispositivo do kernel e o menor número especifica exatamente qual dispositivo será controlado pelo driver.</p>
<p>Olhe outro exemplo:</p>
<pre>
meleu:~$ ls -l /dev/hda*
brw-r-----   1 root     disk       3,   0 Apr 27  1995 /dev/hda
brw-r-----   1 root     disk       3,   1 Apr 27  1995 /dev/hda1
brw-r-----   1 root     disk       3,  10 Apr 27  1995 /dev/hda10
brw-r-----   1 root     disk       3,  11 Apr 27  1995 /dev/hda11
brw-r-----   1 root     disk       3,  12 Apr 27  1995 /dev/hda12
brw-r-----   1 root     disk       3,  13 Apr 27  1995 /dev/hda13
brw-r-----   1 root     disk       3,  14 Apr 27  1995 /dev/hda14
brw-r-----   1 root     disk       3,  15 Apr 27  1995 /dev/hda15
brw-r-----   1 root     disk       3,  16 Apr 27  1995 /dev/hda16
brw-r-----   1 root     disk       3,   2 Apr 27  1995 /dev/hda2
brw-r-----   1 root     disk       3,   3 Apr 27  1995 /dev/hda3
brw-r-----   1 root     disk       3,   4 Apr 27  1995 /dev/hda4
brw-r-----   1 root     disk       3,   5 Apr 27  1995 /dev/hda5
brw-r-----   1 root     disk       3,   6 Apr 27  1995 /dev/hda6
brw-r-----   1 root     disk       3,   7 Apr 27  1995 /dev/hda7
brw-r-----   1 root     disk       3,   8 Apr 27  1995 /dev/hda8
brw-r-----   1 root     disk       3,   9 Apr 27  1995 /dev/hda9</pre>
<p>Repare que o número maior de todos são iguais, isso quer dizer que para todos estes dispositivos é usado o mesmo driver. O número menor indica ao driver qual é o dispositivo que ele tem que executar sua função.</p>
<p>Para maiores informações consulte a página man do comando mknod e o arquivo /usr/src/linux/Documentation/device.txt</p>
<p>Fonte: <a href="http://www.linuxsecurity.com.br/redir.php?url=http://www.linuxsecurity.com.br/info/unix/permissoes.txt">LinuxSecurity</a></p>
<p><strong>Quero agradecer MELEU por ter escrito um artigo de tão boa qualidade.</strong></p>
<p>The post <a href="http://0fx66.com/blog/permissoes-de-arquivos-unix/">Permissões de Arquivos UNIX</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/como-modificar-o-mac-address-no-linux/' rel='bookmark' title='Modificando endereço MAC no Linux'>Modificando endereço MAC no Linux</a></li>
<li><a href='http://0fx66.com/blog/montando-arquivos-nrg-mdf-img-bin-cue-no-linux/' rel='bookmark' title='Montando arquivos NRG, MDF, IMG, BIN, CUE no Linux'>Montando arquivos NRG, MDF, IMG, BIN, CUE no Linux</a></li>
<li><a href='http://0fx66.com/blog/algoritmo-de-escalonamento-kernel-2-4-versus-2-6/' rel='bookmark' title='Algoritmo de escalonamento: Kernel 2.4 Versus 2.6'>Algoritmo de escalonamento: Kernel 2.4 Versus 2.6</a></li>
<li><a href='http://0fx66.com/blog/usando-o-dd/' rel='bookmark' title='Usando o DD'>Usando o DD</a></li>
</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/0fx66?a=-fxbPJMyoWo:s-5OwblkftE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=-fxbPJMyoWo:s-5OwblkftE:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/0fx66?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=-fxbPJMyoWo:s-5OwblkftE:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/0fx66?i=-fxbPJMyoWo:s-5OwblkftE:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=-fxbPJMyoWo:s-5OwblkftE:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=-fxbPJMyoWo:s-5OwblkftE:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/0fx66?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=-fxbPJMyoWo:s-5OwblkftE:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/0fx66?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=-fxbPJMyoWo:s-5OwblkftE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/0fx66?i=-fxbPJMyoWo:s-5OwblkftE:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=-fxbPJMyoWo:s-5OwblkftE:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/0fx66?i=-fxbPJMyoWo:s-5OwblkftE:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/0fx66/~4/-fxbPJMyoWo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://0fx66.com/blog/permissoes-de-arquivos-unix/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://0fx66.com/blog/permissoes-de-arquivos-unix/</feedburner:origLink></item>
		<item>
		<title>O problema do Amarok, Firefox, Smartphones e Tablets</title>
		<link>http://feedproxy.google.com/~r/0fx66/~3/j1_xL72ZIgc/</link>
		<comments>http://0fx66.com/blog/o-problema-do-amarok-firefox-smartphones-e-tablets/#comments</comments>
		<pubDate>Tue, 19 Feb 2013 15:00:48 +0000</pubDate>
		<dc:creator>VonNaturAustreVe</dc:creator>
				<category><![CDATA[Pensamentos]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[reflexões]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://0fx66.com/blog/?p=74</guid>
		<description><![CDATA[<p>O problema do Amarok, Firefox, Smartphones e Tablets Como todos já sabem, acredito eu, sou um heavy user do Amarok e de seus recursos em especial os podcast, fique bastante contente pois recentemente saiu a versão 2.5 do Amarok com suporte a contas do gpodder. Para atualizar no Ubuntu é muito fácil basta executar as [...]</p><p>The post <a href="http://0fx66.com/blog/o-problema-do-amarok-firefox-smartphones-e-tablets/">O problema do Amarok, Firefox, Smartphones e Tablets</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/a-parabola-da-faixa-preta/' rel='bookmark' title='A parábola da faixa preta'>A parábola da faixa preta</a></li>
<li><a href='http://0fx66.com/blog/os-perigos-da-cloud-computing/' rel='bookmark' title='SOPA, PIPA, Megaupload e os perigos da Cloud computing'>SOPA, PIPA, Megaupload e os perigos da Cloud computing</a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<h1 style="text-align: justify;">O problema do Amarok, Firefox, Smartphones e Tablets</h1>
<p style="text-align: justify;">Como todos já sabem, acredito eu, sou um heavy user do <a title="Site do amarok" href="http://amarok.kde.org/" target="_blank">Amarok</a> e de seus recursos em especial os podcast, fique bastante contente pois recentemente saiu a <a href="http://amarok.kde.org/en/releases/2.5" target="_blank">versão 2.5</a> do Amarok com suporte a contas do <a href="http://gpodder.org/" target="_blank">gpodder</a>. Para atualizar no Ubuntu é muito fácil basta executar as linhas abaixo:</p>
<pre>sudo add-apt-repository ppa:kubuntu-ppa/backports
sudo apt-get update
sudo apt-get upgrade</pre>
<p style="text-align: justify;">Pronto está atualizado e instalado, infelizmente seria perfeito se fosse somente isso, utilizo o Amarok desde a versão 1.4, que diga-se de passagem foi uma das melhores versão do Amarok, ele era leve, rápido, cheio de recursos, atendia a todos muito bem a única reclamação que via sobre ele nos fóruns e redes IRC era por ele utilizar QT e não se integrar muito bem a ambientes GTK (como Gnome e XFCE).</p>
<p style="text-align: justify;">Então um belo dia, veio uma tempestade chamada QT4, que mudou tudo, o ambiente KDE que utilizava o QT3.5, migrou para o QT4 as mudanças no ambiente foram muito drásticas, me lembro da quantidade de reclamações quanto as primeiras versões do KDE4, era lento, repleto de bugs, parecia um Windows Vista&#8230;</p>
<p style="text-align: justify;">Não foi só o KDE4 que sofreu grandes mudanças, mas sua base de aplicativos também, não fui muito afetado pois a maioria dos programas que utilizo são programas escritos em GTK. Mas dentro do ambiente GTK não existe nenhum player que seja melhor que o Amarok, isso é um fato, o Banshee nem entra para a lista aquela coisa <a href="http://www.blog.amrlima.info/archives/495" target="_blank">usa Mono</a>.</p>
<p style="text-align: justify;">As mudanças provocadas pelo KDE resultaram no que a principio chamei de aberração o Amarok2, ele era uma bela de uma porcaria, fiquei indignado com o que fizeram com o Amarok1.4 que era uma versão excelente, fico pensando por quiseram mudar tudo, por que só não portaram para QT4? (mais abaixo vou falar do port dele para QT4).</p>
<p style="text-align: justify;">Depois de algumas atualizações os bugs foram sendo corrigidos, novos apareceram, foi ficando mais encorpado ou seja atingindo maior maturidade. Fui utilizando feliz, estava me atendendo muito bem, nem me lembrava mais da época do 1.4.</p>
<p style="text-align: justify;">Até que efetuei este ultimo upgrade para o 2.5 e notei que o uso do processador estava maior do que o de costume, então resolvi fazer alguns downgrades do Amarok. Fiz um para o 2.4 o uso do processador era menor, mas ainda bem alto, fiz outro para o 2.3 é o uso do processador era menor que no 2.4 mas ainda sim muito alto. Então fiquei com a pulga atrás da orelha, no 1.4 o consumo de processamento e memória era muito menor, muito menor mesmo!</p>
<p style="text-align: justify;">Então resolvi instalar o Amarok 1.4 na máquina virtual, para comparar os dois (sim na máquina virtual mesmo!) e o mais incrível que seu desempenho mesmo em uma máquina virtual era superior ao do Amarok2 (2.3, 2.4 e 2.5), o Amarok se tornou um bloatware, desde a versão 2 dele, ele virou um bloatware.</p>
<p style="text-align: justify;">Antigamente browsers era simplesmente ferramentas para visualizamos nossos sites, não programas atolados de funcionalidades hoje um browser e praticamente um sistema operacional sua complexidade e sofisticação atingiu níveis colossais, hoje em dia e impraticável (a menos que tenha muito, mas muito tempo livre) pegar o código fonte do Firefox ou do Amarok até mesmo do Linux estuda-los a fundo.</p>
<p style="text-align: justify;">A alguns anos atrás utilizamos hardware bastante limitados, computadores com processadores de apenas um núcleo, 256MB de RAM, 40GB de HD (estou sendo otimista com essa configuração), hoje em dia e inviável utilizar um hardware como esse que citei, graças aos bloatware.</p>
<p style="text-align: justify;">O que é um bloatware? São softwares inchados, softwares que agregaram tantos recursos que se tornaram muito pesados, os recursos nem sempre bem implementados (para falar a verdade raramente são bem implementados) hoje não temos mais softwares tão bons quanto a alguns anos atrás, fazendo uma analogia hoje temos patos! Eles nadam, voam e andam, mas não fazem nada tão bem.</p>
<p style="text-align: justify;">O Firefox é o melhor exemplo de bloatware que temos hoje em dia, era um bom navegador, não que não seja ainda um bom navegador mas&#8230;implementou o suporte a extensões que hoje são vistas como o melhor e o pior, depois recebeu mais implementações como o suporte a skins, depois mudanças internas até chegou no que temos hoje, um navegador pesado, exigente com o uso de processador e um devorador de memória.</p>
<p style="text-align: justify;">Pessoas tentam nos enfiar goela abaixo a ideia de que podemos usar o browser para tudo e de que Smartphones e Tablets podem substituir computadores/notebooks. Tablets e Smartphones entram na mesma analogia dos patos, fazem muita coisa, mas nada direito, não venha me falar que fazem pois todos sabemos não fazem, tenta redigir sua monografia no seu iPhone ou no Galaxy para tu ver, experimente ler livros no seu iPad ou xoom a luz do sol para tu ver ou então leia por horas e mais horas para ver se sua vista não ficara extremamente cansada.</p>
<p style="text-align: justify;">Qual relação dos Tablets, Smartphones, Bloatware e patos? Todos são Bloatwares! Os Smartphones são bloatwares, dos celulares, fazem tudo que um celular faz, mas a maioria de suas funções não fazem direito e ainda tem quem alega que pode ter uma produtividade alta com eles, podem até oferecer alguma produtividade dependendo do uso, mas na maioria sua experiência e limitada. Tablets se encaixam perfeitamente na categoria, pois são bloatwares dos e-readers (que era um gadget com objetivo específico, funcionar como leitor digital) diferente dos Tablets que atiram para tudo que é lado&#8230;</p>
<p style="text-align: justify;">Perceberam aonde quero chegar com tudo isso? <strong>Chegamos em um ponto que os softwares deixaram de fazer o que se propunham e começaram a tentar executar todo tipo de tarefa!</strong> Deixaram de executar suas tarefas direito e passaram a fazer um monte de coisa, mas nada direito, minha teoria pode ser confirmada com o surgimento do Chrome, por que ele se tornou um navegador tão utilizado? Por causa do marketing da Google? Não! Pois era um navegador bom!</p>
<p style="text-align: justify;">Ele se propunha a ser um navegador veloz, leve e que funcionava direito, nada de bloatware e cumpriu sua proposta, muito bem diga-se de passagem, e questão de tempo até ele se tornar o navegador mais utilizado do mundo, hoje o chrome está entrando na era bloatware, se atolando de recursos e questão de tempo até ele se tornar o novo Firefox.</p>
<p style="text-align: justify;">[]&#8216;s</p>
<p>The post <a href="http://0fx66.com/blog/o-problema-do-amarok-firefox-smartphones-e-tablets/">O problema do Amarok, Firefox, Smartphones e Tablets</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/a-parabola-da-faixa-preta/' rel='bookmark' title='A parábola da faixa preta'>A parábola da faixa preta</a></li>
<li><a href='http://0fx66.com/blog/os-perigos-da-cloud-computing/' rel='bookmark' title='SOPA, PIPA, Megaupload e os perigos da Cloud computing'>SOPA, PIPA, Megaupload e os perigos da Cloud computing</a></li>
</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/0fx66?a=j1_xL72ZIgc:a2TekpOKW4M:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=j1_xL72ZIgc:a2TekpOKW4M:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/0fx66?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=j1_xL72ZIgc:a2TekpOKW4M:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/0fx66?i=j1_xL72ZIgc:a2TekpOKW4M:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=j1_xL72ZIgc:a2TekpOKW4M:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=j1_xL72ZIgc:a2TekpOKW4M:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/0fx66?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=j1_xL72ZIgc:a2TekpOKW4M:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/0fx66?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=j1_xL72ZIgc:a2TekpOKW4M:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/0fx66?i=j1_xL72ZIgc:a2TekpOKW4M:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=j1_xL72ZIgc:a2TekpOKW4M:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/0fx66?i=j1_xL72ZIgc:a2TekpOKW4M:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/0fx66/~4/j1_xL72ZIgc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://0fx66.com/blog/o-problema-do-amarok-firefox-smartphones-e-tablets/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://0fx66.com/blog/o-problema-do-amarok-firefox-smartphones-e-tablets/</feedburner:origLink></item>
		<item>
		<title>Compilação de dicas para o Firefox</title>
		<link>http://feedproxy.google.com/~r/0fx66/~3/I0KTJUQkDjM/</link>
		<comments>http://0fx66.com/blog/compilacao-de-dicas-para-o-firefox/#comments</comments>
		<pubDate>Mon, 18 Feb 2013 15:00:02 +0000</pubDate>
		<dc:creator>VonNaturAustreVe</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Firefox]]></category>

		<guid isPermaLink="false">http://0fx66.com/blog/?p=49</guid>
		<description><![CDATA[<p>Compilação de dicas para o Firefox Todas as dicas apresentadas, utilizam a edição de chaves na about:config, que pode ser acessada facilmente abrindo uma nova aba no Firefox e digitando about:config. Exibindo imagens em alta qualidade: O Firefox tem a opção de mostrar imagens em alta qualidade, porém essa opção é desativada por padrão por [...]</p><p>The post <a href="http://0fx66.com/blog/compilacao-de-dicas-para-o-firefox/">Compilação de dicas para o Firefox</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/otimizando-o-firefox-com-sqlite3/' rel='bookmark' title='Otimizando o Firefox com sqlite3'>Otimizando o Firefox com sqlite3</a></li>
<li><a href='http://0fx66.com/blog/otimizando-requisicoes-dns-no-firefox/' rel='bookmark' title='Otimizando requisições DNS no firefox'>Otimizando requisições DNS no firefox</a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<h1 style="text-align: justify;">Compilação de dicas para o Firefox</h1>
<p style="text-align: justify;"><a href="http://0fx66.com/blog/wp-content/uploads/2013/02/firefox-400x300.jpg"><img class="alignleft size-medium wp-image-67" alt="firefox logo" src="http://0fx66.com/blog/wp-content/uploads/2013/02/firefox-400x300-300x225.jpg" width="300" height="225" /></a>Todas as dicas apresentadas, utilizam a edição de chaves na about:config, que pode ser acessada facilmente abrindo uma nova aba no Firefox e digitando about:config.</p>
<ol style="text-align: justify;">
<li><b>Exibindo imagens em alta qualidade: </b>O Firefox tem a opção de mostrar imagens em alta qualidade, porém essa opção é desativada por padrão por utilizar muito processando acaba causando um efeito negativo na performance do navegador. Se você deseja ter imagens em melhor qualidade apesar do detrimento da performance altere o valor da chave “<i>gfx.color_management.enabled</i>” para “<i>true</i>”.</li>
<li><b>Desativando a checagem do antivírus dos downloads: </b>Uma dica interessante quem usa o Firefox em sistemas windows, o Firefox sempre faz uma checagem nos arquivos baixados logo após o termino do download. Para desativar este recurso altere o valor da chave “<em>browser.download.manager.scanWhenDone</em><em>”</em> para “<i>false</i>”.</li>
<li><b>Habilitando o corretor ortográfico em todos os campos de texto: </b>E bem chato ter que ficar marcando toda “verificar ortografia” quando quiser quer alguma frase seja corrigida, então vamos fazer com que tudo digitado passe pelo corretor ortográfico, mude o valor da chave “<i>layout.spellcheckDefault</i>” mude para 2.</li>
<li><b>Abrindo resultados da caixa de busca em uma nova aba: </b>Esta é uma das minhas preferidas!Para que ela abra uma nova aba e mostre os resultados, altere o valor “<em><i>browser.search.openintab</i></em><em>”</em> para “<i>true</i>”.</li>
<li><b>Selecione o texto da barra de endereços com apenas 1 clique: </b>Para que o texto da barra de endereços seja todo selecionado com apenas um click (como nos sistemas windows e mac). Altere o valor da chave “<em>browser.urlbar.clickSelectsAll</em><em>”</em> para “<i>true</i>”</li>
<li><b>Usando a tecla &#8220;Backspace&#8221; no Firefox: </b>É bastante comum o Firefox vim com a tecla backspace sem a função “voltar página”, para que ela volte as páginas ao ser pressionada, altere o valor “<em>browser.backspace_action</em><em>” para 0.</em></li>
<li><b>Melhorando a qualidade das fontes: </b>Altere o valor da chave “<em>browser.display.auto_quality_min_font_size</em><em>”</em> de 20 para 1. Essa dica ira aumentar a qualidade da renderização das fontes. Ao utilizar este recurso estaremos entrando no mesmo caso da dica 1, podem causar perca de performance.</li>
<li><b>Aumenta a velocidade de navegação com pipelining (cuidado): </b>Está é a dica mais conhecida do <i>about:config </i>e não poderia ficar sem marcar presença. Altera as seguintes chaves:</li>
</ol>
<pre><em>network.http.pipelining</em> – mude para “<i>true</i>”
<em>network.http.proxy.pipelining</em> - mude para “<i>true</i>”
<em>network.http.pipelining.maxrequests</em> - mude para 6
<em>network.http.max-connections</em> - mude para 96.
<em>network.http.max-connections-per-server</em> - mude para 32.
</pre>
<p style="text-align: justify;">Atenção com o uso desta dica, o uso de <i>pipeling</i> nas conexões agiliza de fato a navegação, porém elas causam sobrecarga em pequenos servidores, dependendo da circunstancia, muitos administradores configuram seus servidores para evitar essa sobrecarga limitando a quantidade de conexões fornecidas para cada usuário, por este motivo o seu uso, pode não oferecer nenhuma melhoria na velocidade de navegação.</p>
<ol style="text-align: justify;" start="9">
<li><b>Removendo delay da renderização da página: </b>Mais uma dica também muito popular, o Firefox por padrão aguarda, o download completo da página para iniciar sua renderização, mas você pode mudar isso, configurando a editando a chave “<i>nglayout.initialpaint.delay</i>”, se não existir crie ela, será uma inteira), atribua o valor 0.</li>
<li><strong>Completar endereços automaticamente: </strong>Ao modificar esta chave, o Firefox completa automaticamente o endereço enquanto escrevemos, usando endereços do histórico ou dos favoritos, não sendo necessário clicar numa das sugestões para que esta apareça na barra. Modifiquem a chave “<em>browser.urlbar.autoFill”</em><em> </em>para “<strong>true</strong>” para ligar esta opção.</li>
<li><b>Modificar o editor de código-fonte: </b><em>Muita gente não gosta daquele editor default que o firefox utiliza para exibir o código-fonte das páginas, se você é um desses, e deseja mudar o editor basta alterar estas chaves: </em><em><i>“</i></em><i>view_source.editor.external”</i><em> </em>que deve ser modificada para <i>“</i><strong><i>true</i></strong><i>”</i> e<em> </em><em><i>“</i></em><strong><i>view_source.editor.path”</i></strong><strong>, </strong><em>onde deve ser informado o diretório da aplicação de edição de texto.</em></li>
<li><strong><b>Reduza o uso de RAM quando o Firefox estive minimizado </b></strong><b>(cuidado): </b>Esta alteração irá “mover” o Firefox para o seu disco quando ele for minimizado, ocupando por isso menos memória. Crie uma nova chave Boolean com o nome <i>“config.trim_on_minimize”</i> e defina o valor como “<i>true</i>”. Terá de fazer um restart ao Firefox para que esta alteração fique ativada. Muito cuidado com o uso desta opção, pois o tiro pode sair pela culatra, pois movimentar o conteúdo da memória para o HD, pode ser demorado, causando um enorme delay ao minimizar e maximizar, pois o HD é tem a velocidade de leitura e escrita muito inferior se compramos com a velocidade da memória RAM. Então o uso desta chave fica a seu critério, recomendo fazer alguns testes com ela, é verificar se compensa gastar menos memória ou ter um delay ao minimizar seu navegador.</li>
<li><b>Desativando o tempo de espera da instalação de extensões: </b>Modifique a chave “<i>security.dialog_enable_delay</i>” para 0, e adeus tempo de espera para instalar addons :)</li>
<li><b>Colando com o mouse</b>Quem usa linux adora esse recurso, para colar textos com um click do scroll do mouse, basta modificar ou criar caso não exista (ela e inteira), a chave “<i>mousewheel.withaltkey.action</i>” para 1.</li>
<li><b>Desativando função “restaurar sessão: </b>Simples e rápido, altere o valor da chave “<i>browser.sessionstore.enabled</i>” para “<i>false</i>”</li>
</ol>
<p style="text-align: justify;"><b>Referências:</b></p>
<p style="text-align: justify;"><a href="http://www.vivaolinux.com.br/dica/13-dicas-uteis-para-o-aboutconfig-do-Firefox">http://www.vivaolinux.com.br/dica/13-dicas-uteis-para-o-aboutconfig-do-Firefox</a>?</p>
<p style="text-align: justify;"><a href="http://pplware.sapo.pt/2007/05/24/as-15-dicas-mais-uteis-do-firefox/">http://pplware.sapo.pt/2007/05/24/as-15-dicas-mais-uteis-do-firefox/</a></p>
<p style="text-align: justify;"><a href="http://securityhacker.org/artigos/189-dicas-do-firefox">http://securityhacker.org/artigos/189-dicas-do-firefox</a></p>
<p style="text-align: justify;"><a href="http://wiki.archlinux-br.org/Firefox_Dicas_e_Truques">http://wiki.archlinux-br.org/Firefox_Dicas_e_Truques</a></p>
<p>The post <a href="http://0fx66.com/blog/compilacao-de-dicas-para-o-firefox/">Compilação de dicas para o Firefox</a> appeared first on <a href="http://0fx66.com/blog">0fx66</a>.</p><div class='yarpp-related-rss'>
<h3>Leia também:</h3><ol>
<li><a href='http://0fx66.com/blog/otimizando-o-firefox-com-sqlite3/' rel='bookmark' title='Otimizando o Firefox com sqlite3'>Otimizando o Firefox com sqlite3</a></li>
<li><a href='http://0fx66.com/blog/otimizando-requisicoes-dns-no-firefox/' rel='bookmark' title='Otimizando requisições DNS no firefox'>Otimizando requisições DNS no firefox</a></li>
</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/0fx66?a=I0KTJUQkDjM:5OUeVBksBZQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=I0KTJUQkDjM:5OUeVBksBZQ:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/0fx66?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=I0KTJUQkDjM:5OUeVBksBZQ:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/0fx66?i=I0KTJUQkDjM:5OUeVBksBZQ:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=I0KTJUQkDjM:5OUeVBksBZQ:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/0fx66?d=7Q72WNTAKBA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=I0KTJUQkDjM:5OUeVBksBZQ:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/0fx66?d=TzevzKxY174" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=I0KTJUQkDjM:5OUeVBksBZQ:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/0fx66?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=I0KTJUQkDjM:5OUeVBksBZQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/0fx66?i=I0KTJUQkDjM:5OUeVBksBZQ:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/0fx66?a=I0KTJUQkDjM:5OUeVBksBZQ:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/0fx66?i=I0KTJUQkDjM:5OUeVBksBZQ:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/0fx66/~4/I0KTJUQkDjM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://0fx66.com/blog/compilacao-de-dicas-para-o-firefox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://0fx66.com/blog/compilacao-de-dicas-para-o-firefox/</feedburner:origLink></item>
	</channel>
</rss><!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk: enhanced
Database Caching using disk
Object Caching 6886/7270 objects using disk

 Served from: 0fx66.com @ 2013-05-21 15:37:10 by W3 Total Cache -->
