Брутфорсим EFI с Arduino

Приветствую Хабравчан!

Думаю, данной темой не многих удивишь — достаточно набрать в поисковике фразу arduino bruteforce и сразу станет понятно, насколько распространен перебор паролей при помощи платформы Arduino. Я же хочу рассказать о том, как это быстро организовать с наименьшим наборов компонентов, без разводки/травления плат и пайки. Сразу оговорюсь, что описанные мною действия носят ознакомительный характер и никому не причинили вреда, ни морального, ни физического… разве что мошенникам.


 
Зачем я это делал

Однажды вечером на мой iPhone пришло уведомление о смене пароля в Apple ID. Заподозря неладное, я кинулся проверять аккаунт Apple ID. Как вы уже догадались, со мной произошла та самая неприятная ситуация. Зайти в аккаунт я уже, естественно, не смог, восстановить пароль тоже не получалось — не приходили письма от Apple на почтовый ящик. Вскоре обнаружил известную фишку хакеров — настройку фильтрации входящей почты на самом ящике. Собственно, изначально взломали почтовый ящик, потом без проблем поменяли пароль на Apple ID. Но когда удалось восстановить доступ к Apple ID, было уже поздно. К тому времени iPhone был заблокирован злоумышленниками через сервис «Найти iPhone», MacBook тоже требовал пароль, ну и как полагается, на экране красовалось сообщение:



И если сброс iPhone на заводские настройки через iCloud не вызвал никаких сложностей, то сбросить блокировку с Mac стандартными средствами невозможно. В Mac устанавливается пароль не на учетную запись, а непосредственно на прошивку EFI. Пароль хранится на отдельном чипе в зашифрованном виде, поэтому компьютер становится заблокированным на уровне железа. Служба поддержки направила меня в авторизированный сервисный центр, где за N-ную сумму и пару дней предлагали сбросить пароль. Кстати сказать, эта сумма почти вдвое больше, чем запрашивают мошенники за пароль. Но я не стал спешить расставаться с деньгами и начал искать в интернете способы сделать все самому. Перелопатив множество форумов пришел к выводу, что нужен полный перебор паролей.

Эврика!

Перебирать вручную 10 000 комбинаций — дело не царское, а ведь и скриптик негде запустить. К счастью, заработала клавиатура, подключенная к MacBook через USB, а значит время создать «умную USB клавиатуру»! Именно для этого случая у меня пылилась платка Arduino Uno, с ней и будет весь концерт.

Небольшое отступление. Позже в интернете я нашел один интересный проект «взломщика» на Arduino, довольно-таки серьезное устройство, считывающее и анализирующее картинку через VGA разъем. Но это для тех, у кого есть желание и много времени.

За дело

Для начала нашел специальную прошивку для микросхемы «ATMEL MEGA16U2», на Arduino Uno бывает еще «ATMEL MEGA8U2». Это USB-контроллер платы Arduino. На фото ниже расположение USB-контроллера Arduino Uno ревизии R3:



Необходима такая прошивка, чтобы компьютер воспринимал плату не как устройство COM-порта, а как HID клавиатуру. Код прошивки будет позже.

Примечание: Arduino Leonardo и Arduino Micro поддерживают USB HID штатно

Итак, дело осталось за малым — написать программу для самого контроллера. Сначала проверим нашу «клавиатуру» на заведомо невзломанном рабочем компьютере.

ВНИМАНИЕ! Прошиваем сначала контроллер ATMEGA, только потом USB-контроллер MEGA! Среда разработки Arduino прошивать клавиатуры не умеет.

Загружаем тестовый скетч на контроллер:

uint8_t buf[8] = { 0 }; // байт с информацией о «нажатой» клавише

void setup() 
{
  Serial.begin(9600); // Устанавливаем скорость соединения
  delay(2000); // Пауза, чтобы «клавиатура» успела определиться в системе
}

void loop() 
{
  int dig1, dig2, dig3, dig4; // Цифры, которые будут последовательно вводиться
  int keys[10] = { 39, 30, 31, 32, 33, 
  34, 35, 36, 37, 38  }; // Массив с ASCII кодами цифер от 0 до 9 соответственно

// Перебираем комбинации, начиная  с 0000:

  for(dig1=0; dig1<10; dig1++)
  {
    for(dig2=0; dig2<10; dig2++)
    {
      for(dig3=0; dig3<10; dig3++)
      {
        for(dig4=0; dig4<10; dig4++)
        {
          pressKey(keys[dig1]);
          pressKey(keys[dig2]);
          pressKey(keys[dig3]);
          pressKey(keys[dig4]);
          pressKey(40); // Клавиша Enter
          delay(1000);
        }
      }
    }
  }
}

void pressKey(int dig) // Функция ввода
{
  buf[2] = dig;
  Serial.write(buf, 8); // Нажать клавишу
  buf[0] = 0;
  buf[2] = 0;
  delay(20);
  Serial.write(buf, 8); // Отпустить клавишу
  delay(200);
}



Отсоединяем Arduino от компьютера.

Теперь нужно прошить USB-контроллер, для этого скачаем программу FLIP (Windows) c сайта ATMEL и установим ее.
В случае с MacOS отдельные инструкции. Для некоторых версий Arduino Uno есть тонкости при прошивке USB-контроллера, подробности здесь.

