PIN算法-从Python转换为Delphi [英] PIN algorithm - converting from Python to Delphi

查看:66
本文介绍了PIN算法-从Python转换为Delphi的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在用Delphi编写一个可破解Android设备PIN的应用程序.我有一个有效的Python来源;

I am writing an application in Delphi that cracks the PIN for an Android device. There is a working Python source I have that is ;

# 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()

我试图将其翻译为Delphi;

My attempt to translate this to Delphi;

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

如果有人能指出我的缺点,将不胜感激.

If anyone can point out my faults, it would be greatly appreciated.

推荐答案

Delphi代码比Python多得多,但有一件事情立即引人注意:Python的 range 从0开始并结束在参数之前.如果您在Delphi代码中将数值从0改为1024,则说明您迭代的次数太多了.

There's a lot more Delphi code there than the Python, but one thing that immediately stands out: Python's range starts at 0 and ends at the number before the argument. If you go from 0 to 1024 in your Delphi code, you're iterating one time too many.

这篇关于PIN算法-从Python转换为Delphi的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