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
Tenho que lhe parabénizar pela sua ótima iniciativa.
Concerteza vai ajudar muitos.
[]'s
Skayler
Bom tópico kra, e vlw pelo code, vou salvar e estudar em casa...flws
Ponto pelo trabalho e pelo nivel de interesse gerado pelo post.
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
bom post, e isso que o pessoal precisa: "Saber o caminho, para poder percorre-lo", flws ae OnlyOne!!!
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