]> cvs.zerfleddert.de Git - proxmark3-svn/commitdiff
ADD: a minor xor script
authoriceman1001 <iceman@iuse.se>
Fri, 30 Oct 2015 08:07:04 +0000 (09:07 +0100)
committericeman1001 <iceman@iuse.se>
Fri, 30 Oct 2015 08:07:04 +0000 (09:07 +0100)
client/scripts/calc_ev1_it.lua [new file with mode: 0644]

diff --git a/client/scripts/calc_ev1_it.lua b/client/scripts/calc_ev1_it.lua
new file mode 100644 (file)
index 0000000..0471da7
--- /dev/null
@@ -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 <uid> "
+desc =[[
+Arguments:
+       -h             : this help
+       -u <UID>       : 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
Impressum, Datenschutz