Создадим hex-файл прошивки USB-контроллера. Код можно просто скопировать в текстовый редактор типа Блокнота и сохранить с расширением .hex
«Arduino-Uno-keyboard.hex»
:100000009AC00000B3C00000B1C00000AFC0000043
:10001000ADC00000ABC00000A9C00000A7C0000038
:10002000A5C00000A3C00000A1C00000E3C3000001
:100030009DC000009BC0000099C0000097C0000058
:1000400095C0000093C0000091C000008FC0000068
:100050008DC000008BC0000089C0000052C10000AC
:1000600085C0000083C0000081C000007FC0000088
:100070007DC000007BC0000079C0000077C0000098
:1000800075C0000073C0000071C000006FC00000A8
:100090006DC000006BC0000005010906A1017501DB
:1000A0009508050719E029E715002501810295014A
:1000B0007508810395057501050819012905910247
:1000C00095017503910395067508150026E700054F
:1000D00007190029E78100C0120110010000000883
:1000E000EB0342200000010200010902220001018D
:1000F00000C03209040000010301010009211101BF
:1001000000012240000705810308000A04030904D6
:100110001003410072006400750069006E006F00FA
:10012000000012034B006500790062006F0061005F
:1001300072006400000011241FBECFEFD2E0DEBFCA
:10014000CDBF11E0A0E0B1E0E8EAFFE002C0059019
:100150000D92AE30B107D9F711E0AEE0B1E001C0C9
:100160001D92AE3AB107E1F74ED01CC749CFBF92FE
:10017000CF92DF92EF92FF920F931F93CF93DF9373
:1001800084B7877F84BF28E10FB6F894209360007E
:10019000109260000FBE3CECC32ED12C87E690E09D
:1001A000F601918380839AECE92EF12C86E0B82E3B
:1001B000F701B08208EC10E0F8011082C9ECD0E041
:1001C0002883539A5A9A0BD384E085BD5F9A579A35
:1001D0001882F8011082F70110828FEC90E0F6018E
:1001E00091838083F701B08282E0F801808388E9FF
:1001F0008883DF91CF911F910F91FF90EF90DF9057
:10020000CF90BF900895B3DF2FB7F8948FE191E0BE
:100210009093A00180939F019093A2018093A101EC
:100220002FBF789480E091E0E7D584D4FBCF089588
:10023000089580E091E0B8D5E2EEF0E0808184603E
:100240008083089580E091E087C480910B019091B4
:100250000C01009729F0019790930C0180930B01FA
:1002600008950F931F93CF93DF93E8019FB7F894FE
:100270008091A3019FBF883050F1AEE0B1E08FE1E3
:1002800091E0E091A101F091A2015191F093A201BE
:10029000E093A10141E0EF39F40721F49093A2012A
:1002A0008093A1016FB7F8944091A301415040930E
:1002B000A3016FBF5D9341E0A631B40711F78091B0
:1002C00016019091C80095FFFCCF8093CE00EEE020
:1002D000F1E0822F932FDC0181918D9381E0E63153
:1002E000F807D1F788E090E09983888380E0DF9178
:1002F000CF911F910F910895F9018081809316018C
:1003000008951F920F920FB60F9211242F938F937F
:100310009F93EF93FF938091CE009EB39430F9F4B6
:10032000E0919F01F091A0018083E0919F01F09105
:10033000A001CF0101969093A00180939F0121E03D
:100340008F39920721F48FE191E0928381839FB7E7
:10035000F8948091A3018F5F8093A3019FBFFF91C9
:10036000EF919F918F912F910F900FBE0F901F9043
:100370001895933089F0943028F4913059F19230E7
:1003800071F505C09132E1F0923249F51EC022E2CA
:1003900030E0EAEEF0E027C0813049F0813018F01B
:1003A0008230E9F408C0ECE0F1E0249107C0E0E11C
:1003B000F1E0249103C0E2E2F1E0249130E013C0C7
:1003C00029E030E0ECEFF0E00EC020E430E0E8E9B6
:1003D000F0E009C022E130E0E8EDF0E004C020E008
:1003E00030E0E0E0F0E0DA011196FC93EE93C90111
:1003F000089528E030E040E003C04F5F220F331F34
:1004000028173907D0F3842F8295807F0895809331
:10041000E900EBEEF0E0808181608083EDEEF0E0BA
:1004200010826093EC0040838091EE00881F882743
:10043000881F08951092F40080E08093E9001092E4
:10044000F0001092E8001092ED009091EB009E7F7A
:100450009093EB008F5F853081F708958091A6011E
:1004600087FF11C003C08EB38823B1F08091E800EC
:1004700082FFF9CF8091E8008B778093E8000895A0
:100480008EB3882349F08091E80080FFF9CF8091F6
:10049000E8008E778093E800089584E69091EC0060
:1004A00090FF05C09091E80090FF05C01BC090919F
:1004B000E80092FD17C09EB39923B1F09EB395302A
:1004C000A9F09091EB0095FD13C09091E10092FF8F
:1004D000E5CF9091E1009B7F9093E100882351F05C
:1004E0008150DCCF80E0089582E0089583E0089594
:1004F00081E0089584E00895AF92BF92DF92EF9279
:10050000FF920F931F93DF93CF930F92CDB7DEB778
:10051000082F5B017A019983C0DFD82E9981882347
:1005200031F5192F1CC08091E80085FD10C0809125
:10053000E8008E778093E800E114F10421F0F701E0
:100540000995813081F0A9DF882349F00FC0F801B7
:1005500081918F018093F1000894A108B108A11442
:10056000B10409F704C075E0D72E01C0D82E8D2D37
:100570000F90CF91DF911F910F91FF90EF90DF903F
:10058000BF90AF900895282F392FF9018091AC01C9
:100590009091AD018617970718F4BC0190E032C026
:1005A00061157105D9F78091E8008E778093E80096
:1005B000F5CF8091E80083FD37C08091E80082FD8F
:1005C0002DC08EB38823A1F18EB3853079F180914F
:1005D000E80080FF17C08091F20006C091919093CF
:1005E000F100615070408F5F6115710511F0883026
:1005F000A8F391E0883009F090E08091E8008E77D0
:100600008093E80061157105A1F6992391F606C063
:100610008EB3882369F08EB3853061F08091E80055
:1006200082FFF6CF80E0089581E0089583E0089589
:1006300082E0089583E00895282F392FC901209181
:10064000AC013091AD012617370718F4B90130E03D
:1006500034C061157105D9F72091E8002E772093F9
:10066000E800F5CF2091E80023FD39C02091E80093
:1006700022FD2FC02EB32223B1F12EB3253089F1F4
:100680002091E80020FF19C02091F20008C0FC0171
:100690000196E491E093F100615070402F5F611585
:1006A000710511F0283098F331E0283009F030E07E
:1006B0002091E8002E772093E8006115710591F6EE
:1006C000332381F606C08EB3882369F08EB385305C
:1006D00061F08091E80082FFF6CF80E0089581E02C
:1006E000089583E0089582E0089583E008956115F8
:1006F000710519F51DC02091E80023FD2EC02EB311
:10070000222379F12EB3253051F12091E80022FF08
:10071000F2CFE82FF92F07C08091F1008193CF012C
:100720006150704029F0CF012091F2002223A1F7FF
:100730002091E8002B772093E80061157105D9F628
:1007400006C08EB3882369F08EB3853061F0809146
:10075000E80080FFF6CF80E0089581E0089583E00F
:10076000089582E0089583E008953ED040D01EBAF7
:100770001092A40184E089BD89B5826089BD09B465
:1007800000FEFDCF8091D800982F9F779093D800DE
:1007900080688093D800809163008E7F809363008F
:1007A0008091D8008F7D8093D8008091E0008E7F6B
:1007B0008093E0008091E1008E7F8093E100809142
:1007C000E20081608093E2008091E100877F809366
:1007D000E1008091E20088608093E2000895C5DF27
:1007E00081E08093A50108951092E200089510928F
:1007F000E10008951F920F920FB60F9211242F93CC
:100800003F934F935F936F937F938F939F93AF9398
:10081000BF93EF93FF938091E10080FF1BC0809115
:10082000E20080FF17C08091E1008E7F8093E1009D
:100830008091E2008E7F8093E2008091E2008061EF
:100840008093E2008091D80080628093D80019BC28
:100850001EBAEEDC8091E10084FF29C08091E200A5
:1008600084FF25C084E089BD89B5826089BD09B453
:1008700000FEFDCF8091D8008F7D8093D8008091BD
:10088000E1008F7E8093E1008091E2008F7E809373
:10089000E2008091E20081608093E2008091A401F7
:1008A000882311F084E001C081E08EBBC0DC809120
:1008B000E10083FF22C08091E20083FF1EC080918F
:1008C000E100877F8093E10082E08EBB1092A4015B
:1008D0008091E1008E7F8093E1008091E2008E7F25
:1008E0008093E2008091E20080618093E200A2DDCB
:1008F00080E060E042E08BDD1CD18091E10082FF6E
:100900000AC08091E20082FF06C08091E1008B7FE7
:100910008093E1009ADCFF91EF91BF91AF919F919D
:100920008F917F916F915F914F913F912F910F9098
:100930000FBE0F901F9018951F93DF93CF9300D099
:10094000CDB7DEB7E6EAF1E08091F100819381E076
:10095000EE3AF807C9F78091A6019091A70195306A
:1009600009F46BC0963040F4913061F1913070F031
:10097000933009F0C9C026C0983009F49BC0993063
:1009800009F4AAC0963009F0BFC075C0803809F4D8
:10099000BCC0823809F0B8C08091AA0187708093EA
:1009A000E9009091EB001092E9008091E800877FC8
:1009B0008093E80081E095FF80E08093F100109241
:1009C000F10083C0882319F0823009F09DC08F7137
:1009D000823009F09AC08091A801882341F52091C6
:1009E000AA01277009F491C02093E9008091EB00DF
:1009F00080FF8BC08091A701833021F48091EB00B0
:100A0000806213C08091EB0080618093EB0081E0F5
:100A100090E002C0880F991F2A95E2F78093EA00C0
:100A20001092EA008091EB0088608093EB001092B6
:100A3000E9008091E800877F4BC0882309F064C0FB
:100A40001091A8018091E800877F8093E80006DD7F
:100A500004C08EB3882309F458C08091E80080FF59
:100A6000F8CF1F7711F083E001C082E08EBB1068E1
:100A70001093E3004AC08058823008F045C080914E
:100A8000A8019091A9016091AA01AE014F5F5F4F4B
:100A900070DCBC010097C9F18091E800877F8093EA
:100AA000E80089819A81C8DD8091E8008B77809386
:100AB000E8002BC0803841F58091E800877F809363
:100AC000E8008091A4018093F1008091E8008E7786
:100AD0008093E800C3DC19C08823B1F49091A80189
:100AE000923098F48091E800877F8093E80090939B
:100AF000A401B4DC8091A401882311F084E001C03A
:100B000083E08EBB96DB01C09DDB8091E80083FF14
:100B10000AC08091EB0080628093EB008091E80036
:100B2000877F8093E8000F900F90CF91DF911F9106
:100B3000089508951F938EB3882361F01091E90002
:100B400017701092E9008091E80083FF01C0F4DE85
:100B50001093E9001F9108956F927F928F929F9258
:100B6000AF92BF92CF92DF92EF92FF920F931F93BB
:100B7000DF93CF9300D00F92CDB7DEB77C016DB677
:100B80007EB68091E80083FFF8C0F701808190E095
:100B90002091AA013091AB012817390709F0EDC067
:100BA0008091A701833009F499C0843030F48130FA
:100BB00071F0823009F0E1C0C8C08A3009F4AEC0DB
:100BC0008B3009F498C0893009F0D7C04CC08091AF
:100BD000A601813A09F0D1C0CDB6DEB69DB68D2C06
:100BE0008091E800877F8093E8001B821A828091C1
:100BF000A8010091A9018983F7014781C41AD1088E
:100C00000FB6F894DEBE0FBECDBE0894C11CD11C39
:100C1000BC2CAD2CC60160E070E050E0BCD1402F90
:100C20004150C701BE016F5F7F4F96018E010E5F7D
:100C30001F4F17DBF701258136812115310529F07A
:100C40004781C901B60150E09DD11092E9006A8147
:100C50007B818B2D9A2D97DC8091E8008B77809398
:100C6000E800940133C08091A601813209F085C06B
:100C7000CDB6DEB6BDB6AD2C8091E800877F8093FF
:100C8000E8000091AC011091AD019090A801809016
:100C9000A9018DB79EB7801B910B0FB6F8949EBF2C
:100CA0000FBE8DBFCDB6DEB60894C11CD11CC601E7
:100CB000B8011DDD482D4150C701692D96011CDB8F
:100CC0008091E8008E778093E8009501832F922F22
:100CD0000FB6F8949EBF0FBE8DBF4FC08091A60186
:100CE000813A09F04AC08091E800877F8093E8004C
:100CF000F70180853AC08091A601813209F03DC09C
:100D00008091E800877F8093E8009091A80181E0BE
:100D1000992309F480E0F70180872EC08091A60115
:100D2000813259F58091E800877F8093E8008091B7
:100D3000A8019091A901807036E0969587953A9523
:100D4000E1F7F7019287818717C08091A601813A68
:100D5000A1F48091E800877F8093E800F701818506
:100D6000928596958795969587958093F1008091C9
:100D7000E8008E778093E80071DB0FB6F8947EBEB2
:100D80000FBE6DBE0F900F900F90CF91DF911F910E
:100D90000F91FF90EF90DF90CF90BF90AF909F901A
:100DA0008F907F906F9008950F931F93CF93DF9351
:100DB000FC010896DC0185E0ED0119928A95E9F7BE
:100DC00081E0808784EF91E092878187228133815F
:100DD00001818481882311F014E001C010E0C90171
:100DE00008DB412F482B4260802F61EC10DBDF9144
:100DF000CF911F910F9108954F925F926F927F92C2
:100E00008F929F92AF92BF92CF92DF92EF92FF921A
:100E10000F931F93DF93CF9300D00F92CDB7DEB720
:100E20007C016DB67EB68EB3843009F085C0F701C3
:100E300081818093E9008091E80085FF7DC05DB6E7
:100E4000472C4781CDB6DEB6C41AD1080FB6F89448
:100E5000DEBE0FBECDBE0DB71EB70F5F1F4FB02E4B
:100E6000912E19821B821A82C80160E070E050E066
:100E700092D0C701BE016F5F7F4F40E098018E01A5
:100E80000E5F1F4FEED9882EF7018185928500975E
:100E900059F081E090E0238534852115310511F06A
:100EA00080E090E06C0102C0CC24DD24F7010581D4
:100EB00016810115110599F04A815B818B2D992DC1
:100EC000B80153D0AA24A394009709F4AA24F701E7
:100ED0004781C8016B2D792D50E054D001C0AA2460
:100EE0008A819B81009701F1882029F4AA2019F4B6
:100EF000C114D104C9F0F701818592859487838755
:100F000081818093E9008981882311F08093F10029
:100F10006A817B818B2D992D40E050E0EDDA809144
:100F2000E8008E778093E8009201832F942D0FB60E
:100F3000F8949EBF0FBE8DBF0FB6F8947EBE0FBE55
:100F40006DBE0F900F900F90CF91DF911F910F9179
:100F5000FF90EF90DF90CF90BF90AF909F908F90D9
:100F60007F906F905F904F900895FB01DC0104C06B
:100F70008D910190801921F441505040C8F7881B91
:100F8000990B0895FB01DC0102C001900D924150C4
:100F90005040D8F70895DC0101C06D934150504096
:080FA000E0F70895F894FFCF7B
:0E0FA800000108000017010800000000000012
:00000001FF

Дальше необходимо перевести Arduino в режим DFU. Для этого открываем «Диспетчер устройств» на Windows, подключаем плату к компьютеру, убеждаемся, что Windows видит ее как устройство COM-порта, затем закорачиваем какой-нибудь железкой контакты Arduino как показано на картинке ниже:



Через 5-10 секунд контакты размыкаем. Если в диспетчере появилось новое USB устройство «ATmega16U2» (или «...8U2») — отлично!

Нет — замыкаем контакты еще раз, можно попробовать подержать подольше. Если появляется «Неизвестное устройство», то необходимо установить драйвер для USB-контроллера Arduino: нажимаем правой кнопкой мыши на «Неизвестное устройство» > «Обновить драйверы» > «Выполнить поиск драйверов на этом компьютере» > ищем директорию с установленным FLIP, в ней папку «usb» > устанавливаем драйвер.

В итоге мы должны увидеть следующее:



Итак, Arduino в режиме DFU, теперь ее можно превращать в клавиатуру. Далее пойдет описание работы под Windows.

1. Запускаем FLIP. Во вкладке «Device» нажимаем «Select» или нажимаем на микросхемку, ищем в списке «ATmega16U2» (или «...8U2»), нажимаем «ОК».



2. Далее вкладка «Settings» > «Communication» или нажимаем на USB шнурок > «USB» > «Open». Если не выскочило никаких ошибок, значит пока все делаем правильно. В противном случае пробуем заново ввести Arduino в режим DFU.





3. Теперь вкладка «File» > «Load HEX File…» или нажимаем книжку со стрелочкой, ищем созданный ранее файл «Arduino-Uno-keyboard.hex», проверяем галочки и нажимаем «Run».





Пару мгновений и Arduino превращается… в элегантную клавиатуру! Отсоединяем плату от компьютера. На компьютере открываем любой текстовый редактор, затем подключаем Arduino вновь. Через пару секунд кто-то начнет печатать:

0000
0001
0002
…

Наш полтергейст перебощик паролей практически готов!

Все бы хорошо, но когда Arduino будет вводить пароли на MacBook, мы не сможем узнать, какой из них оказался правильным. Мы будем точно знать, что подошли какие-то четыре звездочки. Поэтому сделаем так, чтобы текущий пароль выводился на 28-сегментный индикатор. У меня как раз был такой:



Модуль индикатора уже распаян на плате с ключами и резисторами, поэтому, в моем случае, схема подключения простая: вход VCC индикатора подключаем к выводу 5V Аrduino, остальные от D1 до G — к цифровым выводам Arduino с 12 по 2 соответственно.

Существует множество видов сегментных идикаторов: с общим катодом, с общим анодом; со встроенным контроллером, без контроллера, матричные, соответственно и способы подключения индикаторов к контроллеру разные. Проще всего работать с модульным индикатором, имеющим контроллер или хотя бы матричную разводку:



Мне остается только приклеить индикатор куда-нибудь изолентой:



Финишная прямая

