import struct
import sys
from scapy.all import rdpcap
from scapy.config import conf
conf.manufdb = None
KEY_TYPE = ["KeyA", "KeyB"]
def main():
if len(sys.argv) < 2:
print("Usage: %s <file>", sys.argv[0])
sys.exit(1)
file_path = sys.argv[1]
try:
packets = rdpcap(file_path)
except Exception as e:
print(f"Error opening file: {e}")
sys.exit(1)
card_map = {}
key_map = {}
for packet in packets:
b = bytes(packet)
if len(b) == 0x11:
if b[1] == 0xFA:
if b[5] == 0x60 or b[5] == 0x61:
uid = struct.unpack('>I', b[7:11])[0]
if uid not in card_map:
card_map[uid] = b[7:11]
print(f"Card UID: {uid:08X}")
print(f"Sector: {b[6]//4}\t{KEY_TYPE[b[5]&1]}: {b[11:17].hex().upper()}")
key_map[b[11:17].hex().upper()] = b[11:17]
print("")
for k in key_map:
print(k)
if __name__ == "__main__":
main()