<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Del&#039;Arco</title>
	<atom:link href="http://blog.delarco.com.br/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.delarco.com.br</link>
	<description>The Pixel Company</description>
	<lastBuildDate>Tue, 27 Mar 2012 00:36:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>A Evolução dos Battle Droids: Numa galáxia não tão distante&#8230;</title>
		<link>http://blog.delarco.com.br/a-evolucao-dos-battle-droids-numa-galaxia-nao-tao-distante/</link>
		<comments>http://blog.delarco.com.br/a-evolucao-dos-battle-droids-numa-galaxia-nao-tao-distante/#comments</comments>
		<pubDate>Tue, 27 Mar 2012 00:36:02 +0000</pubDate>
		<dc:creator>Leandro Del&#39;Arco</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[battle droids]]></category>
		<category><![CDATA[estagiário]]></category>
		<category><![CDATA[star wars]]></category>

		<guid isPermaLink="false">http://blog.delarco.com.br/?p=367</guid>
		<description><![CDATA[(First of all: tenha em mente que comecei a escrever esse texto em fevereiro de 2011) Esses tempos comprei o hipado jogo Star Wars: Force Unleashed, numa promoção fodástica do Steam. Sempre fui fã incondicional de Star Wars e, como todo bom gamer, sei que jogos baseados em filmes (ou séries&#8230; ou qlq coisa que [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://blog.delarco.com.br/wp-content/uploads/2012/03/sw001a.jpg"><img class="aligncenter size-medium wp-image-368" style="border: 1px dashed black;" title="sw001a" src="http://blog.delarco.com.br/wp-content/uploads/2012/03/sw001a-225x300.jpg" alt="" width="225" height="300" /></a></p>
<p style="text-align: left;"><em>(First of all: tenha em mente que comecei a escrever esse texto em fevereiro de 2011)</em></p>
<p style="text-align: left;">Esses tempos comprei o <del>hipado</del> jogo <strong>Star Wars: Force Unleashed</strong>, numa promoção fodástica do <a href="http://store.steampowered.com" target="_blank">Steam</a>. Sempre fui fã incondicional de Star Wars e, como todo bom gamer, sei que jogos baseados em filmes (ou séries&#8230; ou qlq coisa que passe na TV) sempre são uma grande <em>mierda</em>. Botei fé nesse, pois (além de ser super-ultra-mega-blaster-hipado) o primeiro jogo relacionado à Star Wars na qual tive contato foi o <strong>Star Wars Jedi Knight II: Jedi Outcast</strong>, que achei MUITO bom. A jogabilidade não era complexa, eu tinha um sabre de luz, podia usar a Força, etc&#8230; claro que o fator principal foi: <span style="text-decoration: underline;">RODAVA NO MEU PC</span>.</p>
<p><em>Este parágrafo é apenas um desabafo</em>. Voltando ao <strong>Jedi Outcast</strong>, eu pirava usando o Force Grip nos Stormtroopers, refletindo disparo de armas laser com meu sabre e tal, mas&#8230; PUTA QUE PARIU! O jogo não precisava ser tão dificil. Caraleo!!! Okay, não lembro se o jogo era tão dificil assim, pois faz uns 6 anos que joguei. Só lembro que sofri pra matar o último chefe. E só consegui pq ele derrubou um pilar de 453 toneladas em cima dele mesmo. Com o Force Unleashed foi a mesma coisa. Repito: PUTA QUE PARIU! Eu joguei no modo<strong> newbie-plus</strong> (<em>normal</em>), pois o que eu realmente gostos nos jogos é a história (eu sei, <span style="text-decoration: underline;">ESTÓRIA</span>) e não mostrar que eu consigo passar a última fase do mundo especial, que só é habilitado depois de 712 horas de jogo e sacrifício de 90% da vida social, com o personagem mais fraco sem perder nada de vida. <span style="text-decoration: underline;">Spoilando muito agora</span>, vc deve escolher se quer uma luta com o imperador Palpatine ou se quer terminar de surrar o fodástico Darth Vader. CARA! Quem em sã consciência pensaria em matar o Darth Vader? Eu, claro! Agora pensa num inimigo apelão, que me lembra os velhos tempos, onde zerar joguinhos de Super Nintendo e Mega Drive demandava um treino sério, disciplinado e bom estado de espírito, além de ser objetivo de vida para algumas pessoas. Pois 40 minutos depois, recomecei a fase e escolhi a outra batalha. Essa foi easy, mas fiquei chateado, pois achei que o sith comeria a loirinha que pilota a nave no final.</p>
<p>Enfim, após uma seção narguilástica de canela e menta, acompanhada de vinho branco de <em>Dinalle</em>, fiquei pensando nos trilhões de Stormtroopers que matei sem dó nem piedade. Eles têm família! Oh, Deus! Quantas mães e filhos desamparados, cuja vida eu desgracei, não estão passando fome? Pq eles simplesmente não  usam os desalmados Battle Droids, cuja única finalidade é preencher aquele vazio enorme entre os a introdução do game e o último Boss?</p>
<p style="text-align: center;"><a href="http://blog.delarco.com.br/wp-content/uploads/2012/03/stormtrooper.jpg"><img class="aligncenter size-medium wp-image-370" style="border: 1px dashed black;" title="stormtrooper" src="http://blog.delarco.com.br/wp-content/uploads/2012/03/stormtrooper-257x300.jpg" alt="" width="257" height="300" /></a></p>
<p>Foi aí que nesse momento de pura falta do que fazer, fiquei imaginando como surgiram os Battle Droids. Será que o objetivo inicial era criar guerreiros letais? Ou algum nerd forever alone não aguentava mais a vida solitária e desenvolveu um <em>parceiro</em> para &#8220;<em>todos os momentos</em>&#8220;? Como seria a evolução desse tipo de arma no mundo atual?</p>
<p>Bom&#8230; levando em conta as putisses que me fizeram passar na faculdade, o modo como os &#8220;<em>empresários</em>&#8221; da minha ex-cidade (São José do Hell Preto) pensam e a utilidade questionável da classe <span style="text-decoration: underline;">estagiário</span>, cheguei à seguinte aproximação.</p>
<h2><strong>Prólogo</strong></h2>
<p>Como todo bom coordenador de ensino superior, o <strong>Sr. Darto Veider</strong> diz que os alunos devem se juntar para fazer um trabalho multidisciplinar que terá peso 87 na média final, enquanto as 900 provas que os alunos fizeram nos últimos meses terão peso 1 cada.</p>
<p>Algum aluno da Engenharia sem muito o que fazer cria um desenho simples. Um droid esquelético que pode imitar a maioria dos movimentos humanos.</p>
<p>Outro aluno de Ciências da Computação, por sua vez  já fez todo o design, diagramas de classe e nao-sei-mais-o-quê-UML (todo documentado pq o professor pediu) de um sistema de Inteligência Artificial que integra outros sistemas, como reconhecimento facial, e que é capaz de receber, processar e executar ordens simples. Até então, a única ordem que realmente funcionava era a de encontrar e baixar filme<em> educativos </em>de determinada atriz.</p>
<p>Os dois alunos se encontram no buteco, ambos bebados por causa do multidisciplinar. Deixarei de lado a parte em que eles conversam sobre a mãe do <strong>Sr. Veider</strong> e pularei para a parte em que eles juntam seus projetos e projetam o primeiro Battle Droid. O objetivo principal do Battle Droid era surtar durante a apresentação e assassinar lenta e dolorosamente o <strong>Sr. Veider</strong>, mas algo sai errado e o Droid apenas faz movimentos simples  que mostram todas suas possibilidades de uso, inclusive fazendo tchauzinho no final.</p>
<p>A apresentação é um sucesso e o<strong> Sr. Veider</strong> procura um telefone no <span style="text-decoration: underline;">Lado Negro</span> da sua agenda de contatos. Três minutos e meio depois, antes mesmo de desmontarem o droid para devolver as peças da torradeira de suas maes, o <strong>Sr. Veider</strong> aparece com o <strong>Sr. Paltine</strong>. Este, acionista majoritário da <span style="text-decoration: underline;">Império S.A</span>. oferece uma fortuna para os alunos, em troca das especificações técnicas, diagrama de classes, etc. Apesar da proposta inicial ser de <span style="color: #ff0000;">487 milhões</span>, o valor final foi fixado em <span style="color: #ff0000;">150 reais</span>, pois o código não estava todo comentado, faltava parte da documentação, casos de uso incompletos e parte do código foi copiado de um hello world (para <span style="color: #0000ff;">VB5</span>, já que os professores obrigaram a usar esta linguagem). Com as mãos num projeto tão promissor, o <strong>Sr. Palpa</strong> começa as pesquisas.</p>
<p><em>Continua&#8230;</em></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.delarco.com.br/a-evolucao-dos-battle-droids-numa-galaxia-nao-tao-distante/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>COBOL: Parte 1 &#8211; Configurando o TinyCobol</title>
		<link>http://blog.delarco.com.br/cobol-parte-1-configurando-o-tinycobol/</link>
		<comments>http://blog.delarco.com.br/cobol-parte-1-configurando-o-tinycobol/#comments</comments>
		<pubDate>Mon, 27 Feb 2012 00:55:06 +0000</pubDate>
		<dc:creator>Leandro Del&#39;Arco</dc:creator>
				<category><![CDATA[COBOL]]></category>
		<category><![CDATA[informática]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[cobol]]></category>
		<category><![CDATA[programação. notepad++]]></category>
		<category><![CDATA[tinycobol]]></category>

		<guid isPermaLink="false">http://blog.delarco.com.br/?p=334</guid>
		<description><![CDATA[A imagem acima foi a melhor que encontrei para ilustrar o preconceito que eu tinha em relação a linguagem COBOL. Ao meu ver, só usa COBOL aquele tipo de programador pré-histórico, que gosta de escovar bits e acha necessário contar quantos bytes foram &#8220;gastos&#8221; para carregar X dados e efetuar Y operações, controlando bit a [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;"><a href="http://blog.delarco.com.br/wp-content/uploads/2012/02/cobolprog.jpg"><img class="aligncenter  wp-image-335" style="border: 1px dashed black;" title="cobolprog" src="http://blog.delarco.com.br/wp-content/uploads/2012/02/cobolprog-300x300.jpg" alt="" width="300" height="300" /></a></p>
<p style="text-align: left;">A imagem acima foi a melhor que encontrei para ilustrar o preconceito que eu tinha em relação a linguagem COBOL. Ao meu ver, só usa COBOL aquele tipo de programador pré-histórico, que gosta de escovar bits e acha necessário contar quantos bytes foram &#8220;gastos&#8221; para carregar X dados e efetuar Y operações, controlando bit a bit os recursos do sistema, como se os computadores atuais (4+GB de RAM) não fossem capazes de suportar um arquivo texto de 40kb na memória e processar os algorítmos mais simples.</p>
<blockquote>
<p style="text-align: left;">Mas então, por que aprender COBOL?</p>
</blockquote>
<p style="text-align: left;">Como eu disse, havia um preconceito. Todo mundo é preconceituoso quando não conhece aquilo que critica. Saber economizar memória e ciclos da CPU pode não ser importante naquela calculadora que você desenvolveu na aula de introdução à JAVA, nem naquele &#8220;Hello World!&#8221;, que ocupa 10MB de RAM, feito em VB.NET&#8230; mas se um dia você se deparar com um algorítmo mais complexo, que exija o processamento de uma GRANDE quantidade de dados, vai perceber que a correta utilização dos recursos permite <a href="http://blog.delarco.com.br/category/programacao/openmp-programacao/" target="_blank">economizar tempo</a> e evitar dores de cabeça.</p>
<p style="text-align: left;">Não que eu tenha mudado completamente meu conceito (prefiro C++, ainda mais com a homologação do padrão C++0X), mas percebi que não tem como fugir. Há uma certa escassez de programadores COBOL (com experiência), pois além de idosa e difícil se comparada com as linguagens de 4ª geração (e posteriores), não é uma linguagem voltada para aplicativos modernos.</p>
<p style="text-align: left;">De acordo com o <a href="http://pt.wikipedia.org/wiki/Cobol" target="_blank">Wikipedia</a>,</p>
<blockquote>
<p style="text-align: left;"><strong>COBOL</strong> é uma linguagem de programação de Terceira Geração. Este nome é a sigla de <em><strong>CO</strong>mmon <strong>B</strong>usiness <strong>O</strong>riented <strong>L</strong>anguage</em> (Linguagem Orientada aos Negócios), que define seu objetivo principal em sistemas comerciais, <strong>financeiros</strong> e administrativos para empresas e governos.</p>
</blockquote>
<p style="text-align: left;">Ou seja, como eu trabalho no maior banco público da América Latina e desde sempre visando a área de TI, resolvi que aprender algo novo pode ser bom para o currículo, além de não doer nem um pouco e prevenir o Alzheimer. Não que eu vá usar, mas vai saber&#8230;</p>
<p style="text-align: left;">Enfim, não pesquisei os melhores compiladores, nem as mais completas IDE&#8217;s. Meu objetivo é aprender COBOL da maneira mais simples e correta possível (ANSI), não me apegando às perfumarias oferecidas em ambientes profissionais. Então, acabei encontrando o <a href="http://tiny-cobol.sourceforge.net/" target="_blank">TinyCOBOL</a>.</p>
<p style="text-align: left;">O TinyCOBOL é um compilador grátis desenvolvido por um brasileiro e não oferece nenhuma ferramenta para <span style="color: #000000;"><em><del>vomitar lógica</del></em></span> codificação. Então, você pode fazer como eu e usar o <a href="http://notepad-plus-plus.org/" target="_blank">Notepad++</a> para escrever os fontes.</p>
<p style="text-align: left;">Levando em conta que não vou precisar de nenhuma biblioteca para estender as funcionalidades da linguagem por enquanto, baixei <a href="http://www.infocont.com.br/tinycobol.exe" target="_blank">esse</a> instalador do TinyCOBOL (do site  da <a href="http://www.infocont.com.br" target="_blank">InfoCont</a>) que já deixa tudo no jeito para começar a programar, sem se preocupar com as configurações pós-instalação. Se o link anterior não funcionar, você pode baixar <a href="http://delarco.com.br/tools/tinycobol.rar" target="_blank">aqui</a> também.</p>
<p style="text-align: left;">A instalação, assim como qualquer uma em ambiente Windows, é bem simples:</p>
<ol>
<li>Faça download do <a href="http://www.infocont.com.br/tinycobol.exe" target="_blank">instalador</a> (<a href="http://delarco.com.br/tools/tinycobol.rar" target="_blank">aqui</a> também);</li>
<li>4x Avançar;</li>
<li>Deixei pelo menos a primeira opção selecionada (Modifique as variáveis de ambiente);</li>
<li>Avançar. Instalar;</li>
<li>Se você instalou no diretório padrão (c:\tinycobol), então crie um atalho na sua área de trabalho para o <strong>tcobol.bat</strong>, que está <strong>c:\tinycobol\doc. </strong>Dentro desse mesmo diretório, o desenvolvedor incluiu dois documentos sobre interfaces possíveis de serem utilizadas com o tinycobol;<strong><br />
</strong></li>
<li>Para compilar, execute o<strong> tcobol.bat</strong> e digite: <strong><em>htcobol arquivo.cob</em></strong>;</li>
</ol>
<p>Eu prefiro compilar com o parâmetro -F, pois foça a verificação do formato do código. Em COBOl, os 7 primeiros caracteres de cada linha têm funções específicas. Então, na maioria das vezes, devem ser deixados em branco.</p>
<p>Para testar, crie um arquivo chamado <strong>HelloWorld.cob</strong> no seu C:\ e cole o código abaixo (retirado do wikipedia):</p>
<pre class="brush: plain; title: ; notranslate">
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLOWORLD.
*
ENVIRONMENT DIVISION.
*
DATA DIVISION.
*
PROCEDURE DIVISION.
PARA-1.
DISPLAY &quot;Hello, World!!&quot;.
*
STOP RUN.
</pre>
<p>Não esqueca de deixar uma linha em branco no final do arquivo (isso me rendeu alguns palavrões). Se não funcionar, os espaços na frente de cada linha devem estar incorretos (vou explicar mais sobre o formato dos arquivos .COB no próximo post). Então você pode baixar o arquivo <a href="http://delarco.com.br/coding/cobol/HelloWorld.cob" target="_blank">aqui</a>.</p>
<p>Para compilar: <strong>htcobol -F c:\HelloWorld.cob</strong></p>
<p>Se funcionou, um arquivo HelloWorld.exe foi criado no mesmo diretório do HelloWorld.cob (c:\?).</p>
<p>É claro que eu vou demorar pra escrever algo sobre COBOL, pois TCC e vida não podem existir na mesma frase, então você pode começar lendo o <a href="http://cobol.404i.com/" target="_blank">zingCOBOL</a> que, até então, foi minha principal fonte de referência sobre COBOL.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.delarco.com.br/cobol-parte-1-configurando-o-tinycobol/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>try2hack.nl: Level 4</title>
		<link>http://blog.delarco.com.br/try2hack-nl-level-4/</link>
		<comments>http://blog.delarco.com.br/try2hack-nl-level-4/#comments</comments>
		<pubDate>Wed, 15 Feb 2012 00:16:06 +0000</pubDate>
		<dc:creator>Leandro Del&#39;Arco</dc:creator>
				<category><![CDATA[cheats]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[informática]]></category>

		<guid isPermaLink="false">http://blog.delarco.com.br/?p=324</guid>
		<description><![CDATA[O nível 4 é parecido com o 2, pois o processo de autenticação é feito por um objeto (nada de javascript com a senha). Dessa vez, temos um Applet. Para começar, baixei o objeto. Depois usei esse descompilador java (é só arrastar o arquivo .class para cima do texto &#8220;Drop class and inner class files [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" title="try2hack.nl" src="../wp-content/uploads/2012/02/header.png" alt="try2hack.nl" width="222" height="173" /></p>
<p>O nível 4 é parecido com o 2, pois o processo de autenticação é feito por um objeto (nada de javascript com a senha). Dessa vez, temos um Applet.</p>
<p>Para começar, <a href="http://www.try2hack.nl/levels/PasswdLevel4.class" target="_blank">baixei o objeto</a>. Depois usei <a href="http://java.decompiler.free.fr/?q=preview" target="_blank">esse</a> descompilador java (é só arrastar o arquivo .class para cima do texto &#8220;<em>Drop class and inner class files here</em>&#8220;).</p>
<p>Eu não entendia muito de java quando cheguei no nível 4 pela primeira vez, mas olhando BEMMM o código, me parece que um outro arquivo (que contém a senha) é aberto para fazer a autenticação. Então o código abaixo me chamou a atenção:</p>
<pre class="brush: java; title: ; notranslate">
this.infile = new String(&quot;level4&quot;);
try
{
   this.inURL = new URL(getCodeBase(), this.infile);
}
catch (MalformedURLException localMalformedURLException)
{
   getAppletContext().showStatus(&quot;Bad Counter URL:&quot; + this.inURL);
}
inFile();
</pre>
<p>Primeiramente, o nome do arquivo é definido (&#8220;level4&#8243;). A princípio, parece estranho por não haver extensão, mas se acessarmos pelo endereço correto (&#8220;<a href="http://www.try2hack.nl/levels/level4" target="_blank">www.try2hack.nl/levels/level4</a>&#8220;) podemos baixar o arquivo.</p>
<p>E, finalmente, ao abrir com o bloco de notas temos:</p>
<pre class="brush: java; title: ; notranslate">
level5-fdvbdf.xhtml (link para o nível 5)
appletking (usuário)
pieceofcake (senha)
</pre>
<p>Apesar de simples, o nível 4 exigiu mais passos que os anteriores, porém o problema ainda é o mesmo: <strong>validação client-side</strong>.</p>
<p><strong>O que aprender com o nível 4?</strong></p>
<p>Apesar de os dados não estarem dispostos em texto puro, muito provavelmente existirá um descompilador para qualquer tipo de midia/objeto/bytecode que você utilizar. Você pode usar flash, applets, activex controls, etc&#8230; desde que a validação seja <strong>SEMPRE</strong> no servidor.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.delarco.com.br/try2hack-nl-level-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Software protegido pela Lei Divina?</title>
		<link>http://blog.delarco.com.br/software-protegido-pela-lei-divina/</link>
		<comments>http://blog.delarco.com.br/software-protegido-pela-lei-divina/#comments</comments>
		<pubDate>Mon, 13 Feb 2012 01:27:12 +0000</pubDate>
		<dc:creator>Leandro Del&#39;Arco</dc:creator>
				<category><![CDATA[informática]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://blog.delarco.com.br/?p=318</guid>
		<description><![CDATA[Lembro que, em 2006, quando fazia estágio na SATEC (Seção de Tecnologia da Receita Federal), o grande amigo Marcos Gottardi encontrou um comentário do tipo &#8220;Código instável, não mexer&#8221; em um sistema interno. Levando em conta que foi desenvolvido por estagiários, não me assusta. Mas esse aqui realmente me faz ter medo:]]></description>
			<content:encoded><![CDATA[<p>Lembro que, em 2006, quando fazia estágio na SATEC (Seção de Tecnologia da Receita Federal), o grande amigo Marcos Gottardi encontrou um comentário do tipo &#8220;<em>Código instável, não mexer</em>&#8221; em um sistema interno. Levando em conta que foi desenvolvido por estagiários, não me assusta. Mas esse aqui realmente me faz ter medo:</p>
<p style="text-align: center;"><a href="http://blog.delarco.com.br/wp-content/uploads/2012/02/codigo_lei_divina.jpg"><img class="aligncenter size-full wp-image-322" title="codigo_lei_divina" src="http://blog.delarco.com.br/wp-content/uploads/2012/02/codigo_lei_divina.jpg" alt="" width="600" height="121" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.delarco.com.br/software-protegido-pela-lei-divina/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>try2hack.nl: Level 3</title>
		<link>http://blog.delarco.com.br/try2hack-nl-level-3/</link>
		<comments>http://blog.delarco.com.br/try2hack-nl-level-3/#comments</comments>
		<pubDate>Tue, 07 Feb 2012 03:08:15 +0000</pubDate>
		<dc:creator>Leandro Del&#39;Arco</dc:creator>
				<category><![CDATA[cheats]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[informática]]></category>

		<guid isPermaLink="false">http://blog.delarco.com.br/?p=294</guid>
		<description><![CDATA[O nível 3 é um saco pra quem não sabe o que fazer. Primeiro: se você erra a senha ou cancela o prompt, você é redirecionado para o site da Disney. Pô! Assim não dá pra ver o fonte&#8230; o botão direito não mostra o menu. Esse web-designer sacaneou legal! Que eu faço? Começa descobrindo [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img title="try2hack.nl" src="../wp-content/uploads/2012/02/header.png" alt="try2hack.nl" width="222" height="173" /></p>
<p>O nível 3 é um saco pra quem não sabe o que fazer. Primeiro: se você erra a senha ou cancela o prompt, você é redirecionado para o site da Disney.</p>
<blockquote><p>Pô! Assim não dá pra ver o fonte&#8230; o botão direito não mostra o menu. Esse web-designer sacaneou legal! Que eu faço?</p></blockquote>
<p>Começa descobrindo a tecla de atalho para ver o código (CTRL+U no meu Firefox) ou você pode encontrar esta opção no menu &#8220;Exibir&#8221;.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot;&gt;
 &lt;!--
    pwd = prompt(&quot;Please enter the password for level 3:&quot;,&quot;&quot;);
if (pwd==PASSWORD){
alert(&quot;Allright!\nEntering Level 4 ...&quot;);
location.href = CORRECTSITE;
}
else {
alert(&quot;WRONG!\nBack to disneyland !!!&quot;);
location.href = WRONGSITE;
}
PASSWORD=&quot;AbCdE&quot;;
CORRECTSITE=&quot;level4-sfvfxc.xhtml&quot;;
WRONGSITE=&quot;http://www.disney.com&quot;;
 //--&gt;
 &lt;/script&gt;
</pre>
<p>Aí você, muito malandro, acha que a senha tá fácil e coloca lá: <span style="font-weight: bold; font-style: italic;">AbCdE</span></p>
<p>ou tenta acessar<span style="font-weight: bold; font-style: italic;"> level4-sfvfxc.xhtml</span></p>
<blockquote><p>Ai, caramba! Pero estoy seguro que el amor se acaba!</p></blockquote>
<p>Se você olhar o código mais atentamente, pode ver que as variáveis recebem os valores APÓS a validação, ou seja, há algo errado.</p>
<p>É claro que você percebeu antes de eu falar, mas o código abaixo está meio estranho:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot; src=&quot;JavaScript&quot;&gt;&lt;/script&gt;
</pre>
<p>Como assim? o atributo &#8220;src&#8221; define o nome do arquivo que contém um script. Ou seja, se você acessar <a href="http://www.try2hack.nl/levels/JavaScript" target="_blank">http://www.try2hack.nl/levels/JavaScript</a> (Salvar link como&#8230;) poderá ver o valor inicial das variáveis:</p>
<pre class="brush: jscript; title: ; notranslate">
PASSWORD = &quot;try2hackrawks&quot;;
CORRECTSITE = &quot;level4-kdnvxs.xhtml&quot;;
WRONGSITE = &quot;http://www.disney.com&quot;;
</pre>
<p>Aí ficou fácil!</p>
<p style="font-weight: bold;">O que aprender com o nível 3?</p>
<p>A mesma coisa que nos outros dois níveis: não adianta tentar esconder. Se a senha estiver no computador do usuário, uma hora seu sistema será acessado por indivíduos não autorizados.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.delarco.com.br/try2hack-nl-level-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>try2hack.nl: Level 2</title>
		<link>http://blog.delarco.com.br/try2hack-nl-level-2/</link>
		<comments>http://blog.delarco.com.br/try2hack-nl-level-2/#comments</comments>
		<pubDate>Tue, 07 Feb 2012 02:42:11 +0000</pubDate>
		<dc:creator>Leandro Del&#39;Arco</dc:creator>
				<category><![CDATA[cheats]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[informática]]></category>

		<guid isPermaLink="false">http://blog.delarco.com.br/?p=290</guid>
		<description><![CDATA[O segundo nível ainda é um desgosto para qualquer um que se preocupa com segurança. Apesar do código de validação não estar exposto no código-fonte da página, os dados &#8220;Usuário&#8221; e &#8220;Senha&#8221; estão armazenados no arquivo &#8220;.swf&#8221; (flash), que exibe o formulário de login. Ok! E como eu &#8220;abro&#8221; o swf? Primeiro, vamos baixar o [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter" title="try2hack.nl" src="../wp-content/uploads/2012/02/header.png" alt="try2hack.nl" width="222" height="173" /></p>
<p>O segundo nível ainda é um desgosto para qualquer um que se preocupa com segurança. Apesar do código de validação não estar exposto no código-fonte da página, os dados &#8220;Usuário&#8221; e &#8220;Senha&#8221; estão armazenados no arquivo &#8220;.swf&#8221; (flash), que exibe o formulário de login.</p>
<blockquote><p>Ok! E como eu &#8220;abro&#8221; o swf?</p></blockquote>
<p>Primeiro, vamos baixar o arquivo. Se você não sabe como baixar, é só clicar <a href="http://www.try2hack.nl/levels/level2.swf" target="_blank">AQUI</a> com o botão direito do mouse e selecionar a opção &#8220;Salvar link como&#8230;&#8221; (Firefox).</p>
<p>Para abrir o arquivo, você pode baixar um SWF Decompiler e ver o que o código faz exatamente. Mas como a segurança foi tão porcamente pensada, você pode usar o bloco de notas mesmo.</p>
<p>Abrindo o &#8220;level2.swf&#8221; no bloco de notas, basta localizar (F3) &#8220;txtUsername&#8221; ou &#8220;txtPassword&#8221;. O suposto programador é tão &#8220;bom&#8221; que, além de poder ver usuário e senha em texto puro, podemos ir para o próximo nível sem precisar efetuar a validação no site, pois sabemos que está em &#8220;./level3-.xhtml&#8221;. Não sabe onde colar isso? Darwin&#8230;</p>
<p style="font-weight: bold;">O que aprender com o nível 2?</p>
<p>Não adianta tentar esconder usuário e senha. Se você deixar esse tipo de validação para o computador do usuário, SEMPRE vai ter algum <span style="font-style: italic;">fidimascate </span>que vai descobrir.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.delarco.com.br/try2hack-nl-level-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>try2hack.nl: Level 1</title>
		<link>http://blog.delarco.com.br/try2hack-nl-level-1/</link>
		<comments>http://blog.delarco.com.br/try2hack-nl-level-1/#comments</comments>
		<pubDate>Tue, 07 Feb 2012 02:22:17 +0000</pubDate>
		<dc:creator>Leandro Del&#39;Arco</dc:creator>
				<category><![CDATA[cheats]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[informática]]></category>

		<guid isPermaLink="false">http://blog.delarco.com.br/?p=278</guid>
		<description><![CDATA[O try2hack.nl é um site que disponibiliza alguns desafios relacionados à segurança. Apesar de ser apenas um game, cada nível mostra um tipo de falha que ainda são comuns, graças à impudência de alguns administradores e programadores.]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-287" title="try2hack.nl" src="http://blog.delarco.com.br/wp-content/uploads/2012/02/header.png" alt="try2hack.nl" width="222" height="173" /></p>
<p>O <a href="http://try2hack.nl" target="_blank">try2hack.nl</a> é um site que disponibiliza alguns desafios relacionados à segurança. Apesar de ser apenas um game, cada nível mostra um tipo de falha que ainda são comuns, graças à impudência de alguns administradores e programadores. Como eu tive uma certa dificuldade na maioria dos níveis, resolvi escrever sobre os métodos que utilizei, pois tenho certeza que alguém sabe uma maneira mais fácil.</p>
<p>Nível 1:<br />
O primeiro nível é bem simples pode ser resolvido com uma rápida análise do código-fonte da página.</p>
<blockquote><p>Quê?! Código-fonte?</p></blockquote>
<p>Se você não sabe olhar o código-fonte de uma página, provavelmente não sabe o que é html e, muito menos, javascript. Ou seja, estude muito antes de tentar se aventurar nesse tipo de game.</p>
<p>Ok, qualquer ameba sabe que a validação de usuário/senha DEVE ser feita no servidor. Você pode até validar alguns outros campos (CPF, por exemplo) no browser com javascript, mas SEMPRE deve haver a mesma validação no servidor (burlar esse tipo de validação é relativamente simples).</p>
<p>Certo, olhando o código-fonte, achamos a senha no trecho:</p>
<pre class="brush: xml; title: ; notranslate">
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;
&amp;lt;!--
   function Try(passwd) {
      if(passwd == &amp;quot;h4x0r&amp;quot;) {
         alert(&amp;quot;Alright! On to level 2...&amp;quot;);
         location.href = &amp;quot;level2-xfdgnh.xhtml&amp;quot;;
      }
      else {
         alert(&amp;quot;The password is incorrect. Please don't try again.&amp;quot;);
         location.href = &amp;quot;http://www.disney.com/&amp;quot;;
      }
 }
//--&amp;gt;
&amp;lt;/script&amp;gt;
</pre>
<p>Será que existe MESMO alguém que ainda faz isso? Darwin&#8230; Darwin&#8230;</p>
<p style="font-weight: bold;">O que aprender com o nível 1?</p>
<p>Que, apesar de 90% dos usuários não saberem ler javascript ou se quer ver o código-fonte de uma página, não devemos deixar esse tipo de código/validação exposto para os usuários.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.delarco.com.br/try2hack-nl-level-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Criando Cheats: Prelúdio</title>
		<link>http://blog.delarco.com.br/criando-cheats-preludio/</link>
		<comments>http://blog.delarco.com.br/criando-cheats-preludio/#comments</comments>
		<pubDate>Mon, 07 Jun 2010 18:35:28 +0000</pubDate>
		<dc:creator>Leandro Del&#39;Arco</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[cheats]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://blog.delarco.com.br/?p=66</guid>
		<description><![CDATA[Estudo programação à anos e sempre tive maior interesse no que se refere à arte expressa em pixels. Que sou grande fã de jogos eletrônicos (um mid-core gamer, não casual, nem hardcore) não há dúvidas&#8230; e essa paixão estende-se além do ato de jogar e apreciar momentos únicos, que apenas orientais extraterresters (leia Miyamoto) conseguem [...]]]></description>
			<content:encoded><![CDATA[<p>Estudo programação à anos e sempre tive maior interesse no que se refere à arte expressa em pixels. Que sou grande fã de jogos eletrônicos (um mid-core gamer, não casual, nem hardcore) não há dúvidas&#8230; e essa paixão estende-se além do ato de jogar e apreciar momentos únicos, que apenas <em>orientais extraterresters </em>(leia Miyamoto) conseguem proporcionar.</p>
<h2>Senta que lá vem história</h2>
<p>Como todo bom gamer, não me contento em socar o último chefe e sair falando na escola (hoje em dia é twiter, né?) &#8220;ZEREI/TERMINEI/FECHEI MAIS UM JOGO&#8221;. Pq? A mágica está nos detalhes! Os detalhes que muitas vezes não percebemos quando jogamos pela primeira vez. Aquele canto que não serviu pra NADA durante o jogo, mas que estava lá para ser explorado.</p>
<p><img class="size-full wp-image-70 alignright" src="http://blog.delarco.com.br/wp-content/uploads/2009/10/smw_special_zone.PNG" alt="smw_special_zone" width="222" height="165" /></p>
<p>Qual apaixonado por games que terminou Super Mario World e não fez questão de conseguir os 100%? Ou quis passar todas as fases do &#8220;ESPECIAL&#8221; que não tinham relação alguma com o final do jogo?</p>
<p>Quem já jogou The Legend Of Zelda: Ocarina Of Time e não quis pegar as 100 gold skultullas mesmo sabendo que os rupees ilimitados (que vc tem direito ao final da quest) não valem o esforço?</p>
<p>Mesmo sentindo ausência da mágica nos jogos atuais, ainda não consigo &#8220;aposentar&#8221; um jogo logo após terminá-lo.</p>
<p>Atualmente faço questão de TER o video-game para poder jogá-lo (adquiri um Super Nintendo recentemente e já estou cotando um Megadrive), mas é impossível comprar todos os cartuchos, até pq alguns nem são comercializados hj em dia (Atari, Nintendinho etc). Então, como todo gamer que possui um computador e sabe da existência dos emuladores (<a href="http://www.zsnes.com/" target="_blank">ZSNES!</a>), baixei muitos jogos e terminei cada um deles.</p>
<p>Antes de continuar, queria deixar claro que não sou a favor da pirataria, apesar não ser completamente contra (tudo é relativo&#8230;).</p>
<p>Quem conhece um, sabe que a maior virtude do programador é a curiosidade. É claro que não fiquei apenas no &#8220;<em>Load Rom/Save State/Load State</em>&#8221; do ZSNES. Com o tempo fui descobrindo cada funcionalidade e o que me chamou a atenção foram os códigos que podiam ser inseridos para modificar a jogabilidade ou algum estado do jogo. Testei centenas de códigos em dezenas de jogos e chegou uma hora que não tinha como não me perguntar: como um código esquisito daquele (na época eu não sabia o que era base hexadecimal) podia fazer tanto &#8220;estrago&#8221; no jogo? E eu sabia que não podia ser nada projetado/previsto pelos programadores do jogo, pois não eram códigos digitados no controle (como uma sequencia de botões), ou inseridos no menu &#8220;cheat&#8221;.</p>
<p>Nesa fase, fiquei apenas na curiosidade mesmo, pois o material online sobre o asusnto era escasso e meu acesso à internet, mto raro. Tempos depois, qdo comprei o jogo Diablo (o 1 mesmo) e descobri que era possível jogar com outras pessoas na internet, passei várias madrugadas (contava os minutos antes das 00:00h para poder conectar) jogando com os, como diria <a href="http://terramel.org" target="_blank">o bomba</a>, &#8220;<em>amiguinhos virtuais</em>&#8220;. Até que um gringo filho de uma borboleta entrou na minha &#8220;<em>sala</em>&#8220;, zerou todos meus stats e removeu todos os meus itens. Não que eu não tenha chutado o cachorro por isso, mas ao passar o susto (raiva, ódio e outros sentimentos sem nome), fui procurar saber sobre códigos/trapaças para Diablo (o termo <em>cheater </em>era novidade pra mim). Qual não foi minha surpresa ao descobrir que o tal <em>programinha<a href="http://diablo.svatopluk.com/download/bobafett.stm" target="_blank"> </a></em><strong><a href="http://diablo.svatopluk.com/download/bobafett.stm" target="_blank">BoBaFeTT&#8217;s Diablo Trainer</a> </strong>podia editar, não só os stats e itens, como podia acrescentar itens que nem mesmo existiam no jogo. Aquela curiosidade sobre como funcionavam os códigos no emulador ZSENS voltou repentinamente, somada ao incrivel fato de poder adicionar elementos que o jogo não possuia originalmente. Devo ter ficado uns 2 dias sem dormir para poder testar todas as opções e armas.</p>
<p><em>[OFF] Btw, até hj não sei se desligaram os servidores de Diablo I ou se me baniram da Battle.net mesmo u.u [/OFF]</em></p>
<p><img class="size-full wp-image-78 alignright" src="http://blog.delarco.com.br/wp-content/uploads/2009/10/cheating1.JPG" alt="cheating1" width="246" height="117" /></p>
<p>Como nesse tempo eu já havia começado a programar, eu sabia que os stats, pontos de vida e mana estavam armazenados em variáveis e que o cheater, de alguma forma, alterava essas variáveis. Mas também não passou disso, pois muitos conceitos importantes ainda não me eram claros. Como um processo consegue &#8220;<em>modificar</em>&#8221; a memória de outro?</p>
<p>Então comecei a estudar o comportamento de outros cheaters, como o editor de saves de pokemon para gameboy, ou um executável modificado do jogo freecell que permitia mover qualquer carta para qualquer lugar. Cada um deles funcionando de uma forma diferente.</p>
<p>Aí, veio um amigão da escola e me convenceu de que eu só ia conseguir fazer esse tipo de coisa quando eu programasse fluentemente em Assembly e pudesse fazer qlq coisa em C. <strong>O que NÃO é verdade!!!</strong></p>
<p>Depois disso, só voltei a me interessar pelo assunto uns 5 anos depois.<br />
Em 2004 ou 2005 (não lembro) criei <span style="text-decoration: line-through;">copiei e compilei</span> um <em>cheater </em>em Visual Basic 6 para um MMORPG-modinha da época. Como eu apenas modifiquei alguns fontes que peguei na internet, não entendia completamente o que estava acontecendo. Ao ler artigos sobre o assunto e estudar o fonte, entendi que o código simplesmente modificava alguns dados que estavam armazenados na memória utilizada pelo jogo&#8230; <strong>há! é assim que aquele maldito bobafeet funcionava então!</strong></p>
<p>Passou um tempo, o cheater já estava famoso aqui na minha cidade e muitas lan-houses passaram a usá-lo. Esses &#8220;<em>bons jogadores</em>&#8221; sempre pediam para adicionar algum <em>feature</em>, tipo que o cheater possa jogar sozinho enquanto ele vê um video educativo no www.***tube.com. Mas tudo bem, moleques de 12 anos não precisam saber a diferença entre cheater e bot <img src='http://blog.delarco.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
O final <span style="text-decoration: line-through;">in</span>feliz dessa história eu deixo pra outro post.</p>
<p>Com as atualizações constantes do jogo, eu tb precisava atualizar os endereços de memória modificados pelo cheater, então as coisas começaram a fazer mais sentido. Utilizava o <a href="http://www.artmoney.ru/" target="_blank">ArtMoney</a> pra escanear a memória do jogo e atualizava a lista de endereços, coisa simples. Nesse processo de escanear e procurar novos endereços, comecei a perceber que vários outros locais armazenavam informações úteis para futuras funções do cheater. E com toda a curiosidade que um programador deve ter, fucei em cada canto do jogo para descobrir mais sobre o funcionamento do mesmo.</p>
<h2>E meu cheater?</h2>
<p>Pra que serviu toda essa lengalenga? Pra deixar claro que não adianta copiar e compilar os códigos postados aqui. Talvez vc consiga fazer um cheater <em>lecalzinho</em> pra algum jogo, mas só isso. Pra aprender, vc PRECISA ter a curiosidade. A curiosidade matou o gato, mas ensinou ele a utilizar mto bem as outras 6 vidas.</p>
<p>Então, no próximo post vou tentar passar o <span style="text-decoration: line-through;"><em>pouco</em></span> que sei sobre o tipo de cheater que eu considero mais fácil: os que editam a memória.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.delarco.com.br/criando-cheats-preludio/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Info Deku É&#8217;Rolla</title>
		<link>http://blog.delarco.com.br/info-deku-erolla/</link>
		<comments>http://blog.delarco.com.br/info-deku-erolla/#comments</comments>
		<pubDate>Sat, 16 Jan 2010 19:11:50 +0000</pubDate>
		<dc:creator>Leandro Del&#39;Arco</dc:creator>
				<category><![CDATA[hacking]]></category>
		<category><![CDATA[informática]]></category>
		<category><![CDATA[notícias]]></category>

		<guid isPermaLink="false">http://blog.delarco.com.br/?p=252</guid>
		<description><![CDATA[Hoje, 16/01/10, resolvi visitar o site Unidev (portal para desenvolvedores de jogos) para ler as notícias, ver projetos e tentar ajudar alguém no forum. Apesar de já estar ciente desde o dia 13 com o post No More Mr Nice Google do Cardoso, resolvi ler a notícia que tratava do cyber ataque contra o Google [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje, 16/01/10, resolvi visitar o site <a href="http://unidev.com.br" target="_blank">Unidev</a> (portal para desenvolvedores de jogos) para ler as notícias, ver projetos e tentar ajudar alguém no forum. Apesar de já estar ciente desde o dia 13 com o post <a href="http://meiobit.com/meio-bit/internet/no-more-mr-nice-google" target="_blank">No More Mr Nice Google</a> do Cardoso, resolvi ler a notícia que tratava do cyber ataque contra o Google e a outras dezenas de empresas.</p>
<p>Ao ler a notícia inteira, dei graças a Deus que ela foi copiada do site da Info (abril.com.br, sem link pra <span style="font-style: italic;">gonorância</span>), pois ainda prezo pelo portal que frequento desde o começo da década.</p>
<p>O autor do texto, Maurício Moraes foi muito infeliz em vários trechos. Os próprios leitores do site afirmam, em seus comentários, que o texto é extremamente tendencioso e nada imparcial.</p>
<blockquote><p>O ataque lançado por crackers da China contra o Google foi fatal.</p></blockquote>
<p>Foi fatal? Corram para as colinas! Sensacionalismo barato&#8230;</p>
<blockquote><p>Os crackers acessaram pelo menos duas contas do Gmail, ambas mantidas por ativistas chineses que lutam em defesa dos direitos humanos. Os criminosos conseguiram ler o assunto das mensagens. Isso pode ser o suficiente para descobrir muita coisa sigilosa. Ah, não acabou ainda. O Gmail de “dúzias” de contas de ativistas chineses que vivem nos Estados Unidos, na Europa e na China era acessado regularmente por terceiros. Isso é gravíssimo.</p></blockquote>
<p>Então, vamos raciocinar um pouco, coisa que o senhor Moraes não é capaz. Para um ataque que conseguiu &#8220;bagunçar&#8221; o google e outras dezenas de empresas decentes (Adobe, por exemplo), vc deve concordar que foram necessários vários experts com equipamentos de ponta ou, no mínimo, muito potentes. Não estou supondo, como o próprio google, que o responsável foi o governo chinês, senão poderia dizer que a mão-de-obra e recursos utilizados para o ataque foram praticamente ilimitados.</p>
<p>Okay, então temos um PUTA TIME COM AK-47&#8242;s invadindo uma escolinha e só conseguem levar 2 pirulitos? Isso, os responsáveis conseguiram acessar apenas 2 (sim, DUAS) contas do GMail <strong>E</strong> de forma RESTRITA, ou seja, só conseguiram ler o assunto das mensagens. Tudo bem que pelo assunto podemos deduzir um milhão de coisas, mas pqp! São apenas DUAS (DUAS!!!) contas em 87364357623423963896. Devo lembrar o senhor Moraes que &#8220;<strong>pelo menos</strong> duas contas&#8221; não é a mesma coisa que &#8220;<strong>apenas </strong>duas contas&#8221;.</p>
<p>Como a empresa explicou no<a href="http://googleblog.blogspot.com/2010/01/new-approach-to-china.html" target="_blank"> blog oficial</a>, as outras contas, que eram acessadas regularmente por terceiros, foram alvo de pura imbecilidade dos usuários que baixam o &#8220;<em>sua esposa num encontro de casais para swing.src</em>&#8221; ou caem em qlq outro tipo de phishing. Qual a culpa da empresa nesses casos? Claro que &#8220;é gravíssimo&#8221;, Sr. Moraes&#8230;</p>
<p>O Sr. Moraes usa chapéu de alumínio para evitar que o governo americano leia seus pensamentos, mas afinal devemos ou não nos preocupar? Acho que o google sempre fez um ótimo trabalho. É a única empresa que cria serviços REALMENTE úteis e que nenhuma outra tem interesse em criar, como o google maps. Também tenta inovar, com o Google Earth, mostrando o relevo no fundo dos oceanos. Tudo isso, disponível para qualquer &#8220;moraes&#8221; com acesso à internet! DE GRAÇA! É, nunca dei um centavo diretamente para o google&#8230; e vc? De acordo com o post no blog oficial, a empresa aprendeu com o ataque e já está trabalhando no problema para que não aconteça novamente. Melhor do que aprender com os erros é saber admití-los. Que outra empresa desse porte diria que teve propriedade intelectual roubada? No máximo um &#8220;acessaram uma área restrita da intranet com nenhuma informação relevante&#8221;.</p>
<p>Fica a minha opinião sobre o texto do cara ali de cima (que não merecia ter o nome citado mais de uma vez aqui) e sobre a empresa que mais se destacou nos últimos anos, inovou a internet e ainda tem planos para tornar nossa navegação algo muito mais prazeroso.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.delarco.com.br/info-deku-erolla/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>boost::asio &#8211; Introdução</title>
		<link>http://blog.delarco.com.br/boostasio-introducao/</link>
		<comments>http://blog.delarco.com.br/boostasio-introducao/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 19:49:26 +0000</pubDate>
		<dc:creator>Leandro Del&#39;Arco</dc:creator>
				<category><![CDATA[Boost]]></category>
		<category><![CDATA[C/C++]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://blog.delarco.com.br/?p=139</guid>
		<description><![CDATA[Apesar de pouco comentado (pelo menos nos forums que eu participo participava), Boost é um conjunto de bibliotecas que facilitam muito a vida do programador e , sem dúvidas, é o plus-plus do C++. Se vc ainda não conhece: http://www.boost.org/. Para quem não sabe, Boost.Asio é uma biblioteca multiplataforma (cross-platform) para programação de rede/comunicação (network) [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-197" src="http://blog.delarco.com.br/wp-content/uploads/2009/11/boost.png" alt="boost" width="277" height="86" />Apesar de pouco comentado (pelo menos nos forums que eu <span style="text-decoration: line-through">participo</span> participava), Boost é um conjunto de bibliotecas que facilitam <strong>muito </strong>a vida do programador e , sem dúvidas, é o <em>plus-plus</em> do C++. Se vc ainda não conhece: <a href="http://www.boost.org/" target="_blank">http://www.boost.org/</a>.</p>
<p>Para quem não sabe, Boost.Asio é uma biblioteca multiplataforma (<em>cross-platform</em>) para programação de rede/comunicação (<em>network</em>) e operações de entrada e saída em baixo nível (<em>low-level I/O</em>) que oferece, aos desenvolvedores, um modelo consistente e assíncrono.</p>
<p><em>(Essa definição foi descaradamente traduzida da encontrada no <a href="http://www.boost.org/doc/libs/1_38_0/doc/html/boost_asio.html" target="_blank">site oficial</a>)</em></p>
<blockquote><p>Então, o que eu posso fazer com isso?</p></blockquote>
<p>Você pode, por exemplo, usar sockets (TCP, UDP e ICMP), Timers e criar/manipular portas seriais.</p>
<blockquote><p>Mas eu sei fazer isso! É só incluir o winsock.h e&#8230; no linux é fácil tb&#8230;</p></blockquote>
<p>Não ter que se preocupar com o startup e cleanup do Winsock e não ter que colocar 8463763 <em>#ifdef</em>&#8216;s no meio do código já é um bom motivo para usar Boost.Asio. Se vc escrever &#8220;<em>socket.read_some(&#8230;);</em>&#8220;, vai funcionar em qualquer plataforma suportada (Win32/64, Linux kernel 2.4+, Solaris, Mac OS X 10.4+).</p>
<blockquote><p>Beleza! Cadê os exemplos?</p></blockquote>
<p>Antes disso, para não ficar perdido, é necessário entender como o Boost.Asio trabalha. Ao inves de oferecer um modelo genérico aproximado ao que há de comum entre as várias plataformas, a biblioteca apresenta uma nova proposta: para efetuar operações de entrada e saída seu programa precisa de, no mínimo, um objeto io_service (boost::asio::io_service). O objeto io_service funciona como um intermediário entre o seu software e o sistema operacional. Overhead? Tenha certeza que o boost faz esse intermédio da forma mais eficiente possível e, até hoje, nunca vi ninguém reclamando sobre o desempenho da biblioteca. A imagem abaixo (que foi retirada do site oficial) mostra o funcionamento do Boost.Asio para operações síncrona:</p>
<p><img class="size-full wp-image-198 alignleft" src="http://blog.delarco.com.br/wp-content/uploads/2009/11/sync_op.png" alt="sync_op" width="232" height="413" />1 &#8211; O programa inicia a conexão chamando o objeto i/o (socket, por exemplo);</p>
<p>2 &#8211; O objeto i/o encaminha a requisição de conexão para o objeto io_service;</p>
<p>3 &#8211; O objeto io_service faz uma chamada ao sistema operacional para realizar a conexão;</p>
<p>4 &#8211; O sistema operacional retorna um resultado para o objeto io_service;</p>
<p>5 &#8211; O objeto io_service &#8220;traduz&#8221; qualquer erro resultante na operação e retorna ao objeto i/o;</p>
<p>6 &#8211; O objeto i/o retorna o resultado para o programa.</p>
<p><span style="color: #ffffff">.</span></p>
<p><span style="color: #ffffff">.</span></p>
<p><span style="color: #ffffff">.</span></p>
<p><span style="color: #ffffff">.</span></p>
<p><span style="color: #ffffff">.</span></p>
<p>O modelo para operações assíncronas é representado pelo diagrama ao lado: <img class="alignright size-full wp-image-199" src="http://blog.delarco.com.br/wp-content/uploads/2009/11/async_op.png" alt="async_op" width="377" height="413" /></p>
<p>Ao invés de esperar cada etapa do modelo síncrono, aqui podemos passar uma função <em>handler</em> que será chamada assim que a operação for concluída, independente da ocorrência de erros.</p>
<p>As três primeiras etapas são praticamente idênticas ao modelo anterior (do ponto de vista do usuário/programador):</p>
<p>1 &#8211; O programa inicia a conexão chamando o objeto i/o (socket, por exemplo);</p>
<p>2 &#8211; O objeto i/o encaminha a requisição de conexão para o objeto io_service;</p>
<p>3 &#8211; O objeto io_service faz uma chamada ao sistema operacional para realizar a conexão;</p>
<p>Após as etapas indicadas, o sistema operacional indica o resultado da operação colocando-o em uma fila que será lida pelo objeto io_service, que por sua vez &#8220;traduz&#8221; qualquer mensagem de erro e chama a função <em>handler</em> passada como parâmetro pelo programa.</p>
<p>É importante comentar que, para que o objeto io_service possa tratar as tarefas/operações assíncronas pendentes, é necessário chamar <strong>io_service::run()</strong>.</p>
<p>A função <strong>io_service::run()</strong> retornará assim que não houver mais tarefa assíncronas pendentes.</p>
<blockquote><p>Okay! Então eu crio um objeto io_service e já era?</p></blockquote>
<p><strong>Aí é que está a grande maravilha do modelo proposto:</strong> usando vários objetos io_service (um em cada thread) e dividindo as operações entre eles, permitimos ao sistema operacional também dividí-las entre os vários núcleo disponíveis!</p>
<blockquote><p>Tá&#8230; e os exemplos?</p></blockquote>
<h2>Timer</h2>
<p>Para um <em>wait </em>síncrono (só retorna depois de completo):</p>
<pre class="brush: cpp; title: ; notranslate">
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;boost/asio.hpp&amp;gt;

using boost::asio::io_service;
using boost::asio::deadline_timer;

int main(int ac, char ** av)
{
    io_service ios;

    deadline_timer t(ios);
    t.expires_from_now(boost::posix_time::seconds(5));

    std::cout &amp;lt;&amp;lt; &amp;quot;Esperando 5 segundos...&amp;quot; &amp;lt;&amp;lt; std::endl;

    t.wait();

    std::cout &amp;lt;&amp;lt; &amp;quot;Continua...&amp;quot; &amp;lt;&amp;lt; std::endl;
    return 0;
}
</pre>
<p>Para um timer assíncrono, precisamos de um <em>handler</em>:</p>
<pre class="brush: cpp; title: ; notranslate">

void handler(boost::system::error_code &amp;amp; ec)
{
	if(ec)
		//erro
	else
		//ok
}
</pre>
<p><span>Então, podemos usar o <em>wait </em>assíncrono:</span></p>
<p><span>
<pre class="brush: cpp; title: ; notranslate">
t.expires_from_now(boost::posix_time::milliseconds(400));
t.async_wait(handler);
ios.run();
</pre>
<p></span></p>
<p>Um exemplo de timer assíncrono:</p>
<pre class="brush: cpp; title: ; notranslate">
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;boost/asio.hpp&amp;gt;
#include &amp;lt;boost/bind.hpp&amp;gt;

using boost::asio::io_service;
using boost::asio::deadline_timer;

void handler(int segundo, boost::system::error_code &amp;amp; ec)
{
	if(!ec)
		std::cout &amp;lt;&amp;lt; &amp;quot;Esperando... &amp;quot; &amp;lt;&amp;lt; segundo &amp;lt;&amp;lt; std::endl;
}

int main(int ac, char ** av)
{
	io_service ios;

	for(int i = 1; i &amp;lt;= 5; i++)
	{
		deadline_timer * t = new deadline_timer(ios);
		t-&amp;gt;expires_from_now(boost::posix_time::seconds(i));
		t-&amp;gt;async_wait(boost::bind(&amp;amp;handler, i, boost::asio::placeholders::error));
	}

	ios.run();

	std::cout &amp;lt;&amp;lt; &amp;quot;Continua...&amp;quot; &amp;lt;&amp;lt; std::endl;
	return 0;
}
</pre>
<p>Repare que não me preocupei em manter uma referência para os objetos criados dinamicamente (para apagá-los posteriormente), pois o programa é terminado logo após o retorno do último timer assíncrono.</p>
<h2>Socket</h2>
<p>Um exemplo simples de socket (tcp) que se conecta ao site:</p>
<pre class="brush: cpp; title: ; notranslate">
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;boost/asio.hpp&amp;gt;

using boost::asio::io_service;
using boost::asio::ip::tcp;

int main(int ac, char ** av)
{
    io_service ios;

    tcp::socket sck(ios);
    tcp::endpoint endp(boost::asio::ip::address::from_string(&amp;quot;64.191.3.101&amp;quot;), 80);

    try
    {
        sck.connect(endp);
        std::cout &amp;lt;&amp;lt; &amp;quot;Conectado!&amp;quot; &amp;lt;&amp;lt; std::endl;
    }
    catch(boost::system::system_error &amp;amp; error)
    {
        std::cout &amp;lt;&amp;lt; &amp;quot;Erro ao conectar: &amp;quot; &amp;lt;&amp;lt; error.what() &amp;lt;&amp;lt; std::endl;
    }

    std::cout &amp;lt;&amp;lt; &amp;quot;Continua...&amp;quot; &amp;lt;&amp;lt; std::endl;
    return 0;
}
</pre>
<p>Ou um resolver:</p>
<pre class="brush: cpp; title: ; notranslate">
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;boost/asio.hpp&amp;gt;

using boost::asio::io_service;
using boost::asio::ip::tcp;

int main(int ac, char ** av)
{
    io_service ios;

    tcp::resolver resolver(ios);
    tcp::resolver::query query(&amp;quot;blog.delarco.com.br&amp;quot;, &amp;quot;http&amp;quot;);
    tcp::resolver::iterator iter = resolver.resolve(query);
    tcp::resolver::iterator end;

    while (iter != end)
    {
        tcp::endpoint endpoint = *iter++;
        std::cout &amp;lt;&amp;lt; endpoint &amp;lt;&amp;lt; std::endl;
    }

    return 0;
}
</pre>
<div style="overflow: hidden;width: 1px;height: 1px">#include &lt;iostream&gt;<br />
#include &lt;boost/asio.hpp&gt;using boost::asio::io_service;<br />
using boost::asio::deadline_timer;int main(int ac, char ** av)<br />
{<br />
io_service ios;</p>
<p>deadline_timer t(ios);<br />
t.expires_from_now(boost::posix_time::seconds(5));</p>
<p>std::cout &lt;&lt; &#8220;Esperando 5 segundos&#8230;&#8221; &lt;&lt; std::endl;</p>
<p>t.wait();</p>
<p>std::cout &lt;&lt; &#8220;Continua&#8230;&#8221; &lt;&lt; std::endl;</p>
<p>return 0;<br />
}</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.delarco.com.br/boostasio-introducao/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

<!-- www.000webhost.com Analytics Code -->
<script type="text/javascript" src="http://stats.hosting24.com/count.php"></script>
<noscript><a href="http://www.hosting24.com/"><img src="http://stats.hosting24.com/count.php" alt="web hosting" /></a></noscript>
<!-- End Of Analytics Code -->

