Guia Completo de Como fazer um Trojan em Delphi

Started by Casanova, 11 de April , 2007, 04:42:21 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Casanova

Pessoal estou traduzindo o livro A Complete Guide on How to Make a Trojan in Delphi não me lembro o lugar em que achei foi fuçando em sites Americanos sobre Hacking. Assim que vou fazendo os exemplos também irá surgir duvidas, gostaria que se alguém com conheciimentos em Delphi pudesse esclarecer seria otimo.
Também passo o que sei no meio do tuto mas mantendo o conceito do mesmo, assim que souber os autores eu passo aqui.
Espero que gostem...

Primeira Entrega
********************



Atraves desse tuto vc vai ganhar conhececimento de como se programa uma ferramenta de administração remota. Este tuto esta designado para progrmação em Delphi, que é uma aplicação rapida de desenvolvimento(RAD) para Windows.

Este tuto é compativel com a mais nova versão do Delphi, incluindo a versão 5 e 6.

Agora que vc tem obtedido uma copia do Delphi, vamos começar o programar. Agora se vc é iniciante em Delphi eu sugiro que vc comece na seção para iniciante aqui neste tuto, mas se vc já tem um conhecimento básico pode ir pular esta seção.


                                         Seção Iniciante
                                         ***************

Esta seção te dará um bom conhecimento para entender os codigos que usaremos mais adiante.
É recomendado que vc tente cada novo conceito encrontrado e quando vc tiver completado essa seção, vc será capaz de programar uma aplicação Client/Server.




Delphi IDE:
**********

Abra o Delphi. O que vc vê é o Delphi IDE, que significa Ambiente de Desenvolvimento Integrado (IDE).
Ele é dividido em 4 partes: Uma barra de titulo, que contem as barras de ferramentas e a paleta de componente, o Objetc Inspector, o Object TreeView, e o lugar de trabalho - que é mostrado como Form1 por enquanto. Você pode fechar o objeto TreeView porque não será usado.

O Lugar de Trabalho
*******************

Inicialmente nosso lugar de trabalho é o Form1. Esse é a nossa tela de desenho vamos dizer assim, onde vc desenhará a aparencia de seu projeto (como aqui no caso vc desenhará a cara do seu Trojan ;). Para pegar de exemplo abra um Notepad, ou WordPad, ou uma caixa de dialogo, uma calculadora etc... esses são todos exemplos de Form (ou Windows ou seja Janelas, deu pra entender né pessoal,as vezes é enfatizado demais algo porque não foi usado desenho para demonstrar, diz o ditado que uma image vale mil palavras, gostaria de uma agora ;). Atrás do Form o Code Editor ( o editor de codigo), que é onde vc vai digitar seu codigo, o codigo do Trojan. Use a tecla F12 para alternar para o Code Editor.


Nosso Primeiro Programa
***********************

Primeiramente, com o mouse segure clicado na beira do Form1 e arraste-o deixando-o do tamanho que vc quiser. Agora é onde o Object Inspector entra no "jogo" - note que há um menu de opção no topo do Object Inspector onde está escrito Form1. Você pode notar embaixo duas abas uma escrita Properties e outra Events elas revelam as propriedades e eventos do Form1.

Agora com o cursor do mouse vá até a barra de titulo sobre a Component Pallete (Paleta de Componente.) A Paleta de Componete (observe que interessante lembra que eu disse que o form é como uma tela?! rsss olha a paleta ai;) é onde tem as abas e nessas abas está escrito Standard, Additional, Win32 etc...Click no componente botão. Esse componente tá escrito OK nele. Agora click em algum lugar de seu Form, pronto vc criou um botão. Salve seu projeto, para isso vá em: File -->Save all, escolha um lugar para salva-lo, click em save para unit1, agora Project1 será o seu nome .EXE, então caso queira pode digitar um nome de seu gosto exemplo: 'PrimeiroPrograma' e salve.

