]> cvs.zerfleddert.de Git - proxmark3-svn/blobdiff - client/scripts/14araw.lua
fix 'hf iclass replay' (#888)
[proxmark3-svn] / client / scripts / 14araw.lua
index f3434a16cdae90e500c1fe266b6a2d58fd1d3fe0..e253092960c2c2d92a48b45d47e6a32c450a5433 100644 (file)
@@ -2,7 +2,7 @@ local cmds = require('commands')
 local getopt = require('getopt')
 local lib14a = require('read14a')
 
 local getopt = require('getopt')
 local lib14a = require('read14a')
 
-example = "script run writerraw -x 6000F57b"
+example = "script run 14araw -x 6000F57b"
 author = "Martin Holst Swende"
 
 
 author = "Martin Holst Swende"
 
 
@@ -17,18 +17,20 @@ Arguments:
        -p                              stay connected - dont inactivate the field
        -x <payload>    Data to send (NO SPACES!)
        -d                              Debug flag
        -p                              stay connected - dont inactivate the field
        -x <payload>    Data to send (NO SPACES!)
        -d                              Debug flag
+       -t                              Topaz mode
+       -3                              Skip ISO14443-4 select
 
 Examples : 
 
 # 1. Connect and don't disconnect
 
 Examples : 
 
 # 1. Connect and don't disconnect
-script run writeraw -p 
+script run 14araw -p 
 # 2. Send mf auth, read response (nonce)
 # 2. Send mf auth, read response (nonce)
-script run writeraw -o -x 6000F57b -p
+script run 14araw -o -x 6000F57b -p
 # 3. disconnect
 # 3. disconnect
-script run writeraw -o
+script run 14araw -o
 
 # All three steps in one go:
 
 # All three steps in one go:
-script run writeraw -x 6000F57b
+script run 14araw -x 6000F57b
 ]]
 
 --[[
 ]]
 
 --[[
@@ -52,7 +54,7 @@ local DEBUG = false -- the debug flag
 -- A debug printout-function
 function dbg(args)
        if DEBUG then
 -- A debug printout-function
 function dbg(args)
        if DEBUG then
-               print("# ", args)
+               print("###", args)
        end
 end 
 --- 
        end
 end 
 --- 
@@ -70,6 +72,7 @@ function help()
        print(example)
 end
 
        print(example)
 end
 
+
 --- 
 -- The main entry point
 function main(args)
 --- 
 -- The main entry point
 function main(args)
@@ -83,15 +86,19 @@ function main(args)
        local stayconnected = false
        local payload = nil
        local doconnect = true
        local stayconnected = false
        local payload = nil
        local doconnect = true
+       local topaz_mode = false
+       local no_rats = false
 
        -- Read the parameters
 
        -- Read the parameters
-       for o, a in getopt.getopt(args, 'corcpx:') do
+       for o, a in getopt.getopt(args, 'orcpx:dt3') do
                if o == "o" then doconnect = false end          
                if o == "r" then ignore_response = true end
                if o == "c" then appendcrc = true end
                if o == "p" then stayconnected = true end
                if o == "x" then payload = a end
                if o == "d" then DEBUG = true end
                if o == "o" then doconnect = false end          
                if o == "r" then ignore_response = true end
                if o == "c" then appendcrc = true end
                if o == "p" then stayconnected = true end
                if o == "x" then payload = a end
                if o == "d" then DEBUG = true end
+               if o == "t" then topaz_mode = true end
+               if o == "3" then no_rats = true end
        end
 
        -- First of all, connect
        end
 
        -- First of all, connect
@@ -99,7 +106,7 @@ function main(args)
                dbg("doconnect")
                -- We reuse the connect functionality from a 
                -- common library
                dbg("doconnect")
                -- We reuse the connect functionality from a 
                -- common library
-               info, err = lib14a.read1443a(true)
+               info, err = lib14a.read14443a(true, no_rats)
 
                if err then return oops(err) end
                print(("Connected to card, uid = %s"):format(info.uid))
 
                if err then return oops(err) end
                print(("Connected to card, uid = %s"):format(info.uid))
@@ -107,7 +114,7 @@ function main(args)
 
        -- The actual raw payload, if any
        if payload then
 
        -- The actual raw payload, if any
        if payload then
-               res,err = sendRaw(payload,{ignore_response = ignore_response})
+               res,err = sendRaw(payload,{ignore_response = ignore_response, topaz_mode = topaz_mode})
                if err then return oops(err) end
        
                if not ignoreresponse then 
                if err then return oops(err) end
        
                if not ignoreresponse then 
@@ -137,11 +144,11 @@ function showdata(usbpacket)
 end
 
 
 end
 
 
-
 function sendRaw(rawdata, options)
        print(">> ", rawdata)
        
        local flags = lib14a.ISO14A_COMMAND.ISO14A_NO_DISCONNECT + lib14a.ISO14A_COMMAND.ISO14A_RAW
 function sendRaw(rawdata, options)
        print(">> ", rawdata)
        
        local flags = lib14a.ISO14A_COMMAND.ISO14A_NO_DISCONNECT + lib14a.ISO14A_COMMAND.ISO14A_RAW
+       if options.topaz_mode == true then flags = flags + lib14a.ISO14A_COMMAND.ISO14A_TOPAZMODE end
 
        local command = Command:new{cmd = cmds.CMD_READER_ISO_14443a, 
                                                                        arg1 = flags, -- Send raw 
 
        local command = Command:new{cmd = cmds.CMD_READER_ISO_14443a, 
                                                                        arg1 = flags, -- Send raw 
@@ -168,14 +175,18 @@ end
 --     Testing
 -------------------------
 function selftest()
 --     Testing
 -------------------------
 function selftest()
+       DEBUG = true
+       dbg("Performing test")
+       main()
        main("-p")
        main(" -o -x 6000F57b -p")
        main("-o")
        main("-x 6000F57b")
        main("-p")
        main(" -o -x 6000F57b -p")
        main("-o")
        main("-x 6000F57b")
+       dbg("Tests done")
 end
 -- Flip the switch here to perform a sanity check. 
 -- It read a nonce in two different ways, as specified in the usage-section
 end
 -- Flip the switch here to perform a sanity check. 
 -- It read a nonce in two different ways, as specified in the usage-section
-if false then 
+if "--test"==args then 
        selftest()
 else 
        -- Call the main 
        selftest()
 else 
        -- Call the main 
Impressum, Datenschutz