Las respuestas anteriores no pudieron ayudarme cuando olvidé mi contraseña, así que escribí un script que reemplaza la contraseña de una cuenta (olvidada) con la contraseña (conocida) de otra cuenta. El guión se reescribe ShadowHashData
en el archivo plist de la cuenta.
Tenga en cuenta que necesitará tener SIP deshabilitado para que el guión funcione. De lo contrario no tendrás acceso a las listas de cuentas. Para verificar si SIP está deshabilitado, ejecute este comando:
csrutil standing
devuelve:
System Integrity Safety standing: disabled.
Para deshabilitar y habilitar SIP, consulte Este artículo en Apple..
Aquí está el script de Python 3, probado en macOS 11.5 Huge Sur (también disponible aquí: https://gist.github.com/mahenzon/70d52a41a880afe19dda2b81828f01c8):
"""
Examined on macOS 11.5 Huge Sur
SIP disabled
admin@MBP-Suren ~ % csrutil standing
System Integrity Safety standing: disabled.
run:
sudo python3 /Customers/admin/Paperwork/replace-shadow-hash.py /var/db/dslocal/nodes/Default/customers/admin.plist /var/db/dslocal/nodes/Default/customers/suren.plist
The place 'admin' is consumer with recognized password and 'suren' is goal consumer. After working this script 'suren' consumer's password will probably be changed with 'admin' consumer's password.
"""
import plistlib
import sys
field_name = "ShadowHashData"
def load_plist(file_path):
with open(file_path, 'rb') as fp:
return plistlib.load(fp)
def save_plist(file_path, information):
with open(file_path, 'wb') as fp:
plistlib.dump(information, fp)
def important(source_plist_path, target_plist_path):
# Load the supply plist to get the worth of field_name
source_plist = load_plist(source_plist_path)
field_value = source_plist.get(field_name)
if field_value is None:
print(f"Discipline {field_name!r} not discovered within the supply plist.")
return
# Load the goal plist to exchange the worth of field_name
target_plist = load_plist(target_plist_path)
target_plist[field_name] = field_value
# Save the modified goal plist
save_plist(target_plist_path, target_plist)
print(f"Changed {field_name!r} worth in goal plist with: {field_value}")
if __name__ == "__main__":
if len(sys.argv) != 3:
print("Utilization: sudo python3 /path/to/replace-shadow-hash.py /var/db/dslocal/nodes/Default/customers/admin.plist /var/db/dslocal/nodes/Default/customers/suren.plist")
sys.exit(1)
source_plist_path = sys.argv[1]
target_plist_path = sys.argv[2]
important(source_plist_path, target_plist_path)
Para utilizar el guión:
-
Guárdelo en una ubicación de su elección con el siguiente nombre:
replace-shadow-hash.py
. -
Ejecútelo de la siguiente manera:
sudo python3 path/to/replace-shadow-hash.py /var/db/dslocal/nodes/Default/customers/<supply consumer title>.plist /var/db/dslocal/nodes/Default/customers/<goal consumer title>.plist
dónde
<supply consumer title>
es el nombre de usuario de la cuenta con un contraseña conocida y<goal consumer title>
es el nombre de usuario de la cuenta cuya contraseña olvidó.Para conocer el nombre de usuario de una cuenta, simplemente abra
/Customers
y busque un nombre related al nombre de la cuenta. Por ejemplo, si el nombre de su cuenta esJohn Appleseed
el nombre de usuario probablemente serájohnappleseed
.
Después de ejecutar este script, la contraseña de la cuenta identificada por <goal consumer title>
ser reemplazado con la contraseña de <supply consumer title>
.