Пишем скетч с поддержкой модульного индикатора и необходимыми настройками ввода. Замеры показали, что время задержки ввода пароля у MacBook до загрузки ОС составляет 12 секунд после 5-ти попыток неверного ввода. Чтобы прошить «клавиатуру», нужно вернуть USB-контроллер Arduino к первоначальному состоянию. Для этого создадим hex-файл родной прошивки USB-контроллера. Код так же просто копируем в текстовый редактор типа Блокнота и сохраняем с расширением .hex
«Arduino-Uno-R3-usbserial.hex»
:1000000090C00000A9C00000A7C00000A5C000006B
:10001000A3C00000A1C000009FC000009DC0000060
:100020009BC0000099C0000097C0000048C40000B9
:100030000CC4000091C000008FC000008DC0000003
:100040008BC0000089C0000087C0000085C0000090
:1000500083C0000081C000007FC0000002C100001A
:100060007BC0000079C0000077C0000075C00000B0
:1000700073C0000071C000006FC000006DC00000C0
:100080006BC0000069C0000067C0000065C00000D0
:1000900063C0000061C000001201100102000008EE
:1000A0004123430001000102DC0109023E0002017C
:1000B00000C0320904000001020201000524000111
:1000C0001004240206052406000107058203080027
:1000D000FF09040100020A000000070504024000B5
:1000E00001070583024000010403090432034100B3
:1000F00072006400750069006E006F002000280027
:100100007700770077002E006100720064007500B0
:1001100069006E006F002E0063006300290000007C
:10012000000011241FBECFEFD2E0DEBFCDBF11E033
:10013000A0E0B1E0ECEAFFE002C005900D92A6312C
:10014000B107D9F712E0A6E1B1E001C01D92AF32CC
:10015000B107E1F7F1D028C753CF9C01DC01AE57BE
:10016000BF4FED91FC91119741911196FC93EE9345
:1001700080589F4FE817F90711F42D933C939FB7D0
:10018000F894F901EC57FF4F8081815080839FBF25
:10019000842F0895DF92EF92FF920F931F93FC013B
:1001A0008489813019F0823021F405C040E3D42ED7
:1001B00004C0DD2402C030E2D32E8389823011F4E2
:1001C00088E0D82A8589873031F0883031F0863050
:1001D00031F482E003C084E001C086E0D82A1092A6
:1001E000C9001092C8001092CA00E784F088018903
:1001F000128980E0E81681EEF80680E0080780E0CA
:10020000180719F420E130E00FC0C801B701969536
:1002100087957795679560587B47814E9F4FA801DA
:100220009701A0D6215030403093CD002093CC00D0
:10023000D092CA0080E0E81681EEF80680E0080758
:1002400080E0180711F082E001C080E08093C800D0
:1002500088E98093C9001F910F91FF90EF90DF9084
:1002600008951F920F920FB60F9211242F938F9320
:100270009F93EF93FF939091CE008EB38430F1F46F
:10028000E0919901F0919A019083E0919901F091A8
:100290009A01CF01019690939A018093990189590F
:1002A000914021F489E191E0928381839FB7F89492
:1002B00080919D018F5F80939D019FBFFF91EF9182
:1002C0009F918F912F910F900FBE0F901F901895B7
:1002D000FC01858580FF02C05F9808955F9A0895AC
:1002E00080E091E0D5C580E091E088C584B7877F44
:1002F00084BF28E10FB6F89420936000109260004C
:100300000FBE87E690E09093CD008093CC0086E00E
:100310008093CA001092C8002093C900539A5A9A39
:100320008AB180638AB98BB180638BB983D284E050
:1003300085BD5F9A579A08950F931F93CF93DF93CC
:10034000D5DF2FB7F8948EE991E090931F02809348
:100350001E0290932102809320022FBF2FB7F894A2
:1003600089E191E090939A018093990190939C0187
:1003700080939B012FBF7894CEE9D1E003E08FB743
:10038000F894909122028FBF903809F180E091E0BB
:10039000ABD497FD1CC0E0911E02F0911F02808338
:1003A000E0911E02F0911F02CF01019690931F026F
:1003B00080931E028E51924011F4D283C1839FB765
:1003C000F894809122028F5F809322029FBF8FB7A3
:1003D000F89410919D018FBFA89902C0113678F151
:1003E000A89A80919D01882361F05D980093160181
:1003F00008C089E191E0B1DE682F80E091E0DAD4B5
:1004000011501123B1F780911601882351F080918A
:10041000160181508093160180911601882309F4FA
:100420005D9A80911701882351F0809117018150C6
:100430008093170180911701882309F45C9A8FB784
:10044000F894909122028FBF992369F08EE991E090
:1004500084DE982F8091C80085FFFCCF9093CE005A
:100460005C980093170180E091E095D42AD487CF5F
:10047000DA01923049F0933061F09130F9F4E8E913
:10048000F0E022E130E01EC0EAEAF0E02EE330E0E6
:1004900019C0813049F0813018F0823079F408C0F9
:1004A000E8EEF0E0849107C0ECEEF0E0849103C048
:1004B000E0E2F1E08491282F30E004C0E0E0F0E0D9
:1004C00020E030E0ED93FC93C901089528E030E08E
:1004D00040E003C04F5F220F331F28173907D0F3C6
:1004E000842F8295807F08958093E9008091EB00AE
:1004F00081608093EB001092ED006093EC004093DC
:10050000ED008091EE00881F8827881F08951092C3
:10051000F40090E09093E9001092F0001092E8004F
:100520001092ED008091EB008E7F8093EB009F5F37
:10053000953081F708958091270288238CF403C0B9
:100540008EB38823B1F08091E80082FFF9CF8091CB
:10055000E8008B778093E80008958EB3882349F0F4
:100560008091E80080FFF9CF8091E8008E7780933A
:10057000E800089594E68091EC0080FF05C080912A
:10058000E80080FF05C023C08091E80082FD1FC005
:100590008EB3882311F482E008958EB3853011F470
:1005A00083E008958091EB0085FF02C081E008950B
:1005B0008091E10082FFDFCF8091E1008B7F80930B
:1005C000E100992311F484E008959150D4CF80E0A4
:1005D00008959C0140912D0250912E024617570715
:1005E00018F4F90120E038C06115710511F0AB0174
:1005F000F8CF8091E8008E778093E80040E050E0EB
:10060000F0CF8091E80083FF02C081E008958091DF
:10061000E80082FD2DC08EB3882381F18EB3853032
:1006200079F18091E80080FF17C09091F20006C038
:1006300081918093F100415050409F5F41155105D9
:1006400011F09830A8F320E0983009F421E080916F
:10065000E8008E778093E8004115510591F622233A
:1006600081F606C08EB3882349F08EB3853041F001
:100670008091E80082FFF6CF80E0089582E008953F
:1006800083E008959C0140912D0250912E0246175F
:10069000570710F490E03BC06115710511F0AB01F4
:1006A000F9CF8091E8008E778093E80040E050E039
:1006B000F1CF8091E80083FF02C081E0089580912E
:1006C000E80082FD30C08EB3882399F18EB3853067
:1006D00091F18091E80080FF1AC08091F20009C07A
:1006E000F9012F5F3F4FE491E093F10041505040FA
:1006F0008F5F4115510511F0883090F390E08830FC
:1007000009F491E08091E8008E778093E80041152C
:10071000510579F6992369F606C08EB3882349F00E
:100720008EB3853041F08091E80082FFF6CF80E003
:10073000089582E0089583E008959C016115710594
:1007400029F48091E8008B778093E800F90120C0BC
:100750008091E80083FF02C081E008958EB3882372
:1007600039F18EB3853031F18091E80082FFF0CF0E
:1007700006C08091F10081936150704021F080911A
:10078000F2008823B1F78091E8008B778093E8002E
:1007900061157105E9F606C08EB3882349F08EB362
:1007A000853041F08091E80080FFF6CF80E0089529
:1007B00082E0089583E0089542D044D01EBA10929A
:1007C0002502109224021092230284E089BD89B58B
:1007D000826089BD09B400FEFDCF8091D800982FBA
:1007E0009F779093D80080688093D80080916300B1
:1007F0008E7F809363008091D8008F7D8093D80096
:100800008091E0008E7F8093E0008091E1008E7FF8
:100810008093E1008091E20081608093E20080910A
:10082000E100877F8093E1008091E20088608093FF
:10083000E2000895C1DF81E08093260208951092BE
:10084000E20008951092E10008951F920F920FB6F2
:100850000F9211241F932F933F934F935F936F93A6
:100860007F938F939F93AF93BF93EF93FF93E9EEA3
:10087000F0E0108117701082E0EFF0E08081877F58
:1008800080837894C3D0F894A9EEB0E01C92E0EF96
:10089000F0E08081886080831C93FF91EF91BF918D
:1008A000AF919F918F917F916F915F914F913F9108
:1008B0002F911F910F900FBE0F901F9018951F92B0
:1008C0000F920FB60F9211242F933F934F935F9384
:1008D0006F937F938F939F93AF93BF93EF93FF9308
:1008E0008091E10080FF1BC08091E20080FF17C073
:1008F0008091E1008E7F8093E1008091E2008E7F05
:100900008093E2008091E20080618093E200809118
:10091000D80080628093D80019BC1EBAD1D18091D2
:10092000E10084FF29C08091E20084FF25C084E0BB
:1009300089BD89B5826089BD09B400FEFDCF809173
:10094000D8008F7D8093D8008091E1008F7E8093C6
:10095000E1008091E2008F7E8093E2008091E200CE
:1009600081608093E20080912502882311F481E068
:1009700001C084E08EBBA4D18091E10083FF27C039
:100980008091E20083FF23C08091E100877F809304
:10099000E10082E08EBB109225028091E1008E7F03
:1009A0008093E1008091E2008E7F8093E20080914D
:1009B000E20080618093E200AADD80E060E042E036
:1009C00093DD8091F00088608093F00079D1809170
:1009D000E10082FF0AC08091E20082FF06C08091A0
:1009E000E1008B7F8093E1006BD1FF91EF91BF918C
:1009F000AF919F918F917F916F915F914F913F91B7
:100A00002F910F900FBE0F901F9018951F93DF939B
:100A1000CF93CDB7DEB7AC970FB6F894DEBF0FBE5D
:100A2000CDBFE7E2F2E08091F100819322E0EF3266
:100A3000F207C9F78091270230912802353009F476
:100A400087C0363040F43130C9F1313070F0333086
:100A500009F01DC133C0383009F4EFC0393009F452
:100A6000FEC0363009F013C192C0803821F08238C0
:100A700009F00DC108C090912302809124028823BF
:100A800099F0926011C080912B0287708093E900E9
:100A90008091EB0090E025E0969587952A95E1F707
:100AA000982F91701092E9008091E800877F8093E1
:100AB000E8009093F1001092F100CAC0882319F069
:100AC000823009F0E4C090E08F719070009721F0BF
:100AD000029709F0DDC00CC080912902813009F035
:100AE000D7C010922402333069F5809324022AC0C3
:100AF00080912902882331F520912B02277009F477
:100B0000C7C02093E9008091EB0080FFC1C0333063
:100B100021F48091EB00806213C08091EB00806132
:100B20008093EB0081E090E002C0880F991F2A9526
:100B3000E2F78093EA001092EA008091EB0088606F
:100B40008093EB001092E9008091E800877F83C0DA
:100B5000882309F09CC0109129028091E800877FCA
:100B60008093E800E8DC04C08EB3882309F490C0C9
:100B70008091E80080FFF8CF812F8F7711F492E009
:100B800001C093E09EBB80688093E30081C08058E1
:100B9000823008F07CC08091290290912A0223E0E3
:100BA0008C3D920799F55FB7F894DE0115964EE0FB
:100BB00020E030E061E2E42FF0E0609357008491A0
:100BC00020FF03C082958F704F5F982F9F70892FF1
:100BD000805D8A3308F0895F8C9311961C9211977F
:100BE0002F5F3F4F12962431310529F75FBF8AE20C
:100BF0008B8383E08C838091E800877F8093E8007B
:100C0000CE0103966AE270E0E4DC11C060912B0231
:100C1000AE014F5F5F4F2CDCBC010097C9F18091A2
:100C2000E800877F8093E80089819A812BDD80919D
:100C3000E8008B778093E8002BC0803841F58091E5
:100C4000E800877F8093E800809125028093F1007F
:100C50008091E8008E778093E8006DDC19C08823CE
:100C6000B1F490912902923098F48091E800877F46
:100C70008093E800909325025EDC80912502882312
:100C800011F483E001C084E08EBB2DDB01C028DBC2
:100C90008091E80083FF0AC08091EB00806280931E
:100CA000EB008091E800877F8093E800AC960FB658
:100CB000F894DEBF0FBECDBFCF91DF911F91089595
:100CC00008951F938EB3882361F01091E90010926C
:100CD000E9008091E80083FF01C098DE177010934F
:100CE000E9001F9108950895FC018EB3843021F529
:100CF00087859089A189B2890097A105B105E1F0A6
:100D000085818093E9008091E80082FF15C0809181
:100D1000F200882319F42FEF3FEF04C08091F10017
:100D2000282F30E08091F200882341F48091E80080
:100D30008B778093E80002C02FEF3FEFC901089541
:100D4000FC018EB3843011F587859089A189B28921
:100D50000097A105B105D1F081818093E9008091D0
:100D6000F2008823A9F09091E8008091E8008E7746
:100D70008093E80095FD0CC0FDDB982F882349F493
:100D80008091E8008E778093E80003C092E001C074
:100D900090E0892F0895FC018EB3843051F487854B
:100DA0009089A189B2890097A105B10511F0CF0101
:100DB000C7CF08951F93FC01162F8EB38430D9F44A
:100DC00087859089A189B2890097A105B10599F01D
:100DD00081818093E9008091E80085FD08C08091C1
:100DE000E8008E778093E800C5DB882329F4109310
:100DF000F10080E001C082E01F9108950F931F93DE
:100E0000CF93DF93EC010D96FC0189E0DF011D9289
:100E10008A95E9F72A813B8109818C81882311F425
:100E200010E001C014E0C90151DB182B1260802FC3
:100E300061E8412F59DB882329F12E813F810D8103
:100E40008885882311F410E001C014E0C9013EDB5D
:100E5000182B1260802F60E8412F46DB882391F029
:100E60002A853B8509858C85882311F410E001C013
:100E700014E0C9012BDB182B1260802F61EC412F8D
:100E800033DB01C080E0DF91CF911F910F91089576
:100E9000CF93DF93EC018091E80083FF60C08881ED
:100EA00090E020912B0230912C022817390709F08D
:100EB00056C080912802813261F0823220F4803263
:100EC00009F04DC019C0823269F1833209F047C080
:100ED00038C080912702813A09F041C08091E80032
:100EE000877F8093E800CE010F9667E070E071DBAA
:100EF0008091E8008B7713C080912702813279F5C9
:100F00008091E800877F8093E800CE010F9667E02C
:100F100070E013DCCE013ED98091E8008E7780939B
:100F2000E8001DC0809127028132C9F48091E80059
:100F3000877F8093E800809129028D87CE01C8D9F0
:100F40000DC080912702813251F48091E800877FA3
:100F50008093E800CE0160912902C5DEECDADF91D2
:100F6000CF910895A1E21A2EAA1BBB1BFD010DC053
:100F7000AA1FBB1FEE1FFF1FA217B307E407F50749
:100F800020F0A21BB30BE40BF50B661F771F881F25
:100F9000991F1A9469F760957095809590959B01BB
:0C0FA000AC01BD01CF010895F894FFCF13
:100FAC0000034000000440000002080000000000A4
:060FBC000000000000002F
:00000001FF