Click na Barra de titulo do projeto (a barra de titulo é esse que esta escrito, File, Edit, Search etc...ai vc vai encontrar Project)  e em Compile All Projects. Isso pode levar alguns segundos porque o que está acontecendo aqui é que o Delphi esta convertendo seu projeto em um arquivo executavel.
(Uma maneira facil de se fazer isso é apenas clicando em run esse run tem uma imagem + OU - assim >, fazendo isso vc já criou o seu executavél, ou também clicando em F9 ;)

Continuando...

Vá para sua pasta onde vc salvou o seu projeto e execute seu PrimeiroPrograma.exe.

OK, isso não é muito. Na verdade clicando no botão vc pode perceber que nada aconteceu. Isso é basicamente o esqueleto de uma aplicação Windows com um botão inutil. Vamos fazer alguma coisa.

Volte para o Delphi, selecione o seu Form, e dê uma olhada em suas propriedades. Trabalhando com o Object Inspect aqui, desça para a propriedade Caption e click nela logo vc vê que a palavra form em frente dela fica azul, escreva 'Primeiro Programa' para mudar a Caption do Form.( tipo vc pode interpretar o Caption como uma maneira de vc colocar um apelido para o seu componente, porque apelido e não nome, meu caro Casanova? Porque o nome iremos usar mais adiante OK, isso é apenas minha interpretação é apenas minha sugestão, porque não sei se vc sabe mas a aprendizagem fica facil se associarmos algo a ela, ao que estamos aprendendo ! ;). Faça o mesmo com o botão, apenas mude a caption para 'Click em Mim'. Agora escreveremos algum codigo - selecione o Botão e click na aba Events do Object Inspector. Selecione o evento OnClick, e digite um nome para este evento no espaço em branco. O nome é de sua escolha, algo como 'QuandoBotao1forclicado' será excelente e então pressione enter.

(Sugestão minha é que vc sempre salve seu projeto vai que acontece algo, tipo acabar a força ai vc teria que fazer tudo de novo)

Estamos agora em nosso Code Editor e nossa Unit1.pas tem as seguintes linhas:


procedure TForm1.
QuandoBotao1forclicado(Sender:TObject);
begin

end;


Você não precisa conhecer a fundo todo o agora, vc apenas precisa saber o que programaremos entre Begin e End; que será executado quando o Botão é clicado pelo usuario em RunTime (tempo de execução).
RunTime é quando o .EXE é executadoi o oposto de Design - Time (Tempo de Desenho) que é onde estamos agora.

Digite isso entre Begin e End; ShowMessage('Security Darkers'); //olha a puxa saquice =)

Compile o seu projeto(Project --> Compile All Projects (mas lembre-se que vc sabe compilar de maneira mais facil ;), e então execute ele, e o que acontece quando vc clica sobre o botão ?



Isso é um pouco interessante. O codigo ficará assim:

procedure TForm1.
QuandoBotao1forclicado(Sender:TObject);

begin

ShowMessage('Security Darkers');

end;

Você não precisa identar a linha ShowMessage , mas é bom para legibilidade do codigo quando ele começar a crescer. (Traduzindo, não precisa dar um espaço no ShowMessage note que há um pequeno espaço da margem mas é bom para o codigo ficar legivel).
Uma outra coisa é o nome de nosso Button1 (Botão1) no evento OnClick. Nós temos chamado de 'QuandoBotao1forclicado' mas qualquer nome pode ser dado, é apenas o nome do Event. Também, Delphi pode não ser Case Sensitive (SHOWMESSAGE... será excelente, quer dizer o codigo funcionará normalmente) mas uma pratica comumente usada é começar cada palavra com uma letra maiscula assim como fizemos ( ShowMessage ). 

anakim

aff mano qt receita d bolo, até onde ta chegando isso , :(  , se o kra tem interesse q ele q rale pra fazer, essa parada d dar tudo prontinho pra pessoa nao da futuro.
Why use Windows? If I have the door ;-)

Casanova

Anakim é vc acha ?

Então vou seguir o seu conselho, hoje faria a entraga da segunda parte, no entanto acredito que até eu iria aprender mais com isso. Mas vamos ver vou esperar o conselho de mais um. Valeu !!!!

rog

aproveitando o assunto

alguem ja usou kilix no para compilar delphi no linux ?

rog
realty.sys is corrupt :  reboot the universe (Y/N)

Hacker Xtreme

num acho q isso seja receita de bolo, ninguém aprende nada sem ler ou tentar, quem tentou digitou o texto pq conseguiu e o msm queria compartilhar.. =)..

Casanova

************SEGUNDA ENTREGA***************



Comentario
**********

Comentario são linha de texto em sua Unit que não faz nada naturalmente é apenas para referencia. Aqui estão alguns exemplo de comentarios em Delphi:

//duas barras é uma maneira de comentario

{aqui nós temos um outro comentario}

{
este comentario está dentro das chaves
como o exemplo acima
}

Eles podem ser uteis se vc quer anotar algo em sua Unit lembraça, para vc se lembrar. Note que se vc ver as chaves com um simbolo do dollar dentro assim { $R *.dfm} que está em sua Unit1 no momento, isso é uma diretiva do compilador. Diretiva do compilador é algo que nós não usaremos.


Variaveis:
**********

Voltando para nosso programa, vc notará que há mais nele do que apenas o Event do nosso Button mas que será explicado mais adiante. Apenas note que seu codigo principal está embaixo da linha 'implementation'.

Você precisa declarar variaveis antes para que elas possam ser usadas e vc declara elas abaixo da palavra chave 'var' ( a menos que elas sejam global que nós veremos mais adiante). Vamos colocar variaveis dentro do evento OnClick do Button:


procedure TForm1.
QuandoBotao1forclicado(Sender:TObject);

var
 NumeroUm: integer;
 NumeroDois: integer;
 OResultado: integer;


begin

 NumeroUm :=10;
 NumeroDois :=5;
 OResultado := NumeroUm + NumeroDois;
 ShowMessage('O resultado da soma é = ' + IntToStr(OResultado));

end;

Ok, explicaremos o que fizemos aqui. A seção var é onde nós estamos declarando tres variaveis do tipo integer. Um integer é um numero - tente digitar 'integer' em sua Unit e pressione F1 isso trará o help do Delphi. Isso mostrará a vc uma lista e algumas outras variaveis. O help do Delphi pode ser muito util quando vc estiver desenvolvendo suas aplicações.

Agora a seção var vem sempre antes do Begin e depois do procedure ou palavra chave function (palavra chave: uma palavra reservada para o compilador Delphi, Ex: vc não pode chamar uma variavel de Begin, End, procedure etc..) e vc atribui valores e usa eles no bloco principal do codigo. O codigo principal do codigo está entre o Begin e End;

Note cada linha no codigo principal termina com ponto e virgula. O ponto e virgula indica o fim da setença. O ':=' é um sinal de atribuição, então vc está atribuindo 10 a variavel NumeroUm integer, e então atribuindo a variavel OResultado os valores de outras duas variaveis somadas juntas.

A linha final aqui revela uma caixa de mensagem mostrando: O resultado da soma é = 15. (Talves vc esteja  se perguntando porque vc usou todos aqueles sinais no final e não apenas colocou ShowMessage('O resultado da soma é = OResultado') ; continue lendo ;)

Você precisa do sinal de + para dizer adicione este conteudo da variavel. ( Vou tentar explicar aqui, o que eu entendi se quiserem ou puderem me corrigir caso tenha entendido errado, o que entendi é que a frase termina quando vc usa a aspa simples ', ou seja terminou em ( é = ' <--terminou aqui) então usamos o sinal de + como disse esta adicionando o conteudo da variavel no caso a soma das duas outras variaveis logo então estaremos convertendo IntToStr (de integer para string (ou seja de numero para letra) precisamos usar os parenteses () e dentro dele dizemos o que queremos que seja convertido no caso a variavel OResultado. É isso ai, foi assim que entendi. ;)

Continuando com o tuto...


Também usamos IntToStr() como não pode mostrar uma variavel integer nesse tipo de situação, vc precisa converter isso para uma string.
Aqui algumas outros tipos de variaveis com exemplos:


STRING - Uma string é algo como 'abc123 ?><;xzs'
CHAR - Essa é um unico caractere tal como 'A' ou '3' ou '?'.
BOOLEAN - Uma variavel Boolean pode ser um ou outro True (verdadeiro) ou False (Falso).

*****************************************************************************************************************************
Sou eu que estou traduzindo, desculpa os erros de digitação. Valeu por comentarem !!!
Talvez alguns irão concordar comigo, outros sei lá, mas alguns livros de hoje em dia até alguns antigos falam SOBRE o assunto são livros que sempre deixam duvidas e até desanimam os que querem aprender, acredito que o certo nos livros, em tutos ou quando vc estiver ensinando alguém vc falar COMO . Exemplo:

Sobre
*******
Isso é um programa ftp ele serve para conectar via ftp depois de conectado vc pode istalar um trojan etc...

Como
******

Esse é um programa ftp com ele vc pode conectar em outros pcs , talvez vc esteja se pergntando como conectar em outro pc com ftp? Vá em excecutar ( aqui vamos usar o ftp do Windows no entanto há programas com interfece grafica) vamos lá, abriu o executar? Otimo então digite : ftp ( agora pressione Enter) etc...

Deu para perceber a diferença né?

Vamos pensar, se vc está escrevendo um tuto ou um livro para ensinar alguém  acredito que vc está escrevendo para a pesssoa aprender com o seu tuto ou seu livro, não é?
Do contrario porque escrever algo de modo vago para deixar a pessoa na duvida?
Disse um sabio aquele que tem medo  de passar o seu conhecimento é porque tem o conhecimento Limitado.

Caso vcs quiserem que eu pare de traduzir o artigo eu paro de sua sugestão.

Antes de darem ou interpretarem de forma errada ou da forma que não quis passar vou sugerir algumas interpretações;

1= É melhor escrever falando o Como do que o Sobre...

2= Darkers é o melhor site sobre hacking do Brasil

3= Preciso tomar banho hoje....

4= Vamos colaborar com nossos Conhecimentos....

5= (Este é seu) ...........



*************************************************************************************************************************

rog

bom isso nao tem nada a ver com trojan (ainda) mas eu gostei

esta me lembrando os tutos do dark side, bem feitos e bem explicados, eu nao programo delphi mas se vc continuar assim eu vou baixar o kilix para testar mesmo

rog
realty.sys is corrupt :  reboot the universe (Y/N)

bironet

Hum  muito bem feito o tutorial, bem simples  e explicado apesar de ser "receita de bolo" acho que muita gente aqui
não tem nem noção de como fazer um trojan. Resumindo Acho que realmente temos post's "inuteis " e que queimam
o nível do forum, mas nem todos.
Vamos ajudar mais e criticar mesmo.
BirOx

Casanova

Como eu disse aqui está os autores eu acho pq no paper esta permitido para então o nome deles mas não sei se foi eles que são os autores mas está ai :

Christopher Rainbird, Plymouth, Devon, PL8 IDY, UK

**********************************TERCEIRA ENTREGA****************************************


IF THEN  ESLSE
**************

Vamos começar um novo projeto ( File -->New-->Application) e coloque os seguintes componentes: um Botão, um Label e um Memo em seu Form. Eles serão encontrados na aba Standart na Component Palette(Paleta de Componente). Agora dê dois click em seu Button(Botão).Isso é um atalho para fazer o que fizemos antes -
isso cria automaticamente um codigo no evento OnClick para esse Botão, mas por hora é dado um nome padrão ButtonClick.

