mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-19 21:03:48 -07:00
delete bit32 commands from the script, because Lua 5.4 not support this lib.
This commit is contained in:
parent
381440f31f
commit
2fe01ece80
1 changed files with 46 additions and 25 deletions
|
@ -105,8 +105,8 @@ local ansicolors = require('ansicolors')
|
||||||
|
|
||||||
---
|
---
|
||||||
-- global variables / defines
|
-- global variables / defines
|
||||||
local bxor = bit32.bxor
|
-- local bxor = bit32.bxor
|
||||||
local bbit = bit32.extract
|
-- local bbit = bit32.extract
|
||||||
local input = utils.input
|
local input = utils.input
|
||||||
local confirm = utils.confirm
|
local confirm = utils.confirm
|
||||||
|
|
||||||
|
@ -296,7 +296,8 @@ end
|
||||||
-- xor single byte
|
-- xor single byte
|
||||||
function xorme(hex, xor, index)
|
function xorme(hex, xor, index)
|
||||||
if ( index >= 23 ) then
|
if ( index >= 23 ) then
|
||||||
return ('%02x'):format(bxor( tonumber(hex,16) , tonumber(xor,16) ))
|
--return ('%02x'):format(bxor( tonumber(hex,16) , tonumber(xor,16) ))
|
||||||
|
return string.format("%x", tonumber(hex,16) ~ tonumber(xor,16))
|
||||||
else
|
else
|
||||||
return hex
|
return hex
|
||||||
end
|
end
|
||||||
|
@ -455,12 +456,17 @@ function bytesToTag(bytes, tag)
|
||||||
tag.raw =padString(bytes[8]);
|
tag.raw =padString(bytes[8]);
|
||||||
tag.SSC =padString(bytes[9]);
|
tag.SSC =padString(bytes[9]);
|
||||||
tag.Type=getTokenType(tag.DCFl);
|
tag.Type=getTokenType(tag.DCFl);
|
||||||
tag.OLE=bbit("0x"..tag.DCFl,7,1)
|
--tag.OLE=bbit("0x"..tag.DCFl,7,1)
|
||||||
tag.WRP=("%d"):format(bbit("0x"..bytes[8],0,4))
|
tag.OLE=(tonumber(tag.DCFl, 16) >> 7) & 0x01
|
||||||
tag.WRC=("%d"):format(bbit("0x"..bytes[8],4,3))
|
--tag.WRP=("%d"):format(bbit("0x"..bytes[8],0,4))
|
||||||
tag.RD=("%d"):format(bbit("0x"..bytes[8],7,1))
|
tag.WRP=string.format("%02d", tonumber(bytes[8], 16) & 0x0F)
|
||||||
|
--tag.WRC=("%d"):format(bbit("0x"..bytes[8],4,3))
|
||||||
|
tag.WRC = string.format("%02d", (tonumber(bytes[8], 16) >> 4) & 0x07)
|
||||||
|
--tag.RD=("%d"):format(bbit("0x"..bytes[8],7,1))
|
||||||
|
tag.RD=string.format("%02d", (tonumber(bytes[8],16) >> 7) & 0x01)
|
||||||
if (tag.Type=="SAM" and tag.raw=='9f') then
|
if (tag.Type=="SAM" and tag.raw=='9f') then
|
||||||
tag.Stamp_len=(0xfc-bbit("0x"..tag.DCFh,0,8))
|
tag.Stamp_len=(0xfc - tonumber(tag.DCFh,16) & 0xFF)
|
||||||
|
--tag.Stamp_len=(0xfc-bbit("0x"..tag.DCFh,0,8))
|
||||||
elseif (tag.Type=="SAM" and (tag.raw=='08' or tag.raw=='09')) then
|
elseif (tag.Type=="SAM" and (tag.raw=='08' or tag.raw=='09')) then
|
||||||
tag.Stamp_len = tonumber(tag.raw,10)
|
tag.Stamp_len = tonumber(tag.raw,10)
|
||||||
end
|
end
|
||||||
|
@ -493,7 +499,7 @@ end
|
||||||
function segmentsToTag(bytes, tag)
|
function segmentsToTag(bytes, tag)
|
||||||
if(#bytes>23) then
|
if(#bytes>23) then
|
||||||
local start=23
|
local start=23
|
||||||
local i=-1
|
local i=-1
|
||||||
if (istable(tag)) then
|
if (istable(tag)) then
|
||||||
repeat
|
repeat
|
||||||
i=i+1
|
i=i+1
|
||||||
|
@ -1262,7 +1268,8 @@ function mapAllSegments(tag, tagMap)
|
||||||
-- wrp (write proteted) = byte 2
|
-- wrp (write proteted) = byte 2
|
||||||
WRP = tonumber(bytes[v['start']+2],16)
|
WRP = tonumber(bytes[v['start']+2],16)
|
||||||
-- wrc (write control) - bit 4-6 of byte 3
|
-- wrc (write control) - bit 4-6 of byte 3
|
||||||
WRC = tonumber(bbit("0x"..bytes[v['start']+3],4,3),16)
|
--WRC = tonumber(bbit("0x"..bytes[v['start']+3],4,3),16)
|
||||||
|
WRC = (tonumber(bytes[v['start']+3],16) >> 4) & 0x07
|
||||||
--tagMap=mapTokenData(tagMap, 'Segment '..("%02d"):format(v['index']).." HDR", v['start'], v['start']+3)
|
--tagMap=mapTokenData(tagMap, 'Segment '..("%02d"):format(v['index']).." HDR", v['start'], v['start']+3)
|
||||||
tagMap=mapTokenData(tagMap, 'Segment '..("%02d"):format(v['index']).." CRC", v['start']+4, v['start']+4, true)
|
tagMap=mapTokenData(tagMap, 'Segment '..("%02d"):format(v['index']).." CRC", v['start']+4, v['start']+4, true)
|
||||||
table.insert(tagMap.crc8, {name = 'Segment '..("%02d"):format(v['index']).." CRC", pos=v['start']+4, seq={1,4,v['start'],v['start']+3}} )
|
table.insert(tagMap.crc8, {name = 'Segment '..("%02d"):format(v['index']).." CRC", pos=v['start']+4, seq={1,4,v['start'],v['start']+3}} )
|
||||||
|
@ -1703,7 +1710,8 @@ function getTokenType(DCFl)
|
||||||
0x30–0x6f SAM
|
0x30–0x6f SAM
|
||||||
0x70–0x7f GAM
|
0x70–0x7f GAM
|
||||||
]]--
|
]]--
|
||||||
local tt = bbit("0x"..DCFl,0,7)
|
--local tt = bbit("0x"..DCFl,0,7)
|
||||||
|
local tt = tonumber(DCFl, 16) & 0x7F
|
||||||
if (tt >= 0 and tt <= 47) then tt = "IAM"
|
if (tt >= 0 and tt <= 47) then tt = "IAM"
|
||||||
elseif (tt == 49) then tt = "SAM63"
|
elseif (tt == 49) then tt = "SAM63"
|
||||||
elseif (tt == 48) then tt = "SAM64"
|
elseif (tt == 48) then tt = "SAM64"
|
||||||
|
@ -1747,24 +1755,29 @@ function getSegmentData(bytes, start, index)
|
||||||
-- flag = high nibble of byte 1
|
-- flag = high nibble of byte 1
|
||||||
segment.flag = string.sub(bytes[start+1],0,1)
|
segment.flag = string.sub(bytes[start+1],0,1)
|
||||||
-- valid = bit 6 of byte 1
|
-- valid = bit 6 of byte 1
|
||||||
segment.valid = bbit("0x"..bytes[start+1],6,1)
|
--segment.valid = bbit("0x"..bytes[start+1],6,1)
|
||||||
|
segment.valid = (tonumber(bytes[start+1], 16) >> 6) & 0x01
|
||||||
-- last = bit 7 of byte 1
|
-- last = bit 7 of byte 1
|
||||||
segment.last = bbit("0x"..bytes[start+1],7,1)
|
--segment.last = bbit("0x"..bytes[start+1],7,1)
|
||||||
|
segment.last = (tonumber(bytes[start+1], 16) >> 7) & 0x01
|
||||||
-- len = (byte 0)+(bit0-3 of byte 1)
|
-- len = (byte 0)+(bit0-3 of byte 1)
|
||||||
segment.len = tonumber(bbit("0x"..bytes[start+1],0,4)..bytes[start],16)
|
--segment.len = tonumber(bbit("0x"..bytes[start+1],0,4)..bytes[start],16)
|
||||||
|
segment.len = ((tonumber(bytes[start+1], 16) & 0x0F) << 8) + tonumber(bytes[start], 16)
|
||||||
-- raw segment header
|
-- raw segment header
|
||||||
segment.raw = {bytes[start], bytes[start+1], bytes[start+2], bytes[start+3]}
|
segment.raw = {padString(bytes[start]), padString(bytes[start+1]), padString(bytes[start+2]), padString(bytes[start+3])}
|
||||||
-- wrp (write proteted) = byte 2
|
-- wrp (write proteted) = byte 2
|
||||||
segment.WRP = tonumber(bytes[start+2],16)
|
segment.WRP = tonumber(bytes[start+2],16)
|
||||||
-- wrc (write control) - bit 4-6 of byte 3
|
-- wrc (write control) - bit 4-6 of byte 3
|
||||||
segment.WRC = bbit("0x"..bytes[start+3],4,3)
|
--segment.WRC = bbit("0x"..bytes[start+3],4,3)
|
||||||
|
segment.WRC = (tonumber(bytes[start+3], 16) >> 4) & 0x07
|
||||||
-- rd (read disabled) - bit 7 of byte 3
|
-- rd (read disabled) - bit 7 of byte 3
|
||||||
segment.RD = bbit("0x"..bytes[start+3],7,1)
|
--segment.RD = bbit("0x"..bytes[start+3],7,1)
|
||||||
|
segment.RD = (tonumber(bytes[start+3],16) >> 7) & 0x01
|
||||||
-- crc byte 4
|
-- crc byte 4
|
||||||
segment.crc = bytes[start+4]
|
segment.crc = padString(bytes[start+4])
|
||||||
-- segment-data starts at segment.len - segment.header - segment.crc
|
-- segment-data starts at segment.len - segment.header - segment.crc
|
||||||
for i=0, (segment.len-5) do
|
for i=0, (segment.len-5) do
|
||||||
segment.data[i]=bytes[start+5+i]
|
segment.data[i]=padString(bytes[start+5+i])
|
||||||
end
|
end
|
||||||
return segment
|
return segment
|
||||||
else return false;
|
else return false;
|
||||||
|
@ -1781,11 +1794,14 @@ function getSegmentStats(bytes)
|
||||||
repeat
|
repeat
|
||||||
local s={}
|
local s={}
|
||||||
-- valid = bit 6 of byte 1
|
-- valid = bit 6 of byte 1
|
||||||
sValid = bbit("0x"..bytes[sStart+1],6,1)
|
-- sValid = bbit("0x"..bytes[sStart+1],6,1)
|
||||||
|
sValid = (tonumber(bytes[sStart+1],16) >> 6) & 0x01
|
||||||
-- last = bit 7 of byte 1
|
-- last = bit 7 of byte 1
|
||||||
sLast = bbit("0x"..bytes[sStart+1],7,1)
|
--sLast = bbit("0x"..bytes[sStart+1],7,1)
|
||||||
|
sLast = (tonumber(bytes[sStart+1],16) >> 7) & 0x01
|
||||||
-- len = (byte 0)+(bit0-3 of byte 1)
|
-- len = (byte 0)+(bit0-3 of byte 1)
|
||||||
sLen = tonumber(bbit("0x"..bytes[sStart+1],0,4)..bytes[sStart],16)
|
--sLen = tonumber(bbit("0x"..bytes[sStart+1],0,4)..bytes[sStart],16)
|
||||||
|
sLen = ((tonumber(bytes[start+1],16) & 0x0F) << 8) + tonumber(bytes[start],16)
|
||||||
--print("index: "..("%02d"):format(x).." Len: "..sLen.." start:"..sStart.." end: "..(sStart+sLen-1))
|
--print("index: "..("%02d"):format(x).." Len: "..sLen.." start:"..sStart.." end: "..(sStart+sLen-1))
|
||||||
s['index']=x
|
s['index']=x
|
||||||
s['start']=sStart
|
s['start']=sStart
|
||||||
|
@ -1808,11 +1824,14 @@ function regenSegmentHeader(segment)
|
||||||
local raw = segment.raw
|
local raw = segment.raw
|
||||||
local i
|
local i
|
||||||
-- len bit0..7 | len=12bit=low nibble of byte1..byte0
|
-- len bit0..7 | len=12bit=low nibble of byte1..byte0
|
||||||
raw[1]=("%02x"):format(bbit("0x"..("%03x"):format(seg.len),0,8))
|
--raw[1]=("%02x"):format(bbit("0x"..("%03x"):format(seg.len),0,8))
|
||||||
|
raw[1] = seg.len & 0xFF
|
||||||
-- high nibble of len bit6=valid , bit7=last of byte 1 | ?what are bit 5+6 for? maybe kgh?
|
-- high nibble of len bit6=valid , bit7=last of byte 1 | ?what are bit 5+6 for? maybe kgh?
|
||||||
raw[2]=("%02x"):format(bbit("0x"..("%03x"):format(seg.len),8,4)+bbit("0x"..("%02x"):format((seg.valid*64)+(seg.last*128)),0,8))
|
--raw[2]=("%02x"):format(bbit("0x"..("%03x"):format(seg.len),8,4)+bbit("0x"..("%02x"):format((seg.valid*64)+(seg.last*128)),0,8))
|
||||||
|
raW[2] = (seg.len >> 8) & 0xF | (seg.valid >> 6) | (seg.last >> 7)
|
||||||
-- WRP
|
-- WRP
|
||||||
raw[3]=("%02x"):format(bbit("0x"..("%02x"):format(seg.WRP),0,8))
|
-- raw[3]=("%02x"):format(bbit("0x"..("%02x"):format(seg.WRP),0,8))
|
||||||
|
raw[3] = seg.WRP
|
||||||
-- WRC + RD
|
-- WRC + RD
|
||||||
raw[4]=("%02x"):format(tonumber((seg.WRC*16)+(seg.RD*128),10))
|
raw[4]=("%02x"):format(tonumber((seg.WRC*16)+(seg.RD*128),10))
|
||||||
-- flag
|
-- flag
|
||||||
|
@ -2141,6 +2160,8 @@ end
|
||||||
---
|
---
|
||||||
-- chack for signature of a 'Legic-Cash-Segment'
|
-- chack for signature of a 'Legic-Cash-Segment'
|
||||||
function check4LegicCash(data, uid)
|
function check4LegicCash(data, uid)
|
||||||
|
|
||||||
|
print("### #data: " .. #data)
|
||||||
if(#data==32) then
|
if(#data==32) then
|
||||||
local stamp_len=(#data-25)
|
local stamp_len=(#data-25)
|
||||||
local stamp=""
|
local stamp=""
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue