mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-02-21 22:54:40 +08:00
72 lines
1.9 KiB
Lua
72 lines
1.9 KiB
Lua
local cmds = require('commands')
|
|
local desc =
|
|
[[
|
|
|
|
This script is a work in progress, not yet functional. It is an attempt to use the raw-writing
|
|
capabilities already present within the devices
|
|
|
|
]]
|
|
|
|
print(desc)
|
|
|
|
-- Some raw data
|
|
local rawdata = "6000F57b" --mf_auth
|
|
local TIMEOUT = 2000 -- Shouldn't take longer than 2 seconds
|
|
|
|
function show(usbpacket)
|
|
if usbpacket then
|
|
local response = Command.parse(usbpacket)
|
|
print(response)
|
|
end
|
|
end
|
|
|
|
-- Want to do both connect and send raw, so we should AND the two commands
|
|
-- ISO14A_COMMAND.ISO14A_RAW(8) and ISO14A_CONNECT (1). However, we don't have a
|
|
-- bitlib yet, so we'll do it manually, 1 & 8 == 9
|
|
-- ISO14A_NO_DISCONNECT = 2 ==> 11
|
|
|
|
print(string.len(rawdata))
|
|
local command = Command:new{cmd = cmds.CMD_READER_ISO_14443a,
|
|
arg1 = 3, -- Connect (1) and don't disconnect (2)
|
|
arg2 = 0-- string.len(rawdata),
|
|
--data = rawdata
|
|
}
|
|
local mf_auth = Command:new{cmd = cmds.CMD_READER_ISO_14443a,
|
|
arg1 = 6, -- Send raw
|
|
arg2 = string.len(rawdata),
|
|
data = rawdata}
|
|
local quit = Command:new{cmd = cmds.CMD_READER_ISO_14443a,
|
|
arg1 = 0, -- Nothing
|
|
}
|
|
|
|
core.clearCommandBuffer()
|
|
--print("Sending")
|
|
--print(command)
|
|
local err = core.SendCommand(command:getBytes())
|
|
if err then
|
|
print(err)
|
|
return nil, err
|
|
end
|
|
local cardselect = core.WaitForResponseTimeout(cmds.CMD_ACK,TIMEOUT)
|
|
print("Card select:")
|
|
show(cardselect)
|
|
--local response = core.WaitForResponseTimeout(cmds.CMD_ACK,TIMEOUT)
|
|
--print("Raw response:")
|
|
--show(response)
|
|
|
|
local answer = ""
|
|
while answer ~='q' do
|
|
|
|
local err = core.SendCommand(mf_auth:getBytes())
|
|
if err then
|
|
print(err)
|
|
return nil, err
|
|
end
|
|
local nonce = core.WaitForResponseTimeout(cmds.CMD_ACK,TIMEOUT)
|
|
print("Nonce:")
|
|
show(nonce)
|
|
io.write("Write q to quit, hit any char to get a nonce ")
|
|
io.flush()
|
|
answer=io.read(1)
|
|
|
|
end--]]
|