fix: replace emojis with Unicode symbols, add wordlist and symlink install

Swap emoji icons for clean Unicode symbols (✓ ✗ ◆ ▸ ⏱) matching the
Go project style. Include 10k-most-common.txt wordlist for zero-friction
Quick Start. install.sh now symlinks binary to ~/.local/bin/hashcracker.
Fix DIM unbound variable in install.sh.
This commit is contained in:
CarterPerez-dev 2026-03-22 11:24:28 -04:00
parent efdfacdb55
commit e76a7224ba
8 changed files with 13572 additions and 26 deletions

View File

@ -1,7 +1,6 @@
# ©AngelaMos | 2026
# .gitignore
docs/
build/
*.o
*.a

View File

@ -29,7 +29,9 @@
```bash
./install.sh
hashcracker --hash <hash> --wordlist /path/to/rockyou.txt
hashcracker --hash 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8 \
--wordlist wordlists/10k-most-common.txt
# ✔ CRACKED: password
```
> [!TIP]
@ -37,15 +39,21 @@ hashcracker --hash <hash> --wordlist /path/to/rockyou.txt
>
> Install: `curl -sSf https://just.systems/install.sh | bash -s -- --to ~/.local/bin`
## Commands
## Demo Hashes
| Command | Description |
|---------|-------------|
| `hashcracker --hash <h> --wordlist <path>` | Dictionary attack against a hash |
| `hashcracker --hash <h> --bruteforce --charset lower,digits` | Brute-force with character set |
| `hashcracker --hash <h> --wordlist <path> --rules` | Dictionary + mutation rules |
| `hashcracker --hash <h> --wordlist <path> --salt <s>` | Crack salted hash |
| `hashcracker --help` | Show all options |
Try these — all crack instantly against the included wordlist:
| Hash | Type | Plaintext |
|------|------|-----------|
| `5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8` | SHA256 | password |
| `8621ffdbc5698829397d97767ac13db3` | MD5 | dragon |
| `ed9d3d832af899035363a69fd53cd3be8f71501c` | SHA1 | shadow |
```bash
hashcracker --hash 8621ffdbc5698829397d97767ac13db3 --wordlist wordlists/10k-most-common.txt
hashcracker --hash ed9d3d832af899035363a69fd53cd3be8f71501c --wordlist wordlists/10k-most-common.txt --rules
hashcracker --hash 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8 --bruteforce --charset lower --max-length 8
```
## Learn

View File

