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

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

محافظت از خواندن برنامه در میکروکنترلرهای 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 نفر

پــــســنــدیـده انـد

توجه

دیدگاه ها

1 دیدگاه

پر بحث ترین ها

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه اول سیسوگ (مسابقه اول: درک سخت افزار) انتقادهای زیادی رو در پی داشت تا جایی که حتی خودمم به نتیجه مسابقه...

Zeus ‌ Zeus ‌
  • 3 سال پیش
راه اندازی LCD گرافیکی Nokia 1661

راه اندازی LCD گرافیکی Nokia 1661

LCD گرافیکی یکی از مهم ترین پارامترهای موجود در طراحی انواع مدارات الکترونیکی پیچیده و حتی ساده است ، نمایش وضعیت و...

Zeus ‌ Zeus ‌
  • 4 سال پیش
ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

ریموت کنترل امروزه کاربرد زیادی پیدا کرده است؛ از ریموت‌های درب بازکن تا ریموت‌های دزدگیر و کنترل روشنایی همه از یک اصول اولیه پیروی می‌کنند و آن‌هم ارسال اطلاعات به‌صورت بی‌سیم است....

Zeus ‌ Zeus ‌
  • 5 سال پیش
همه چیز درباره ریموت کنترل‌های هاپینگ

همه چیز درباره ریموت کنترل‌های هاپینگ

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

Zeus ‌ Zeus ‌
  • 5 سال پیش
مسابقه سوم: استخراج داده از رشته ها در زبان C

مسابقه سوم: استخراج داده از رشته ها در زبان C

نزدیک به 5 ماه از مسابقه دوم سیسوگ می‌گذره و فکر کردم که بد نیست یک چالش جدید داشته باشیم! البته چالش‌ها...

Zeus ‌ Zeus ‌
  • 2 سال پیش
مسابقه ششم: بزن میکروکنترلر را بسوزون!

مسابقه ششم: بزن میکروکنترلر را بسوزون!

بزنم میکروکنترلر را بسوزونم اونم تو  این شرایط!، طراحی مسابقه از اون چیزی که به نظر می‌رسه سخت‌تر است، باید حواست باشه...

Zeus ‌ Zeus ‌
  • 12 ماه پیش
آموزش قدم به قدم راه اندازی NRF24L01

آموزش قدم به قدم راه اندازی NRF24L01

آموزش قدم به قدم راه اندازی +NRF24L01  با کتابخانه سازگار با انواع میکروکنترلرها و کامپایلرها قبل از اینکه قسمت بشه با ماژول...

رسول خواجوی بجستانی رسول خواجوی بجستانی
  • 3 سال پیش
ساخت ماینر با FPGA و ARM

ساخت ماینر با FPGA و ARM

چند ماهی هست که تب بیت کوین و ارزهای دیجیتال خیلی بالا رفته! چه شد که این پست را نوشتم همانطور که...

Zeus ‌ Zeus ‌
  • 3 سال پیش
کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

در قسمت اول به یکسری اطلاعات کلی ماژول mc60 پرداختیم، با نرم افزار QNavigator کار کردیم و یک هدربرد هم برای کار...

Mahdi.h   Mahdi.h  
  • 3 سال پیش
مسابقه چهارم: کدام حلقه سریع‌تر است؟

مسابقه چهارم: کدام حلقه سریع‌تر است؟

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

Zeus ‌ Zeus ‌
  • 2 سال پیش
سیـــســـوگ

مرجع متن باز آموزش الکترونیک