Voltemos para o seu Form e briquemos com os seus componentes, posicionando o tamanho etc, e chequemos algumas de suas propriedades. Vc pode configurar a propriedade Font, a cor da font e tamanho, cor do Memo, adicione um ScrollBar ao Memo(para isso no Object Inspector vc encontrará ScrollBars na frente vai estar assim ssNone, brinque um pouco mude e veja como ficou;) - tudo é feito em tempo de desenho. Vamos fazer mudanças em tempo de execução - Volte para o seu Unit e coloque esse codigo:


procedure TForm1.Buttom1Click(Sender: TObject);
var
 s: string;

begin
 
  s:='Essa é nossa nova Caption.';
 
 if Label1.Caption = 'Label1' then
   
  begin 
    Label1.Caption:=s;
    Memo1.Lines.Add('A Caption do Label1 tem sido mudada!');
 end;
end;

Para nossa declaração if(se) - nós estamos dizendo se a condição é verdadeira then (então) execute o bloco do codigo a seguir começando logo apos begin e terminando no end;.
A condição esta entre as palavras chaves if e o then, ( Eu te pergunto amigo, e se vc apagar o conteudo do caption do Object Inspector  e deixa-lo em branco ? O que vai acontecer quando vc executar o programa ? Qual a sua resposta ? Está certo quem disse que nada acontece com o label, seja o pragrama nada faz. No label não aparece mais a palavra, 'Essa é nossa nova Caption.' e nem aparece nada no memo. Certamente vc sabe o porque ? Não? OK... vamos explicar, vamos dar uma estudada no seu codigo:

if label1.Caption = 'label1' then {traduzindo fica assim; se label1.Caption for igual(=) a 'Label1' então vc vai executar o que está aqui embaixo} deu pra entender?

O codigo só vai executar se o que estiver no label1.caption for label1 ! Tente mudar, sei lá coloque outro nome no caption do Object Inspector, tente o seu nome ou Darkers. Entendeu galera espero ter explicado bem.)

Continuando com o tuto...

O codigo que é executado também mostra como vc adiciona linha ao Memo(vc precisa usar o nome do memo, nesse caso Memo1) (Aqui vou explicar uma coisa também que não expliquei estava esperando o momento certo mas quando será o momento certo não é? Sempre que vc chama um amigo ou um cachorro é pelo nome não é?
Talvez vc diga, não Casanova é pelo apelido que eu chamo ! Ichi me tirou heim ! Mas no caso do cachorro vc o chama pelo nome não é ? Ah... Ok, é exatamente o mesmo com os componentes vc deve chama-lo pelo nome digamos que vc mudou o nome do Memo1 para Dunha, e mude também na Unit onde está Memo1 mude para Dunha e agora execute. Rsss deu certo não é? Lembre-se sempre chama-se os componetes pelo nome. Mas Casanova vc não disse onde muda o nome? Bem lembrado, vá no Object Inspector e procure por Name então é ai.=).

Continuando com o tuto...

...O codigo que é executado também mostra como vc adiciona linha ao Memo(vc precisa usar o nome do memo, nesse caso Memo1) e a mudança na Caption do Label1 mostra como faz uma mudança em tempo de execução. Para entender este conceito, podemos adicionar uma seção else;


procedure TForm1.Buttom1Click(Sender: TObject);
var
 s: string;

begin
 
  s:='Essa é nossa nova Caption.';
 
 if Label1.Caption = 'Label1' then
   
  begin 
    Label1.Caption:=s;
    Memo1.Lines.Add('A Caption do Label1 tem sido mudada!');

 end <--{observe aqui sem o ponto e virgula}   

else begin
Memo1.Lines.Add('Nós estamos em outra seção de nosso codigo');
end;
end;


