#!/bin/bash # # HackKit installeren op je Mac. # # curl -fsSL https://ADRES/installeer.sh | bash -s -- https://ADRES # # Wat dit script doet, en verder niets: # 1. kijken of je Mac geschikt is (macOS 14.2 of nieuwer) # 2. HackKit.zip ophalen van het adres dat je meegeeft # 3. controleren of de app heel is aangekomen # 4. de app in je map Apps zetten (een oudere HackKit wordt vervangen) # 5. HackKit starten # # Er gebeurt niets met sudo en er wordt nergens om een wachtwoord gevraagd. set -euo pipefail groen=""; rood=""; flauw=""; uit="" if [ -t 1 ]; then groen=$'\033[1;32m'; rood=$'\033[1;31m'; flauw=$'\033[0;32m'; uit=$'\033[0m' fi zeg() { printf '%s[HACKKIT]%s %s\n' "$groen" "$uit" "$*"; } verder() { printf '%s %s%s\n' "$flauw" "$*" "$uit"; } fout() { printf '%s[MISLUKT]%s %s\n' "$rood" "$uit" "$*" >&2; exit 1; } # Alles staat in een functie: breekt het ophalen van dit script halverwege af, # dan wordt er niets uitgevoerd in plaats van een half script. hoofd() { local bron="${1:-${HACKKIT_BRON:-}}" bron="${bron%/}" case "$bron" in https://*|file://*|http://localhost*|http://127.0.0.1*) ;; "") fout "Er mist een adres. Kopieer de hele regel van de HackKit-pagina, ook het stuk na 'bash -s --'." ;; *) fout "Het adres moet met https:// beginnen." ;; esac # 1. Past HackKit op deze Mac? [ "$(uname -s)" = "Darwin" ] || fout "HackKit werkt alleen op een Mac." # HackKit is gebouwd voor Macs met een Apple-chip én met een Intel-chip. if [ "$(sysctl -n hw.optional.arm64 2>/dev/null || echo 0)" != "1" ]; then verder "Deze Mac heeft een Intel-chip. HackKit werkt daar ook, maar is er nog niet op getest." fi local versie groot klein versie="$(sw_vers -productVersion)" groot="${versie%%.*}" klein=0 case "$versie" in *.*) klein="${versie#*.}"; klein="${klein%%.*}" ;; esac if [ "$groot" -lt 14 ] || { [ "$groot" -eq 14 ] && [ "$klein" -lt 2 ]; }; then fout "Je hebt macOS $versie. HackKit heeft macOS 14.2 (Sonoma) of nieuwer nodig." fi # 2. Ophalen. local werk werk="$(mktemp -d "${TMPDIR:-/tmp}/hackkit.XXXXXX")" trap 'rm -rf "'"$werk"'"' EXIT zeg "HackKit wordt opgehaald van $bron" curl --fail --location --silent --show-error "$bron/HackKit.zip" -o "$werk/HackKit.zip" \ || fout "Ophalen lukte niet. Heb je internet, en klopt het adres?" # 3. Uitpakken en nakijken. ditto -x -k "$werk/HackKit.zip" "$werk/uit" 2>/dev/null || fout "Het pakket kon niet worden uitgepakt." local app="$werk/uit/HackKit.app" [ -d "$app" ] || fout "In het pakket zit geen HackKit.app." local naam naam="$(/usr/libexec/PlistBuddy -c 'Print :CFBundleIdentifier' "$app/Contents/Info.plist" 2>/dev/null || true)" [ "$naam" = "nl.lovael.hackkit" ] || fout "Dit pakket is niet HackKit." codesign --verify --deep --strict "$app" 2>/dev/null \ || fout "De app is beschadigd aangekomen. Probeer het nog een keer." local nummer nummer="$(/usr/libexec/PlistBuddy -c 'Print :CFBundleShortVersionString' "$app/Contents/Info.plist" 2>/dev/null || echo "?")" zeg "Versie $nummer is heel aangekomen." # 4. Neerzetten. Mag je niet in de gewone map Apps schrijven, dan in die van jezelf. local doel="${HACKKIT_DOEL:-/Applications}" if [ ! -d "$doel" ] || [ ! -w "$doel" ]; then doel="$HOME/Applications" mkdir -p "$doel" fi local starten="${HACKKIT_START:-1}" if [ "$starten" = "1" ] && pgrep -x HackKit >/dev/null 2>&1; then zeg "De HackKit die nu draait wordt eerst netjes gestopt." pkill -TERM -x HackKit 2>/dev/null || true local i for i in 1 2 3 4 5 6 7 8 9 10; do pgrep -x HackKit >/dev/null 2>&1 || break sleep 0.3 done fi rm -rf "$doel/HackKit.app" ditto "$app" "$doel/HackKit.app" zeg "HackKit staat in $doel" # 5. Starten. if [ "$starten" = "1" ]; then open "$doel/HackKit.app" zeg "Gestart. Kijk rechtsboven in je menubalk: daar lopen nu groene nullen en enen." verder "Klik erop om hacks aan en uit te zetten. ctrl + option + esc zet alles in een keer uit." verder "Er opent een welkomstvenster dat alle toestemmingen een voor een afloopt. Volg gewoon de regel die oplicht." fi verder "Weghalen? Stop HackKit en sleep hem uit de map Apps naar de prullenbak." } hoofd "$@"