چطور و چرا پروگرامر ST-Link را هک کنیم؟

0
790
هک پروگرامر ST-Link
هک پروگرامر ST-Link

پروگرامر ST-Link یکی‌از اولین ابزارهای لازم جهت شروع‌کار باانواع میکروکنترلرهاست. امروزه میکروکنترلرهای ARM، یکی‌از محبوب‌ترین میکروکنترلرهای موجود در بازار پردازنده‌ها هستند. پردازنده ARM را می‌توان در اکثر دستگاه‌های الکترونیکی و هوشمند پیدا کرد. از تلفن‌های همراه تا سیستم‌های ناوبری هواپیما همه از ARM استفاده می‌کنند. اما واقعاً کدام قابلیت موجود در این پردازنده باعث چنین محبوبیتی شده‌است؟ اگر بخواهیم به‌صورت مختصر اشاره‌ای کنیم باید بگوییم که “توان مصرفی پایین درمقابل سرعت‌و قابلیت” از عمده‌ترین دلایل محبوبیت این پردازنده است. پردازنده ARM، کم‌کم وارد بازار میکروکنترلرها نیز شده؛ تاجایی‌که خانواده Cortex-M به‌صورت اختصاصی برای این بازار تهیه‌و طراحی شده‌است. شرکت‌های مختلفی با تهیه مجوزِ تولید این محصول، میکروکنترلر خود را مبتنی‌بر پردازنده ARM تولید کرده‌اند. شرکت‌های بزرگی چون TI یا NXP یا ST و … همه و همه در محصولات خود از پردازنده ARM بهره گرفته‌اند. باتوجه‌به استانداردسازی هسته میکروکنترلرها توسط شرکت ARM، تقریباً می‌توان گفت که اکثر میکروکنترلرهای تولیدشده، از یک واسط استاندارد برای برنامه‌ریزی و پروگرام‌شدن استفاده می‌کنند که در این‌مورد رابط موردنظر، SWD است. شرکت‌های مختلف، ابزار منحصربه‌فرد خود را برای پروگرام و خطایابی عرضه کرده‌اند. شرکت ST که تولیدکننده میکروکنترلرهای پرطرف‌دار STM32 (حداقل درون ایران) است نیز ابزار انحصاری خود را که ST-Link نامیده می‌شود، برای پروگرام کردن و خطایابی میکروکنترلرها عرضه کرده است.

 

ST-Link چست؟

ST-Link
ST-Link

 

همان‌طورکه توضیح دادیم ST-Link نوعی پروگرامر است که توسط شرکت ST طراحی‌و عرضه‌شده‌است. این پروگرامر واسط‌های SWD و JTag و هم‌چنین SWIM را برای برنامه‌ریزی میکروکنترلرهای ۸بیتی این شرکت (یعنی STM8) دارد. از رابط‌های SWD و Jtag می‌توان برای پروگرام‌کردن میکروکنترلرهای این شرکت که مبتنی‌بر هسته ARM هستند (یعنی STM32) استفاده‌کرد. این پروگرامر داری قیمت مناسبی است که درمقایسه‌با پروگرامر J-Link بسیار ناچیز است. البته باید این نکته را درنظرداشت که پروگرامر St-Link تنها قادربه برنامه‌ریزی میکروکنترلرهای STM32 و STM8 است درحالی‌که پروگرامر J-Link قادربه پشتیبانی بیشتر میکروکنترلرهای ARM از شرکت‌های مختلف است.

چرا باید پروگرامر ST-Link را هک کنیم؟

ممکن‌است بپرسید که چرا باید ST-Link را هک کنیم؟ به این سؤال جواب‌های گوناگونی از زاویه نگاه‌های مختلف می‌توان داد. شاید قانع‌کننده‌ترین جواب، مقوله امنیت باشد. فرض‌کنید ماه‌ها یا شاید سال‌ها را صرف توسعه یک محصول کرده‌باشید؛ اگر نکات امنیتی لازم را درخصوص ارتقاء firmware و سخت‌افزار رعایت نکرده‌باشید، قادربه حفاظت از محصول خود نخواهیدبود. همان‌طورکه این پروگرامر به‌صورت گسترده کپی شد و درحال‌حاضر قیمت تهیه یک St-Link کلون، بسیارکمتر از نسخه اصلی است. شاید این مسئله (هک شدن یکی‌از ابزارهای اساسی) برای شرکتی به بزرگی St که تمرکز خود را برروی تولید چیپ گذاشته‌است، چندان هم بد نباشد ولی برای شرکتی که کارش تولید پروگرامر است، این می‌تواند فاجعه‌ای باشد که حتی باعث ورشکست‌شدن آن شرکت نیز بشود. ممکن‌است بپرسید درحال حاضر که فایل هگز پروگرامر St-Link موجود است، چرا باید بخواهیم آن را هک کنیم؟ درجواب می‌توان گفت حالتی را فرض‌کنید که فایل‌های مربوطه وجود نداشته‌باشند. یعنی‌اینکه برای اولین‌بار چطور این پروگرامر هک شده‌است؟ و یا اینکه فرض‌کنید شما قصددارید که بااستفاده‌از سخت‌افزار این پروگرامر، فریمورک مختص خود را ایجاد کنید و این امکان را به کاربرها بدهید که بااستفاده‌از امکانِ خود پروگرامر (بوت لودر) firmware موردنظر شما را روی آن برنامه‌ریزی کنند. این بحث، نیازبه درک نحوه برقراری ارتباط بین بوت لودر و نرم‌افزار آپدیتر دارد.

تئوری هک پروگرامر St-Link

برای هک هر سیستمی لازم‌است از عملکرد آن آگاهی داشته‌باشیم تا بتوانیم با پیمودن مسیر موردنظر به مقصد برسیم. در این مقاله منظوراز هک در واقع خواندن firmware پروگرامر ST-Link است. برای این کار چندین راه وجود دارد که گام‌به‌گام هرکدام را بررسی می‌کنیم. اولین نکته‌ای که باید به آن توجه‌داشته‌باشیم این‌است که پروگرامر St-Link قادر است ازطریق بوت لودر و پورت USB به‌روزرسانی شود.

راه‌های ممکن برای خواندن فایل هگز:

  1. خواندن آی‌سی پروگرامر از طریق یک پروگرامر دیگر
  2. هک از طریق SWD
  3. احتمالاً نرم‌افزار بروزرسانی باید حاوی فایل موردنظر جهت به‌روزرسانی پروگرامر باشد
  4. رصد کردن اطلاعات تبادل‌شده بین کامپیوتر و پروگرامر هنگام به‌روزرسانی در این مقاله و مقاله بعد به‌بررسی و تست این ۴راه خواهیم پرداخت.

1. خواندن آی‌سی پروگرامر ازطریق یک پروگرامر دیگر

خواندن مستقیم آی‌سی بااستفاده‌از یک پروگرامر دیگر ایده خوبی است. اگر در این مرحله موفق شویم که آی‌سی را بخوانیم، بدون کمترین درگیری موفق شده‌ایم که هک موردنظر را انجام دهیم؛ اما باید توجه‌داشته‌باشیم درحال‌حاضر  همه تولیدکنندگان میکروکنترلر مورداستفاده را قفل می‌کنند و خواندن مستقیم آن ممکن نیست. البته برای اطمینان، ما تست کردیم و همان‌طورکه حدس می‌زدیم، آی‌سی قفل بود.

2.هک از طریق SWD

هک از طریق SWD
هک از طریق SWD

 

همان‌طورکه قبلاً هم اشاره‌کردیم، تمام پردازنده‌های ARM سری Cortex-M دارای این درگاه هستند. این درگاه درواقع یک رابط استاندارد است که اجازه دسترسی مستقیم را به رجیسترها و حافظه‌ها می‌دهد. اما چطور می‌توان بااستفاده‌از این درگاه میکروکنترلر را هک کرد؟

خب ایده اولیه بسیارساده است: وقتی‌که حافظه را قفل می‌کنیم (آنرا درمقابل خوانده‌شدن محافظت می‌کنیم) یعنی ارتباط درگاه SWD را با حافظه Flash قطع می‌کنیم: اما این تنها بخشی‌از حافظه دردسترس است. ما می‌توانیم برنامه‌ای بنویسیم که از آدرس 0x8000000 (آدرس شروع حافظه فلش در خانواده STM) را به‌طول موردنظر بخواند و ازطریق پورت سریال ارسال کند. بله خیلی زیرکانه است، اما برنامه فوق را چطور و کجا ذخیره و اجرا کنیم؟ به‌دلیل معماری ARM، این پردازنده قادر است برنامه کاربر را، هم از روی Flash و هم از روی RAM اجرا کند. از آنجایی‌که حافظه Flash قفل شده‌است و دردسترس نیست، تنها یکجا می‌ماند و آن‌هم حافظه RAM است؛ یعنی باید برنامه را به‌نحوی بنویسیم که قادر‌باشد از آدرس 0x2000000 (آدرس شروع حافظه RAM) اجرا‌شود. برای اینکار باید دونکته را مدنظر داشته‌باشیم: اول اینکه آدرس اجرای برنامه را هنگام کامپایل برنامه تغییر دهیم و دوم، آدرس جدول وقفه‌ها را جابجا کنیم؛ این قابلیتی‌است که میکروکنترلرهای ARM آنرا دارند. پس سناریوی کلی مشخص شد: نوشتن برنامه‌ای که حافظه Flash را بخواند و محتوای آنرا ازطریق Uart ارسال‌کند. بعداز آن بااستفاده‌از رابط SWD برنامه را به حافظه RAM میکروکنترلر منتقل می‌کنیم و PC برنامه را به آدرس دلخواه برای اجرا انتقال میدهیم. به‌همین‌راحتی! تمام این اتفاقات در‌صورتی انجام خواهدشد که بتوانیم ازطریق SWD به حافظه‌های میکروکنترلر دسترسی داشته‌باشیم که متأسفانه امکان اتصال نبود. یعنی علاوه‌بر قفل‌بودن حافظه Flash، رایط SWD نیز غیرفعال شده‌بود.
پس دقت‌کنید برای محافظت بیشتر، علاوه‌بر قفل‌کردن فلش میکروکنترلر، رابط SWD را نیز از کار بیندازید.

تا اینجای مقاله، دو نظریه را بررسی کردیم که هردو با درهای بسته مواجه شدند؛ اما هنوز دو نظریه دیگر وجود دارد که در مقاله بعدی به آن‌ها خواهیم پرداخت. پس با سیسوگ همراه باشید؛ اتفاقات هیجان‌انگیزی در حال وقوع است.

 

 

 

منبع: سیسوگ

مطلب قبلیآموزش میکروکنترلر STM32 قسمت دوم: نرم‌افزار Keil
مطلب بعدیقسمت سوم: کامپایلر و پروگرامر

پاسخ دهید

لطفا نظر خود را وارد کنید!
لطفا نام خود را در اینجا وارد کنید