我正在用Delphi编写一个应用程序,用于破解Android设备的PIN。我有一个有效的 Python 源代码是 ;
# Generate Hash
def generateHash(passcode,salt,model):
if model == "SAMSUNG":
return hashSamsung(passcode,salt)
else:
return hashDefault(passcode,salt)
try:
# Generate Passcodes
if not options.wordlist_file:
for l in range(3, options.length):
for passcode in product(CHARSET, repeat=l+1):
passcode = "".join([x for x in passcode])
# GenerateHash
GUESS_HASH = generateHash( passcode, SALT, MODEL )
# CompareHash
if GUESS_HASH == HASH_SHA1:
print "Found! Passcode = " + passcode
exit()
# Special Samsung Hashung Algorithm
def hashSamsung(passcode,salt):
salted_passcode = passcode + salt
buf=str()
for i in range(1024):
step_string = str(buf) + str(i) + salted_passcode
buf = hashlib.sha1( step_string ).digest()
return hexlify(buf).upper()
我试图将其翻译成德尔福;
function AddLeadingZeroes(const aNumber, Length : integer) : string;
begin
result := Format('%.*d', [Length, aNumber]) ;
end;
function SHA1FromString(const AString: string): string;
var
SHA1: TIdHashSHA1;
begin
SHA1 := TIdHashSHA1.Create;
try
Result := SHA1.HashStringAsHex(AString);
finally
SHA1.Free;
end;
end;
function HashSamsung(passcode, salt: AnsiString):AnsiString;
var
salted_pass : AnsiString;
g_digest:AnsiString;
buf: AnsiString;
I: Integer;
step: AnsiString;
begin
salted_pass := passcode + salt;
buf := '';
for I := 0 to 1024 do
begin
step := buf + IntTOStr(i) + salted_pass;
buf := SHA1FromString(step);
end;
Result := buf;
for I := 0 to 9999 do
begin
guess := HashSamsung(AddLeadingZeroes(i,4), '988796901418269782');
if guess = 'DC59AACF2AFCE72E737190323022FFB6E2831446' then
end;
举个例子
HASH = DC59AACF2AFCE72E737190323022FFB6E2831446
SALT = 988796901418269782
PIN = 1234
如果有人能指出我的缺点,将不胜感激。
那里的
Delphi代码比Python多得多,但有一件事立即脱颖而出:Python的range
从0开始,到参数之前的数字结束。 如果你在德尔福代码中从0到1024,那么你迭代了一次太多。