mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-14 10:37:23 -07:00
renamed lua scripts. minor adaptations
This commit is contained in:
parent
d5e6464660
commit
778ede25e7
9 changed files with 68 additions and 140 deletions
164
client/luascripts/lf_t55xx_chk_date.lua
Normal file
164
client/luascripts/lf_t55xx_chk_date.lua
Normal file
|
@ -0,0 +1,164 @@
|
|||
local os = require("os")
|
||||
local ac = require('ansicolors')
|
||||
local utils = require('utils')
|
||||
local getopt = require('getopt')
|
||||
local dash = string.rep('--', 32)
|
||||
|
||||
author = ' Author: jareckib - created 01.02.2025'
|
||||
version = ' version v1.01'
|
||||
desc = [[
|
||||
A simple script for searching the password for T5577. The script creates a
|
||||
dictionary starting from the entered starting year to the entered ending year.
|
||||
There are two search methods - DDMMYYYY or YYYYMMDD. Checking the entire year
|
||||
takes about 1 minute and 50 seconds. Date from 1900 to 2100. The script may be
|
||||
useful if the password is, for example, a date of birth.
|
||||
]]
|
||||
usage = [[
|
||||
script run t55_chk_date
|
||||
]]
|
||||
arguments = [[
|
||||
script run t55_chk_date -h : this help
|
||||
]]
|
||||
|
||||
local DEBUG = true
|
||||
|
||||
local function dbg(args)
|
||||
if not DEBUG then return end
|
||||
if type(args) == 'table' then
|
||||
for _, v in ipairs(args) do
|
||||
dbg(v)
|
||||
end
|
||||
else
|
||||
print('###', args)
|
||||
end
|
||||
end
|
||||
|
||||
local function help()
|
||||
print()
|
||||
print(ac.green..author)
|
||||
print(version)
|
||||
print(ac.yellow..desc)
|
||||
print(ac.cyan..' Usage'..ac.reset)
|
||||
print(usage)
|
||||
print(ac.cyan..' Arguments'..ac.reset)
|
||||
print(arguments)
|
||||
end
|
||||
|
||||
local dir = os.getenv('HOME') .. '/proxmark3/client/dictionaries/'
|
||||
local dictionary_path = dir .. 'T5577date.dic'
|
||||
|
||||
local days_in_month = {
|
||||
[1] = 31, [2] = 28, [3] = 31, [4] = 30, [5] = 31, [6] = 30,
|
||||
[7] = 31, [8] = 31, [9] = 30, [10] = 31, [11] = 30, [12] = 31
|
||||
}
|
||||
|
||||
local function generate_dictionary(start_year, end_year, mode)
|
||||
local file = io.open(dictionary_path, "w")
|
||||
if not file then
|
||||
print(ac.yellow .. ' ERROR: ' .. ac.reset .. 'Cannot create T5577date.dic')
|
||||
return false
|
||||
end
|
||||
|
||||
for year = start_year, end_year do
|
||||
for month = 1, 12 do
|
||||
local days_in_current_month = days_in_month[month]
|
||||
if month == 2 and ((year % 4 == 0 and year % 100 ~= 0) or (year % 400 == 0)) then
|
||||
days_in_current_month = 29
|
||||
end
|
||||
|
||||
for day = 1, days_in_current_month do
|
||||
local month_str = string.format("%02d", month)
|
||||
local day_str = string.format("%02d", day)
|
||||
local year_str = tostring(year)
|
||||
local entry = (mode == "1") and (year_str .. month_str .. day_str) or (day_str .. month_str .. year_str)
|
||||
file:write(entry .. "\n")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
file:close()
|
||||
return true
|
||||
end
|
||||
|
||||
local function get_valid_year_input(prompt)
|
||||
local year
|
||||
while true do
|
||||
io.write(prompt)
|
||||
local input = io.read()
|
||||
if input == "" then
|
||||
print(ac.yellow .. ' ERROR: ' .. ac.reset .. 'Year cannot be empty')
|
||||
else
|
||||
year = tonumber(input)
|
||||
if not year then
|
||||
print(ac.yellow .. ' ERROR: ' .. ac.reset .. 'Invalid input (digits only)')
|
||||
elseif year < 1900 then
|
||||
print(ac.yellow .. ' ERROR: ' .. ac.reset .. 'Year cannot be less than 1900')
|
||||
elseif year > 2100 then
|
||||
print(ac.yellow .. ' ERROR: ' .. ac.reset .. 'Year cannot be greater than 2100')
|
||||
else
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
return year
|
||||
end
|
||||
|
||||
local function get_valid_ending_year_input(start_year)
|
||||
local end_year
|
||||
while true do
|
||||
io.write(" Enter the ending year: " .. ac.yellow)
|
||||
local input = io.read()
|
||||
io.write(ac.reset..'')
|
||||
if input == "" then
|
||||
print(ac.yellow .. ' ERROR: ' .. ac.reset .. 'Ending year cannot be empty')
|
||||
else
|
||||
end_year = tonumber(input)
|
||||
if not end_year then
|
||||
print(ac.yellow .. ' ERROR: ' .. ac.reset .. 'Invalid input (digits only)')
|
||||
elseif end_year < 1900 or end_year > 2100 then
|
||||
print(ac.yellow .. ' ERROR: ' .. ac.reset .. 'Year must be between 1900 and 2100')
|
||||
elseif end_year < start_year then
|
||||
print(ac.yellow .. ' ERROR: ' .. ac.reset .. 'Ending year cannot be less than the starting year')
|
||||
else
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
return end_year
|
||||
end
|
||||
|
||||
local function get_valid_mode_input()
|
||||
local mode
|
||||
while true do
|
||||
io.write(' Choose the searching mode ('..ac.cyan..'1'..ac.reset..' - YYYYMMDD '..ac.cyan..'2'..ac.reset..' - DDMMYYYY): ')
|
||||
mode = io.read()
|
||||
if mode == "1" or mode == "2" then
|
||||
return mode
|
||||
else
|
||||
print(ac.yellow .. ' ERROR: ' .. ac.reset .. 'Invalid choice. Please enter 1 or 2.')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function main(args)
|
||||
for o, a in getopt.getopt(args, 'h') do
|
||||
if o == 'h' then return help() end
|
||||
end
|
||||
core.console('clear')
|
||||
print(dash)
|
||||
print(dash)
|
||||
local start_year = get_valid_year_input(" Enter the starting year: " .. ac.yellow)
|
||||
io.write(ac.reset..'')
|
||||
local end_year = get_valid_ending_year_input(start_year)
|
||||
local mode = get_valid_mode_input()
|
||||
|
||||
if generate_dictionary(start_year, end_year, mode) then
|
||||
print(ac.green .. " File created: " .. dictionary_path .. ac.reset)
|
||||
print(ac.cyan .. " Starting password testing on T5577..." .. ac.reset)
|
||||
core.console('lf t55 chk -f ' .. dictionary_path)
|
||||
else
|
||||
print(ac.yellow .. ' ERROR: ' .. ac.reset .. 'Problem saving the file.')
|
||||
end
|
||||
end
|
||||
|
||||
main(args)
|
Loading…
Add table
Add a link
Reference in a new issue