From d78792f51535f469f4ba55b9ff8fa874c5fd34e0 Mon Sep 17 00:00:00 2001 From: "martin.holst@gmail.com" Date: Thu, 3 Oct 2013 12:33:58 +0000 Subject: [PATCH] Added a utility which takes a mifare-dumpfile and creates a html-report visualising the data. The html-dump is self-sufficient and standalone --- client/scripts/htmldump.lua | 106 ++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 client/scripts/htmldump.lua diff --git a/client/scripts/htmldump.lua b/client/scripts/htmldump.lua new file mode 100644 index 00000000..e9d35443 --- /dev/null +++ b/client/scripts/htmldump.lua @@ -0,0 +1,106 @@ +-- 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 14araw -x 6000F57b" +author = "Martin Holst Swende" +usage = "script run htmldump [-f ]" +desc =[[ +This script takes a dumpfile and produces a html based dump, which is a +bit more easily analyzed. + +Arguments: + -h This help + -i Specifies the dump-file (input). If omitted, 'dumpdata.bin' is used + -o Speciies the output file. If omitted, .html 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 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_js(hexdata) + if string.len(hexdata) % 32 ~= 0 then + return oops(("Bad data, length should be a multiple of 32 (was %d)"):format(string.len(hexdata))) + end + local js,i = "["; + for i = 1, string.len(hexdata),32 do + js = js .."'" ..string.sub(hexdata,i,i+31).."',\n" + end + js = js .. "]" + return js +end + +local function main(args) + + print(desc) + local input = "dumpdata.bin" + local output = os.date("%Y-%m-%d_%H%M%S.html"); + 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, "r") + if infile == nil then + return ("Could not read file ", input) + end + --lokal skel = require("skel") + local dumpdata = readdump(infile) + io.close(infile) + + local js_code = convert_to_js(dumpdata) + --print(js_code) + local skel = require("htmlskel") + html = skel.getHTML(js_code); + + local outfile = io.open(output, "w") + if outfile == nil then + return oops("Could not write to file ", output) + end + outfile:write(html) + io.close(outfile) + print(("Wrote a HTML 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) \ No newline at end of file -- 2.39.2