Password Hacking
Creare una password al volo ed essere certi di poterla ricordare spinge alcuni individui ad utilizzare una data, sia essa quella di nascita, matrimonio, nascita del figlio/a, giorno di laurea o altro; rappresenta un modo semplice per non dover impegnare la mente in una operazione di pensiero articolato e di memorizzazione; infatti se alla data si antepone o pospone un nome o anche il semplice diminutivo di un nome, si riesce ad ottenere una password di lunghezza sufficiente per soddisfare molti requisiti richiesti per l’accesso, ad esempio, al computer aziendale o al sito online della banca; un metodo semplice per generare la password composta da numeri, caratteri speciali ed eventualmente, aggiungendo solo il diminutivo del nome del figlio con la lettera maiuscola ecco soddisfatti i criteri di cui si è fatto cenno, creando la falsa illusione di aver concepito la password “sicura” es Nik12.05.1971 (13 caratteri), oppure P13tr0_19821219 (15 caratteri), 05-27-1997-Anthony (18 caratteri).
Nulla però, che non possa essere “smantellato” fancendo una ricerca online raccogliendo dati dalle fonti aperte, ad esempio i social network e combinandole con una data, che comunemente è strettamente legata all’individuo stesso o ai sui legami affettivi (quindi nel suo range di “vita” e di conseguenza dei suoi affetti).
Lo script Python allegato di seguito, partendo da un range di anni definito dall’utente (nell’esempio 1900-2024), combinando caratteri separatori e metodi permette di generare rapidamente un elenco di date in un ampio formato, da utilizzare direttamente oppure raccogliendole in un file a formare una “wordlist” che combinate ad altre informazioni (es. nomi) diventano utili nel Password Hacking.
Script Python print-date.py
# -----------------------------------------------------------------------------
# - Script file name : print-date.py
# - Author : Nicola Montemurro
# - Administrator : Nicola Montemurro - Tel. xxx, Mobile: xxx
# - Create : 21.09.2025
# - Last Update : 22.09.2025
# - Description :
# - Position : /usr/local/scripts
# - note : NON modificare senza AUTORIZZAZIONE dell'AMMINISTRATORE
# ----------------------------------------------------------------------------
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import argparse
from datetime import date, timedelta
"""
USAGE EXAMPLES:
1. Basic usage (default settings):
%(prog)s 1900 2024
2. Save to a file:
%(prog)s 1900 2024 -f dates.txt
3. Limit number of dates displayed:
%(prog)s 1900 2024 -l 10
4. Change separator:
%(prog)s 1900 2024 -s '-'
5. Reverse date order:
%(prog)s 1900 2024 -o reverse
6. English locale format (in forward mode):
%(prog)s 1900 2024 --locale en
7. ISO format:
%(prog)s 1900 2024 --iso --no-iso (default: --no-iso)
FORMATTING OPTIONS:
- Order: forward (default) or reverse
- Locale: 'it' (day/month/year) or 'en' (month/day/year)
- Separator: Any character (default: '/')
""",
def generate_date_list(start_year, end_year):
"""
Generate a complete list of dates from January 1st of start year
to December 31st of end year.
"""
# Ensure start_year is not greater than end_year
if start_year > end_year:
start_year, end_year = end_year, start_year
# Create the start and end dates
start_date = date(start_year, 1, 1)
end_date = date(end_year, 12, 31)
# Generate the list of dates
date_list = []
current_date = start_date
while current_date <= end_date:
date_list.append(current_date)
current_date += timedelta(days=1)
return date_list
def main():
# Custom date formatting function
def format_date(date_obj):
iso_day = str(date_obj.day)
iso_month = str(date_obj.month)
if args.iso:
# ISO format day
if (date_obj.day < 10):
iso_day = '0' + str(date_obj.day)
# ISO format month
if (date_obj.month < 10):
iso_month = '0' + str(date_obj.month)
# Forward order with locale-specific formatting
if args.locale == 'en':
# English format: month/day/year
components = [iso_month, iso_day, date_obj.year]
#components = [date_obj.month, date_obj.day, date_obj.year]
else:
# Italian format: day/month/year
components = [iso_day, iso_month, date_obj.year]
#components = [date_obj.day, date_obj.month, date_obj.year]
# Reverse order
if args.order == 'reverse':
components = [date_obj.year, iso_month, iso_day]
#return args.separator.join(map(str, components))
return args.separator.join(map(str, components))
# Create an ArgumentParser object with custom help formatting
parser = argparse.ArgumentParser(
description='Generate a list of dates between two years.',
epilog='''
"
USAGE EXAMPLES:
1. Basic usage (default settings):
%(prog)s 1900 2024
2. Save to a file:
%(prog)s 1900 2024 -f dates.txt
3. Limit number of dates displayed:
%(prog)s 1900 2024 -l 10
4. Change separator:
%(prog)s 1900 2024 -s '-'
5. Reverse date order:
%(prog)s 1900 2024 -o reverse
6. English locale format (in forward mode):
%(prog)s 1900 2024 --locale en
7. ISO format:
%(prog)s 1900 2024 --iso --no-iso (default: --no-iso)
FORMATTING OPTIONS:
- Order: forward (default) or reverse
- Locale: 'it' (day/month/year) or 'en' (month/day/year)
- Separator: Any character (default: '/')
''',
formatter_class=argparse.RawDescriptionHelpFormatter
)
# Positional arguments
parser.add_argument('start_year', type=int, help='The starting year for date generation')
parser.add_argument('end_year', type=int, help='The ending year for date generation')
# Optional arguments
parser.add_argument('-f', '--file', type=str, help='Output file to save the dates')
parser.add_argument('-l', '--limit', type=int, default=None, help='Limit the number of dates printed')
# Separator argument
parser.add_argument('-s', '--separator', type=str, default='/', help='Separator between date components (default: /)')
# Date order argument
parser.add_argument('-o', '--order', type=str, choices=['forward', 'reverse'], default='forward', help='Date format order: forward or reverse (default: forward)')
# Locale argument
parser.add_argument('--locale', type=str, choices=['en', 'it'], default='it', help='Locale-specific format in forward mode (default: it)')
# ISO argument
parser.add_argument('--iso', action=argparse.BooleanOptionalAction, default=False, help='ISO format date (days and months leading by 0 if < 10 )')
# Parse the arguments
args = parser.parse_args()
# Generate the list of dates
dates = generate_date_list(args.start_year, args.end_year)
# Print total number of days
#print(f"Total number of days: {len(dates)}")
# Handle output
if args.file:
# Save to file
with open(args.file, 'a') as file:
for single_date in dates:
file.write(f"{format_date(single_date)}\n")
#print(f"Dates saved to {args.file}")
# Print dates (limited if specified)
limit = args.limit if args.limit is not None else len(dates)
for single_date in dates[:limit]:
print(format_date(single_date))
if __name__ == "__main__":
main()
Script print-date-nested-loop.cmd
:: ----------------------------------------------------------------------------
:: - File Name : print-date-nested-loop.cmd
:: - Author : Nicola Montemurro
:: - Administrator : Nicola Montemurro - Mobile: -
:: - Create : 22/09/2025
:: - Last Update : 22/09/2025
:: - Description : File per la creazione di wordlist hashcat/john the ripper
:: - Position : E:\Progetti\software\scripts\cmd
:: - Note : NON modificare senza AUTORIZZAZIONE dell'AMMINISTRATORE
:: ---------------------------------------------------------------------------
@echo off
setlocal EnableDelayedExpansion
set SYEAR=1900
set EYEAR=2024
set WORDLISTFILE=B:\wordlists\wordlist-date\wordlist-date
::set S="|"
set SEP="^" "+" "-" "_" "/" "." ":" "|"
set ORD=forward reverse
set ISO=--iso --no-iso
set LOC=it en
for %%a in (%SEP%) do (
for %%b in (%ORD%) do (
for %%c in (%ISO%) do (
for %%d in (%LOC%) do (
python B:\scripts\print-date.py !SYEAR! !EYEAR! -s %%a -o %%b %%c --locale %%d -f !WORDLISTFILE!-!SYEAR!-!EYEAR!
))))
Lo script di esempio produce il seguente risultato:
Per ciascun carattere delimitatore (8) vengono applicate le opzioni “forward” e “reverse” (2), “iso” o “no-iso” (2), “en” o “ita” (2) producendo 64 combinazioni diverse, che moltiplicate per 125 anni (1/1/1900 – 31/12/2024), per i giorni dell’anno (365) ai quali vanno sommati i giorni aggiuntivi per ogni anno bisestile (31) moltiplicati per ciascuna combinazione (64) ne risulta un file di 2.921.984 righe ottenuto in poco meno di 100 secondi.
8 * 2 * 2 * 2 = 64 (combinazioni possibili)
125 * 365 * 64 = 2.920.000 (date singole)
31 * 64 = 1.984 (giorni aggiuntivi per gli anni bisestili)
2.920.000 + 1.194 = 2.921.194 (totale delle combinazioni di date singole)
Risultato:
01011900 02011900 03011900 04011900 05011900 06011900 ... 2024|12|26 2024|12|27 2024|12|28 2024|12|29 2024|12|30 2024|12|31