📄 md5cracker.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 + -