PIN算法-从Python转换为Delphi [英] PIN algorithm - converting from Python to Delphi
本文介绍了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屋!
查看全文