my $r = RFID::Libnfc::Reader->new(debug => $debug);
if ($r->init()) {
- printf ("Reader: %s\n", $r->name);
+ warn "reader: %s\n", $r->name;
my $tag = $r->connect(IM_ISO14443A_106);
if ($tag) {
exit -1;
}
- my $uid = sprintf "%02x%02x%02x%02x", unpack('C4', $tag->{_nai}->abtUid);
- # @{ $tag->uid }; # FIXME this doesn't work with tags which have 00 in UID!
-
- warn "UID: $uid\n";
+ my $uid = sprintf "%02x%02x%02x%02x", @{ $tag->uid };
my $card_key_file = "cards/$uid.key";
$keyfile ||= $card_key_file;
if ( -e $keyfile ) {
warn "# loading keys from $keyfile";
$tag->load_keys($keyfile);
- warn "## _keys = ", dump($tag->{_keys});
+ warn "## _keys = ", dump($tag->{_keys}) if $debug;
}
$tag->select if ($tag->can("select"));
my $card;
- print STDERR "reading blocks ";
+ print STDERR "$uid reading blocks ";
for (my $i = 0; $i < $tag->blocks; $i++) {
if (my $data = $tag->read_block($i)) {
# if we are dumping an ultralight token,
. substr($card, $o+6, 4) . $keys->[$i]->[1]
. substr($card, $o+16)
;
- warn "sector $i keys re-inserted at $o\n";
+ warn "# sector $i keys re-inserted at $o\n" if $debug;
}
if ( my $padding = 4096 - length($card) ) {
- warn "add $padding bytes up to 4k dump (needed for keys loading)\n";
+ warn "# add $padding bytes up to 4k dump (needed for keys loading)\n" if $debug;
$card .= "\x00" x $padding;
}
my $md5 = md5_hex($card);
my $out_file = "cards/$uid.$md5";
if ( -e $out_file ) {
- warn "$out_file allready exists, SKIPING\n";
+ warn "$out_file allready exists, not overwriting\n";
} else {
write_file $out_file, $card;
- print "$out_file ", -s $out_file, " bytes key: $card_key_file\n";
+ warn "$out_file ", -s $out_file, " bytes key: $card_key_file\n";
if ( ! -e $card_key_file ) {
$out_file =~ s{^cards/}{} || die "can't strip directory from out_file";
symlink $out_file, $card_key_file || die "$card_key_file: $!";
# view dump
system "./mifare-mad.pl $out_file > $out_file.txt";
$ENV{MAD} && system "vi $out_file.txt";
-
}