OK agora note que nós tiramos o ponto e virgula do end apenas antes do else. Isso é porque quando vc usa um ';' ponto e virgula em um end; isso marca o fim do bloco. Nós não queremos terminar o codigo antes nós queremos associar a seção else dentro desse bloco. Bem isso é legal, compile e execute e veja o que acontece - vc pode calcular o porque. Depois de clicar em nosso botão uma vez, nós temos claro uma mudança em nosso label, então quando vc clicar no botão uma segunda vez, a condição if avalia como False(Falso) (ou seja não é verdadeiro, isso não é igual a 'Label1') e a outra seção else é executada entre o else, begin e end; - Aquele begin e end poderia parecer assim:

Else         else begin        ELSE BEGIN
Begin
         
End;         end;               END;

Isso apenas demonstra como o Delphi não é case sensitive e o espaço entre os codigos não importa. Eu prefiro a maneira que nós colocamos o codigo em nossa Unit.

   
Vamos introduzir um componente Edit. Pegue um e coloque em qualquer lugar de seu Form (está na aba Stantard novamente - fique com o mouse sobre os componentes e surgirá o nome do componente, assim vc vai pode-lo acha -lo caso não o conheça.). Depois de posto volte para a Unit e mude o codigo como segue:

procedure TForm1.Button1Click(Sender: TObject);

var
 i : integer;
begin
 i :=StrToInt(Edit1.Text1);
 if i > 10 then
   begin
      Memo1.Lines.Add('O valor no Edit é maior que 10.');
   end
   else begin
      Memo1.Lines.Add('O valor no Edit não é maior do que 10.');
   end;
end;

Teste isso.(Talvez vc se pergunte, mas como testo isso meu caro Casanova? vc ponhe numero no edit, humm aqui coloquei 11 e deu que O valor no Edit é maior que 10. lá no Memo, agora mude para um numero menor que 10, e vc já sabe o que vai aparecer né?). Note que se vc tiver qualquer outra coisa no Edit além de numero vc verá um erro.(Aqui coloquei a letra 'a' e me apareceu um erro, e pessoal quando aparecer estes erros para vcs vc clica em ok e aperte simultaneamente CTRL + F2 control F2 ao mesmo tempo, o tuto explica o porque isso acontece vamos continuar). Isso porque nós convertemos o conteudo do Edit para integer então podemos atribuir isso a 'i'. Nós fazemos isso usando a função StrToInt (nós falaremos sobre funções mais adiante). Edit1.Text está dizendo a propriedade do Text do Edit1. Dê uma olhada no Object Inspector, isso dirá Edit1 no momento, mas vc pode deletar isso. O resto é explicado por si mesmo - se i (o valor no Edit1) é maior do que 10 então..

Nós temos introduzido o operador maior que (>) aqui. Abaixo está alguns outros operadores que vc pode usar:

MATEMATICOS: +(Adiciona), -(Subtrai), *(Multiplica), div(Divide).

LOGICO: and: if (i = 6) and (ii =5) then
        or:   if (i = 6) or (ii = 5) then

COMPARAÇÃO: >(Maior que), <(Menor que), =( Igual á),
         <>(diferente de), <=(Menor do que ou igual á),
          >=(Maior do que ou igual á).

Nota: Não confunde o operador de atribuição ':=' com o '='.

Ninho de IF
***********


Se vc seguir uma sentença if com uma outra setença if, isso será um ninho de ifs. Você naturalmente faria isso porque vc quer checar algumas condições. Aqui esta uma modificação para o nosso Unit para demonstrar:

     
procedure TForm1.Button1Click(Sender: TObject);

var
 i : integer;
begin
 i :=StrToInt(Edit1.Text1);
 if i > 10 then
   begin
 if i = 15 then
   begin
   Memo1.Lines.Add('** O valor de i é 15 **');
  end;
      Memo1.Lines.Add('O valor no Edit é maior que 10.');
   end
   else begin
      Memo1.Lines.Add('O valor no Edit não é maior do que 10.');
   end;
end;


Tente isso. Então "i" é maior do que 10, então nós entramos no primeiro bloco onde a setença if é checada.Se essa sentença for verdadeira, então entramos nesse bloco de codigo if. Quando deixamos esse bloco de codigo no end; - nós ainda executaremos o diretorio da linha abaixo isso porque é parte de nosso primeiro bloco de codigo(porque i é maior do que 10), mas nós deixaremos isso ai - saimos para a seção else.(Entenderam pessoal? Vc lembra que se vc colocar um numero maior que 10 irá mostrar esta mensagem, O valor no Edit é maior que 10. Então nesse caso estamos colocando 15... é provavelmente vc já sacou;).

ARRAYs:
*******

Um array é uma coleção de valores. Isso é uma variavel, mas algumas vezes melhor do usar 5 variaveis strings, vc pode querer usar um array do tipo string para conter as 5 strings. Aqui está um exemplo de declaração:



var
MeuArray: array[0..4] of string;

Então vc tem declarado um array em uma seção var, e vc tem declarado isso contendo 5 strings. Você vê *Object Pascal* arrays (assim como muitas outras linguagens de programação) são baseada-zero, então 0 será o seu primeiro array(embora eles não tem de ser).

*Object Pascal* - Essa é a linguagem que nós estamos compilando.
Nós  podemos estar usando Delphi, que é o pacote todo - Componente e tudo, mas o atual codigo é Object Pascal.

Então aqui está como vc atribuiria strings a esse array:

MeuArray[0] :='Esse é nosso primeira string no array';
MeuArray[1] :='Esse é nosso segunda string no array';
MeuArray[2] :='Esse é nosso terceira string no array';
MeuArray[3] :='Esse é nosso quarta string no array';
MeuArray[4] :='Esse é nosso quinta string no array';


E para funcionar com uma certa string, vc poderia usar o nome do array(MeuArray) e o index da string que vc quer dentro dos colchetes[]. Exemplo:
Memo1.Lines.Add('Está escrito no terceiro array:' + MeuArray[2]);



Loops
*****

Loop (traduzindo aqui galera loop quer dizer um procedimento ou conjunto de instrusões em um programa de computador que são executadas até que uma condição especifica seja satisfeita ou até que o programa seja concluido) é usado quando vc quer fazer algo repetir algumas vezes, até uma condição ser encontrada, ou por uma outra razão.
Há 3 tipos principais de loops, o For, o While, e o Repeat. Falaremos deles separadamente.


O Loop FOR
**********

Muito comumente usado. Comece um novo projeto e coloque um Memo  e um Button em seu Form. Vamos programar o evento OnClick do Button como se segue;


procedure TForm1.Button1Click(Sender: TObject);

var
 int: integer;

 begin
   Memo1.Clear; {isso limpa o Memo}
 
   for int := 1 to 10 do

 begin
   
  Memo1.Lines.Add(IntToStr(int) + 'vezes de loop completo.');

 end;
end;

Eu deixei um comentario aqui para vc saber o que a setença faz.
Então o que fizemos aqui? - Nós estamos dizendo de 1 há 10 faça o que está dentro do begin e end; apenas depois do (do). A primeira vez estamos atribuindo ao 'int' com 1 e cada vez que completar o loop, é acrecentado mais 1 ao 'int'.

O Loop While
************

O Loop While repetirá uma condição se esta condição é verdadeira. Uma vez que o conjunto é falso, o loop termina. Exemplo:

procedure TForm1.Button1Click(Sender: TObject);

var
 int: integer;

 begin
   Memo1.Clear;
   int := 1;
 
 while int <> 10 do
   begin
     
     Memo1.Lines.Add(IntToStr(int) +'vezes de loop completo.');
     Inc(int); {isso aumenta mais 1 ao int}

    end;
  end;

Isso executará o loop 9 vezes na nona vez o int é incrementado pelo 1 então fica igual a 10. Claro a condição colocada aqui é while int é (<>) 10 então quando ele fica igual a 10, a condição torna-se False e o loop termina.


Loop Repeat
***********

Muito similar ao While mas a condição é checada no fim do loop, melhor do que no começo como no loop while. Ex:

 
repeat {nós teremos incrementado int por 1 apenas antes do repeat}
 
  Memo1.Lines.Add(IntToStr(int) + ' vezes que o loop se repetiu.');
  Inc(int);
 until int = 10;


Isso é execelente e sem rodeios. Coloque no lugar da seção while, do, begin, end; do loop while com esse codigo para testar.

Note: Se vc usar o 'Break;' em algum lugar no loop, isso terminará o loop - terminará o loop no ponto Break.



FUNÇÕES E PROCEDURES:
*********************

Esse é um ponto importante as Funções e Procedures farão o corpo de nosso programa. Eles são rotinas que podem serem chamadas para realizarem uma tarefa especifica onde ela seja requerida.


PROCEDURES
----------

Coloque um botão e um Memo em um form e faça seu OnClick do botão parecer com isso:


procedure TForm1.Button1.Click(Sender: TObject);

begin
 
  Memo1.Lines.Add('Chamando nossa procedure...');
  HelloWorld;
  Memo1.Lines.Add('Retornamos aqui depois da procedure ter sido realizada' + 'esta é a tarefa'); // Vc pode cortar esta ultima linha se quiser.
          //Então esqueça do sinal de +.
end;
       

Lembre-se que o barra-barra é comentario e não fará diferença no codigo. Se vc compilar isso, vc verá um erro dizendo:

Undeclared identifier 'HelloWorld'.

A caixa branca revelada abaixo do Code Editor mostra os erros de compilação. Vamos escrever nosso codigo HelloWorld:

procedure TForm1.HelloWorld;

begin
  ShowMessage('Hello World!');
end;

Coloque esta procedure em algum lugar de sua Unit depois da palavra implentation mas antes do final 'end.' - talvez deixar uma linha depois de seu evento OnClick e coloca-la ai.
(Aqui pessoal talvez vc não tenha entendido vou tentar esclarecer, ai em sua Unit está escrito procedure TForm1.Button1Click(Sender: TObject); não esta? então acima dela vc escreve o codigo citado acima OK?)

Continuando...

Agora tente compilar isso. Ok, isto não esta declarado porque temos que escrito o codigo não declaramos nossa procedure em nosso Form1. Você declara suas procedures na seção de classe Type de sua Unit. Em sua Unit suba um pouco e vc verá um exemplo - a procedure do seu Botão.
(abaixo de onde está escrito procedure Button1Click(Sender: TObject); achou? beleza vamos continuar...;)

whit3_sh4rk

Cara.. se é um paper.. creio que seria melhor hospedar para download de uma vez.. fica menos confuso creio eu..

[]s

Hacker Xtreme


Casanova

Whit3_sh4rk pensei nisso , mas se olharmos para outro lado as pessos podem estar testando isso em suas casas tentando fazer, tendo erros , erros esses que podem ser tirados aqui o que vc acha?

A pessoa tem duvida sobre array digaomos assim ai ele vem e logo abaixo tira suas duvidas pensanso assim quando o tutorial estver cincluido estrá mais do que completo, porque ?

Porque ao mesmo tempo que está ensinando também está tirando duvidas dos possiiveis erros que poderiam ter ou acontecer, não é mesmo?

Penso que se fosse um paper seria como todos os outros tá lá mas e depois que acontece um erro?

Tá tudo bem o cara vem e posta no Forum a duvida é ai o que vemos Whit3_sh4rk  é alguém falando procure no Google.
Ou respondendo mas não exatamente aquilo o que queriamos.

Nesta proxima parte tenho uma duvida que pode acontecer com os outros e olha que legal pode ser tirada aqui não é otimo quando vc encontra tudo o que vc precisa tudo em um lugar?

Whit3_sh4rk depois que estiver tudo pronto vc vai ver que massa de tuto !!!

Valeu por ter respondido !!!!

Casanova

Ops esqueci Whit3_sh4rk , o que vc aconcelha para deixar este tuto melhor e mais compreensivel ?