mirror of
https://github.com/Proxmark/proxmark3.git
synced 2025-07-31 12:00:10 -07:00
mfkeys.lua: Remove trailing whitespaces.
This commit is contained in:
parent
f88fa399bc
commit
b5cf8b07e2
1 changed files with 30 additions and 29 deletions
|
@ -1,11 +1,11 @@
|
||||||
--[[
|
--[[
|
||||||
This is an example of Lua-scripting within proxmark3. This is a lua-side
|
This is an example of Lua-scripting within proxmark3. This is a lua-side
|
||||||
implementation of hf mf chk
|
implementation of hf mf chk
|
||||||
|
|
||||||
This code is licensed to you under the terms of the GNU GPL, version 2 or,
|
This code is licensed to you under the terms of the GNU GPL, version 2 or,
|
||||||
at your option, any later version. See the LICENSE.txt file for the text of
|
at your option, any later version. See the LICENSE.txt file for the text of
|
||||||
the license.
|
the license.
|
||||||
|
|
||||||
Copyright (C) 2013 m h swende <martin at swende.se>
|
Copyright (C) 2013 m h swende <martin at swende.se>
|
||||||
--]]
|
--]]
|
||||||
-- Loads the commands-library
|
-- Loads the commands-library
|
||||||
|
@ -49,7 +49,7 @@ end
|
||||||
|
|
||||||
|
|
||||||
function checkBlock(blockNo, keys, keyType)
|
function checkBlock(blockNo, keys, keyType)
|
||||||
-- The command data is only 512 bytes, each key is 6 bytes, meaning that we can send max 85 keys in one go.
|
-- The command data is only 512 bytes, each key is 6 bytes, meaning that we can send max 85 keys in one go.
|
||||||
-- If there's more, we need to split it up
|
-- If there's more, we need to split it up
|
||||||
local start, remaining= 1, #keys
|
local start, remaining= 1, #keys
|
||||||
local arg1 = bit32.bor(bit32.lshift(keyType, 8), blockNo)
|
local arg1 = bit32.bor(bit32.lshift(keyType, 8), blockNo)
|
||||||
|
@ -61,10 +61,10 @@ function checkBlock(blockNo, keys, keyType)
|
||||||
--print("data",data)
|
--print("data",data)
|
||||||
--print("data len", #data)
|
--print("data len", #data)
|
||||||
print(("Testing block %d, keytype %d, with %d keys"):format(blockNo, keyType, n))
|
print(("Testing block %d, keytype %d, with %d keys"):format(blockNo, keyType, n))
|
||||||
local command = Command:new{cmd = cmds.CMD_MIFARE_CHKKEYS,
|
local command = Command:new{cmd = cmds.CMD_MIFARE_CHKKEYS,
|
||||||
arg1 = arg1,
|
arg1 = arg1,
|
||||||
arg2 = 1,
|
arg2 = 1,
|
||||||
arg3 = n,
|
arg3 = n,
|
||||||
data = data}
|
data = data}
|
||||||
local status = checkCommand(command)
|
local status = checkCommand(command)
|
||||||
if status then return status, blockNo end
|
if status then return status, blockNo end
|
||||||
|
@ -90,36 +90,38 @@ local function displayresults(results)
|
||||||
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()
|
||||||
if list[1] == akey then
|
if list[1] == akey then
|
||||||
-- Already at pole position
|
-- Already at pole position
|
||||||
return list
|
return list
|
||||||
end
|
end
|
||||||
local result = {akey}
|
local result = {akey}
|
||||||
--print(("Putting '%s' first"):format(akey))
|
--print(("Putting '%s' first"):format(akey))
|
||||||
for i,v in ipairs(list) do
|
for i,v in ipairs(list) do
|
||||||
if v ~= akey then
|
if v ~= akey then
|
||||||
result[#result+1] = v
|
result[#result+1] = v
|
||||||
end
|
end
|
||||||
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,_
|
||||||
|
|
||||||
if utils.confirm("Do you wish to save the keys to dumpfile?") then
|
if utils.confirm("Do you wish to save the keys to dumpfile?") then
|
||||||
local destination = utils.input("Select a filename to store to", "dumpkeys.bin")
|
local destination = utils.input("Select a filename to store to", "dumpkeys.bin")
|
||||||
local file = io.open(destination, "w")
|
local file = io.open(destination, "w")
|
||||||
if file == nil then
|
if file == nil then
|
||||||
print("Could not write to file ", destination)
|
print("Could not write to file ", destination)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local key_a = ""
|
local key_a = ""
|
||||||
local key_b = ""
|
local key_b = ""
|
||||||
|
|
||||||
for sector,_ in pairs(results) do
|
for sector,_ in pairs(results) do
|
||||||
blockNo, keyA, keyB = unpack(_)
|
blockNo, keyA, keyB = unpack(_)
|
||||||
key_a = key_a .. bin.pack("H",keyA);
|
key_a = key_a .. bin.pack("H",keyA);
|
||||||
|
@ -132,7 +134,7 @@ local function dumptofile(results)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
local function main( args)
|
local function main(args)
|
||||||
|
|
||||||
print(desc);
|
print(desc);
|
||||||
|
|
||||||
|
@ -147,11 +149,11 @@ local function main( args)
|
||||||
core.clearCommandBuffer()
|
core.clearCommandBuffer()
|
||||||
local blockNo
|
local blockNo
|
||||||
local keyType = 0 -- A=0, B=1
|
local keyType = 0 -- A=0, B=1
|
||||||
local numSectors = 16
|
local numSectors = 16
|
||||||
|
|
||||||
if 0x18 == result.sak then --NXP MIFARE Classic 4k | Plus 4k
|
if 0x18 == result.sak then -- NXP MIFARE Classic 4k | Plus 4k
|
||||||
-- IFARE Classic 4K offers 4096 bytes split into forty sectors,
|
-- IFARE Classic 4K offers 4096 bytes split into forty sectors,
|
||||||
-- of which 32 are same size as in the 1K with eight more that are quadruple size sectors.
|
-- of which 32 are same size as in the 1K with eight more that are quadruple size sectors.
|
||||||
numSectors = 40
|
numSectors = 40
|
||||||
elseif 0x08 == result.sak then -- NXP MIFARE CLASSIC 1k | Plus 2k
|
elseif 0x08 == result.sak then -- NXP MIFARE CLASSIC 1k | Plus 2k
|
||||||
-- 1K offers 1024 bytes of data storage, split into 16 sector
|
-- 1K offers 1024 bytes of data storage, split into 16 sector
|
||||||
|
@ -159,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")
|
||||||
|
@ -169,25 +171,25 @@ local function main( args)
|
||||||
for sector=1,numSectors,1 do
|
for sector=1,numSectors,1 do
|
||||||
|
|
||||||
--[[
|
--[[
|
||||||
The mifare Classic 1k card has 16 sectors of 4 data blocks each.
|
The mifare Classic 1k card has 16 sectors of 4 data blocks each.
|
||||||
The first 32 sectors of a mifare Classic 4k card consists of 4 data blocks and the remaining
|
The first 32 sectors of a mifare Classic 4k card consists of 4 data blocks and the remaining
|
||||||
8 sectors consist of 16 data blocks.
|
8 sectors consist of 16 data blocks.
|
||||||
--]]
|
--]]
|
||||||
local blockNo = sector * 4 -1
|
local blockNo = sector * 4 - 1
|
||||||
|
|
||||||
if sector > 32 then
|
if sector > 32 then
|
||||||
blockNo = 32*4+ (sector-32)*16 -1
|
blockNo = 32*4 + (sector-32)*16 - 1
|
||||||
end
|
end
|
||||||
|
|
||||||
local keyA = checkBlock(blockNo, keys, 0)
|
local keyA = checkBlock(blockNo, keys, 0)
|
||||||
if keyA then keys = placeFirst(keyA, keys) end
|
if keyA then keys = placeFirst(keyA, keys) end
|
||||||
keyA = keyA or ""
|
keyA = keyA or ""
|
||||||
|
|
||||||
local keyB = checkBlock(blockNo, keys, 1)
|
local keyB = checkBlock(blockNo, keys, 1)
|
||||||
if keyB then keys = placeFirst(keyB, keys) end
|
if keyB then keys = placeFirst(keyB, keys) end
|
||||||
keyB = keyB or ""
|
keyB = keyB or ""
|
||||||
|
|
||||||
result[sector] = {blockNo, keyA, keyB }
|
result[sector] = {blockNo, keyA, keyB}
|
||||||
|
|
||||||
-- Check if user aborted
|
-- Check if user aborted
|
||||||
if core.ukbhit() then
|
if core.ukbhit() then
|
||||||
|
@ -199,5 +201,4 @@ local function main( args)
|
||||||
dumptofile(result)
|
dumptofile(result)
|
||||||
end
|
end
|
||||||
|
|
||||||
main( args)
|
main(args)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue