Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

t55_chk #2744

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open

t55_chk #2744

Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
98 changes: 57 additions & 41 deletions client/luascripts/t55_chk.lua
Original file line number Diff line number Diff line change
Expand Up @@ -5,46 +5,67 @@ local dir = os.getenv('HOME') .. '/proxmark3/client/dictionaries/'
local dictionary_path = dir .. 'T5577date.dic'
local cyan = ac.cyan
local res = ac.reset
local red = ac.red
local green = ac.green

author = ' Author: jareckib - created 02.02.2025'
version = ' version v1.00'
author = ' Author: jareckib - created 04.02.2025'
version = ' version v1.05'
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.
useful if the password is for example a date of birth.
]]

usage = [[
script run t55_chk [-s start_year] [-e end_year] [-d | -y]
]]
options = [[
-h Show this help message
-s Starting year (required)
-e Ending year (default: current year)
-d Search method: DDMMYYYY
-y Search method: YYYYMMDD
-h this help
-s start_year starting year (required)
-e end_year ending year (optional, default: current year)
-d search method: DDMMYYYY
-y search method: YYYYMMDD
]]
examples = [[
script run t55_chk -s 1999 -d - start from 1999, end year is current year, method 01011999
script run t55_chk -s 1999 -y - start from 1999, end year is current year, method 19990101
script run t55_chk -s 1999 -e 2001 -y - start from 1999, end year 2001, method 19990101
script run t55_chk -s 1999 -e 2001 -d - start from 1999, end year 2001, method 01011999
script run t55_chk -s 1999 -d -> start 1999, end is current year, method 01011999
script run t55_chk -s 1999 -y -> start 1999, end is current year, method 19990101
script run t55_chk -s 1999 -e 2001 -y -> start 1999, end year 2001, method 19990101
script run t55_chk -s 1999 -e 2001 -d -> start 1999, end year 2001, method 01011999
]]

local function help()
print(ac.green..author..res)
print()
print(ac.yellow..author)
print(version)
print(desc)
print(cyan..' Usage:'..res)
print(res..desc)
print(green..' Usage:'..res)
print(usage)
print(cyan..' Options:'..res)
print(green..' Options:'..res)
print(options)
print(cyan..' Examples:'..res)
print(green..' Examples:'..res)
print(examples)
end

local function oops(err)
core.console('clear')
print( string.rep('--',39) )
print( string.rep('--',39) )
print(ac.red..' ERROR:'..res.. err)
print( string.rep('--',39) )
print( string.rep('--',39) )
return nil, err
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
Expand All @@ -54,10 +75,16 @@ local function generate_dictionary(start_year, end_year, mode)

for year = start_year, end_year do
for month = 1, 12 do
for day = 1, 31 do
local entry = (mode == "y") and
(string.format("%04d%02d%02d", year, month, day)) or
(string.format("%02d%02d%04d", day, month, year))
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 == "y") and (year_str .. month_str .. day_str) or (day_str .. month_str .. year_str)
file:write(entry .. "\n")
end
end
Expand All @@ -67,16 +94,6 @@ local function generate_dictionary(start_year, end_year, mode)
return true
end

local function oops(err)
core.console('clear')
print( string.rep('--',39) )
print( string.rep('--',39) )
print(ac.red..' ERROR:'..res.. err)
print( string.rep('--',39) )
print( string.rep('--',39) )
return nil, err
end

local function main(args)
if #args == 0 then return help() end

Expand All @@ -87,28 +104,28 @@ local function main(args)
if o == 'h' then return help() end
if o == 's' then
start_year = tonumber(a)
if not start_year then return oops('Invalid start year') end
if not start_year then return oops(' Invalid start year') end
end
if o == 'e' then
end_year = tonumber(a)
if not end_year then return oops('Invalid end year (-e)') end
if not end_year then return oops(' Invalid end year') end
end
if o == 'd' then mode = "d" end
if o == 'y' then mode = "y" end
end

if not start_year then return oops('Starting year is required') end
if not start_year then return oops(' Starting year is required') end
if start_year < 1900 or start_year > 2100 then
return oops('Start year must be between 1900 and 2100')
return oops(' Start year must be between 1900 and 2100')
end
if args[#args] == "-e" then return oops('Ending year cannot be empty') end
if args[#args] == "-e" then return oops(' Ending year cannot be empty') end
if not end_year then end_year = current_year end
if end_year < 1900 or end_year > 2100 then
return oops('End year must be between 1900 and 2100')
return oops(' End year must be between 1900 and 2100')
end

if end_year < start_year then return oops('End year cannot be earlier than start year') end
if not mode then return oops('You must select searching method'..cyan..' -d'..res.. ' or '..cyan.. '-y'..res) end
if end_year < start_year then return oops(' End year cannot be earlier than start year') end
if not mode then return oops(' You must select searching method'..cyan..' d'..res.. ' or '..cyan.. 'y'..res) end

if generate_dictionary(start_year, end_year, mode) then
print(ac.green .. " File created: " .. dictionary_path .. res)
Expand All @@ -118,5 +135,4 @@ local function main(args)
return oops('Problem saving the file')
end
end

main(args)
main(args)
Loading