Для всех Arduino родные прошивки USB-контроллера лежат здесь

Чтобы вернуться на родную прошивку USB-контроллера, делаем все с помощью программы FLIP (или по инструкции для Mac), как и ранее, в конце отключаем плату от компьютера. Затем вновь подключаем плату к компьютеру и загружаем на контроллер новый, усовершенствованный скетч с поддержкой индикатора.

uint8_t buf[8] = { 0 }; // байт с информацией о «нажатой» клавише

void setup() 
{
  Serial.begin(9600); // Устанавливаем скорость соединения
  pinMode(2, OUTPUT); // G
  pinMode(3, OUTPUT); // F
  pinMode(4, OUTPUT); // E
  pinMode(5, OUTPUT); // D
  pinMode(6, OUTPUT); // C
  pinMode(7, OUTPUT); // B
  pinMode(8, OUTPUT); // A
  pinMode(9, OUTPUT); // D4
  pinMode(10, OUTPUT); // D3
  pinMode(11, OUTPUT); // D2
  pinMode(12, OUTPUT); // D1

// Так как модуль сегментных индикаторов имеет общий анод, то для того, чтобы 
// светился сегмент, вывод Arduino должно быть в высокоимпедансном состоянии 
// и наоборот

// Выключаем все сегменты:

  digitalWrite(12, HIGH);
  digitalWrite(11, HIGH);
  digitalWrite(10, HIGH);
  digitalWrite(9, HIGH);
  delay(2000); // Пауза, чтобы «клавиатура» успела определиться в системе
}

void loop() 
{
  int dig1, dig2, dig3, dig4; // Цифры, которые будут последовательно вводиться
  int keys[10] = { 39, 30, 31, 32, 33, 
  34, 35, 36, 37, 38 }; // Массив с ASCII кодами цифер от 0 до 9 соответственно

// Перебор с 0000 до 9999:

  for(dig1=0; dig1<10; dig1++)
  {
    for(dig2=0; dig2<10; dig2++)
    {
      for(dig3=0; dig3<10; dig3++)
      {
        for(dig4=0; dig4<10; dig4++)
        {
          pressKey(keys[dig1]);
          pressKey(keys[dig2]);
          pressKey(keys[dig3]);
          pressKey(keys[dig4]);
          pressKey(40); // Клавиша Enter

// Текущий пароль будет отображаться в течение примерно 15-ти секунд (чуть больше времени задержки ввода)

          for(int i=0; i<1200; i++)
          {
            digLED(12, dig1);
            digLED(11, dig2);
            digLED(10, dig3);
            digLED(9, dig4);
          }
        }
      }
    }
  }
}

void pressKey(int dig) // Функция ввода
{
  buf[2] = dig;
  Serial.write(buf, 8); // Нажать клавишу
  buf[0] = 0;
  buf[2] = 0;
  delay(20);
  Serial.write(buf, 8); // Отпустить клавишу
  delay(300);
}

// Возможно, существуют библиотеки для сегментных индикторов, но мне не захотелось с ними разбираться, 
// поэтому набросал свой алгоритм обхода сегментов индикатора

void digLED(int pin, int dig) // Функция отображения цифер на индикаторе
{
  digitalWrite(pin, LOW);
  switch(dig)
  {
  case 0:
    digitalWrite(8, LOW);
    digitalWrite(7, LOW);
    digitalWrite(6, LOW);
    digitalWrite(5, LOW);
    digitalWrite(4, LOW);
    digitalWrite(3, LOW);
    digitalWrite(2, HIGH);
    break;
  case 1:
    digitalWrite(8, HIGH);
    digitalWrite(7, LOW);
    digitalWrite(6, LOW);
    digitalWrite(5, HIGH);
    digitalWrite(4, HIGH);
    digitalWrite(3, HIGH);
    digitalWrite(2, HIGH);
    break;
  case 2:
    digitalWrite(8, LOW);
    digitalWrite(7, LOW);
    digitalWrite(6, HIGH);
    digitalWrite(5, LOW);
    digitalWrite(4, LOW);
    digitalWrite(3, HIGH);
    digitalWrite(2, LOW);
    break;
  case 3:
    digitalWrite(8, LOW);
    digitalWrite(7, LOW);
    digitalWrite(6, LOW);
    digitalWrite(5, LOW);
    digitalWrite(4, HIGH);
    digitalWrite(3, HIGH);
    digitalWrite(2, LOW);
    break;
  case 4:
    digitalWrite(8, HIGH);
    digitalWrite(7, LOW);
    digitalWrite(6, LOW);
    digitalWrite(5, HIGH);
    digitalWrite(4, HIGH);
    digitalWrite(3, LOW);
    digitalWrite(2, LOW);
    break;
  case 5:
    digitalWrite(8, LOW);
    digitalWrite(7, HIGH);
    digitalWrite(6, LOW);
    digitalWrite(5, LOW);
    digitalWrite(4, HIGH);
    digitalWrite(3, LOW);
    digitalWrite(2, LOW);
    break;
  case 6:
    digitalWrite(8, LOW);
    digitalWrite(7, HIGH);
    digitalWrite(6, LOW);
    digitalWrite(5, LOW);
    digitalWrite(4, LOW);
    digitalWrite(3, LOW);
    digitalWrite(2, LOW);
    break;
  case 7:
    digitalWrite(8, LOW);
    digitalWrite(7, LOW);
    digitalWrite(6, LOW);
    digitalWrite(5, HIGH);
    digitalWrite(4, HIGH);
    digitalWrite(3, HIGH);
    digitalWrite(2, HIGH);
    break;
  case 8:
    digitalWrite(8, LOW);
    digitalWrite(7, LOW);
    digitalWrite(6, LOW);
    digitalWrite(5, LOW);
    digitalWrite(4, LOW);
    digitalWrite(3, LOW);
    digitalWrite(2, LOW);
    break;
  case 9:
    digitalWrite(8, LOW);
    digitalWrite(7, LOW);
    digitalWrite(6, LOW);
    digitalWrite(5, LOW);
    digitalWrite(4, HIGH);
    digitalWrite(3, LOW);
    digitalWrite(2, LOW);
    break;
  }
  delay(3);
  digitalWrite(pin, HIGH);
}


И снова прошиваем USB-контроллер прошивкой Arduino-Uno-keyboard.hex



Можно запускать!

Хотя… Я бы лично не смог до 42-х часов подряд смотреть на индикатор и монитор, ожидая подходящего пароля. Для этих целей отлично подойдет одноглазый свидетель — видеокамера. Запись будет вестись со старенькой SONY через miniDV (IEEE-1394) при помощи бесплатной программы SplitCam на другой компьютер. В качестве альтернативы можно использовать веб-камеру или видеорегистратор для автомобиля.

Запускаем MacBook с нажатой клавишей «alt», подсодиняем «клавиатуру», включаем видеозапись и идем по своим делам, переодически визуально контролируя процесс.

Система в действии:



В моем случае пароль нашелся на вторые сутки. Этот торжественный момент на видео:



Как оказалось, после запуска операционной системы снова потребовался пароль, но ни о чем не подозревающая Arduino продолжала перебор. Позже подошел я, отсоединил «клавиатуру», промотал видео назад и ввел верный пароль.

В свою очередь, желаю всем избегать подобных ситуаций, поэтому чаще обновляйте пароли на почтовых ящиках и удачи!

Share post

Comments 27

    0
    Подождите. Про айфон понятно — его можно заблокировать удаленно. А вот насчет мака — как это сделать??
      0
      Вопрос снимается, нашел инструкции. Странно, но у меня в icloud мака так и не видно.
        +1
        Нужно включить Find My Mac в настройках iCloud на маке, тогда всё заработает.
      0
      Красиво! И ничего ломать разбирать в сервисном центре не надо. Долго конечно, но никуда не денешься.
      А на ардуино нано такое можно сделать? USB контроллер вроде есть.
        +1
        Через СЦ мне восстанавливали PIN 4 недели. Так-что насчет «долго» — это сомнительно
        +3
        Наверное, надо упомянуть, что Arduino Leonardo и Micro поддерживают USB HID гораздо проще — arduino.cc/en/Reference/KeyboardBegin

        Поэтому сложностей с flip не потребуется.
          +2
          Пока писал публикацию, хотел это указать, но увлекся и забыл. Пояснение добавил. Спасибо за замечание!
        • UFO just landed and posted this here
            +1
            Ой, ну не надо так, спасибо!
            0
            Интересно, как скоро бы нашелся данный конкретный пароль, если бы использовался не последовательный перебор, а что-нибудь типа Монте-Карло?
              +9
              Не хочу показаться невеждой, но я думаю, что в данном случае все комбинации имеют равнозначную вероятность 1/10000 быть верными. Поэтому нелинейный перебор не имеет смысла.
                –4
                Да, я имел ввиду конкретный пароль. Ведь если бы автор начал перебор с конца, он бы потратил в три раза меньше времени.
                  +4
                  С таким же успехом можно начать с конца, а пароль окажется 1234. Другое дело, если бы была какая-нибудь статистика заблокированных злоумышленниками устройств, чтобы прикинуть мат. ожидание и сделать ставку на тот или иной интервал.
            +3
            Повезло, что в маках не предусмотрена полная блокировка при вводе нескольких неправильных паролей.
              0
              А мне совсем не ясно почему она не предусмотрена? Так же как и не ясно, зачем вообще нужна такая «блокировка»?
                0
                Потому что если бы она была — Apple пришлось бы менять «запоротые» девайсы (при наличии документов о покупке).
                Примерно подобным образом на американском Sony SZ разблокировали GPRS модем. Он требовал ввода 6-ти значного пароля, который можно было получить и бесплатно, позвонив в США в Sony, но тогд адаже скайпа не было. В результате оказалось, что на правильную последовательность модем отвечает OK, а не правильную ничего. Ну AT-команды перебором слать вообще оказалось проще простого
                  0
                  На самом деле в СЦ Apple и, скорее всего, в авторизированных СЦ делают так www.ernieflores.net/osx-page-5/recovering-a-lost-firmware-password/ Суть в том, что набрав определенную комбинацию клавиш на включенном MAcBook, можно узнать одноразовый HASH-ключ. Этот ключ нужно отправить некой службе TSPS, они генерируют по нему бинарник, который особым образом заливается на Mac. Ну и конечно, простым смертным TSPS бинанрники не генерирует.
                0
                Сам был очень приятно удивлен, когда понял, что блокировки нет. Но перебор прокатывает только до запуска ОС. Если дать системе загрузиться, то неверный ввод влечет за собой прогрессирующую по времени блокировку, примерно как на смартфонах при вводе неверного пароля на начальном экране.
                0
                supportapplerus@nm.ru не кажется странным адресом?
                  +2
                  Я думаю под мошенниками, которые просили меньшую сумму, чем сервис, автор имел в виду именно их.
                  +1
                  А еще можно было взять фотодиод, приклеить его скотчем к экрану в зону, которая после разблокировки заведомо должна поменять яркость и подключить его к ардуине. Перебор пароля останавливать после того, как яркость изменилась сильнее порога. Метод менее надежный, зато более брутальный что ли… и камера не нужна :)
                    0
                    Прям прочел мои первые мысли! Но фотодиода не было под рукой, еще не был уверен, что экран не заснет. Хотя вариант интересный.
                      0
                      А он не должен заснуть. Ты ведь постоянно что-то с клавиатуры «вводишь».
                    –1
                    Нда. С компьютерами Mac владелец компьютера вынужден взламывать собственный компьютер.

                    Ясно, конечно, что здесь «постарались» некие злоумышленники, но всё равно неправильно, что на компе предусмотрен некий неотключаемый механизм «безопасности», который может вот так сыграть против владельца компа.

                    Правильно ли я понимаю, что этот механизм «безопасности» на Mac похож на «Secure Boot», продвигаемый Microsoft на PC? Если да, то вот вам дополнительный аргумент против «Secure Boot».

                    Open Hardware нас спасёт
                      +1
                      Нет, это не Secure boot. Если бы вы почитали, что такое Secure boot, вы бы не подумали даже сравнить блокировку паролем с ним. Я понимаю, что вы начитались опенсорс-фанатиков и повторяете за ними, но нужно же проверять, что вы читаете.

                      А загружается на маке все, что может загрузиться на x86/x86-64, безо всяких подписей.
                      0
                      Автор, а что микруха/память где пароль лежит энергонезависимая на маках, тогда получается, что она отдельная? Встречался пару раз, по работе, с энергонезависимой памятью на ноутах, естественно отдельной от микрухи bios, один точно помню был асус, вот в ней и лежал пароль.

                      Only users with full accounts can post comments. Log in, please.