@ -8,12 +8,15 @@ GREEN='\033[32m'
CYAN='\033[36m'
RED='\033[31m'
BOLD='\033[1m'
DIM='\033[2m'
RESET='\033[0m'
info() { echo -e "${CYAN}[*]${RESET} $1"; }
success() { echo -e "${GREEN}[✔]${RESET} $1"; }
fail() { echo -e "${RED}[✖]${RESET} $1"; exit 1; }
PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
install_deps() {
if command -v apt-get &>/dev/null; then
info "Detected apt (Debian/Ubuntu)"
@ -34,6 +37,7 @@ install_deps() {
}
build_project() {
cd "${PROJECT_DIR}"
info "Configuring release build..."
cmake --preset release
@ -41,20 +45,27 @@ build_project() {
cmake --build build/release
}
install_binary() {
info "Installing hashcracker to ~/.local/bin..."
mkdir -p ~/.local/bin
ln -sf "${PROJECT_DIR}/build/release/hashcracker" ~/.local/bin/hashcracker
}
info "Installing dependencies..."
install_deps
info "Building hashcracker..."
build_project
install_binary
echo ""
success "hashcracker built successfully!"
echo ""
echo -e "${BOLD}Usage:${RESET}"
echo " ./build/release/hashcracker --hash <hash> --wordlist <path>"
echo " ./build/release/hashcracker --hash <hash> --bruteforce --charset lower,digits"
echo " ./build/release/hashcracker --hash <hash> --wordlist <path> --rules"
echo " hashcracker --hash <hash> --wordlist wordlists/10k-most-common.txt"
echo " hashcracker --hash <hash> --bruteforce --charset lower,digits"
echo " hashcracker --hash <hash> --wordlist wordlists/10k-most-common.txt --rules"
echo ""
echo -e "${BOLD}Or use just:${RESET}"
echo " just run -- --hash <hash> --wordlist <path>"
echo -e " ${DIM}(Binary symlinked to ~/.local/bin/hashcracker)${RESET}"
echo ""

View File

@ -58,14 +58,17 @@ constexpr std::string_view BAR_RIGHT = "\u258C";
}
namespace icon {
namespace symbol {
constexpr std::string_view BOLT = "\u26A1";
constexpr std::string_view ARROW = "\u2192";
constexpr std::string_view ARROW_RIGHT = "\u25B8";
constexpr std::string_view DIAMOND = "\u25C6";
constexpr std::string_view CHECK = "\u2713";
constexpr std::string_view CROSS = "\u2717";
constexpr std::string_view TIMER = "\u23F1";
constexpr std::string_view HOURGLASS = "\u23F3";
constexpr std::string_view CHART = "\U0001F4CA";
constexpr std::string_view CHECK = "\u2714";
constexpr std::string_view CROSS = "\u2716";
constexpr std::string_view TRIANGLE_UP = "\u25B2";
constexpr std::string_view STAR = "\u2726";
constexpr std::string_view DIVIDER_CHAR = "\u2501";
}

View File

@ -137,13 +137,13 @@ void Progress::update() {
config::color::YELLOW, render_bar(fraction, bar_width),
fraction * 100.0, config::color::RESET);
std::println(" {} {} {} {} {} {} {} ~{}{}",
config::icon::BOLT, config::color::CYAN,
config::symbol::DIAMOND, config::color::CYAN,
format_speed(speed), config::color::RESET,
config::icon::TIMER, config::color::CYAN,
config::symbol::TIMER, config::color::CYAN,
format_time(elapsed), format_time(eta),
config::color::RESET);
std::println(" {} {} {} / {} candidates{}",
config::icon::CHART, config::color::CYAN,
config::symbol::ARROW_RIGHT, config::color::CYAN,
format_count(tested_val), format_count(total_),
config::color::RESET);
}
@ -157,7 +157,7 @@ void Progress::print_cracked(const CrackResult& result) const {
std::print("\033[3A\033[J");
std::println(" {}{} CRACKED {}{}{}",
config::color::GREEN, config::icon::CHECK,
config::color::GREEN, config::symbol::CHECK,
std::string(30, '-'), config::color::RESET, "");
std::println(" {}Password: {}{}{}",
config::color::BOLD, config::color::GREEN,
@ -184,7 +184,7 @@ void Progress::print_exhausted(std::string_view hash,
std::print("\033[3A\033[J");
std::println(" {}{} EXHAUSTED {}{}{}",
config::color::RED, config::icon::CROSS,
config::color::RED, config::symbol::CROSS,
std::string(30, '-'), config::color::RESET, "");
std::println(" Hash: {}", hash);
std::println(" Algorithm: {}", algorithm);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,419 @@
abat-jour
acqua-aria
acqua-terra
addizionatore-sottrattore
after-shave
agar-agar
agit-prop
ai-ai
air-terminal
anti-doping
anti-trust
aria-acqua
aria-aria
aria-sott
aria-spazio
aria-superficie
aria-terra
arriere-gout
arriere-pensee
assemblatore-disassemblatore
assemblatori-disassemblatori
assiro-babilonese
assiro-babilonesi
aye-aye
baby-doll
baby-dolls
baby-sitter
baby-sitters
baby-sitting
bas-bleu
basket-ball
beauty-case
beauty-cases
be-bop
best-seller
best-sellers
bio-bio
bird-watching
bla-bla
black-bottom
black-out
black-outs
bloc-notes
blocs-notes
blue-jeans
boogie-woogie
bottom-up
bow-window
bow-windows
boy-friend
boy-friends
boy-scout
boy-scouts
brain-trust
brain-trusts
bric-a-brac
bughi-bughi
burali-forti
buzzati-traverso
bye-bye
calcio-balilla
call-girl
call-girls
cavalli-vapore
cavallo-vapore
chaise-longue
check-in
check-ins
check-up
check-ups
chemin-de-fer
che-que
cherry-brandies
cherry-brandy
chewing-gum
cocktail-parties
cocktail-party
cow-boy
cow-boys
cross-country
de-escalation
demi-sec
demi-secs
dietro-front
disc-jockey
disc-jockeys
double-face
drive-in
drive-ins
emTeX
end-to-end
eye-liner
fall-out
fall-outs
ferry-boat
ferry-boats
fifty-fifty
first-ladies
first-lady
flip-book
flip-flop
folk-song
fox-terrier
fox-terriers
fox-trot
full-time
garden-parties
garden-party
gin-fizz
gin-fizzes
globe-trotter
globe-trotters
go-kart
go-karts
grammo-atomi
grammo-atomo
grammo-molecola
grammo-molecole
greco-ortodossa
greco-ortodosse
greco-ortodossi
greco-ortodosso
greco-romana
greco-romane
greco-romani
greco-romano
grill-room
grill-rooms
gros-grain
gros-grains
half-duplex
haute-couture
hi-fi
hors-d
hula-hop
hully-gully
ice-field
ice-fields
ispano-americana
ispano-americane
ispano-americani
ispano-americano
jam-session
jam-sessions
jet-set
jet-society
juke-box
juke-boxes
jumbo-jet
jumbo-jets
jupe-culotte
jupes-culottes
know-how
k-way
lab-fermenti
lab-fermento
lap-top
latino-americana
latino-americane
latino-americani
latino-americano
lay-out
lay-outs
lecca-lecca
levi-strauss
lib-lab
long-playing
make-up
mangia-e-bevi
metal-detector
minimo-massimo
mon-khmer
moto-sidecar
music-hall
music-halls
night-club
night-clubs
non-allineamenti
non-allineamento
non-allineata
non-allineate
non-allineati
non-allineato
non-belligerante
non-belligeranti
non-belligeranza
non-fumatore
non-fumatori
non-fumatrice
non-fumatrici
off-limits
off-line
off-shore
old-fashioned
one-step
on-line
op-art
open-end
orient-express
osco-umbra
osco-umbre
osco-umbri
osco-umbro
pace-maker
pace-makers
pap-test
pap-tests
part-time
passe-partout
passe-partouts
petit-beurre
petit-four
petit-gris
petits-fours
petits-gris
piano-bar
piano-concava
piano-concave
piano-concavi
piano-concavo
piano-convessa
piano-convesse
piano-convessi
piano-convesso
piano-terreno
pian-parallela
pian-parallele
pian-paralleli
pian-parallelo
pick-up
pick-ups
pico-curie
pied-a-terre
pied-de-poule
piglia-piglia
pince-nez
ping-pong
pin-up
pio-pio
piro-piro
play-off
plein-air
pocket-size
pop-art
pop-artista
pop-artisti
pop-corn
pop-jazz
porte-enfant
post-it
post-politica
post-sessantottesca
post-sessantottesche
post-sessantotteschi
post-sessantottesco
post-sessantottina
post-sessantottine
post-sessantottini
post-sessantottino
post-sincronizzando
post-sincronizzare
post-sincronizzata
post-sincronizzate
post-sincronizzati
post-sincronizzato
post-sincronizzazione
pot-au-feu
pot-pourri
pots-pourris
pre-maman
press-agent
press-agents
pret-a-porter
real-time
rendez-vous
rimskij-korsakov
ritmo-melodica
ritmo-melodiche
ritmo-melodici
ritmo-melodico
robbe-grillet
robe-manteau
robes-manteaux
rolls-royce
romano-barbarica
romano-barbariche
romano-barbarici
romano-barbarico
romano-germanica
romano-germaniche
romano-germanici
romano-germanico
sainte-beuve
saint-exupery
saint-honore
saint-just
saint-malo
saint-moritz
saint-simon
saint-tropez
saint-vincent
savoir-faire
savoir-vivre
scapolo-omerale
scapolo-omerali
sci-alpinismo
sci-alpinista
sci-alpinisti
sci-alpinistica
sci-alpinistiche
sci-alpinistici
sci-alpinistico
self-control
self-government
self-made
self-service
sex-shop
show-down
show-downs
show-woman
show-women
sit-in
sit-ins
skate-board
skate-boards
ski-lift
ski-lifts
skin-popping
ski-stopper
ski-stoppers
sleeping-car
sleeping-cars
slot-machine
slot-machines
snack-bar
soft-core
sotto-directory
spazio-tempo
spy-story
start-stop
stop-and-go
strip-tease
strip-teases
stunt-man
stunt-men
sud-est
sud-occidentale
sud-occidentali
sud-orientale
sud-orientali
sud-ovest
super-ego
super-io
super-utile
szent-gyorgyi
tabacco-dipendente
tabacco-dipendenti
take-off
take-over
tam-tam
tan-tan
tap-in
ta-pun
task-force
task-forces
taxi-girl
taxi-girls
teach-in
tea-room
tea-rooms
teen-ager
teen-agers
temple-block
temporo-mandibolare
terra-aria
terra-terra
testa-coda
testa-croce
tete-a-tete
tibeto-birmana
tibeto-birmane
tibeto-birmani
tibeto-birmano
time-out
time-sharing
top-down
toulouse-lautrec
trait-d
trench-coat
trench-coats
tric-trac
trompe-l
tse-tse
t-shirt
tupi-guarani
twin-set
twin-sets
two-step
tze-tze
up-to-date
video-clip
video-clips
villa-lobos
vis-a-vis
vol-au-vent
wagon-lit
wagon-lits
wagon-restaurant
wagon-restaurants
walkie-talkie
walkie-talkies
wash-and-wear
week-end
week-ends
whisky-a-gogo
willy-nilly
yes-man
ye-ye
yo-yo