mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-21 05:43:48 -07:00
fm11rf08s_recovery: fchk can bey kbd-interrupted so deal with it
This commit is contained in:
parent
62735e4440
commit
9853fc1744
1 changed files with 27 additions and 3 deletions
|
@ -143,7 +143,8 @@ for sec in range(NUM_SECTORS):
|
||||||
for k in keys_filtered[sec][key_type]:
|
for k in keys_filtered[sec][key_type]:
|
||||||
f.write(f"{k}\n")
|
f.write(f"{k}\n")
|
||||||
|
|
||||||
print("Brute-forcing keys...")
|
abort = False
|
||||||
|
print("Brute-forcing keys... Press any key to interrupt")
|
||||||
found_keys = [["", ""] for _ in range(NUM_SECTORS)]
|
found_keys = [["", ""] for _ in range(NUM_SECTORS)]
|
||||||
for sec in range(NUM_SECTORS):
|
for sec in range(NUM_SECTORS):
|
||||||
for key_type in [0, 1]:
|
for key_type in [0, 1]:
|
||||||
|
@ -156,6 +157,8 @@ for sec in range(NUM_SECTORS):
|
||||||
with out:
|
with out:
|
||||||
p.console(cmd)
|
p.console(cmd)
|
||||||
for line in out.captured_output.split('\n'):
|
for line in out.captured_output.split('\n'):
|
||||||
|
if "aborted via keyboard":
|
||||||
|
abort = True
|
||||||
if "found:" in line:
|
if "found:" in line:
|
||||||
found_keys[sec][key_type] = line[30:]
|
found_keys[sec][key_type] = line[30:]
|
||||||
kt = ['A', 'B'][key_type]
|
kt = ['A', 'B'][key_type]
|
||||||
|
@ -164,6 +167,10 @@ for sec in range(NUM_SECTORS):
|
||||||
found_keys[sec][key_type ^ 1] = found_keys[sec][key_type]
|
found_keys[sec][key_type ^ 1] = found_keys[sec][key_type]
|
||||||
kt = ['A', 'B'][key_type ^ 1]
|
kt = ['A', 'B'][key_type ^ 1]
|
||||||
print(f"Sector {sec:2} key{kt} = {found_keys[sec][key_type ^ 1]}")
|
print(f"Sector {sec:2} key{kt} = {found_keys[sec][key_type ^ 1]}")
|
||||||
|
if abort:
|
||||||
|
break
|
||||||
|
if abort:
|
||||||
|
break
|
||||||
|
|
||||||
for key_type in [0, 1]:
|
for key_type in [0, 1]:
|
||||||
if found_keys[sec][0] == "" and found_keys[sec][1] == "" and nt[sec][0] != nt[sec][1]:
|
if found_keys[sec][0] == "" and found_keys[sec][1] == "" and nt[sec][0] != nt[sec][1]:
|
||||||
|
@ -175,10 +182,16 @@ for sec in range(NUM_SECTORS):
|
||||||
with out:
|
with out:
|
||||||
p.console(cmd)
|
p.console(cmd)
|
||||||
for line in out.captured_output.split('\n'):
|
for line in out.captured_output.split('\n'):
|
||||||
|
if "aborted via keyboard":
|
||||||
|
abort = True
|
||||||
if "found:" in line:
|
if "found:" in line:
|
||||||
found_keys[sec][key_type] = line[30:]
|
found_keys[sec][key_type] = line[30:]
|
||||||
kt = ['A', 'B'][key_type]
|
kt = ['A', 'B'][key_type]
|
||||||
print(f"Sector {sec:2} key{kt} = {found_keys[sec][key_type]}")
|
print(f"Sector {sec:2} key{kt} = {found_keys[sec][key_type]}")
|
||||||
|
if abort:
|
||||||
|
break
|
||||||
|
if abort:
|
||||||
|
break
|
||||||
|
|
||||||
if found_keys[sec][0] == "" and found_keys[sec][1] == "" and nt[sec][0] == nt[sec][1]:
|
if found_keys[sec][0] == "" and found_keys[sec][1] == "" and nt[sec][0] == nt[sec][1]:
|
||||||
key_type = 0
|
key_type = 0
|
||||||
|
@ -190,11 +203,15 @@ for sec in range(NUM_SECTORS):
|
||||||
with out:
|
with out:
|
||||||
p.console(cmd)
|
p.console(cmd)
|
||||||
for line in out.captured_output.split('\n'):
|
for line in out.captured_output.split('\n'):
|
||||||
|
if "aborted via keyboard":
|
||||||
|
abort = True
|
||||||
if "found:" in line:
|
if "found:" in line:
|
||||||
found_keys[sec][0] = line[30:]
|
found_keys[sec][0] = line[30:]
|
||||||
found_keys[sec][1] = line[30:]
|
found_keys[sec][1] = line[30:]
|
||||||
print(f"Sector {sec:2} keyA = {found_keys[sec][key_type]}")
|
print(f"Sector {sec:2} keyA = {found_keys[sec][key_type]}")
|
||||||
print(f"Sector {sec:2} keyB = {found_keys[sec][key_type]}")
|
print(f"Sector {sec:2} keyB = {found_keys[sec][key_type]}")
|
||||||
|
if abort:
|
||||||
|
break
|
||||||
|
|
||||||
if ((found_keys[sec][0] == "") ^ (found_keys[sec][1] == "")) and nt[sec][0] != nt[sec][1]:
|
if ((found_keys[sec][0] == "") ^ (found_keys[sec][1] == "")) and nt[sec][0] != nt[sec][1]:
|
||||||
# use 2x1nt1key
|
# use 2x1nt1key
|
||||||
|
@ -228,6 +245,8 @@ for sec in range(NUM_SECTORS):
|
||||||
with out:
|
with out:
|
||||||
p.console(cmd)
|
p.console(cmd)
|
||||||
for line in out.captured_output.split('\n'):
|
for line in out.captured_output.split('\n'):
|
||||||
|
if "aborted via keyboard":
|
||||||
|
abort = True
|
||||||
if "found:" in line:
|
if "found:" in line:
|
||||||
found_keys[sec][key_type_target] = line[30:]
|
found_keys[sec][key_type_target] = line[30:]
|
||||||
elif len(keys) == 1:
|
elif len(keys) == 1:
|
||||||
|
@ -235,11 +254,16 @@ for sec in range(NUM_SECTORS):
|
||||||
if found_keys[sec][key_type_target] != "":
|
if found_keys[sec][key_type_target] != "":
|
||||||
kt = ['A', 'B'][key_type_target]
|
kt = ['A', 'B'][key_type_target]
|
||||||
print(f"Sector {sec:2} key{kt} = {found_keys[sec][key_type_target]}")
|
print(f"Sector {sec:2} key{kt} = {found_keys[sec][key_type_target]}")
|
||||||
|
if abort:
|
||||||
|
break
|
||||||
if restore_color:
|
if restore_color:
|
||||||
with out:
|
with out:
|
||||||
p.console("prefs set color --ansi")
|
p.console("prefs set color --ansi")
|
||||||
|
|
||||||
|
if abort:
|
||||||
|
print("Brute-forcing phase aborted via keyboard!")
|
||||||
|
FINAL_CHECK = False
|
||||||
|
|
||||||
if FINAL_CHECK:
|
if FINAL_CHECK:
|
||||||
print("Letting fchk do a final dump, just for confirmation and display...")
|
print("Letting fchk do a final dump, just for confirmation and display...")
|
||||||
keys_set = set([i for sl in found_keys for i in sl if i != ""])
|
keys_set = set([i for sl in found_keys for i in sl if i != ""])
|
||||||
|
@ -265,7 +289,7 @@ else:
|
||||||
k = "FFFFFFFFFFFF"
|
k = "FFFFFFFFFFFF"
|
||||||
f.write(bytes.fromhex(k))
|
f.write(bytes.fromhex(k))
|
||||||
print(f"Found keys have been dumped to `{keyfile}`")
|
print(f"Found keys have been dumped to `{keyfile}`")
|
||||||
print(" --[ FFFFFFFFFFFF ]-- has been inserted for unknown keys where res is 0")
|
print(" --[ FFFFFFFFFFFF ]-- has been inserted for unknown keys")
|
||||||
|
|
||||||
elapsed_time = time.time() - start_time
|
elapsed_time = time.time() - start_time
|
||||||
minutes = int(elapsed_time // 60)
|
minutes = int(elapsed_time // 60)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue