-
Obtener la clave OSK de un Mac mediante su SMC
Dado que vamos a necesitar el compilador GCC, antes que nada asegúrate de tener XCode instalado en el Mac. Una vez comprobada la instalación de XCode, abre una terminal y ejecuta lo siguiente:
echo "#include <stdio.h>" > ~/Desktop/LeerClaveOSK.c echo "#include <IOKit/IOKitLib.h>" >> ~/Desktop/LeerClaveOSK.c echo "" >> ~/Desktop/LeerClaveOSK.c echo "typedef struct {" >> ~/Desktop/LeerClaveOSK.c echo " uint32_t key;" >> ~/Desktop/LeerClaveOSK.c echo " uint8_t __d0[22];" >> ~/Desktop/LeerClaveOSK.c echo " uint32_t datasize;" >> ~/Desktop/LeerClaveOSK.c echo " uint8_t __d1[10];" >> ~/Desktop/LeerClaveOSK.c echo " uint8_t cmd;" >> ~/Desktop/LeerClaveOSK.c echo " uint32_t __d2;" >> ~/Desktop/LeerClaveOSK.c echo " uint8_t data[32];" >> ~/Desktop/LeerClaveOSK.c echo "} AppleSMCBuffer_t;" >> ~/Desktop/LeerClaveOSK.c echo "" >> ~/Desktop/LeerClaveOSK.c echo "int" >> ~/Desktop/LeerClaveOSK.c echo "main(void)" >> ~/Desktop/LeerClaveOSK.c echo "{" >> ~/Desktop/LeerClaveOSK.c echo " io_service_t service = IOServiceGetMatchingService(kIOMasterPortDefault," >> ~/Desktop/LeerClaveOSK.c echo ' IOServiceMatching("AppleSMC"));' >> ~/Desktop/LeerClaveOSK.c echo ' if (!service)' >> ~/Desktop/LeerClaveOSK.c echo " return -1;" >> ~/Desktop/LeerClaveOSK.c echo "" >> ~/Desktop/LeerClaveOSK.c echo " io_connect_t port = (io_connect_t)0;" >> ~/Desktop/LeerClaveOSK.c echo " kern_return_t kr = IOServiceOpen(service, mach_task_self(), 0, &port);" >> ~/Desktop/LeerClaveOSK.c echo " IOObjectRelease(service);" >> ~/Desktop/LeerClaveOSK.c echo " if (kr != kIOReturnSuccess)" >> ~/Desktop/LeerClaveOSK.c echo " return kr;" >> ~/Desktop/LeerClaveOSK.c echo "" >> ~/Desktop/LeerClaveOSK.c echo " AppleSMCBuffer_t inputStruct = { 'OSK0', {0}, 32, {0}, 5, }, outputStruct;" >> ~/Desktop/LeerClaveOSK.c echo " size_t outputStructCnt = sizeof(outputStruct);" >> ~/Desktop/LeerClaveOSK.c echo "" >> ~/Desktop/LeerClaveOSK.c echo " kr = IOConnectCallStructMethod((mach_port_t)port, (uint32_t)2," >> ~/Desktop/LeerClaveOSK.c echo " (const void*)&inputStruct, sizeof(inputStruct)," >> ~/Desktop/LeerClaveOSK.c echo " (void*)&outputStruct, &outputStructCnt);" >> ~/Desktop/LeerClaveOSK.c echo " if (kr != kIOReturnSuccess)" >> ~/Desktop/LeerClaveOSK.c echo " return kr;" >> ~/Desktop/LeerClaveOSK.c echo "" >> ~/Desktop/LeerClaveOSK.c echo " int i = 0;" >> ~/Desktop/LeerClaveOSK.c echo " for (i = 0; i < 32; i++)" >> ~/Desktop/LeerClaveOSK.c echo ' printf("%c", outputStruct.data[i]);' >> ~/Desktop/LeerClaveOSK.c echo "" >> ~/Desktop/LeerClaveOSK.c echo " inputStruct.key = 'OSK1';" >> ~/Desktop/LeerClaveOSK.c echo " kr = IOConnectCallStructMethod((mach_port_t)port, (uint32_t)2," >> ~/Desktop/LeerClaveOSK.c echo " (const void*)&inputStruct, sizeof(inputStruct)," >> ~/Desktop/LeerClaveOSK.c echo " (void*)&outputStruct, &outputStructCnt);" >> ~/Desktop/LeerClaveOSK.c echo " if (kr == kIOReturnSuccess)" >> ~/Desktop/LeerClaveOSK.c echo " for (i = 0; i < 32; i++)" >> ~/Desktop/LeerClaveOSK.c echo ' printf("%c", outputStruct.data[i]);' >> ~/Desktop/LeerClaveOSK.c echo "" >> ~/Desktop/LeerClaveOSK.c echo ' printf("\n");' >> ~/Desktop/LeerClaveOSK.c echo "" >> ~/Desktop/LeerClaveOSK.c echo " return IOServiceClose(port);" >> ~/Desktop/LeerClaveOSK.c echo "}" >> ~/Desktop/LeerClaveOSK.c
Se te habrá creado un archivo llamado LeerClaveOSK.c en el escritorio. Compílalo pegando y ejecutando lo siguiente en la terminal:
gcc -Wall -o ~/Desktop/LeerClaveOSK ~/Desktop/LeerClaveOSK.c -framework IOKit
Una vez compilado, podrás ejecutarlo pegando lo siguiente en la terminal:
~/Desktop/LeerClaveOSK
El resultado será una cadena de autentificación que tiene su historia con el TPM y que podrás copiar y pegar donde lo requieras. 🙂
Los hacks de hacks4geeks son minitutoriales rápidos pensados para geeks con conocimiento informático avanzado. Si no entiendes o no consigues ejecutar un hack de esta web considera suscribirte a Premium para solicitar asistencia sobre el mismo.