mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-21 05:43:48 -07:00
A lot of changes...
.. ntag simulation stuff from @marshmellows branch "ntag/sim" .. hf mf mifare fixes from @pwpivi. .. hw status command .. speedtest function from @pwpivi .. Viking Functionalities, (not a proper DEMOD, but a start) .. GetCountUS better precision from @pwpivi .. bin2hex, hex2bin from @holiman ... starting with getting the T55x7 CONFIGURATION_BLOCK for different clone situations. Ripped from Adam Lauries RFidler, nothing working or finished.. ... Started working with the T55x7 read command with password actually performs a write block... See Issue #136 https://github.com/Proxmark/proxmark3/issues/136 Not solved yet. ... Started add SHA256.. not working yet..
This commit is contained in:
parent
05beaa8dd8
commit
0de8e3874d
41 changed files with 2222 additions and 237 deletions
122
client/scripts/dumptoemul-mfu.lua
Normal file
122
client/scripts/dumptoemul-mfu.lua
Normal file
|
@ -0,0 +1,122 @@
|
|||
-- The getopt-functionality is loaded from pm3/getopt.lua
|
||||
-- Have a look there for further details
|
||||
getopt = require('getopt')
|
||||
bin = require('bin')
|
||||
|
||||
example = "script run dumptoemul -i dumpdata-foobar.bin"
|
||||
author = "Martin Holst Swende"
|
||||
usage = "script run dumptoemul [-i <file>] [-o <file>]"
|
||||
desc =[[
|
||||
This script takes a dumpfile from 'hf mf dump' and converts it to a format that can be used
|
||||
by the emulator
|
||||
|
||||
Arguments:
|
||||
-h This help
|
||||
-i <file> Specifies the dump-file (input). If omitted, 'dumpdata.bin' is used
|
||||
-o <filename> Specifies the output file. If omitted, <uid>.eml is used.
|
||||
|
||||
]]
|
||||
|
||||
-------------------------------
|
||||
-- Some utilities
|
||||
-------------------------------
|
||||
|
||||
---
|
||||
-- A debug printout-function
|
||||
function dbg(args)
|
||||
if DEBUG then
|
||||
print("###", args)
|
||||
end
|
||||
end
|
||||
---
|
||||
-- This is only meant to be used when errors occur
|
||||
function oops(err)
|
||||
print("ERROR: ",err)
|
||||
end
|
||||
|
||||
|
||||
---
|
||||
-- Usage help
|
||||
function help()
|
||||
print(desc)
|
||||
print("Example usage")
|
||||
print(example)
|
||||
end
|
||||
|
||||
local function convert_to_ascii(hexdata)
|
||||
if string.len(hexdata) % 8 ~= 0 then
|
||||
return oops(("Bad data, length should be a multiple of 8 (was %d)"):format(string.len(hexdata)))
|
||||
end
|
||||
|
||||
local js,i = "[";
|
||||
for i = 1, string.len(hexdata),8 do
|
||||
js = js .."'" ..string.sub(hexdata,i,i+7).."',\n"
|
||||
end
|
||||
js = js .. "]"
|
||||
return js
|
||||
end
|
||||
|
||||
local function readdump(infile)
|
||||
t = infile:read("*all")
|
||||
--print(string.len(t))
|
||||
len = string.len(t)
|
||||
local len,hex = bin.unpack(("H%d"):format(len),t)
|
||||
--print(len,hex)
|
||||
return hex
|
||||
end
|
||||
|
||||
local function convert_to_emulform(hexdata)
|
||||
if string.len(hexdata) % 8 ~= 0 then
|
||||
return oops(("Bad data, length should be a multiple of 8 (was %d)"):format(string.len(hexdata)))
|
||||
end
|
||||
local ascii,i = "";
|
||||
for i = 1, string.len(hexdata),8 do
|
||||
ascii = ascii ..string.sub(hexdata,i,i+7).."\n"
|
||||
end
|
||||
|
||||
return string.sub(ascii,1,-1)
|
||||
end
|
||||
|
||||
local function main(args)
|
||||
|
||||
local input = "dumpdata.bin"
|
||||
local output
|
||||
|
||||
for o, a in getopt.getopt(args, 'i:o:h') do
|
||||
if o == "h" then return help() end
|
||||
if o == "i" then input = a end
|
||||
if o == "o" then output = a end
|
||||
end
|
||||
-- Validate the parameters
|
||||
|
||||
local infile = io.open(input, "rb")
|
||||
if infile == nil then
|
||||
return oops("Could not read file ", input)
|
||||
end
|
||||
local dumpdata = readdump(infile)
|
||||
-- The hex-data is now in ascii-format,
|
||||
|
||||
-- But first, check the uid
|
||||
local uid = string.sub(dumpdata,1,8)
|
||||
output = output or (uid .. ".eml")
|
||||
|
||||
-- Format some linebreaks
|
||||
dumpdata = convert_to_emulform(dumpdata)
|
||||
|
||||
local outfile = io.open(output, "w")
|
||||
if outfile == nil then
|
||||
return oops("Could not write to file ", output)
|
||||
end
|
||||
|
||||
outfile:write(dumpdata:lower())
|
||||
io.close(outfile)
|
||||
print(("Wrote an emulator-dump to the file %s"):format(output))
|
||||
end
|
||||
|
||||
|
||||
--[[
|
||||
In the future, we may implement so that scripts are invoked directly
|
||||
into a 'main' function, instead of being executed blindly. For future
|
||||
compatibility, I have done so, but I invoke my main from here.
|
||||
--]]
|
||||
main(args)
|
|
@ -112,6 +112,8 @@ function mfcrack_inner()
|
|||
return nil, "Card is not vulnerable to Darkside attack (doesn't send NACK on authentication requests). You can try 'script run mfkeys' or 'hf mf chk' to test various known keys."
|
||||
elseif isOK == 0xFFFFFFFD then
|
||||
return nil, "Card is not vulnerable to Darkside attack (its random number generator is not predictable). You can try 'script run mfkeys' or 'hf mf chk' to test various known keys."
|
||||
elseif isOK == 0xFFFFFFFC then
|
||||
return nil, "The card's random number generator is vulnerable but behaves somewhat weird (Mifare clone?). You can try 'script run mfkeys' or 'hf mf chk' to test various known keys."
|
||||
elseif isOK ~= 1 then
|
||||
return nil, "Error occurred"
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue