⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 md5cracker.pas

📁 通过发送数据到破解md5的网站,实现md5在线破解,本程序支持市面上大多md5网站.
💻 PAS
字号:
unit MD5Cracker;

interface

uses
  Classes, IdHTTP, SysUtils, StrUtils;

type
  TMD5Cracker = class(TThread)
  private
    sMD5, sPlain, sCracker, sCurrentCracker: String;
    iTimeout, iTag: Integer;
    Sock: TIdHTTP;
    FOnCracked, FOnNotCracked, FOnChangeCracker: TNotifyEvent;
    procedure Cracked;
    procedure NotCracked;
    procedure ChangeCracker;
    function Search_milw0rm(const AMD5: String; var APlain: String): Boolean;
    function Search_gdata(const AMD5: String; var APlain: String): Boolean;
    function Search_hashkiller(const AMD5: String; var APlain: String): Boolean;
    function Search_csthis(const AMD5: String; var APlain: String): Boolean;
    function Search_crysm(const AMD5: String; var APlain: String): Boolean;
    function Search_rednoize(const AMD5: String; var APlain: String): Boolean;
    function Search_md5decrypter(const AMD5: String; var APlain: String): Boolean;
    function Search_hashreverse(const AMD5: String; var APlain: String): Boolean;
    function Search_cryptobitch(const AMD5: String; var APlain: String): Boolean;
  protected
    procedure Execute; override;
  public
    constructor Create(const AMD5: String; const ACracker: String; const ATimeout: Integer; const ATag: Integer);
    destructor Destroy;
    property MD5: String read sMD5 write sMD5;
    property Plain: String read sPlain;
    property Timeout: Integer read iTimeout write iTimeout;
    property Tag: Integer read iTag write iTag;
    property CurrentCracker: String read sCurrentCracker;
    property OnCracked: TNotifyEvent read FOnCracked write FOnCracked;
    property OnNotCracked: TNotifyEvent read FOnNotCracked write FOnNotCracked;
    property OnChangeCracker: TNotifyEvent read FOnChangeCracker write FOnChangeCracker;
  end;

implementation

function GetB(const s, s1, s2: String): String; //return a string between two other strings
var
  iPos, iPosLeft, iPosRight: Integer;
begin
  Result := '';
  iPos := Pos(s1, s);
  if iPos > 0 then
  begin
    iPosLeft := iPos + Length(s1);
    iPos := PosEx(s2, s, Succ(iPosLeft));
    if iPos > 0 then
    begin
      iPosRight := iPos;
      Result := MidStr(s, iPosLeft, iPosRight - iPosLeft);
    end;
  end;
end;

function TMD5Cracker.Search_milw0rm(const AMD5: String; var APlain: String): Boolean;
var
  slData: TStringList;
  sResult: String;
begin
  slData := TStringList.Create;
  try
    slData.Add('hash=' + AMD5);
    slData.Add('Submit=Submit');
    try
      sResult := Sock.Post('http://www.milw0rm.com/cracker/search.php', slData);
      if Pos('</TD><TD align="middle" nowrap="nowrap" width=90>cracked</TD></TR>', sResult) > 0 then
      begin
        APlain := GetB(sResult,'</TD><TD align="middle" nowrap="nowrap" width=90>','</TD><TD align="middle" nowrap="nowrap" width=90>');
        Result := True;
      end else
        Result := False;
    except
      Result := False;
    end;
  finally
    slData.Free;
  end;
end;

function TMD5Cracker.Search_gdata(const AMD5: String; var APlain: String): Boolean;
var
  sResult: String;
begin
  try
    sResult := Sock.Get('http://gdataonline.com/qkhash.php?mode=xml&hash=' + AMD5);
    if Pos('Success', sResult) > 0 then
    begin
      APlain := GetB(sResult,'<result>','</result>');
      Result := True;
    end else
      Result := False;
  except
    Result := False;
  end;
end;

function TMD5Cracker.Search_hashkiller(const AMD5: String; var APlain: String): Boolean;
var
  sResult: String;
begin
  try
    sResult := Sock.Get('http://hashkiller.com/api/api.php?md5=' + AMD5);
    if Pos('true', sResult) > 0 then
    begin
      APlain := GetB(sResult,'<plain>','</plain>');
      Result := True;
    end else
      Result := False;
  except
    Result := False;
  end;
end;

function TMD5Cracker.Search_csthis(const AMD5: String; var APlain: String): Boolean;
var
  slData: TStringList;
  sResult: String;
begin
  slData := TStringList.Create;
  try
    slData.Add('h=' + AMD5);
    slData.Add('s=Search/Post');
    try
      sResult := Sock.Post('http://www.csthis.com/md5/index.php', slData);
      if Pos('resolves to', sResult) > 0 then
      begin
        APlain := GetB(sResult,'<br /><b><font color=#00CC66 size=6>','</b></font></font>');
        Result := True;
      end else
        Result := False;
    except
      Result := False;
    end;
  finally
    slData.Free;
  end;
end;

function TMD5Cracker.Search_crysm(const AMD5: String; var APlain: String): Boolean;
var
  sResult: String;
begin
  try
    sResult := Sock.Get('http://us.md5.crysm.net/find?md5=' + AMD5);
    if Pos('<li>', sResult) > 0 then
    begin
      APlain := GetB(sResult,'<li>','</li>');
      Result := True;
    end else
      Result := False;
  except
    Result := False;
  end;
end;

function TMD5Cracker.Search_rednoize(const AMD5: String; var APlain: String): Boolean;
var
  sResult: String;
