Resultados 1 a 3 de 3
  1. #1

    Thumbs up Codigo Fonte - Md5 Cracker

    Fiz este programa seguindo a ideia do que foi postado neste topico.




    Bom esse programa recebe um hash de entrada e faz a busca em uma lista de sites contidos em um xml com o seguinte formato.

    • <Website> = url completa do site em que a checagem deve ser feita.
      • Atributo Method = Metodo utilizado para enviar os dados Get ou Post.
      • Atributo Field= Campo onde o hash deve ser inserido.
      • Atributo RegEx = Expressão Regular usada para pegar o retorno da requisição(Deve conter uma Named Capture com o nome Result (?'Result'.*) por exemplo).


    Código PHP:
    <Websites>
      <
    Website Method="Post" Field="term" RegEx="md5\(\x22(?'Result'.*)\x22\)">http://md5crack.com/crackmd5.php</Website>
      
    <Website Method="Post" Field="search_field" RegEx="\x3cb\x3e(?'Result'.*)\x3c/b\x3e used charlist">http://www.hashchecker.com/index.php?_sls=search_hash</Website>
      
    <Website Method="Get"  Field=""     RegEx="\x3c/td\x3e\x3ctd class=\x22border\x22\x3e(?!Sorry.+database\.)(?'Result'.*)\x3c/td\x3e\x3c/tr\x3e\x3c/table\x3e">http://www.netmd5crack.com/cgi-bin/Crack.py?InputHash</Website>
      
    <Website Method="Get"  Field="x"    RegEx="(?'Result'.*)">http://www.decrypt-md5.com/decrypt_api.php?</Website>
      
    <Website Method="Get"  Field="h"    RegEx="plaintext=\x22(?'Result'.*)\x22 type=">http://cracker.fox21.at/api.php?a=check&amp;</Website>
      
    <Website Method="Post" Field="text" RegEx="md5 hash .* = (?!Sorry.*found\.)(?'Result'.*) \x3c/p">http://isc.sans.edu/tools/reversehash.html</Website>
      
    <Website Method="Get"  Field="s"    RegEx="textarea_md5_decrypter\x22\x3e(?'Result'.*)\x3c">http://www.stringfunction.com/md5-decrypter.html?</Website>
      
    <Website Method="Get"  Field="hash" RegEx="string\x3e\x3c!\[CDATA\[(?'Result'.*).*\]\]">http://md5.noisette.ch/md5.php?</Website>
      
    <Website Method="Get"  Field="md5"  RegEx="Cleartext of .* is (?'Result'.*)">http://md5.hashcracking.com/search.php?</Website>
      
    <Website Method="Post" Field="hash" RegEx="hash\x22 size=\x2232\x22 value=\x22(?!Entry.*found.)(?'Result'.*)\x22/\x3e">http://www.md5.net/cracker.php</Website>
    </Websites


    O programa pode utilizado com os seguintes argumentos.

    -? Mostra a ajuda.
    -d # decrypt hash.
    -e # encrypt string.
    -b soar um beep quando uma requisição terminar.
    -m # numero maximo de threads simultaneas (Padrão 5).
    -t # tempo maximo para aguardar uma requisição em segundos(Padrão 10).
    -x# caminho do xml(Padrão Websites.xml).
    -a mostrar todos os resultados(Por padrão só são mostrados os que ocorrem com sucesso).
    -s mostra os erros caso ocorram invez da mensagem de não encontrado(Implica em -a).
    -o mostra toda a saida da Regex.
    -r mostra todo o codigo de resposta.






    Utilizei o Delphi 7 com PCRE do Jedi Vcl.

    Código PHP:
    program Md5_Cracker;

    {
    $APPTYPE CONSOLE}

    uses
      SysUtils
    StrUtilsClasses,
      
    IdHTTPIdExceptionIdHashMessageDigestIdHash,
      
    XMLDocXMLIntf,
      
    ComObj,
      
    JclPCRE;

    type
      TMethods 
    = (mGetmPost);
      
    TOptions = (oRegExoShowAll,
                  
    oShowErroroShowHtmloBeep,
                  
    oDecryptoEncrypt);
                  
      
    TOptionSet set of TOptions;

      
    TMd5Website record
        Url
    string;
        
    Fieldstring;
        
    RegExstring;
        
    MethodTMethods;
      
    end;

      
    TMd5WebsiteArray = array of TMd5Website;

    var
      
    TimeoutByte 10;
      
    MaxThreadByte 5;
      
    XmlPathstring 'Websites.xml';
      
    OptionsTOptionSet;
      
    Hashstring;
      
    ToHashstring;
      
    CurrentByte;

    function 
    WriteCenterln(StrstringSizeByte 80): string;
    begin
      Writeln
    (DupeString(' ', ((Size Length(Str)) div 2)) + Str);
    end;

    function 
    FillTo(StrstringSizeSmallint): string;
    begin
      Result
    := Str DupeString(' 'Size Length(Str));
    end;

    procedure LoadXml(var Md5WebListTMd5WebsiteArray);
    var
      
    XmlIXMLDocument;
      
    NodeIXMLNode;
      
    IByte;
    begin
      CoInitializeEx
    (nil0);

      
    Xml:= LoadXMLDocument(XmlPath);

      if(
    Xml.DocumentElement.NodeName 'Websites')then
      begin
        SetLength
    (Md5WebListXml.DocumentElement.ChildNodes.Count);

        for 
    I:= 0 to Xml.DocumentElement.ChildNodes.Count -do
        
    begin
          Node
    := Xml.DocumentElement.ChildNodes[I];

          
    with Md5WebList[I] do
          
    begin
            Url
    := AnsiReplaceText(Node.Text'Http://''');
            
    Field:= Node.Attributes['Field'];
            
    RegEx:= Node.Attributes['RegEx'];

            if(
    CompareText(Node.Attributes['Method'], 'Get') = 0)then
            begin
              Method
    := mGet;
            
    end
            
    else
            
    begin
              Method
    := mPost;
            
    end;
          
    end;
        
    end;
      
    end;

      
    Xml:= nil;
    end;

    function 
    CheckOnWebSite(Md5WebsitePointer): Integer;
    var
      
    HttpTIdHTTP;
      
    Responsestring;
      
    RegTJclRegEx;
      
    ArgsTStringList;
      
    HashResultstring;
      
    UrlSplitTStringList;
    begin

      Result
    := 0;

      
    Http:= TIdHTTP.Create(nil);
      
    Reg:= TJclRegEx.Create;
      
    UrlSplit:= TStringList.Create;

      
    Http.ReadTimeout:= Timeout 1000;

      
    with TMd5Website(Md5Website^) do
      
    begin
        
    try
          if(
    Method mGet)then
          begin
            Response
    := Http.Get('Http://' Url Field '=' Hash);
          
    end
          
    else
          
    begin
            Args
    := TStringList.Create;

            
    Args.Add(Field '=' Hash);
            
    Response:= Http.Post('Http://' UrlArgs);

            
    Args.Free;
          
    end;

          
    Reg.Options:= [roIgnoreCase];
          
    Reg.Compile(RegExfalsefalse);
          
    Reg.Match(Response);

          if(
    Reg.CaptureNameCount 0)then
          begin
            HashResult
    := Reg.NamedCaptures['Result'];
          
    end;

        
    except
          on E
    EIdConnectTimeOut do
          
    begin
            HashResult
    := 'Time out';
          
    end;

          
    on E:EPCREError do
          
    begin
            
    if(E.ErrorCode = -1)then
            begin
              HashResult
    := 'Not Found';
            
    end;
          
    end;

          
    on EException do
          
    begin
            HashResult
    := Trim(E.Message);
          
    end;
        
    end;

        if(
    HashResult '')then
        begin
          HashResult
    := 'Not Found';
        
    end;

        if(
    not((HashResult 'Not Found') and not(oShowAll in Options)))then
        begin
          ExtractStrings
    ( ['/''\'], [], PChar(Url), UrlSplit);
          WriteCenterln('
    ³ ' + FillTo(UrlSplit[0], 24) + '³ ' + FillTo(HashResult, 49) + '³');

          if(oBeep in Options)then
          begin
            Beep;
          end;

          if(oRegEx in Options)then
          begin
            WriteCenterln('
    Ã' + DupeString('Ä', 25) + 'Á' + DupeString('Ä', 50) + '´');
            try
              WriteCenterln('
    ³ ' + FillTo(Reg.Captures[0], 75) + '³');
            except
              on E: Exception do
              begin
                WriteCenterln('
    ³ ' + FillTo('Error ' + E.message, 75) + '³');
              end;
            end;
            WriteCenterln('
    Ã' + DupeString('Ä', 25) + 'Â' + DupeString('Ä', 50) + '´');
          end;

          if(oShowHtml in Options)then
          begin
            WriteCenterln('
    Ã' + DupeString('Ä', 25) + 'Á' + DupeString('Ä', 50) + '´');
            Writeln(Response);
            WriteCenterln('
    Ã' + DupeString('Ä', 25) + 'Â' + DupeString('Ä', 50) + '´');
          end;
        end;

        Current:= Current +1;
      end;

      Http.Free;
      Reg.Free;
      UrlSplit.Free;
    end;

    function GetMd5Hash(Hash: string): string;
    var
      Md5Digest: TIdHashMessageDigest5;
      Hash4x4: T4x4LongWordRecord;
    begin
      Md5Digest:= TIdHashMessageDigest5.Create;
      Hash4x4:= Md5Digest.HashValue(Hash);
      Md5Digest.Free;
      Result:= Md5Digest.AsHex(Hash4x4);
    end;

    procedure ShowHelp;
    begin
      WriteCenterln('
    Ú' + DupeString('Ä', 76) + '¿');
      WriteCenterln(FillTo('
    ³ -? display this help', 77) + '³');
      WriteCenterln(FillTo('
    ³ -d decrypt string', 77) + '³');
      WriteCenterln(FillTo('
    ³ -e encrypt string', 77) + '³');
      WriteCenterln(FillTo('
    ³ -b beep', 77) + '³');
      WriteCenterln(FillTo('
    ³ -# number of threads', 77) + '³');
      
    WriteCenterln(FillTo('³ -t # response timeout'77) + '³');
      
    WriteCenterln(FillTo('³ -x # xml path'77) + '³');
      
    WriteCenterln(FillTo('³ -a show all results'77) + '³');
      
    WriteCenterln(FillTo('³ -s show errors instead "Not Found" message'77) + '³');
      
    WriteCenterln(FillTo('³ -o show complete Regex output'77) + '³');
      
    WriteCenterln(FillTo('³ -r show complete Response output'77) + '³');
      
    WriteCenterln('À' DupeString('Ä'76) + 'Ù');
    end;

    function 
    ParseArgsTOptionSet;
    var
      
    IByte;
      
    Paramstring;
    begin
      Result
    := [];
      
    I:= 1;

      while(
    not(ParamCount)) do
      
    begin
        
    try
          
    Param:= ParamStr(I);
          
    I:= 1;

          if(
    CompareText(Param'-m') = 0)then
          begin
            MaxThread
    := StrToInt(ParamStr(I));
          
    end
          
    else if(CompareText(Param'-t') = 0)then
          begin
            Timeout
    := StrToInt(ParamStr(I));
          
    end
          
    else if(CompareText(Param'-x') = 0)then
          begin
            XmlPath
    := ParamStr(I);
          
    end
          
    else if(CompareText(Param'-d') = 0)then
          begin
            Result
    := Result + [oDecrypt];
            
    Hash:= ParamStr(I);
          
    end
          
    else if(CompareText(Param'-e') = 0)then
          begin
            Result
    := Result + [oEncrypt];
            
    ToHash:= ParamStr(I);
          
    end
          
    else if(CompareText(Param'-b') = 0)then
          begin
            Result
    := Result + [oBeep];
          
    end
          
    else if(CompareText(Param'-a') = 0)then
          begin
            Result
    := Result + [oShowAll];
          
    end
          
    else if(CompareText(Param'-s') = 0)then
          begin
            Result
    := Result + [oShowErroroShowAll];
          
    end
          
    else if(CompareText(Param'-o') = 0)then
          begin
            Result
    := Result + [oRegEx];
          
    end
          
    else if(CompareText(Param'-r') = 0)then
          begin
            Result
    := Result + [oShowHtml];
          
    end
          
    else if(CompareText(Param'-?') = 0)then
          begin
            ShowHelp
    ;
          
    end;
        
    except
          Result
    := [];
          
    Writeln('Argument parse error ignored ' ParamStr(I-1) + '.');
          
    Writeln;
        
    end;
      
    end;
    end;

    var
      
    Md5WebListTMd5WebsiteArray;
      
    IByte;
      
    TidCardinal;
    begin
      WriteCenterln
    ('ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»');
      
    WriteCenterln('º           Md5 Hash Cracker           º');
      
    WriteCenterln('º                                      º');
      
    WriteCenterln('º             By Hacker_wap            º');
      
    WriteCenterln('º     Http://Forum-Invaders.com.br     º');
      
    WriteCenterln('ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ');
      
    Writeln;
      
      
    Options:= ParseArgs;

      try
      if(
    oDecrypt in Options)then
      begin
        LoadXml
    (Md5WebList);

        
    WriteCenterln('Ú' DupeString('Ä'25) + 'Â' DupeString('Ä'50) + '¿');

        for 
    I:= 0 to Length(Md5WebList) -do
        
    begin
          
    while((Current) > MaxThread) do
          
    begin
            Sleep
    (50);
          
    end;
          
    BeginThread(nil0, @CheckOnWebSite, @Md5WebList[I], 0Tid);
        
    end;

        
    repeat
          Sleep
    (100);
        
    until(Current Length(Md5WebList));

        
    WriteCenterln('À' DupeString('Ä'25) + 'Á' DupeString('Ä'50) + 'Ù');
      
    end;
      
      if(
    oEncrypt in Options)then
      begin
        WriteCenterln
    ('Ú' DupeString('Ä'42) + 'Â' DupeString('Ä'33) + '¿');
        
    WriteCenterln('³ ' FillTo('Hash of "' ToHash '"'41) + '³ ' FillTo(GetMd5Hash(ToHash), 32) + '³');
        
    WriteCenterln('À' DupeString('Ä'42) + 'Á' DupeString('Ä'33) + 'Ù');
      
    end;
      
    except
        on E
    Exception do
        
    begin
          Writeln
    ('Error: ' E.Message);
        
    end;
      
    end;

      
    Readln;
    end
    O codigo não ficou bom porque tive alguns problemas porem mesmo assim quiz terminar, talvez seja util á alguem .
    Estou morrendo de sono então não sei se ficou algum bug.
    É melhor não dizer nada e pensarem que é bobo, do que abrir a boca e acabar com as duvidas.

  2. #2
    Moderador Avatar de eduardu0
    Data de Ingresso
    Feb 2007
    Posts
    979
    Cara, muito legal a inicitativa!

    Quando chegar em casa vou fazer o download e efetuar testes.

    Abraço!
    Pense em uma frase bonita.

  3. #3
    Lamer Avatar de caioconect2
    Data de Ingresso
    Jan 2012
    Localização
    Brasil
    Posts
    14
    Não entendo muito e programação.. Mas boa sorte no seu projeto!
    "Deus me enviou à terra com uma missão. Só Ele pode me deter, os homens nunca poderão."

Tags para este Tópico

Permissões de Postagem

  • Você não pode iniciar novos tópicos
  • Você não pode enviar respostas
  • Você não pode enviar anexos
  • Você não pode editar suas mensagens
  •