در قسمت قبلی آموزش هک پروگرامر ST-Link چهار ایده را برای انجام این هک مطرح کردیم؛ دو روش نخست که در واقع از ابتداییترین روشها هستند را بررسی کردیم که متأسفانه یا خوشبختانه، هیچکدام نتیجه نداد. اگر قسمت اول مقاله را مطالعه نکردهاید توصیه میکنیم که پیش از خواندن این مقاله، قسمت پیشین را حتماً بخوانید.
در این قسمت از مقاله سعی داریم با استفاده از بوت لودر نشان دهیم که چطور میتوان به firmware دست پیدا کرد. با سیسوگ همراه باشید.
چرا نفوذ به بوت لودر؟
اگر به خاطر داشته باشید دو ایدهی باقیمانده جهت هک که بررسی نشدند، عبارتاند از:
1 – احتمالاً نرمافزار بهروزرسانی باید حاوی فایل موردنظر جهت بهروزرسانی پروگرامر باشد.
2 – رصد کردن اطلاعات تبادل شده بین کامپیوتر و پروگرامر هنگام بهروزرسانی
با کمی دقت در این دو روش، متوجه میشویم که هر دو روش در واقع مربوط به قسمت بوت لودر هستند. اول باید بررسی کنیم و ببینیم آیا نرمافزاری که جهت بهروزرسانی پروگرامر ST-Link توسط شرکت ST ارائه شده است، تا چه اندازه میتواند ما را به هدف، یعنی هک ST-Link کمک کند.
اما بوت لودر چیست؟
ممکن است برایتان سؤال شده باشد که بوت لودر چیست و چهکاری انجام میدهد. بوت لودر در واقع یک برنامه است که بر روی حافظه میکروکنترلر پروگرام میشود. این برنامه ممکن است توسط هرکسی نوشته شده باشد و اینطور نیست که حتماً از طریق شرکت سازنده چیپ ارائه شده باشد. بوت لودر نقش حیاتی در بهروزرسانی و ارتقاء یک محصول بازی میکند؛ چراکه به تولیدکننده این امکان را میدهد که از راه دور و از طریق مصرفکننده firmware محصول بهروزرسانی شود.
فرض کنید شما محصولی را تولید کرده باشید و به تعداد زیاد در بازار به فروش رسانده باشید. پس از گذشت مدتی مشخص میشود که در شرایطی خاص، دستگاه موردنظر عملکرد مورد انتظار را ندارد (مثلاً وجود باگ). اولین گام، رفع باگ موردنظر است و در گام دوم دستگاههای فروختهشده باید بهروزرسانی شوند. درصورتیکه فرض کنیم بوت لودر وجود نداشته باشد، شما باید تمام دستگاهها را فراخوانی کنید یا خود در محل نصب دستگاه حاضر شوید و دستگاهها را با استفاده از پروگرامر آپدیت کنید.
اما فرض کنید که بوت لودر داشته باشید، firmware را در اختیار خریداران میگذارید و کاربران با استفاده از یک رابط استاندارد مثل USB، دستگاه خود را آپدیت میکنند. همانطور که حدس میزنید امروزه بیشتر دستگاههای الکترونیکی مانند گوشیهای هوشمند، تلویزیونهای هوشمند، سینمای خانگی و … بوت لودر دارند.
بوت لودر پروگرامر ST-Link چطور کار میکند؟
حال که با مفهوم بوت لودر آشنا شدیم قبل از نفوذ به بوت لودر باید بررسی کنیم که بوت لودر ST-Link چطور کار میکند و از چه بستری برای انتقال اطلاعات استفاده میکند. ممکن است سریع پاسخ دهید که از USB، بله اما منظور سختافزارِ کانکشن نیست، منظور لایههای نرمافزاری است. همانطور که میدانید رابط USB بسته به تنظیماتی که روی آن اعمال میشود قادر به پشتیبانی استانداردهای مختلفی نظیر CDC ، HID ، Bulk و … است. قبل از هر اقدامی لازم است بررسی کنیم که بوت لودر از چه لایه نرمافزاری استفاده میکند.
برای بررسی این موضوع کافی ست که به درایورهای ST-Link نگاه کنیم. لینوکس که تقریباً نیازی به درایور ندارد ولی میتوانیم فایلهای درایور ویندوز مخصوص پروگرامر ST-Link که توسط سایت ST منتشر شده است را بررسی کنیم.
بعد از دانلود و باز کردن فایل درایور، دو فایل مشخصشده، سرنخهای خوبی را در اختیار ما میگذارند. فایل stlink_VCP.inf که در واقع رابط پورت USB به سریال است مشخص میکند که احتمالاً یک سری ST-Link وجود دارد که دارای پورت سریال نیز هستند اما چه دستگاههایی؟ با دقت به بخش زیر از فایل درمییابیم که حداقل 4 مدل ST-Link وجود دارد که داری مبدل سریال نیز هستند:
1 2 3 4 5 6 7 | %DeviceNameVCP% =USB_InstallVCP, USB\VID_0483&PID_374A&MI_02 %DeviceNameVCP% =USB_InstallVCP, USB\VID_0483&PID_374B&MI_02 %DeviceNameVCP% =USB_InstallVCP, USB\VID_0483&PID_374E&MI_02 %DeviceNameVCP% =USB_InstallVCP, USB\VID_0483&PID_374F&MI_02 |
پس تا اینجا میدانیم که حداقل 4 firmware مجزا برای پروگرامر ST-Link وجود دارد که همه 4 مدل مختلف دارای مبدل USB به سریال نیز هستند. واضح است که احتمالاً باید انواع بیشتری firmware وجود داشته باشد؛ چراکه مدلهای موجود از پروگرامر ST-Link در بازار ایران، دارای این مبدل نیستند. پس به سراغ فایل دوم یعنی stlink_dbg_winusb.inf که شامل اینترفیسهای زیر است میرویم:
1 2 3 4 5 6 7 8 9 10 11 12 13 | %DeviceName% =USB_Install, USB\VID_0483&PID_3748 %DeviceName% =USB_Install, USB\VID_0483&PID_374A&MI_00 %DeviceName% =USB_Install, USB\VID_0483&PID_374B&MI_00 %DeviceName% =USB_Install, USB\VID_0483&PID_374E&MI_00 %DeviceName% =USB_Install, USB\VID_0483&PID_374F&MI_00 %DeviceNameRW% =USB_InstallRW, USB\VID_0483&PID_374A&MI_01 %DeviceNameUsbLoader% =USB_Install, USB\VID_0483&PID_374D |
این درایور شامل هفت اینترفیس مختلف است که تنها درایور اول، دارای حالت مولتی اینترفیس نیست که به احتمال زیاد مربوط به پروگرامرهای رایج بازار ایران است.
خوشبختانه تنها یک اینترفیس برای حالت بوت لودر وجود دارد که در لیست فوق به شکل زیر مشخص شده است:
1 | %DeviceNameUsbLoader% =USB_Install, USB\VID_0483&PID_374D |
تمام حالتهای توصیفشده در فایل درایور، احتمالاً در حالت Bulk تعریف شدهاند. کلاس Bulk، در واقع از استاندارد تعریفشدهای پشتیبانی نمیکند و برنامه کامپیوتری باید بهصورت مستقیم با اندپویتهای تعریفشده در ارتباط باشد. البته احتمالاً باید از دستورات DFU برای بوت لودر استفاده شده باشد.
بررسی نرمافزار آپدیتر پروگرامر ST-Link
گام بعدی برای شناخت نحوه کار کردن بوت لودر و در ادامه هک پروگرامر ST-Link، بررسی نرمافزار آپدیتر این پروگرامر است که توسط شرکت ST برای بهروزرسانی پروگرامر ارائه شده است. برای دانلود آخرین نسخه از نرمافزار ST-Link میتوانید به این آدرس مراجعه کنید.
خوشبختانه شرکت ST این نرمافزار را در دو ورژن ویندوز و مولتی پلتفرم ارائه کرده است. نرمافزار ارائهشده برای مولتی پلتفرم با جاوا نوشته شده است و این جای بسی خوشحالی است چراکه همانطور که میدانید جاوا یک زبان میانی است و کد در واقع به معنای واقعی کامپایل نمیشود و با صرف مقداری وقت میتوان سورسهای اولیه را استخراج کرد.
بعد از باز کردن نرمافزار، فایلهای زیر توجه ما را به خود جلب میکنند:
نامگذاری و فرمت مورد استفاده به خوبی مشخص میکند که این فایلها، احتمالاً firmware جدید هستند. از قبل هم میدانیم که احتمالاً چند مدل ST-Link مختلف باید وجود داشته باشد که وجود این فایلها نظریه را تأیید میکند. البته خیلی بعید است که به این راحتی توانسته باشیم فایل firmware پروگرامر را پیدا کرده باشیم.
یکی از احتمالات قوی این است که فایلهای مذکور کدگذاری شده باشند؛ چراکه معمولاً شرکتهای بزرگ و حرفهای نکات امنیتی را در محصولات خود لحاظ میکنند و دور از ذهن است که فایلهای موردنظر به شکل بدون کدگذاری در درون برنامه قرار گرفته باشد.
خب از کجا میتوانیم متوجه شویم که فایلهای مذکور کدگذاری شدهاند یا خیر؟ یکی از شیوههای متداول بررسی پراکندگی داده است: در یک فایل firmware معمولاً تعداد صفر زیادی وجود دارد یا بایت کدهای اسمبلی معمولاً کوچک هستند و بهندرت از عدد 192 بزرگتر میشوند. اما اگر فایل کد شده باشد، این الگو به هم خواهد ریخت و فراوانی تمام اعداد در حد یکسانی خواهد بود. پس با بررسی فراوانی بهراحتی میتوان متوجه شد که فایل مذکور کدگذاری شده است یا خیر.
همانطور که در تصویر فوق مشاهده میکنید، پراکندگی دادهها (تعداد صفرها، یکها، دوها … تا 255 ) در فایل firmware به نمایش گذاشته شده است. تقریباً تمام دادهها به تعداد یکسانی تکرار شدهاند. این بدان معناست که این فایل کدگذاری شده است و برای دسترسی به دادههای آن لازم است ابتدا قفل آن باز شود و دیکد شود.
در این مرحله دو سؤال اساسی مطرح میشود: اول اینکه دادهها بر اساس چه الگوریتمی کدگذاری شدهاند و دوم، از چه کلیدی برای رمزگذاری آن استفاده شده است؟
در پاسخ به سؤال اول باید بگوییم که خیلی پیچیده نیست؛ الگوریتمهایی که معمولاً برای کدگذاری دادهها در سیستمهای Embeded استفاده میشوند، زیاد نیستند و با توجه به الگوی پراکندگی و فاصله قلهها میتوان حدس زد که احتمالاً از نوع AES-128 باشد.
اما پیدا کردن کلید، شاید سختترین قسمت ممکن است. اگر به عکس محیط نرمافزار توجه کنید قسمتی است که نشان میدهد آخرین ورژن firmware چند است (یعنی نرمافزار پروگرامر شما را به چه ورژنی آپدیت خواهد کرد) مانند عکس زیر:
با توجه به این موضوع که این نرمافزار حاوی چند firmware است، احتمالاً باید ورژن را از firmware مربوطه خوانده و آن را نمایش دهد. در این صورت باید قبل از خواندن ورژن لازم خواهد بود که فایل را اول دیکد کند. برای این کار نیاز به کلید خواهد بود که احتمالاً کلید باید درون برنامه وجود داشته باشد.
در قسمت بعد نحوه دکامپایل و استخراج کلید و دیکد کردن firmware را بررسی خواهیم کرد. پس با سیسوگ همراه باشید.
از دست این جاوا که شرم و حیا نداره ?
مرسی بابت مطلب
سلام
دم شما گرم خیلی حرفه ای هستید
عشق میکنم این مطالب میخونم
🙂
خواهش میکنم دوست عزیز :))
اگه شما بوت لودر رو هک کردید من اسمم میزارم سیسوگ(مزاح بود)
🙂
خوب شواهدش هست – همین مقاله میتونید خودتون تست کنید
خیلی عالی بود…
به حق چیزای ندیده?
بی صبرانه منتظریم?
سلام دوست عزیز 🙂
قسمت بعدی منتشر شده است میتوانید در لینک زیر مطالعه کنید.
هک پروگرامر ST-Link: شکسن رمز و آپدیت برنامه
درود
در مورد هک پروگرامر stlink میشه کدها رو جوری تغییر داد که بشه یه lpc1788 رو از طریق swd پروگرم کرد یا نه ؟ آخه توی فروم های خارجی دیدم یکی با st link تونسته بود میکروی lpc رو هم پروگرم کنه
بله قطعا میشه ولی نه با هک فریمور St-Link ، در واقع با نوشتن فریمور جدید برای سخت افزار St-Link
منتظر باشید به زودی در سیسوگ از این بابت خبر خوبی رو منتشر خواهیم کرد 🙂 ، ابزاری واقعا کاربردی