O principio do Brute Force

Started by OnlyOne, 08 de May , 2006, 08:10:46 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

OnlyOne

O Principio do Brute Force (ao som Sea Of Sorrow ...) by OnlyOne


Bem , este e um pequeno texto q eu resolvi escrever sobre brute force ,
sem maiores pretençoes ok?


------- Bom mas o q seria brute force ? -----------------------------


para muitos esta pergunta seria ridicula mas sempre tem alguem q ainda
nao sabe .... O termo "força bruta" foi dado a procedimentos  q tentam
resolver um problema utilizando para isso todas as soluçoes possiveis ,
normalmente o Brute Force e aplicado para senhas , sejam remotas ou
locais , criptografadas ou nao


-------- Quebrando senhas --------------------------------------------
 
uma coisa muito comum no mundo hacker e a quebra de senhas para se
obter acesso a serviços etc , e para isso nao existe uma formula ou
receita , depende do lugar , da situaçao , dos recursos q vc tem a mao
, da maquina , enfim de uma serie de fatores , Em teoria qualquer senha
pode ser quebrada , mas na pratica o brute force e um procedimento de
eficiencia questionavel , por questoes de tempo , processamento , e
principalmente pelo fato de ser um ataque "barulhento" , recursos como
keyloggers e sniffers sao bem mais utilizados para a realizaçao desta
tarefa

---------- Contando os numeros ---------------------------------------


calma , calma , eu presiso falar sobre isso para prosseguir
Como todos nos sabemos o nosso sistema e decimal ou base10 como
chamamos , o q quer dizer q temos apenas 10 simbolos para representar
numeros , sao eles

0 1 2 3 4 5 6 7 8 9

ta mas e dai ?

bom se so existem esses numeros como e q representamos o numero 15 por
exemplo ?

vamos contar

             0
             1
             2
             3
             4
             5
             6
             7
             8
             9

ok , os meus simbolos acabaram , fazemos assim , quando nossos simbolos

acabam , nos vamos repetilos e vamos somar 1 , exemplo :

             0
             1
             2
             3
             4
             5
             6
             7
             8
             9 -> fim dos simbolos

somamos 1 -> 1 0  e repetimos os nossos simbolos
             1 1
             1 2
             1 3
             1 4
             1 5 -> nosso numero :)
             1 6
             1 7
             1 8
             1 9 -> fim dos simbolos
           
               0 -> repetimos os simbolos e somamos 1

mas ja temos 1 na nossa contagem entao

1 da contagem + 1 q somamos = 2 , temos entao o sucessor

             2 0               

ok ? agora vcs sabem q o numero 15 na verdade nao existe :)


-------- Explicando o programa ---------------------------------------

Este e um pequeno programa feito por mim para desmostrar o principio da
contagem e logicamente o brute force , o funcionamento consiste em vc
digitar uma palavra (senha) e o programa vai tenta adivinha-la atraves
deste metodo
fazemos assim


1- vc digita uma palavra
2-o programa pega o tamanho desta palavra e cria um array

correspondente na memoria

exemplo :

vc digitou "casa" (sem as aspas)


vai ser criado algo assim na memoria


            0    1   2   3 -> indices do array
           ____________
           | 0 | 0 | 0 | 0 |
           |__|__|__|___|

este e o meu contador responsavel pelo brute force
a palavra "casa" seria parecido com isso :



            0    1   2   3 -> indices do array
           ___________
           | c | a | s | a |
           |__|__|__|__|
 
arrays sao estruturas com endereços de memoria sequenciais indexados

por numeros , ao contario de Hashs q sao indexados por Strings :)



bom agora o meu conjunto de simbolos e o alfabeto e as variaçoes de

letras q podemos fazer no teclado , sem caracteres ALT ok ?

3- o programa faz assim percorre todo o meu alfabeto e vai somando o

meu contador no indice zero


Inc(contador[0]);


4- quando o meu contador de indice x for igual ao limite do meu

alfabeto , ele incrementa o proximo indice , e depois zera tudo deste

indice ate 0 

exemplo: 

           estado inicial do contador


            0    1   2   3 -> indices do array
           ____________
           | 0 | 0 | 0 | 0 |
           |__|__|__|___|


           depois de percorrer o alfabeto


            0    1   2   3 -> indices do array
           _____________
           |138| 0 | 0 | 0 |
           |___|__|__|__|
             |
             |__> chegou no limite


          zera e incrementa o proximo indice


            0    1   2   3 -> indices do array
           ____________
           | 0 | 1 | 0 | 0 |
           |__|__|__|__|
             
             



         
          isso sera feito ate acontecer o seguinte


            0    1   2   3 -> indices do array
           _____________
           | 0 | 0 | 0 |138|
           |__|__|__|___|
                            |
                            |__> chegou no limite

o ultimo indice ser igual ao limite do meu alfabeto

ok ?

5 - e durante essse processo nos geramos a nossa senha
percorro o meu contador e obtenho o valor de cada indice

exemplo:



for i := Low(contador) to High(contador) do
 begin
  //vou no meu alfabeto e faço
     senha := senha + alfabeto[contador];
      end;

     
pronto tenho uma senha


Ufa !!!  e isso ae , com isso vc tera as sequencias possiveis do seu
alfabeto para uma palavra de x caracteres


--------codigo do programa--------------------------------------------




unit BruteForce;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,

Forms,
  Dialogs, StdCtrls;

//Classes

*********************************************************************/

type MThread = class(TThread)

private

protected