begin
  try
    sResult := Sock.Get('http://md5.rednoize.com/?s=md5&q=' + AMD5);
    if Pos('<div id="result" >', sResult) > 0 then
    begin
      APlain := GetB(sResult,'<div id="result" >','</div>');
      Result := True;
    end else
      Result := False;
  except
    Result := False;
  end;
end;

function TMD5Cracker.Search_md5decrypter(const AMD5: String; var APlain: String): Boolean;
var
  slData: TStringList;
  sResult: String;
begin
  slData := TStringList.Create;
  try
    slData.Add('hash=' + AMD5);
    slData.Add('Submit=Decrypt!');
    try
      sResult := Sock.Post('http://md5decrypter.com', slData);
      if Pos('Normal Text', sResult) > 0 then
      begin
        APlain := StringReplace(GetB(sResult,'Normal Text: </b>','<br/><br/>'), #10, '', [rfReplaceAll]);
        Result := True;
      end else
        Result := False;
    except
      Result := False;
    end;
  finally
    slData.Free;
  end;
end;

function TMD5Cracker.Search_hashreverse(const AMD5: String; var APlain: String): Boolean;
var
  sResult: String;
begin
  try
    sResult := Sock.Get('http://xml.hashreverse.com/index.php?hash=' + AMD5);
    APlain := GetB(sResult,'<Result>','</Result>');
    if APlain <> '' then
      Result := True
    else
      Result := False;
  except
    Result := False;
  end;
end;

function TMD5Cracker.Search_cryptobitch(const AMD5: String; var APlain: String): Boolean;
var
  sResult: String;
begin
  try
    sResult := Sock.Get('http://md5.cryptobitch.de/cgi-bin/md5web.py?mode=raw&md5=' + AMD5);
    if Trim(sResult) <> '' then
    begin
      APlain := StringReplace(sResult, #10, '', [rfReplaceAll]);
      Result := True;
    end else
      Result := False;
  except
    Result := False;
  end;
end;

constructor TMD5Cracker.Create(const AMD5: String; const ACracker: String; const ATimeout: Integer; const ATag: Integer);
begin
  inherited Create(True);
  sMD5 := AMD5;
  iTimeout := ATimeout * 1000;
  sCracker := ACracker;
  iTag := ATag;
  Sock := TIdHTTP.Create(Nil);
end;

destructor TMD5Cracker.Destroy;
begin
  Sock.Free;
end;

procedure TMD5Cracker.Cracked;
begin
  if Assigned(FOnCracked) then
    FOnCracked(Self);
end;

procedure TMD5Cracker.NotCracked;
begin
  if Assigned(FOnNotCracked) then
    FOnNotCracked(Self);
end;

procedure TMD5Cracker.ChangeCracker;
begin
  if Assigned(FOnChangeCracker) then
    FOnChangeCracker(Self);
end;

procedure TMD5Cracker.Execute;
var
  s: String;
begin
  Sock.ReadTimeout := iTimeout;
  Sock.ConnectTimeout := iTimeout;
  if Pos('milw0rm.com', sCracker) > 0 then
  begin
    sCurrentCracker := 'milw0rm.com';
    Synchronize(ChangeCracker);
    if Search_milw0rm(sMD5, s) then
    begin
      sPlain := s;
      Synchronize(Cracked);
      Exit;
    end;
  end;
  if Pos('gdataonline.com', sCracker) > 0 then
  begin
    sCurrentCracker := 'gdataonline.com';
    Synchronize(ChangeCracker);
    if Search_gdata(sMD5, s) then
    begin
      sPlain := s;
      Synchronize(Cracked);
      Exit;
    end;
  end;
  if Pos('hashkiller.com', sCracker) > 0 then
  begin
    sCurrentCracker := 'hashkiller.com';
    Synchronize(ChangeCracker);
    if Search_hashkiller(sMD5, s) then
    begin
      sPlain := s;
      Synchronize(Cracked);
      Exit;
    end;
  end;
  if Pos('csthis.com', sCracker) > 0 then
  begin
    sCurrentCracker := 'csthis.com';
    Synchronize(ChangeCracker);
    if Search_csthis(sMD5, s) then
    begin
      sPlain := s;
      Synchronize(Cracked);
      Exit;
    end;
  end;
  if Pos('crysm.net', sCracker) > 0 then
  begin
    sCurrentCracker := 'crysm.net';
    Synchronize(ChangeCracker);
    if Search_crysm(sMD5, s) then
    begin
      sPlain := s;
      Synchronize(Cracked);
      Exit;
    end;
  end;
  if Pos('rednoize.com', sCracker) > 0 then
  begin
    sCurrentCracker := 'rednoize.com';
    Synchronize(ChangeCracker);
    if Search_rednoize(sMD5, s) then
    begin
      sPlain := s;
      Synchronize(Cracked);
      Exit;
    end;
  end;
  if Pos('md5decrypter.com', sCracker) > 0 then
  begin
    sCurrentCracker := 'md5decrypter.com';
    Synchronize(ChangeCracker);
    if Search_md5decrypter(sMD5, s) then
    begin
      sPlain := s;
      Synchronize(Cracked);
      Exit;
    end;
  end;
  if Pos('hashreverse.com', sCracker) > 0 then
  begin
    sCurrentCracker := 'hashreverse.com';
    Synchronize(ChangeCracker);
    if Search_hashreverse(sMD5, s) then
    begin
      sPlain := s;
      Synchronize(Cracked);
      Exit;
    end;
  end;
  if Pos('cryptobitch.de', sCracker) > 0 then
  begin
    sCurrentCracker := 'cryptobitch.de';
    Synchronize(ChangeCracker);
    if Search_cryptobitch(sMD5, s) then
    begin
      sPlain := s;
      Synchronize(Cracked);
      Exit;
    end;
  end;
  Synchronize(NotCracked);
end;

end.
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -