resetmifare.js
Summary
Reset card to transport configuration
load("mifare.js");
var card = new Card(_scsh3.reader);
card.reset(Card.RESET_COLD);
var mif = new Mifare(card);
print("UID: " + mif.getUID());
if (_scsh3.reader.substr(0, 3) != "SCM") {
var keyaid = 0x00;
var keybid = 0x01;
} else {
print("SCM Reader detected.");
var keyaid = 0x60;
var keybid = 0x61;
}
var empty = new ByteString("00000000000000000000000000000000", HEX);
for (var i = 0; i < 16; i++) {
var s = mif.newSector(i);
s.setKeyId(keyaid, Mifare.KEY_A);
s.setKeyId(keybid, Mifare.KEY_B);
var ki = s.authenticatePublic(0, Mifare.KEY_A);
if (ki < 0) {
print("Unknown key A - skipping sector " + i);
continue;
}
var header = s.read(3);
print(s.toString());
var ac = s.getACforBlock(3);
if (ac == Sector.AC_UPDATE_WITH_KEYB) {
var ki = s.authenticatePublic(0, Mifare.KEY_B);
if (ki < 0) {
print("Unknown key B - skipping sector " + i);
continue;
}
}
s.setKeyA(new ByteString("FFFFFFFFFFFF", HEX));
s.setKeyB(new ByteString("FFFFFFFFFFFF", HEX));
s.setHeaderDataByte(new ByteString("69", HEX));
s.setACforBlock(0, Sector.AC_ALWAYS);
s.setACforBlock(1, Sector.AC_ALWAYS);
s.setACforBlock(2, Sector.AC_ALWAYS);
s.setACforBlock(3, Sector.AC_UPDATE_AC_NOKEY_B);
s.update(3);
var key = new ByteString("FFFFFFFFFFFF", HEX);
mif.loadKey(keyaid, key);
s.authenticate(0, Mifare.KEY_A);
if (i > 0) {
s.update(0, empty);
}
s.update(1, empty);
s.update(2, empty);
}
Documentation generated by
JSDoc on Tue Sep 3 22:29:45 2013