procedure Execute; override;

end; //end of class MThread


type

Tjanela1 = class(TForm)

inic: TButton;
edit: TEdit;
memo: TMemo;
grupo1: TGroupBox;
grupo2: TGroupBox;
stop: TButton;

procedure inicClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure stopClick(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);

private

public

end; //end of class Tjanela1


//Variaveis

*******************************************************************/

var

janela1: Tjanela1;
contador : Array of Integer;
t1 : MThread;
sair: Boolean;

alfa : Array [0..138] of String
=('0','1','2','3','4','5','6','7','8','9',' ',
'a','A','b','B','c','C','d','D','e','E','f',
'F','g','G','h','H','i','I','j','J','k','K',
'l','L','m','M','n','N','o','O','p','P','q',
'Q','r','R','s','S','t','T','u','U','v','V',
'w','W','x','X','y','Y','z','Z','''','"','!',
'@','#','$','%','¨','&','*','(',')','-','_',
'=','+',']','}','~','^','/','?','\','|',',',
'<','.','>',';',':','á','Á','é','É','í','Í',
'ó','Ó','ú','Ú','à','À','è','È','ì','Ì','ò',
'Ò','ù','Ù','ã','Ã','õ','Õ','â','Â','ê','Ê',
'î','Î','ô','Ô','û','Û','ä','Ä','ë','Ë','ï',
'Ï','ö','Ö','ü','Ü','[','{');


//Metodos

*********************************************************************/

implementation

{$R *.dfm}


//funçao do botao inic (gerar senha)
procedure Tjanela1.inicClick(Sender: TObject);
begin

sair := false;

if edit.GetTextLen = 0 then
 begin
  ShowMessage('Digite alguma coisa !');
   Exit;
    end;

t1 := MThread.Create(false);
 inic.Enabled := false;
  stop.Enabled := true;

end; //end of Tjanela1.inicClick



//açoes feitas ao criar o form
procedure Tjanela1.FormCreate(Sender: TObject);
begin

memo.Text := '';
 memo.ReadOnly := true;
  stop.Enabled := false;

end; //end of Tjanela1.FormCreate



//funçao executada pela Thread
procedure MThread.Execute();

var i,j,k,l: Integer;
var senha,a,b : String;

begin

a := janela1.edit.Text;
 janela1.memo.Text := '';

//cria e zera contador
SetLength(contador,janela1.edit.GetTextLen);
 for i := 0 to High(contador) do
  begin
   contador := 0;
    end;


while contador[High(contador)] <> High(alfa) do
begin

for j := 0 to High(contador) do
 begin
  if sair = true then begin Exit; end;
   senha := senha + alfa[contador[j]];
    b := senha;
     if StrComp(PChar(a),PChar(b)) = 0 then
      begin
       janela1.inic.Enabled := true;
        janela1.stop.Enabled := false;
         ShowMessage('Senha Encontrada : ' + b);
          Exit;
           end;
            end;

janela1.memo.Lines.Add(senha);

Inc(contador[0]);

for k := 0 to High(contador) do
 begin
  if contador[k] = High(alfa) then
   begin
    contador[k] := 0;
     if contador[k] = High(contador) then begin Exit; end;
      Inc(contador[k + 1]);
       for l := k to Low(contador) do
        begin
         contador[l] := 0;
          end;
           end;
            end;

senha := '';

end; //while

end; //end of Thread.Execute


//funçao do botao stop
procedure Tjanela1.stopClick(Sender: TObject);
begin

sair := true;
 inic.Enabled := true;
  stop.Enabled := false;

end;//end of Tjanela1.stopClick



//ao fechar o form
procedure Tjanela1.FormCloseQuery(Sender: TObject; var CanClose:

Boolean);
begin

sair := true;
 ShowMessage('Operação cancelada pelo usuário');

end;//end of Tjanela1.FormCloseQuery

end. //end of program




como diria Morpheu , hehehehehe, eu levo vcs ate a porta mas vcs terao
q atravessa-la , o miolo tai em cima agora , se vcs gravarem as senhas
, terao uma word list completa , se converter pra MD5 e comparar com um
Hash , vcs terao como descobrir senhas MD5 ..........



                                      Only
                                      n
                                      e   



Hasta La Vista guys !! 

Visite o nosso site :


http://sinapse.plughackers.net 







   
No céu toca Joy Division


Skayler

Tenho que lhe parabénizar pela sua ótima iniciativa.
Concerteza vai ajudar muitos.

[]'s

Skayler
Away

rodweb

Bom tópico kra, e vlw pelo code, vou salvar e estudar em casa...flws

Shady

Ponto pelo trabalho e pelo nivel de interesse gerado pelo post.


Mundus Vult Decipi

FreeMind

hehehe curti bem explicado.. parabens...
Quote from: "Ø Rodrigo Ø"Bom tópico kra, e vlw pelo code, vou salvar e estudar em casa...flws

Faço das suas palavras as minhas  ;D

anakim

bom post, e isso que o pessoal precisa: "Saber o caminho, para poder percorre-lo", flws ae OnlyOne!!!
Why use Windows? If I have the door ;-)

whit3_sh4rk

#6
Isso ae cara ;)

Coloque na tag code pq quando vc coloca [i] fica como itálico..

Parabéns.. eu estou desanimado com a informática, ando meio afastado, e sem saco pra estudar.. tu tá melhor que eu em delphi(nao que eu saiba mto) e olha que começou recentemente.. Continue assim, tu vai longe..

[]s