PIN算法 - 从Python转换为Delphi



我正在用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,那么你迭代了一次太多。

最新更新