هدف از این آزمایش تبدیل برد آردوینو به یک صفحه کلید USB به اضافه یک sniffer VGA برای شکستن رمز عبور یک بایوس استاندارد با استفاده از روش حمله brute force است . استفاده از این روش هیچ مزیتی ندارد، در واقع این کار می تواند بسیار کند باشد و ممکن است هرگز رمز عبور را پیدا نکنید، اما مثل همیشه ما این کار را برای سرگرمی انجام می دهیم. این فقط یک اثبات مفهومی است، راههای زیادی برای بازنشانی بایوس وجود دارد، مخصوصاً اگر به سختافزار دسترسی دارید، و به هر حال به آن نیاز دارید، زیرا ما در مورد BIOS صحبت میکنیم و تا آنجا که من میدانم «دسترسی از راه دور» وجود ندارد.
در تئوری، شما می توانید آن را با برنامه های دیگر و نه تنها با تنظیم بایوس استفاده کنید، بلکه باید شرایط خاصی وجود داشته باشد، به عنوان مثال نرم افزار باید یکی از مواردی باشد که پس از چند تلاش ناموفق وارد کردن رمز عبور مسدود نمی شود.
همچنین یکی از محدودیتهای اصلی این است که نمیتوانیم کل فریم VGA را بخوانیم و آن را پردازش کنیم، در عوض یک پیکسل را از (کم و بیش) وسط صفحه میخوانیم و با توجه به رنگ آن مراحل مختلف را طی میکنیم. به عنوان مثال: یک پیکسل قرمز در وسط صفحه ممکن است نشان دهنده اشتباه بودن رمز عبور در تنظیمات بایوس معمولی باشد، در حالی که یک پیکسل آبی می تواند نشان دهد که برای دریافت رمز عبور بعدی آماده است.
شبیه ساز صفحه کلید USB
برای بخش صفحه کلید USB، من از V-USB برای کد آردوینو استفاده کرده ام، که به نوبه خود از کتابخانه V-USB استفاده می کند . برای اینکه «pde» کار کند، باید V-USB را برای آردوینو نصب کنید.
جریان
سپر آردوینو برای این پروژه بسیار ساده است، من یک ماژول LCD معمولی را متصل کرده ام تا خروجی داشته باشد تا از کامپیوتر دوم جلوگیری کنم تا پیشرفت یا نتیجه را ببینم.
چند دیود Zener برای ایجاد رابط صفحه کلید USB (این یکی از چهار گزینه پیشنهاد شده در V-USB Readme است، در اینجا پیوندی به پروژه دیگری وجود دارد که از این روش نیز استفاده می کند).
دکمه ای وجود دارد که برای توقف/ادامه حمله استفاده می شود. اگر دکمه را بیش از 2 ثانیه فشار دهید، حمله مجدداً تنظیم می شود.
VGA را بو کنید
برای دانستن رنگ پیکسل در وسط صفحه، باید سیگنال قرمز آنالوگ و همچنین پالس های همگام عمودی و افقی را بخوانیم تا بدانیم چه زمانی باید قرمز را بخوانیم. اولین تلاش استفاده از آردوینو attachInterrupt
برای گرفتن HSYNC و VSYNC بود، اما سربار باعث شد صفحه کلید USB کار نکند.
به نظر می رسد که ماکروهای ISR() و SIGNAL() در این مورد بهتر کار می کنند، بنابراین پالس VSYNC یک متغیر سراسری به نام را بازنشانی می کند h_line
در حالی که HSYNC آن را افزایش می دهد تا بداند فریم VGA در کدام خط کشیده شده است.
تابع ما waitWrongPassword
تجزیه و تحلیل پیکسل را انجام می دهد. چند ثانیه صبر می کند تا پیکسل قرمز ظاهر شود، و همچنان به شمارنده خط نگاه می کند، بنابراین وقتی در #238 قرار دارد (تقریباً وسط عمودی در وضوح 640×480) کمی تأخیر می کند تا وسط افقی را به دست آورد. زمان بندی، و ورودی آنالوگ را بخوانید.
برای جزئیات بیشتر: Brute force با آردوینو به بایوس حمله می کند