From cd5767d43da36aa44a78bd4dcfbd7016349da3c6 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Sun, 9 Nov 2014 19:29:47 +0100 Subject: [PATCH] FIX: I think the dumping of data is correct now in tnp3.lua. MD5 string vs bytearrays in lua are tricky ADD: utils.lua some functions to convert between ascii, bytes and strings. --- client/lualibs/utils.lua | 33 +++++++++++++++++++++++++++++---- client/scripts/tnp3.lua | 38 +++++++++++++++++--------------------- 2 files changed, 46 insertions(+), 25 deletions(-) diff --git a/client/lualibs/utils.lua b/client/lualibs/utils.lua index 6b3777db..bff89c5f 100644 --- a/client/lualibs/utils.lua +++ b/client/lualibs/utils.lua @@ -46,21 +46,46 @@ local Utils = end, --- -- Convert Byte array to string of hex - ConvertBytes2String = function(bytes) - local s = {} + ConvertBytes2HexString = function(bytes) + if #bytes == 0 then + return '' + end + local s={} for i = 1, #(bytes) do s[i] = string.format("%02X",bytes[i]) end return table.concat(s) end, - - ConvertStringToBytes = function(s) + -- Convert byte array to string with ascii + ConvertBytesToAsciiString = function(bytes) + if #bytes == 0 then + return '' + end + local s={} + for i = 1, #(bytes) do + s[i] = string.char(bytes[i]) + end + return table.concat(s) + end, + ConvertHexStringToBytes = function(s) local t={} + if s == nil then return t end + if #s == 0 then return t end for k in s:gmatch"(%x%x)" do table.insert(t,tonumber(k,16)) end return t end, + ConvertAsciiStringToBytes = function(s) + local t={} + if s == nil then return t end + if #s == 0 then return t end + + for k in s:gmatch"(.)" do + table.insert(t, string.byte(k)) + end + return t + end, -- function convertStringToBytes(str) -- local bytes = {} diff --git a/client/scripts/tnp3.lua b/client/scripts/tnp3.lua index 56d0b486..303963ba 100644 --- a/client/scripts/tnp3.lua +++ b/client/scripts/tnp3.lua @@ -93,7 +93,7 @@ end local function main(args) print( string.rep('--',20) ) - --print( string.rep('--',20) ) + print( string.rep('--',20) ) --print() local keyA @@ -187,35 +187,30 @@ local function main(args) local blockdata, err = waitCmd() if err then return oops(err) end - local b = blockNo%4 - - if b ~= 3 then + if blockNo%4 ~= 3 then if blockNo < 8 then -- Block 0-7 not encrypted - blocks[blockNo+1] = ('%02d :: %s :: %s'):format(blockNo,blockdata,blockdata) + blocks[blockNo+1] = ('%02d :: %s'):format(blockNo,blockdata) else - local base = ('%s%s%d%s'):format(block0, block1, blockNo, hashconstant) local md5hash = md5.sumhexa(base) + local base = ('%s%s%02d%s'):format(block0, block1, blockNo, hashconstant) + local baseArr = utils.ConvertHexStringToBytes(base) + local baseStr = utils.ConvertBytesToAsciiString(baseArr) + local md5hash = md5.sumhexa(baseStr) local aestest = core.aes(md5hash, blockdata) - - local _,hex = bin.unpack(("H%d"):format(16),aestest) - - -- local hexascii = string.gsub(hex, '(%x%x)', - -- function(value) - -- return string.char(tonumber(value, 16)) - -- end - -- ) + --print(aestest, type(aestest)) + local hex = utils.ConvertAsciiStringToBytes(aestest) + hex = utils.ConvertBytes2HexString(hex) + --local _,hex = bin.unpack(("H%d"):format(16),aestest) if string.find(blockdata, '^0+$') then - blocks[blockNo+1] = ('%02d :: %s :: %s'):format(blockNo,blockdata,blockdata) + blocks[blockNo+1] = ('%02d :: %s'):format(blockNo,blockdata) else - --blocks[blockNo+1] = ('%02d :: %s :: %s :: %s '):format(blockNo,key,md5hash,hex) - blocks[blockNo+1] = ('%02d :: %s :: %s'):format(blockNo,blockdata,hex) + blocks[blockNo+1] = ('%02d :: %s'):format(blockNo,hex) end end - else -- Sectorblocks, not encrypted - blocks[blockNo+1] = ('%02d :: %s :: %s'):format(blockNo,blockdata,blockdata) + blocks[blockNo+1] = ('%02d :: %s'):format(blockNo,blockdata) end end @@ -226,10 +221,11 @@ local function main(args) print( (' UID : %s'):format(uid) ) print( (' ITEM TYPE : %s - %s'):format(itemtype, toyNames[itemtype]) ) print( (' CARDID : %s'):format(cardid ) ) - print('BLK :: DATA DECRYPTED' ) + print('BLK :: Decrypted Ascii' ) print( string.rep('--',36) ) for _,s in pairs(blocks) do - print( s ) + local arr = utils.ConvertHexStringToBytes(s:sub(7,#s)) + print( s, utils.ConvertBytesToAsciiString(arr) ) end end -- 2.39.2