From 84f9cf06261d20d81fd4c0f2aa7d4d384df751b4 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Fri, 30 Oct 2015 09:07:04 +0100 Subject: [PATCH] ADD: a minor xor script --- client/scripts/calc_ev1_it.lua | 147 +++++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 client/scripts/calc_ev1_it.lua diff --git a/client/scripts/calc_ev1_it.lua b/client/scripts/calc_ev1_it.lua new file mode 100644 index 00000000..0471da70 --- /dev/null +++ b/client/scripts/calc_ev1_it.lua @@ -0,0 +1,147 @@ +local bin = require('bin') +local getopt = require('getopt') +local utils = require('utils') + +local bxor=bit32.bxor + +example =[[ + script run calc_ev1_it + script run calc_ev1_it -u 11223344556677 +]] +author = "Iceman" +usage = "script run calc_ev1_it -u " +desc =[[ +Arguments: + -h : this help + -u : UID +]] +--- +-- A debug printout-function +function dbg(args) + if type(args) == "table" then + local i = 1 + while args[i] do + dbg(args[i]) + i = i+1 + end + else + print("###", args) + end +end +--- +-- This is only meant to be used when errors occur +function oops(err) + print("ERROR: ",err) + return nil,err +end +--- +-- Usage help +function help() + print(desc) + print("Example usage") + print(example) +end +-- +-- Exit message +function exitMsg(msg) + print( string.rep('--',20) ) + print( string.rep('--',20) ) + print(msg) + print() +end + +local _xortable = { + --[[ position, 4byte xor + --]] + {"00","4f2711c1"}, + {"01","07D7BB83"}, + {"02","9636EF07"}, + {"03","B5F4460E"}, + {"04","F271141C"}, + {"05","7D7BB038"}, + {"06","636EF871"}, + {"07","5F4468E3"}, + {"08","271149C7"}, + {"09","D7BB0B8F"}, + {"0A","36EF8F1E"}, + {"0B","F446863D"}, + {"0C","7114947A"}, + {"0D","7BB0B0F5"}, + {"0E","6EF8F9EB"}, + {"0F","44686BD7"}, + {"10","11494fAF"}, + {"11","BB0B075F"}, + {"12","EF8F96BE"}, + {"13","4686B57C"}, + {"14","1494F2F9"}, + {"15","B0B07DF3"}, + {"16","F8F963E6"}, + {"17","686B5FCC"}, + {"18","494F2799"}, + {"19","0B07D733"}, + {"1A","8F963667"}, + {"1B","86B5F4CE"}, + {"1C","94F2719C"}, + {"1D","B07D7B38"}, + {"1E","F9636E70"}, + {"1F","6B5F44E0"}, +} + +local function findEntryByUid( uid ) + + -- xor UID4,UID5,UID6,UID7 + -- mod 0x20 (dec 32) + local pos = (bxor(bxor(bxor(uid[4],uid[5]), uid[6]),uid[7])) % 32 + + -- convert to hexstring + pos = string.format('%02X', pos) + + for k, v in pairs(_xortable) do + if ( v[1] == pos ) then + return utils.ConvertHexToBytes(v[2]) + end + end + return nil +end + +local function main(args) + + print( string.rep('--',20) ) + print( string.rep('--',20) ) + print() + + local i,j, pwd + local uid = '04111211121110' + + -- Arguments for the script + for o, a in getopt.getopt(args, 'hu:') do + if o == "h" then return help() end + if o == "u" then uid = a end + end + + -- uid string checks + if uid == nil then return oops('empty uid string') end + if #uid == 0 then return oops('empty uid string') end + if #uid ~= 14 then return oops('uid wrong length. Should be 7 hex bytes') end + + local uidbytes = utils.ConvertHexToBytes(uid) + + local entry = findEntryByUid(uidbytes) + if entry == nil then return oops("Can't find a xor entry") end + + -- PWD CALC + -- PWD0 = T0 xor B xor C xor D + -- PWD1 = T1 xor A xor C xor E + -- PWD2 = T2 xor A xor B xor F + -- PWD3 = T3 xor G + + local pwd0 = bxor( bxor( bxor( entry[1], uidbytes[2]), uidbytes[3]), uidbytes[4]) + local pwd1 = bxor( bxor( bxor( entry[2], uidbytes[1]), uidbytes[3]), uidbytes[5]) + local pwd2 = bxor( bxor( bxor( entry[3], uidbytes[1]), uidbytes[2]), uidbytes[6]) + local pwd3 = bxor( entry[4], uidbytes[7]) + + print('UID | '..uid) + print(string.format('PWD | %02X%02X%02X%02X', pwd0, pwd1, pwd2, pwd3)) +end + +main(args) \ No newline at end of file -- 2.39.2