mirror of
https://github.com/Proxmark/proxmark3.git
synced 2025-08-20 21:33:19 -07:00
commit
380e0d086c
9 changed files with 63 additions and 96 deletions
|
@ -1907,7 +1907,7 @@ int CmdHF14AMfECFill(const char *Cmd)
|
||||||
default: numSectors = 16;
|
default: numSectors = 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("--params: numSectors: %d, keyType:%d", numSectors, keyType);
|
printf("--params: numSectors: %d, keyType:%d\n", numSectors, keyType);
|
||||||
UsbCommand c = {CMD_MIFARE_EML_CARDLOAD, {numSectors, keyType, 0}};
|
UsbCommand c = {CMD_MIFARE_EML_CARDLOAD, {numSectors, keyType, 0}};
|
||||||
SendCommand(&c);
|
SendCommand(&c);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
This is a library to read 14443a tags. It can be used something like this
|
This is a library to read 14443a tags. It can be used something like this
|
||||||
|
|
||||||
local reader = require('read14a')
|
local reader = require('read14a')
|
||||||
result, err = reader.read1443a()
|
result, err = reader.read14443a()
|
||||||
if not result then
|
if not result then
|
||||||
print(err)
|
print(err)
|
||||||
return
|
return
|
||||||
|
@ -43,11 +43,11 @@ ISO14443a_TYPES[0x88] = "Infineon MIFARE CLASSIC 1K"
|
||||||
ISO14443a_TYPES[0x98] = "Gemplus MPCOS"
|
ISO14443a_TYPES[0x98] = "Gemplus MPCOS"
|
||||||
|
|
||||||
|
|
||||||
local function tostring_1443a(sak)
|
local function tostring_14443a(sak)
|
||||||
return ISO14443a_TYPES[sak] or ("Unknown (SAK=%x)"):format(sak)
|
return ISO14443a_TYPES[sak] or ("Unknown (SAK=%x)"):format(sak)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function parse1443a(data)
|
local function parse14443a(data)
|
||||||
--[[
|
--[[
|
||||||
|
|
||||||
Based on this struct :
|
Based on this struct :
|
||||||
|
@ -66,8 +66,8 @@ local function parse1443a(data)
|
||||||
local count,uid,uidlen, atqa, sak, ats_len, ats= bin.unpack('H10CH2CC',data)
|
local count,uid,uidlen, atqa, sak, ats_len, ats= bin.unpack('H10CH2CC',data)
|
||||||
uid = uid:sub(1,2*uidlen)
|
uid = uid:sub(1,2*uidlen)
|
||||||
--print("uid, atqa, sak: ",uid, atqa, sak)
|
--print("uid, atqa, sak: ",uid, atqa, sak)
|
||||||
--print("TYPE: ", tostring_1443a(sak))
|
--print("TYPE: ", tostring_14443a(sak))
|
||||||
return { uid = uid, atqa = atqa, sak = sak, name = tostring_1443a(sak)}
|
return { uid = uid, atqa = atqa, sak = sak, name = tostring_14443a(sak)}
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Sends a USBpacket to the device
|
--- Sends a USBpacket to the device
|
||||||
|
@ -114,7 +114,7 @@ local function read14443a(dont_disconnect, no_rats)
|
||||||
return nil, "iso14443a card select failed"
|
return nil, "iso14443a card select failed"
|
||||||
end
|
end
|
||||||
data = string.sub(result,count)
|
data = string.sub(result,count)
|
||||||
info, err = parse1443a(data)
|
info, err = parse14443a(data)
|
||||||
else
|
else
|
||||||
err ="No response from card"
|
err ="No response from card"
|
||||||
end
|
end
|
||||||
|
@ -139,12 +139,12 @@ local function waitFor14443a()
|
||||||
end
|
end
|
||||||
return nil, "Aborted by user"
|
return nil, "Aborted by user"
|
||||||
end
|
end
|
||||||
local library = {
|
|
||||||
|
|
||||||
read1443a = read14443a,
|
local library = {
|
||||||
|
read14443a = read14443a,
|
||||||
read = read14443a,
|
read = read14443a,
|
||||||
waitFor14443a = waitFor14443a,
|
waitFor14443a = waitFor14443a,
|
||||||
parse1443a = parse1443a,
|
parse14443a = parse14443a,
|
||||||
sendToDevice = sendToDevice,
|
sendToDevice = sendToDevice,
|
||||||
ISO14A_COMMAND = ISO14A_COMMAND,
|
ISO14A_COMMAND = ISO14A_COMMAND,
|
||||||
}
|
}
|
||||||
|
|
|
@ -106,7 +106,7 @@ function main(args)
|
||||||
dbg("doconnect")
|
dbg("doconnect")
|
||||||
-- We reuse the connect functionality from a
|
-- We reuse the connect functionality from a
|
||||||
-- common library
|
-- common library
|
||||||
info, err = lib14a.read1443a(true, no_rats)
|
info, err = lib14a.read14443a(true, no_rats)
|
||||||
|
|
||||||
if err then return oops(err) end
|
if err then return oops(err) end
|
||||||
print(("Connected to card, uid = %s"):format(info.uid))
|
print(("Connected to card, uid = %s"):format(info.uid))
|
||||||
|
|
|
@ -406,7 +406,7 @@ function main(args)
|
||||||
|
|
||||||
-- GET TAG UID
|
-- GET TAG UID
|
||||||
|
|
||||||
result, err = lib14a.read1443a(false, true)
|
result, err = lib14a.read14443a(false, true)
|
||||||
if not result then
|
if not result then
|
||||||
return oops(err)
|
return oops(err)
|
||||||
end
|
end
|
||||||
|
|
|
@ -71,7 +71,7 @@ end
|
||||||
--
|
--
|
||||||
-- Read information from a card
|
-- Read information from a card
|
||||||
function GetCardInfo()
|
function GetCardInfo()
|
||||||
result, err = lib14a.read1443a(false, true)
|
result, err = lib14a.read14443a(false, true)
|
||||||
if not result then
|
if not result then
|
||||||
print(err)
|
print(err)
|
||||||
return
|
return
|
||||||
|
|
|
@ -14,50 +14,16 @@ local cmds = require('commands')
|
||||||
local keys = require('mf_default_keys')
|
local keys = require('mf_default_keys')
|
||||||
-- Ability to read what card is there
|
-- Ability to read what card is there
|
||||||
local reader = require('read14a')
|
local reader = require('read14a')
|
||||||
|
-- Asks the user for input
|
||||||
|
local utils = require('utils')
|
||||||
|
|
||||||
|
|
||||||
local desc =
|
local desc = ("This script implements check keys. \
|
||||||
("This script implements check keys. It utilises a large list of default keys (currently %d keys).\
|
It utilises a large list of default keys (currently %d keys).\
|
||||||
If you want to add more, just put them inside mf_default_keys.lua. "):format(#keys)
|
If you want to add more, just put them inside mf_default_keys.lua. "):format(#keys)
|
||||||
|
|
||||||
local TIMEOUT = 10000 -- 10 seconds
|
local TIMEOUT = 10000 -- 10 seconds
|
||||||
|
|
||||||
--[[This may be moved to a separate library at some point]]
|
|
||||||
local utils =
|
|
||||||
{
|
|
||||||
---
|
|
||||||
-- Asks the user for Yes or No
|
|
||||||
confirm = function(message, ...)
|
|
||||||
local answer
|
|
||||||
message = message .. " [y]/[n] ?"
|
|
||||||
repeat
|
|
||||||
io.write(message)
|
|
||||||
io.flush()
|
|
||||||
answer=io.read()
|
|
||||||
if answer == 'Y' or answer == "y" then
|
|
||||||
return true
|
|
||||||
elseif answer == 'N' or answer == 'n' then
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
until false
|
|
||||||
end,
|
|
||||||
---
|
|
||||||
-- Asks the user for input
|
|
||||||
input = function (message , default)
|
|
||||||
local answer
|
|
||||||
if default ~= nil then
|
|
||||||
message = message .. " (default: ".. default.. " )"
|
|
||||||
end
|
|
||||||
message = message .." \n > "
|
|
||||||
io.write(message)
|
|
||||||
io.flush()
|
|
||||||
answer=io.read()
|
|
||||||
if answer == '' then answer = default end
|
|
||||||
|
|
||||||
return answer
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
local function checkCommand(command)
|
local function checkCommand(command)
|
||||||
|
|
||||||
|
@ -119,11 +85,12 @@ local function displayresults(results)
|
||||||
for sector,_ in pairs(results) do
|
for sector,_ in pairs(results) do
|
||||||
blockNo, keyA, keyB = unpack(_)
|
blockNo, keyA, keyB = unpack(_)
|
||||||
|
|
||||||
print(("| %3d | %3d |%s|%s|"):format(sector, blockNo, keyA, keyB ))
|
print(("| %3d | %3d |%12s|%12s|"):format(sector, blockNo, keyA, keyB))
|
||||||
end
|
end
|
||||||
print("|--------------------------------------|")
|
print("|--------------------------------------|")
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- A little helper to place an item first in the list
|
-- A little helper to place an item first in the list
|
||||||
local function placeFirst(akey, list)
|
local function placeFirst(akey, list)
|
||||||
akey = akey:lower()
|
akey = akey:lower()
|
||||||
|
@ -140,6 +107,7 @@ local function placeFirst(akey, list)
|
||||||
end
|
end
|
||||||
return result
|
return result
|
||||||
end
|
end
|
||||||
|
|
||||||
local function dumptofile(results)
|
local function dumptofile(results)
|
||||||
local sector, blockNo, keyA, keyB,_
|
local sector, blockNo, keyA, keyB,_
|
||||||
|
|
||||||
|
@ -170,7 +138,7 @@ local function main( args)
|
||||||
|
|
||||||
print(desc);
|
print(desc);
|
||||||
|
|
||||||
result, err = reader.read1443a(false, true)
|
result, err = reader.read14443a(false, true)
|
||||||
if not result then
|
if not result then
|
||||||
print(err)
|
print(err)
|
||||||
return
|
return
|
||||||
|
@ -193,7 +161,7 @@ local function main( args)
|
||||||
elseif 0x09 == result.sak then -- NXP MIFARE Mini 0.3k
|
elseif 0x09 == result.sak then -- NXP MIFARE Mini 0.3k
|
||||||
-- MIFARE Classic mini offers 320 bytes split into five sectors.
|
-- MIFARE Classic mini offers 320 bytes split into five sectors.
|
||||||
numSectors = 5
|
numSectors = 5
|
||||||
elseif 0x10 == result.sak then-- "NXP MIFARE Plus 2k"
|
elseif 0x10 == result.sak then -- NXP MIFARE Plus 2k
|
||||||
numSectors = 32
|
numSectors = 32
|
||||||
else
|
else
|
||||||
print("I don't know how many sectors there are on this type of card, defaulting to 16")
|
print("I don't know how many sectors there are on this type of card, defaulting to 16")
|
||||||
|
@ -234,4 +202,3 @@ local function main( args)
|
||||||
end
|
end
|
||||||
|
|
||||||
main(args)
|
main(args)
|
||||||
|
|
||||||
|
|
|
@ -56,7 +56,7 @@ end
|
||||||
-- @return if unsuccessfull : nil, error
|
-- @return if unsuccessfull : nil, error
|
||||||
function wait_for_mifare()
|
function wait_for_mifare()
|
||||||
while not core.ukbhit() do
|
while not core.ukbhit() do
|
||||||
res, err = reader.read1443a(false, true)
|
res, err = reader.read14443a(false, true)
|
||||||
if res then return res end
|
if res then return res end
|
||||||
-- err means that there was no response from card
|
-- err means that there was no response from card
|
||||||
end
|
end
|
||||||
|
|
|
@ -122,7 +122,7 @@ local function main(args)
|
||||||
|
|
||||||
|
|
||||||
-- find tag
|
-- find tag
|
||||||
result, err = lib14a.read1443a(false, true)
|
result, err = lib14a.read14443a(false, true)
|
||||||
if not result then return oops(err) end
|
if not result then return oops(err) end
|
||||||
|
|
||||||
-- load keys
|
-- load keys
|
||||||
|
|
|
@ -127,7 +127,7 @@ local function main(args)
|
||||||
local cmdSetDbgOff = "hf mf dbg 0"
|
local cmdSetDbgOff = "hf mf dbg 0"
|
||||||
core.console( cmdSetDbgOff)
|
core.console( cmdSetDbgOff)
|
||||||
|
|
||||||
result, err = lib14a.read1443a(false, true)
|
result, err = lib14a.read14443a(false, true)
|
||||||
if not result then
|
if not result then
|
||||||
return oops(err)
|
return oops(err)
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue