The unified diff between revisions [06b25c60..] and [5cb31352..] is displayed below. It can also be downloaded as a raw diff.

#
#
# add_file "mifare-force.py"
#  content [19e953e8f99f674bf22abb94f7b078aa109e5e2c]
#
============================================================
--- mifare-force.py	19e953e8f99f674bf22abb94f7b078aa109e5e2c
+++ mifare-force.py	19e953e8f99f674bf22abb94f7b078aa109e5e2c
@@ -0,0 +1,54 @@
+#!/usr/bin/env python2.5
+
+'''mifare-force.py - transport key checker
+Written by David Adam <zanchey@ucc.gu.uwa.edu.au>
+Requires Python 2.5.
+
+Licensed under an MIT-style license: see LICENSE file for details.
+'''
+
+KEYS_A =('\xFF' * 6,
+       '\x00' * 6,
+       '\xA0\xA1\xA2\xA3\xA4\xA5')
+
+KEYS_B =('\xFF' * 6,
+       '\x00' * 6,
+       '\xB0\xB1\xB2\xB3\xB4\xB5')
+
+from serial import Serial
+import mifare
+import sys
+
+comm = Serial(0, baudrate = 19200)
+reader = mifare.MIFAREReader(comm)
+reader.set_led(red = False, green= True)
+
+print 'MIFARE TRANSPORT KEY CHECKER'
+
+for key in KEYS_A:
+    print "Trying key A: %s" % repr(key)
+    for sector in range(39):
+        x = reader.select_card()
+        try:
+            reader.sector_login((sector, 0), key)
+        except:
+            pass
+        else:
+            print 'Successful login: sector %s, key A %s' % (sector, repr(key))
+
+print '---------'
+print 'Note: successful logins with key B may be useless - default ACLs deny read access to key B.'
+
+for key in KEYS_B:
+    print "Trying key B: %s" % repr(key)
+    for sector in range(39):
+        x = reader.select_card()
+        try:
+            reader.sector_login((sector, 0), key, keytype = 1)
+        except:
+            pass
+        else:
+            print 'Successful login: sector %s, key B %s' % (sector, repr(key))
+
+reader.set_led(red = True, green= False)
+reader.beep(100)