محافظت از خواندن برنامه در میکروکنترلرهای STM32

0
48
محافظت از خواندن برنامه در میکروکنترلرهای STM32
محافظت از خواندن برنامه در میکروکنترلرهای STM32

قبلاً از اینکه میکروکنترلرهای ARM عمده بازار میکروکنترلر ایران را به‌دست بگیرند، میکروکنترلرهای AVR برای کار مرسوم‌تر بودند و در صنعت بیشتر از آن‌ها استفاده می‌شد. این مقدمه را به این جهت گفتم که ابتدا بهصورت مختصر بگویم که محافظت از برنامه در میکروکنترلرهای AVR چگونه میسر بود، سپس این موضوع را با چند روش مختلف در میکروکنترلرهای STM32 توضیح بدهم.

 

محافظت از برنامه 

در نظر بگیرید که برنامه‌ای نوشتید و بنا به دلایلی مثل تجاری بودن محصول یا الگوریتم خاصی که دوست ندارید فاش شود، نمی‌خواهید که کسی بتواند کد برنامه شما را از میکروکنترلر بخواند، آیا این امکان وجود دارد؟ بله.

سازندگان میکروکنترلرها راه‌های متفاوتی با دسترسی‌های مختلف برای این کار پیش روی ما گذاشته‌اند و ما بسته به نیاز
می‌توانیم از این راه‌ها استفاده کنیم.

اگر با میکروکنترلرهای AVR کارکرده باشید می‌دانید که قبل از برنامه‌ریزی باید فیوز بیت‌ها را تنظیم کنید و با توجه به این تنظیمات میکروکنترلر پروگرام می‌شود. همچنین با استفاده از همین فیوزبیت‌ها می‌توانیم تنظیماتی را انجام بدهیم که دیگر نتوان برنامه را از میکروکنترلر خواند.

در میکروکنترلرهای STM32 هم با استفاده از نرم‌افزار STM32 ST-LINK Utility و پروگرامر ST_LINK می‌توان تنظیماتی را انجام داد که برنامه دیگر قابل خواندن نباشد.

برای این کار ابتدا وارد نرم‌افزار شوید و پسازاینکه پروگرامر و چیپ موردنظر شناسایی شد، همانند تصویر زیر از منوی Target گزینه‌ی Option Bytes را انتخاب کنید.

STM32 ST-LINK Utility

پس از کلیک بر روی این گزینه با صفحه‌ی زیر مواجه می‌شوید:

Read Out Protection
Read Out Protection
همان‌طور که در تصویر مشاهده می‌کنید می‌توانید Read Out Protection را فعال کنید تا دیگر برنامه قابلخواندن نباشد، همچنین می‌توانید سکتورهایی را هم غیرقابلنوشتن کنید.
ما Read Out Protection را فعال کردیم تا برنامه قابلخواندن نباشد و 4K از حافظه را نیز غیرقابلنوشتن کردیم. در میکروکنترلری که ما از آن استفاده می‌کنیم (F103C8T6) حداقل مقدار انتخابی 4K خواهد بود که این مورد در انواع میکروکنترلرها متفاوت است.
Read Out Protection
حال اگر شما قصد داشته باشید که برنامه را بخوانید یا در سکتورهایی که علامت زدیم بنویسید با خطا مواجه خواهید شد.
شما این پروسه را در کد برنامه هم می‌توانید اعمال کنید که در این صورت از انعطاف بیشتری نیز برخوردار می‌شوید. حالت‌های مختلفی برای محافظت از کد شما در میکروکنترلرهای STM32 در نظر گرفتهشده است که در ادامه به آن‌ها اشاره می‌کنیم و سپس هرکدام از آن‌ها را مفصلاً توضیح می‌دهیم.
  • محافظت در برابر عملیات خواندن (RDP)
  • محافظت در برابر عملیات نوشتن یا پاک کردن ناخواسته
  • محافظت در برابر عملیات خواندن و نوشتن (PCROP)

 

RDP

این نوع محافظت‌ها باعث می‌شود که کپی کردن فریم‌ور از طریق مهندسی معکوس با استفاده از ابزارهای دیباگ یا راه‌های دیگر غیرممکن باشد و حالت‌های زیر برای آن وجود دارد:

 

no readouy protection

به طور پیش‌فرض این سطح فعال می‌باشد و حافظه FLASH کاملا باز است و تمامی عملیات قابل انجام بر روی حافظه در دسترس است. در این حالت هیچ نوع حفاظتی وجود ندارد و این حالت برای توسعه و دیباگ در نظر گرفته شده است.

 

memory readout protection

در این حالت هیچ دسترسی اعم از خواندن، پاک کردن و برنامه‌ریزی یا نوشتن به حافظه FLASH یا backup SRAM از طریق امکانات دیباگ مانند Serial Wire یا JTAG وجود ندارد. این امکان حتی هنگام بوت شدن از طریق SRAM یا بوت‌لودر سیستم نیز وجود ندارد. اما هنگام بوت شدن از حافظه FLASH می‌توانید به این حافظه دسترسی پیدا کنید و backup SRAM از کد کاربر مجاز است. هرگونه درخواست دسترسی به حافظه‌ی FLASH محافظتشده یک خطای بأس را به دنبال خواهد داشت. همچنین برای غیرفعال کردن این سطح با دوباره برنامه‌ریزی کردن بایت RDP می‌توانید به سطح 0 بازگردید.

chip readout protection

هنگامیکه سطح 2 فعال است، تمامی محافظت‌های ارائهشده در سطح 1 فعال می‌باشد و چیپ کاملاً محافظتشده است. در این سطح بایت RDP و همه‌ی گزینه‌های مرتبط با این بسته خواهند شد و قابل اصلاح نخواهند بود. همچنین برگشت از این سطح به سطح 1 یا 0 غیرممکن خواهد بود.
منبع : سیسوگ
مطلب قبلیامبدد لینوکس قسمت هفدهم – Linux Kernel (بخش اول)
مطلب بعدیآموزش STM32 با توابع HAL قسمت پنجم: GPIO Input & Output

پاسخ دهید

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