mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-21 05:43:48 -07:00
Merge pull request #2666 from piotrva/hf-mf-ultimatecard-script-auto-set-maxblock
Automatically set maximum r/w block for preset configurations of Mifare Classic in hf_mf_ultimatecard.lua, add presets for 2k variants.
This commit is contained in:
commit
69e407e8d5
2 changed files with 44 additions and 34 deletions
|
@ -3,6 +3,7 @@ All notable changes to this project will be documented in this file.
|
|||
This project uses the changelog in accordance with [keepchangelog](http://keepachangelog.com/). Please use this to write notable changes, which is not the same as git commit log...
|
||||
|
||||
## [unreleased][unreleased]
|
||||
- Automatically set maximum read/write block when using predefined types in `hf_mf_ultimatecard` script (@piotrva)
|
||||
- Changed SPI flash detection to calculate the size instead of table lookup, updated spi_flash_decode.py script with more ICs (@ANTodorov)
|
||||
- Fixed `hf/lf tune` segfault when called from script (@doegox)
|
||||
- Added option to set and get maximum read/write block number using `hf_mf_ultimatecard` script (@piotrva)
|
||||
|
|
|
@ -50,20 +50,20 @@ arguments = [[
|
|||
-c read magic configuration
|
||||
-u UID (8-20 hexsymbols), set UID on tag
|
||||
-t tag type to impersonate
|
||||
1 = Mifare Mini S20 4-byte
|
||||
2 = Mifare Mini S20 7-byte | 15 = NTAG 210
|
||||
3 = Mifare Mini S20 10-byte | 16 = NTAG 212
|
||||
4 = Mifare 1k S50 4-byte | 17 = NTAG 213
|
||||
5 = Mifare 1k S50 7-byte | 18 = NTAG 215
|
||||
6 = Mifare 1k S50 10-byte | 19 = NTAG 216
|
||||
7 = Mifare 4k S70 4-byte | 20 = NTAG I2C 1K
|
||||
8 = Mifare 4k S70 7-byte | 21 = NTAG I2C 2K
|
||||
9 = Mifare 4k S70 10-byte | 22 = NTAG I2C 1K PLUS
|
||||
*** 10 = UL - NOT WORKING FULLY | 23 = NTAG I2C 2K PLUS
|
||||
*** 11 = UL-C - NOT WORKING FULLY | 24 = NTAG 213F
|
||||
12 = UL EV1 48b | 25 = NTAG 216F
|
||||
13 = UL EV1 128b
|
||||
*** 14 = UL Plus - NOT WORKING YET
|
||||
1 = Mifare Mini S20 4-byte | 15 = NTAG 210
|
||||
2 = Mifare Mini S20 7-byte | 16 = NTAG 212
|
||||
3 = Mifare Mini S20 10-byte | 17 = NTAG 213
|
||||
4 = Mifare 1k S50 4-byte | 18 = NTAG 215
|
||||
5 = Mifare 1k S50 7-byte | 19 = NTAG 216
|
||||
6 = Mifare 1k S50 10-byte | 20 = NTAG I2C 1K
|
||||
7 = Mifare 4k S70 4-byte | 21 = NTAG I2C 2K
|
||||
8 = Mifare 4k S70 7-byte | 22 = NTAG I2C 1K PLUS
|
||||
9 = Mifare 4k S70 10-byte | 23 = NTAG I2C 2K PLUS
|
||||
*** 10 = UL - NOT WORKING FULLY | 24 = NTAG 213F
|
||||
*** 11 = UL-C - NOT WORKING FULLY | 25 = NTAG 216F
|
||||
12 = UL EV1 48b |
|
||||
13 = UL EV1 128b |
|
||||
*** 14 = UL Plus - NOT WORKING YET |
|
||||
|
||||
-p NTAG password (8 hexsymbols), set NTAG password on tag.
|
||||
-a NTAG pack ( 4 hexsymbols), set NTAG pack on tag.
|
||||
|
@ -644,6 +644,26 @@ local function write_ulm(ulm)
|
|||
return true, 'Ok'
|
||||
end
|
||||
---
|
||||
-- Write maximum read/write block number,
|
||||
local function write_maxRWblk(data)
|
||||
-- input number check
|
||||
if data == nil then return nil, 'empty block number' end
|
||||
if #data == 0 then return nil, 'empty block number' end
|
||||
if #data ~= 2 then return nil, 'block number wrong length. Should be 1 hex byte' end
|
||||
|
||||
print('Set max R/W block', data)
|
||||
local info = connect()
|
||||
if not info then return false, "Can't select card" end
|
||||
local resp
|
||||
-- set maximum read/write block
|
||||
resp = send("CF".._key.."6B"..data)
|
||||
lib14a.disconnect()
|
||||
if resp ~= '9000FD07' then return nil, 'Failed to write maximum read/write block'
|
||||
else
|
||||
return true, 'Ok'
|
||||
end
|
||||
end
|
||||
---
|
||||
-- Set type for magic card presets.
|
||||
local function set_type(tagtype)
|
||||
-- tagtype checks
|
||||
|
@ -656,6 +676,7 @@ local function set_type(tagtype)
|
|||
send("CF".._key.."F000000000000002000978009102DABC19101011121314151604000900")
|
||||
lib14a.disconnect()
|
||||
write_uid('04112233')
|
||||
write_maxRWblk('13')
|
||||
-- Setting Mifare mini S20 7-byte
|
||||
elseif tagtype == 2 then
|
||||
print('Setting: Ultimate Magic card to Mifare mini S20 7-byte')
|
||||
|
@ -663,6 +684,7 @@ local function set_type(tagtype)
|
|||
send("CF".._key.."F000010000000002000978009102DABC19101011121314151644000900")
|
||||
lib14a.disconnect()
|
||||
write_uid('04112233445566')
|
||||
write_maxRWblk('13')
|
||||
-- Setting Mifare mini S20 10-byte
|
||||
elseif tagtype == 3 then
|
||||
print('Setting: Ultimate Magic card to Mifare mini S20 10-byte')
|
||||
|
@ -670,6 +692,7 @@ local function set_type(tagtype)
|
|||
send("CF".._key.."F000020000000002000978009102DABC19101011121314151684000900")
|
||||
lib14a.disconnect()
|
||||
write_uid('04112233445566778899')
|
||||
write_maxRWblk('13')
|
||||
-- Setting Mifare 1k S50 4--byte
|
||||
elseif tagtype == 4 then
|
||||
print('Setting: Ultimate Magic card to Mifare 1k S50 4-byte')
|
||||
|
@ -677,6 +700,7 @@ local function set_type(tagtype)
|
|||
send("CF".._key.."F000000000000002000978009102DABC19101011121314151604000800")
|
||||
lib14a.disconnect()
|
||||
write_uid('04112233')
|
||||
write_maxRWblk('3F')
|
||||
-- Setting Mifare 1k S50 7-byte
|
||||
elseif tagtype == 5 then
|
||||
print('Setting: Ultimate Magic card to Mifare 1k S50 7-byte')
|
||||
|
@ -684,6 +708,7 @@ local function set_type(tagtype)
|
|||
send("CF".._key.."F000010000000002000978009102DABC19101011121314151644000800")
|
||||
lib14a.disconnect()
|
||||
write_uid('04112233445566')
|
||||
write_maxRWblk('3F')
|
||||
-- Setting Mifare 1k S50 10-byte
|
||||
elseif tagtype == 6 then
|
||||
print('Setting: Ultimate Magic card to Mifare 1k S50 10-byte')
|
||||
|
@ -691,6 +716,7 @@ local function set_type(tagtype)
|
|||
send("CF".._key.."F000020000000002000978009102DABC19101011121314151684000800")
|
||||
lib14a.disconnect()
|
||||
write_uid('04112233445566778899')
|
||||
write_maxRWblk('3F')
|
||||
-- Setting Mifare 4k S70 4-byte
|
||||
elseif tagtype == 7 then
|
||||
print('Setting: Ultimate Magic card to Mifare 4k S70 4-byte')
|
||||
|
@ -698,6 +724,7 @@ local function set_type(tagtype)
|
|||
send("CF".._key.."F000000000000002000978009102DABC19101011121314151602001800")
|
||||
lib14a.disconnect()
|
||||
write_uid('04112233')
|
||||
write_maxRWblk('FF')
|
||||
-- Setting Mifare 4k S70 7-byte
|
||||
elseif tagtype == 8 then
|
||||
print('Setting: Ultimate Magic card to Mifare 4k S70 7-byte')
|
||||
|
@ -705,6 +732,7 @@ local function set_type(tagtype)
|
|||
send("CF".._key.."F000010000000002000978009102DABC19101011121314151642001800")
|
||||
lib14a.disconnect()
|
||||
write_uid('04112233445566')
|
||||
write_maxRWblk('FF')
|
||||
-- Setting Mifare 4k S70 10-byte
|
||||
elseif tagtype == 9 then
|
||||
print('Setting: Ultimate Magic card to Mifare 4k S70 10-byte')
|
||||
|
@ -712,6 +740,7 @@ local function set_type(tagtype)
|
|||
send("CF".._key.."F000020000000002000978009102DABC19101011121314151682001800")
|
||||
lib14a.disconnect()
|
||||
write_uid('04112233445566778899')
|
||||
write_maxRWblk('FF')
|
||||
-- Setting UL
|
||||
elseif tagtype == 10 then
|
||||
print('Setting: Ultimate Magic card to UL')
|
||||
|
@ -1017,26 +1046,6 @@ local function wipe(wtype)
|
|||
end
|
||||
end
|
||||
---
|
||||
-- Write maximum read/write block number,
|
||||
local function write_maxRWblk(data)
|
||||
-- input number check
|
||||
if data == nil then return nil, 'empty block number' end
|
||||
if #data == 0 then return nil, 'empty block number' end
|
||||
if #data ~= 2 then return nil, 'block number wrong length. Should be 1 hex byte' end
|
||||
|
||||
print('Set max R/W block', data)
|
||||
local info = connect()
|
||||
if not info then return false, "Can't select card" end
|
||||
local resp
|
||||
-- set maximum read/write block
|
||||
resp = send("CF".._key.."6B"..data)
|
||||
lib14a.disconnect()
|
||||
if resp ~= '9000FD07' then return nil, 'Failed to write maximum read/write block'
|
||||
else
|
||||
return true, 'Ok'
|
||||
end
|
||||
end
|
||||
---
|
||||
-- The main entry point
|
||||
function main(args)
|
||||
print()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue