توصیه شده, مقاله های سیسوگ

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

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

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

 

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

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

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

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

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

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

نرم افزار STLINK

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

نرم افزار STLINK

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

نرم افزار STLINK

حال اگر شما قصد داشته باشید که برنامه را بخوانید یا در سکتورهایی که علامت زدیم بنویسید با خطا مواجه خواهید شد. 
شما این پروسه را در کد برنامه هم می‌توانید اعمال کنید که در این صورت از انعطاف بیشتری نیز برخوردار می‌شوید. حالت‌های مختلفی برای محافظت از کد شما در میکروکنترلرهای 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 غیرممکن خواهد بود.
 

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

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

  1. Avatar for محمد محمد گفت:

    سلام با j link امکان قفل کردن وجود دارد ؟ اگر دارد چطور ؟
    با تشکر

  2. Avatar photo محمدرضا عابدینی گفت:

    سلام بسیار ممنون مقاله مفیدی بود
    ایا مقاله قسمت دوم داره ؟
    “شما این پروسه را در کد برنامه هم می‌توانید اعمال کنید که در این صورت از انعطاف بیشتری نیز برخوردار می‌شوید”
    متوجه جمله بالا نشدم ایا بااستفاده از مکانیزمی uid منظورتونه؟

    1. Avatar for Zeus ‌ Zeus ‌ گفت:

      سلام دوست عزیز
      نه متاسفانه نویسنده ادامه نداده
      اون پاراگراف داره میگه شما میتونید توی برنامه میکروکنترلر موارد امنیتی رو نیز اوکی کنید. صرفا UID نیست

  3. Avatar for فرشاد اکرمی فرشاد اکرمی گفت:

    ممنون بابت مطلب
    فک کنم Read protection روب رای همه گزینه ها نوشتید
    باید تصحیح بشه

  4. Avatar for meyticom meyticom گفت:

    سلام
    خیلی ممنون از توضیحات خوبت

    سه عنوان محافظت در متن اشتباه شده

    1. Avatar for elahe elahe گفت:

      منظورتون رو متوجه نشدم میشه بیشتر توضیح بدین کجا اشتباهه؟

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *