راهنمای کامل و تخصصی باز کردن قفل میکروکنترلر و استخراج برنامه
میکروکنترلرها قلب بسیاری از دستگاههای الکترونیکی مدرن هستند و بخش اصلی عملکرد هر محصول الکترونیکی را شکل میدهند. در بسیاری از پروژهها، بهخصوص زمانی که دستگاهی خراب میشود، تولیدکننده دیگر در دسترس نیست، یا نیاز به توسعه نسخه جدیدی از یک محصول وجود دارد، نیاز به استخراج کد میکروکنترلر یا خواندن برنامه میکرو قفل شده به وجود میآید.
این فرآیند که در صنعت با عنوان باز کردن قفل میکروکنترلر شناخته میشود، شامل روشها و ابزارهایی است که به مهندسان امکان میدهد فایل هگز، فیوزبیتها و کد برنامه را از میکروکنترلر استخراج کنند.
اما مهم است بدانیم که این کار نیازمند دانش تخصصی، ابزارهای پیشرفته و تجربه عملی است؛ زیرا هر اشتباه میتواند باعث پاک شدن دائمی اطلاعات داخل میکرو شود.
در این مقاله قدمبهقدم و با زبانی دوستانه، به بررسی تمام جوانب موضوع میپردازیم:
از استخراج کد میکروکنترلر تا انتقال دوباره برنامه به میکرو و حتی کپی برنامه آیسیها و استخراج برنامه از بردهایی مثل آردوینو.
فهرست مطالب
باز کردن قفل میکروکنترلر چیست؟
روشهای استخراج کد میکروکنترلر
استخراج برنامه از میکروکنترلر — ابزارها و روشها
خواندن فایل هگز از میکرو و نحوه کار با آن
فیوزبیتهای قفل میکروکنترلر و نقش آنها در امنیت برنامه
استخراج برنامه از برد آردوینو – روشها، محدودیتها و نکات امنیتی
کپی کردن برنامه آیسی و انتقال آن به یک میکروکنترلر دیگر (Clone & Duplicate MCU Program)
جمعبندی نهایی: مسیر کامل باز کردن قفل میکروکنترلر و استخراج برنامه
باز کردن قفل میکروکنترلر به فرآیندی گفته میشود که طی آن مهندسان تلاش میکنند محدودیتهای امنیتی یک میکرو را دور بزنند تا بتوانند به برنامه داخلی آن دسترسی پیدا کنند. وقتی سازنده یا برنامهنویس میخواهد جلوی کپی برنامه آیسی یا برداشتن برنامه از روی میکرو را بگیرد، روی آن فیوزبیتها، پروتکشنها یا تنظیمات محافظتی قرار میدهد. نتیجه این میشود که:
نمیتوانیم خواندن برنامه میکرو قفل شده را انجام دهیم
فایل هگز قابل استخراج نیست
دیباگ کردن و برنامهریزی مجدد محدود میشود
حتی در برخی موارد، هر تلاش برای خواندن کد، باعث پاک شدن کامل حافظه فلش میشود
این سطح امنیت برای جلوگیری از مهندسی معکوس ضروری است، اما در بسیاری از پروژهها — مخصوصاً زمانی که برد خراب شده یا سازنده دیگر در دسترس نیست — نیاز داریم که استخراج کد میکروکنترلر را انجام دهیم تا عملکرد سیستم را بازیابی کنیم.
باز کردن قفل میکروکار سادهای نیست و معمولاً نیازمند:
ابزارهای سختافزاری مخصوص
نرمافزارهای تخصصی
تجربه عملی در کار با فیوزبیتها
آشنایی با معماری انواع میکروکنترلرها (AVR, PIC, ARM, STM32، 8051 و …)
اما در نهایت هدف اصلی، دسترسی به برنامه داخلی و بازیابی فایل هگز است.
استخراج برنامه از میکروکنترلر به روشهای مختلفی انجام میشود. بسته به مدل میکرو، نحوه قفل شدن، و ابزارهای موجود، یکی از این شیوهها انتخاب میشود:
۱. خواندن مستقیم فلش از طریق پروگرامر
سادهترین روش در میکروهایی که قفل نیستند.
با استفاده از پروگرامرهایی مثل:
TL866
Pickit
ST-Link
AVR ISP
J-Link
میتوان بهطور مستقیم خواندن فایل هگز از میکرو را انجام داد.
2. دور زدن فیوزبیتهای قفل
در این روش تلاش میشود با بهرهگیری از آسیبپذیریها یا حملات سختافزاری، قفلها را دور زد.
این شامل تکنیکهایی مثل:
Voltage glitching
Clock glitching
Chip decapsulation
Laser fault injection
این روشها بیشتر در مراکز تخصصی انجام میشوند و برای کارهای صنعتی یا حساس کاربرد دارند.
3. استخراج کد از طریق پروتکلهای ارتباطی
گاهی برنامه امکان دارد از طریق:
UART
SPI
I2C
SWD
ارسال یا بازخوانی شود.
در این حالت برنامهنویس قفل را بهصورت کامل تنظیم نکرده و میتوان با شنود ارتباط، کپی برنامه آیسی را انجام داد.
4. استخراج برنامه از روی برد (In-Circuit Extraction)
گاهی برد اجازه جداسازی آیسی را نمیدهد.
در این مواقع از روشهای اتصال نقطهای (Pogo Pin)، پروگرامرهای JTAG/SWD و یا اتصال پایههای ISP روی برد استفاده میشود.
خواندن برنامه میکرو قفل شده
خواندن برنامه میکروکنترلری که قفل شده است، یکی از چالشبرانگیزترین بخشهای مهندسی معکوس در صنعت الکترونیک است. زمانی که یک میکرو توسط فیوزبیتها یا پروتکشنهای داخلی قفل میشود، امکان استخراج کد میکروکنترلر از طریق روشهای معمول پروگرامر وجود ندارد و معمولاً هنگام تلاش برای خواندن حافظه، پیغام خطا یا خروجی خالی (FFFF یا 0000) دریافت میکنیم.
اما واقعیت این است که قفل شدن دائماً به معنای غیرقابلخواندن بودن نیست. بسته به نوع میکروکنترلر، سطح قفل، و آسیبپذیریهای آن، روشهای مختلفی برای خواندن برنامه میکرو قفل شده وجود دارد.
در ادامه مهمترین روشها و نکات تخصصی این فرآیند را توضیح میدهیم.
چرا میکروکنترلر قفل میشود؟
قفل شدن میکروکنترلر با هدف جلوگیری از موارد زیر انجام میشود:
کپی شدن برنامه آیسی توسط رقبا
برداشتن برنامه از روی میکرو و استفاده در محصول مشابه
جلوگیری از مهندسی معکوس یک دستگاه
حفظ مالکیت فکری طراح اصلی
در میکروهای AVR، PIC، ARM و STM32 این قفلها معمولاً توسط تنظیمات مخصوصی روی حافظه و فیوز بیتها فعال میشوند.
روشهای تخصصی برای خواندن برنامه از میکرو قفل شده
۱. استفاده از ضعف امنیتی در مدلهای خاص میکروکنترلر
برخی از انواع AVR، PIC و حتی بعضی سریهای STM32 در گذشته دچار نقص امنیتی بودهاند. این نقصها اجازه میدهند با تکنیکهای خاص، حتی در صورت فعال بودن فیوزبیتها، استخراج برنامه میکروکنترلر انجام شود.
این روشها شامل:
تزریق خطای ولتاژ (Voltage Glitch Attack)
حمله فرکانس (Clock Fault Injection)
بهرهگیری از مسیرهای دیباگ ناقص
بازخوانی بیتهای فلش در شرایط خاص حرارتی یا ولتاژی
این روشها نیازمند تجهیزات پیشرفته و تجربه عملی هستند.
۲. استفاده از پروگرامرهای خاص برای دور زدن قفل
برخی از پروگرامرهای صنعتی قابلیتهایی دارند که پروگرامرهای معمولی مثل TL866 یا ST-Link ارائه نمیدهند. این پروگرامرها میتوانند در شرایط خاص، پروتکلهای سطح پایین را برای دسترسی غیرمجاز ولی فنی اجرا کنند.
در این روش بسته به معماری میکرو، امکان دارد بتوان:
فایل هگز را استخراج کرد
تنظیمات فیوزبیتها را خواند
حتی حافظه بخشبخش بازیابی شد
۳. تکنیک Chip-Off یا جداسازی تراشه
در برخی پروژهها، میکرو به صورت BGA یا SMD خاص روی برد نصب شده و روشهای معمول پاسخ نمیدهند.
در این حالت از روش Chip-Off استفاده میشود:
آیسی از روی برد جدا میشود
زیر میکروسکوپ تمیز میشود
به پروبهای مخصوص متصل میشود
سپس تلاش برای خواندن فایل هگز از میکرو انجام میشود
این روش معمولاً در بازیابی اطلاعات امنیتی و پروژههای حساس استفاده میشود.
۴. تکنیک Decapsulation (باز کردن بستهبندی آیسی)
در این روش پوسته پلاستیکی میکروکنترلر با مواد شیمیایی خاص حل میشود تا به سطح سیلیکون برسیم.
در ادامه با کمک لیزر یا پروبهای میکروسکوپی تلاش میشود:
فیوزبیتها پاک یا بیاثر شوند
قفل میکرو غیرفعال شود
برنامه داخلی بدون مشکل خوانده شود
این روش فوقالعاده تخصصی است و در مراکز پیشرفته انجام میشود.
ریسکهای خواندن برنامه میکرو قفل شده
اگر این کار توسط افراد کمتجربه انجام شود، احتمال دارد:
حافظه دائماً پاک شود
فیوزبیتها اشتباه تغییر کنند
آیسی آسیب ببیند
برد دستگاه کلاً غیرقابل تعمیر شود
به همین دلیل توصیه میشود عملیات باز کردن قفل میکروکنترلر را فقط افراد متخصص یا مراکز دارای تجهیزات مناسب انجام دهند.
استخراج برنامه از داخل یک میکروکنترلر (چه قفل شده و چه بدون قفل) یکی از مراحل کلیدی در تعمیرات پیشرفته، مهندسی معکوس، و بازطراحی بردهای الکترونیکی است. برای انجام این کار لازم است با ابزارهای سختافزاری و نرمافزاری مناسب آشنا باشیم، چون هر نوع میکروکنترلر معماری و پروتکل خاص خود را دارد.
در این بخش، به صورت کاملاً کاربردی و قابلاستفاده در پروژههای واقعی، تمام ابزارهای رایج، روشهای اتصال و تکنیکهای استخراج برنامه را مرور میکنیم.
ابزارهای لازم برای استخراج برنامه از میکروکنترلر
برای خواندن حافظه داخلی یک میکروکنترلر، معمولاً به یکی از دستههای زیر نیاز است:
پروگرامرهای عمومی (Universal Programmers)
این پروگرامرها برای خواندن، نوشتن و کپی کردن انواع آیسیها استفاده میشوند.
مناسب برای:
خواندن فایل هگز از میکرو
کپی برنامه آیسی
آیسیهای عمومی مثل 8051، EEPROM، AVR، PIC
از معروفترین نمونهها میتوان به موارد زیر اشاره کرد:
TL866-II Plus
RT809H
VP-998
Wellon series
این دستگاهها مناسب پروژههایی هستند که در آنها میکرو قفل نشده باشد یا امکان آیسیبرداری وجود داشته باشد.
پروگرامرهای اختصاصی معماریها
بسیاری از معماریها پروگرامرهای مخصوص خود را دارند که برای اتصال روی برد یا خارج از برد استفاده میشود.
نمونهها:
AVR ISP MkII یا USBasp → برای ATmega، ATtiny
Pickit 3 / 4 → برای PIC
ST-Link V2 → برای STM32
J-Link → برای ARM Cortex
ESP Programmer → برای ESP8266 / ESP32
این پروگرامرها امکانهای زیر را فراهم میکنند:
اتصال JTAG/SWD/ISP
برنامهریزی روی برد (ISP)
دیباگ و خواندن بخشهای آزاد حافظه
تلاش برای استخراج برنامه از میکروهای نیمهقفل
ابزارهای پیشرفته مهندسی معکوس
برای باز کردن قفل میکروکنترلر و استخراج اطلاعات از مدلهای سخت، ابزارهای حرفهای زیر استفاده میشوند:
ChipWhisperer
Segger Flasher
Proxmark Logic & Glitch Tools
و تجهیزات مخصوص Decapsulation مثل لیزر یا Acid Etching Tools
این ابزارها معمولاً در پروژههایی استفاده میشوند که میکرو کاملاً قفل شده است و روشهای معمول قابل استفاده نیست.
روشهای اتصال برای استخراج برنامه میکرو
۱. اتصال خارج از برد (Off-Board Programming)
در این روش آیسی از برد جدا میشود و مستقیماً به پروگرامر متصل میگردد.
این روش مناسب زمانی است که:
برد آسیب دیده
مسیرهای پروگرام روی برد قطع شده
یا یک روش تمیز و استاندارد میخواهیم
مزایا:
ریسک کمتر
دسترسی کامل به پایهها
امکان خواندن فایل هگز از میکرو بدون تداخل با دیگر بخشها
۲. اتصال روی برد (In-Circuit Programming / ISP)
در این روش، میکرو بدون جداسازی و در همان حالت روی برد برنامهریزی یا خوانده میشود.
اتصالات متداول:
ISP (برای AVR)
ICSP (برای PIC)
JTAG
SWD
UART Bootloader Mode
این روش زمانی کاربرد دارد که:
آیسی BGA باشد
جدا کردن آن ریسک آسیب داشته باشد
یا دستگاه باید پس از استخراج برنامه دوباره بدون تعمیرات ظاهری کار کند
۳. استخراج از طریق پروتکلهای ارتباطی
گاهی برنامهنویس مسیرهای امنیتی را کامل فعال نکرده است و میتوان از طریق پورتهای ارتباطی، اطلاعات را شنود یا دانلود کرد.
مثالها:
خواندن حافظه از طریق UART در بوتلودر
خواندن SPI Flash در میکروهای ARM
استفاده از I2C/SPI Sniffer
استخراج ROM در میکروهای قدیمی 8051
این روشها برای برداشتن برنامه از روی میکرو بدون درگیر شدن مستقیم با قفلهای سختافزاری بسیار کاربردی است.
استخراج برنامه از میکرو؛ مرحلهبهمرحله
۱. شناسایی معماری میکروکنترلر
(AVR/PIC/ARM/8051/ESP و …)
بررسی قفل بودن یا نبودن میکرو
از طریق پروگرامر یا دیتاشیت فیوزبیتها.انتخاب روش اتصال
روی برد
خارج از برد
پروتکل ارتباطی
روشهای حمله سختافزاری (برای موارد قفل)
تلاش برای خواندن فایل هگز
توسط ابزارهایی مثل TL866، Pickit، ST-Link، J-Linkتجزیه و تحلیل خروجیها
اگر فایل خالی یا FFFF بود → میکرو قفل است
اگر بخشی از داده برگشت → احتمال نیمهقفل یا آسیبدیدگی
استفاده از روشهای تخصصیتر در صورت نیاز
Glitching، decap، استفاده از پروگرامرهای صنعتی و …
چه نوع اطلاعاتی را میتوان استخراج کرد؟
با توجه به نوع معماری، معمولاً امکان استخراج موارد زیر وجود دارد:
فایل HEX کامل
تنظیمات فیوزبیتها
بخشهایی از EEPROM داخلی
دادههای SRAM در شرایط خاص
بوتلودر داخلی
کد برنامه اصلی
یکی از مهمترین مراحل در مهندسی معکوس و تعمیرات تخصصی، خواندن فایل هگز از میکروکنترلر است. فایل هگز (HEX) در واقع نسخهای قابلخواندن از محتوای حافظه فلش میکروکنترلر است؛ یعنی همان برنامهای که هنگام اجرای دستگاه در حال اجراست. این فایل معمولاً شامل کد ماشین، آدرسدهی حافظه و ساختار برنامهریزی است و پس از استخراج میتوان آن را در یک میکرو مشابه ریخت یا روی آن تحلیل انجام داد.
در این بخش به صورت کامل توضیح میدهیم که فایل هگز چیست، چگونه از میکرو استخراج میشود، چه نکاتی باید رعایت شود و پس از استخراج چگونه میتوان با آن کار کرد.
فایل HEX چیست و چه کاربردی دارد؟
فایل هگز یک فرمت متنی بر پایه اعداد هگزادسیمال است که اطلاعات حافظه میکروکنترلر را در قالب آدرسهای منظم ذخیره میکند. این فایل معمولاً شامل سه بخش اصلی است:
آدرسهای حافظه
دادههای واقعی برنامه
چکسام برای بررسی صحت دادهها
کاربردهای فایل هگز:
انتقال برنامه از یک میکرو به میکروی دیگر
تحلیل برنامه در مهندسی معکوس
استفاده در تعمیرات بردهای صنعتی
بازطراحی و نمونهسازی مجدد یک محصول
اگر هدف شما استخراج برنامه میکروکنترلر یا کپی برنامه آیسی باشد، فایل هگز اولین خروجی مهم این فرآیند است.
روشهای خواندن فایل هگز از میکرو
۱. استفاده از پروگرامرهای استاندارد
رایجترین روش، استفاده از پروگرامرهایی مانند:
TL866
ST-Link
Pickit
J-Link
USBasp
RT809H
این پروگرامرها معمولاً گزینهای با عنوان Read / Read Flash / Read Program Memory دارند که فایل هگز را مستقیماً استخراج میکند.
اگر میکرو قفل نباشد، این مرحله ساده و سریع انجام میشود.
۲. خواندن فایل هگز روی برد (In-Circuit)
در بسیاری از پروژهها امکان جدا کردن آیسی وجود ندارد، بنابراین فایل هگز از طریق:
ISP
ICSP
JTAG
SWD
SPI Programming
خوانده میشود.
در این روش باید مطمئن بود که روی برد مقاومت، خازن یا مسیرهای دیگر روی سیگنال خواندن تأثیر نگذارند.
۳. استخراج از میکروهای قفلشده
در صورت فعال بودن فیوزبیتهای قفل، خروجی هگز معمولاً مقادیر خالی (FFFF) خواهد بود.
اما در بسیاری از مدلها با استفاده از روشهای زیر امکان خواندن برنامه میکرو قفل شده وجود دارد:
Fault Injection
Glitch Attack
Decapsulation
استفاده از دستگاههای صنعتی استخراج کد
این روشها در مراکز تخصصی انجام میشود و برای پروژههایی ضروری است که سازنده در دسترس نیست یا برد ارزش بالایی دارد.
بررسی صحت فایل HEX پس از استخراج
بعد از ذخیره فایل هگز، چند نکته مهم باید بررسی شود:
حجم فایل
آیا با حجم حافظه فلش میکرو هماهنگ است؟باز شدن فایل در نرمافزارهای تحلیل
مثل HxD، Notepad++، یا نرمافزارهای پروگرامر.بررسی چکسام
بسیاری از پروگرامرها پس از خواندن، چکسام را نمایش میدهند.تست روی میکرو مشابه
برنامه روی یک میکروکنترلر مشابه ریخته میشود تا عملکرد بررسی شود.
فایل HEX را چگونه ویرایش یا تحلیل کنیم؟
پس از استخراج هگز، میتوان آن را با ابزارهای زیر تحلیل کرد:
Disassemblerها مثل IDA، Ghidra، AVR Studio
Hex Editorها برای بررسی دادهها
Simulators و Emulators برای اجرای کد بدون سختافزار
در تحلیل برنامهها، معمولاً اهداف زیر دنبال میشود:
یافتن توابع مهم
پیدا کردن الگوریتمها
بررسی جداول کالیبراسیون
استخراج اطلاعات ذخیرهشده در EEPROM
رایجترین مشکلات در استخراج فایل HEX
خروجی FFFF یا 0000: میکرو احتمالاً قفل است.
حافظه ناقص: برد مشکل دارد یا پروگرامر اتصال درست ندارد.
تداخل روی برد: مسیرهای دیگر باعث خواندن اشتباه دادهها میشوند.
فیوزبیتهای اشتباه: برنامهنویس اصلی محدودیتهای امنیتی اضافی فعال کرده است.
فیوزبیتها یکی از مهمترین اجزای امنیتی در میکروکنترلرها هستند که تعیین میکنند آیا اجازه خواندن، نوشتن یا دیباگ روی میکرو وجود دارد یا نه. این بخش بهعنوان خط دفاعی اصلی برای جلوگیری از استخراج کد میکروکنترلر، خواندن برنامه میکرو قفل شده و کپی برنامه آیسی عمل میکند.
اما درک دقیق آنها میتواند به شما کمک کند تا بفهمید یک میکرو چگونه قفل شده و چه محدودیتهایی دارد.
فیوزبیتها چه هستند؟
فیوزبیتها مجموعهای از تنظیمات سختافزاریاند که در حافظه داخلی میکرو ذخیره شدهاند. این بیتها:
قابلیت خواندن برنامه را محدود میکنند
امکان دیباگ را غیرفعال میکنند
سرعت و منبع کلاک را تعیین میکنند
حافظه بوتلودر را مدیریت میکنند
سطوح امنیتی مختلف را فعال میکنند
به طور ساده:
فیوزبیتها مانند کلیدهای تنظیماتی هستند که رفتار میکرو را از سطح امنیت تا نحوه اجرای برنامه کنترل میکنند.
انواع فیوزبیتها در میکروکنترلرها
۱. فیوزبیتهای امنیتی (Lock Bits)
این بیتها مشخص میکنند آیا اجازه خواندن یا کپی گرفتن از برنامه وجود دارد یا خیر.
برای مثال:
LB1 و LB2 در AVR:
حالت 0: آزاد
حالت 1: قفل خواندن
حالت 2: قفل کامل نوشتن و خواندن
RDP Level در STM32:
Level 0: بدون محدودیت
Level 1: جلوگیری از خواندن
Level 2: قفل دائمی غیرقابل بازگشت
۲. فیوزهای مربوط به بوتلودر
این فیوزها تعیین میکنند:
از بخش Boot اجرا شود یا از بخش اصلی برنامه
چه مقدار حافظه به Bootloader اختصاص پیدا کرده باشد
در پروژههایی که استخراج برنامه از برد آردوینو انجام میشود، این بخش اهمیت زیادی دارد.
۳. فیوزهای مربوط به کلاک و منابع تغذیه
برای تعیین:
کلاک داخلی یا خارجی
توان مصرفی
Brown-out detection
برنامهریزی سریع یا آرام
۴. فیوزهای مربوط به منابع جانبی (Peripherals)
مثل:
فعال یا غیرفعال کردن JTAG
فعالسازی SPI Programming
فعالسازی SWD در میکروهای ARM
غیرفعال شدن این موارد بهصورت مستقیم مانع استخراج برنامه میکروکنترلر میشود.
چگونه بفهمیم میکرو قفل است؟
در هنگام اتصال پروگرامر، معمولاً یکی از نتایج زیر ظاهر میشود:
مقادیر حافظه FFFF یا 0000 نمایش داده میشود → قفل خواندن فعال است
پروگرامر اجازه Read نمیدهد → امنیت سطح بالا فعال است
پروگرامر فقط مینویسد و نمیخواند → میکرو در حالت Write-Only است
شناسه دستگاه خوانده میشود ولی حافظه نه → Lock Bits فعالاند
بازکردن قفل میکروکنترلر با توجه به فیوزبیتها
باز کردن قفل میتواند بسته به مدل میکرو بسیار متفاوت باشد. چند روش کلی:
۱. Glitching یا حملات ولتاژی
با ایجاد اختلال لحظهای در تغذیه، میتوان فیوزبیتها را دور زد.
۲. Decapsulation و خواندن حافظه با میکروسکوپ الکترونی
روش صنعتی و بسیار پیشرفته برای تراشههای خاص.
۳. دسترسی به رابطهای غیرفعالشده با روشهای فیزیکی
مثلاً اگر JTAG غیرفعال شده باشد، در برخی مدلها امکان فعالسازی مجدد با اتصالهای Direct Pad وجود دارد.
۴. پشتیبانی دستگاههای تخصصی کپی آیسی
مثل RT809H، Xeltek، ChipProg و …
این دستگاهها گاهی روشهای اختصاصی برای عبور از فیوزبیتها دارند.
خطرات دستکاری فیوزبیتها
پاک شدن کامل برنامه
قفل دائمی و غیرقابل بازگشت
از کار افتادن میکرو
نداشتن امکان بازیابی پس از نوشتن اشتباه یک بیت
به همین دلیل هنگام کار با فیوزبیتها حتماً باید:
مدل دقیق میکرو
دیتاشیت
قابلیتهای امنیتی
نسخه پروگرامر
بهدرستی بررسی شود.
بردهای آردوینو بهدلیل ساختار ساده، فراوانی در پروژههای صنعتی کوچک، و استفاده گسترده در نمونهسازی، یکی از رایجترین بردهایی هستند که کاربران نیاز به استخراج برنامه از آنها پیدا میکنند.
در این بخش بهطور کامل توضیح میدهیم که آیا میتوان کد را از آردوینو خواند، چه محدودیتهایی وجود دارد و چه روشهایی در عمل استفاده میشود.
آیا میتوان برنامه آردوینو را استخراج کرد؟
پاسخ کوتاه:
در بیشتر موارد بله، اما بستگی به قفل بودن میکرو و نوع بوتلودر دارد.
میکروکنترلرهای روی بردهای آردوینو (مثل ATmega328P، ATmega2560 و …) معمولاً دارای سه بخش امنیتی هستند:
Lock Bits (فیوزبیتهای امنیتی)
Bootloader
حافظه برنامه (Flash)
اگر فیوزبیتهای قفل فعال نشده باشند، بهراحتی میتوان:
خواندن فایل هگز از میکرو
کپی برنامه آیسی
استخراج برنامه میکروکنترلر
را انجام داد.
اما اگر فیوزبیتهای قفل فعال باشند، آردوینو هم مانند هر میکروکنترلر قفلشده دیگر قابل خواندن نیست مگر با رویکردهای تخصصیتر.
ساختار امنیتی آردوینو چگونه است؟
1. بوتلودر آردوینو
Bootloader به آردوینو اجازه میدهد از طریق USB برنامهریزی شود.
این بخش معمولاً بدون قفل است، اما در برخی پروژهها ممکن است توسعهدهنده آن را تغییر داده یا قفل کرده باشد.
2. فیوزبیتهای قفل
سه سطح امنیتی در میکرو ATmega وجود دارد:
No Lock (بدون قفل) → قابل استخراج
Read-Only Lock (قفل خواندن) → امکان خواندن Flash وجود ندارد
Full Lock (قفل کامل) → امکان خواندن و نوشتن محدود میشود
اگر Lock فعال باشد، استخراج برنامه با روشهای معمولی ممکن نیست.
روشهای استخراج برنامه از آردوینو
روش ۱ – خواندن مستقیم با پروگرامر
اگر قفل نباشد:
USBasp
AVRISP
Atmel ICE
Xeltek و RT809H
بهراحتی حافظه Flash را میخوانند.
خروجی شامل:
فایل HEX
EEPROM
فیوزبیتها
این روش استانداردترین حالت استخراج برنامه میکروکنترلر است.
روش ۲ – استخراج از طریق Bootloader
در برخی موارد میتوان با ارسال دستورات مخصوص Bootloader،
بخش برنامه را بدون استفاده از پروگرامر خواند.
محدودیت: فقط در صورتی ممکن است که Bootloader اجازه Read داشته باشد.
روش ۳ – بازیابی از کش دستگاه یا نرمافزارهای توسعه
در سیستمهایی که نرمافزار توسعه قبلاً مستقیماً با آردوینو کار کرده، ممکن است نسخهای از HEX در:
Temp سیستم
پوشه build
کش Arduino IDE
یافت شود.
روش ۴ – روشهای پیشرفته برای آردوینوهای قفلشده
برای میکروهای قفلشده:
Glitching
Decapsulation
Fault Injection
استفاده از دستگاههای تخصصی Crack
ممکن است قابل اجرا باشد؛ اما نیازمند تخصص بالاست و خطر پاک شدن برنامه وجود دارد.
این بخش معمولاً در پروژههای صنعتی یا بردهای بدون سورس کاربرد دارد.
چگونه بفهمیم آردوینو قفل است؟
با اتصال پروگرامر:
اگر حافظه Flash فقط
0xFFیا0x00نشان دهد → قفلاگر دستور READ اجازه اجرا ندهد → قفل
اگر فقط اطلاعات Device ID نمایش داده شود → قفل
آیا امکان انتقال برنامه استخراجشده به یک میکرو دیگر وجود دارد؟
بله، در صورت موفق بودن استخراج:
میتوانید فایل HEX را روی میکرو دیگری پروگرام کنید
یا کل پکیج شامل EEPROM + فیوزبیتها را انتقال دهید
در برخی پروژهها نیاز است Bootloader هم منتقل شود
این فرآیند همان کپی برنامه آیسی در آردوینو است.
نکات مهم هنگام استخراج برنامه از آردوینو
همیشه پیش از خواندن، یک Backup از فیوزبیتها بگیرید
آردوینوهای چینی گاهی فیوزبیتها را متفاوت تنظیم میکنند
در پروژههای صنعتی، قفل بودن میکرو بسیار رایج است
در صورت تلاش نادرست برای حذف قفل، ممکن است Flash پاک شود
کپی کردن برنامه آیسی یکی از مهمترین مراحل در استخراج کد میکروکنترلر و انتقال برنامه به یک میکروکنترلر جدید است.
این فرآیند در تعمیرات تخصصی، تولید دوباره دستگاههای بدون سورس، جایگزینی آیسی آسیبدیده و مهندسی معکوس کاربرد گستردهای دارد.
در این بخش تمام مراحل، نکات، چالشها و روشهای استاندارد Clone کردن آیسی را توضیح میدهیم.
کپی آیسی چیست؟
کپی آیسی یا MCU Cloning یعنی:
برداشتن برنامه از روی میکرو
استخراج کامل دادههای حافظه:
Flash
EEPROM
فیوزبیتها / Lock Bits
انتقال همین اطلاعات دقیقاً به یک میکروکنترلر مشابه یا سازگار
اجرای صحیح دستگاه بدون تغییر رفتار اصلی آن
این کار گاهی بهعنوان “کپی کامل آیسی” یا “Clone 1:1” هم شناخته میشود.
مراحل کپی کردن برنامه از یک آیسی
۱. شناسایی نوع میکروکنترلر
اولین قدم این است که بدانیم:
برند میکرو چیست؟ (AVR، PIC، ARM، STM32، Nuvoton، ESP، و …)
مدل دقیق و پکیج آن چیست؟
آیا Lock فعال است یا خیر؟
بدون این اطلاعات، کپیبرداری امکانپذیر نیست.
۲. استخراج فایل هگز از میکرو اصلی
اگر میکرو قفل نباشد، معمولاً سه بخش ذخیره میشود:
FLASH.hex → برنامه اصلی
EEPROM.hex → دادههای ذخیرهشده
Fuse/Config Bits → تنظیمات امنیتی و عملکردی
این مرحله معمولاً با پروگرامرهای زیر انجام میشود:
USBasp / AVRISP
MPLAB Programmer
ST-LINK / J-LINK / CMSIS-DAP
RT809H
Xeltek SuperPro
این مرحله همان خواندن برنامه میکرو قفل نشده است.
۳. بررسی و ذخیره فیوزبیتها / رجیسترهای امنیتی
فیوزبیتها تعیین میکنند:
کلاک از کجا تأمین شود
حافظه Bootloader چطور باشد
آیا میکرو قفل است یا نه
در کپیبرداری ۱۰۰٪ مشابه، این بخش حیاتی است.
۴. پروگرام کردن یک آیسی جدید
پس از استخراج موفق برنامه:
Flash پروگرام میشود
EEPROM نوشته میشود
فیوزبیتها تنظیم میشوند
دستگاه تست میشود
اگر حتی یکی از فیوزبیتها اشتباه نوشته شود، دستگاه ممکن است:
روشن نشود
در Boot گیر کند
یا بهطور کامل قفل شود
کپی آیسی در صورت قفل بودن میکروکنترلر
اگر میکرو قفل باشد، مراحل معمولی جواب نمیدهند.
در این حالت باید از روشهای حرفهای استخراج کد میکروکنترلر استفاده شود:
روشهای تخصصی:
Glitch Attack → اختلال در Clock یا Voltage
Decapsulation & Chemical Etching → باز کردن پوسته تراشه
Laser/SEM Reading → خواندن مستقیم سلولهای حافظه
Bypass Security Fuse در مدلهای قدیمیتر
استفاده از دستگاههای Crack مخصوص
این روشها تنها در مراکز تخصصی استفاده میشوند،
و برای کاربردهای تعمیراتی یا بازیابی اطلاعات بسیار رایج هستند.
انتقال برنامه از یک میکرو به مدل دیگر
گاهی کاربر میخواهد برنامه را به:
مدل جدیدتر
نسخه SMD یا DIP
نسخه سازگار از یک برند دیگر
منتقل کند.
این کار همیشه امکانپذیر نیست مگر اینکه:
معماری شبیه باشد
منابع سختافزاری مشابه باشند
پورتها و تایمرها سازگاری داشته باشند
اگر این شرایط فراهم باشد، کپی برنامه آیسی در قالب یک پروژه جدید ممکن میشود.
چالشهای کپی آیسی
قفل بودن میکرو
تفاوت نسخه Bootloader
ارتباطات UART/SPI/I2C که ممکن است کدنویسی سفارشی شده باشد
وجود CRC و چکسام در پروژه
فعال بودن Read-Out Protection
آسیبدیدگی جزئی حافظه Flash
در چنین شرایطی نیاز است از روشهای بازیابی پیشرفته استفاده شود.
آیا کپی کردن آیسی قانونی است؟
این موضوع بستگی به شرایط دارد:
اگر متعلق به پروژه خودتان باشد → بله
اگر برای تعمیر دستگاه مشتری باشد → معمولاً مجاز است
اگر برای ساخت نمونه جایگزین باشد → در اکثر کشورها قابل پذیرش است
اگر برای انتشار یا فروش نسخه غیرقانونی باشد → غیرمجاز است
نتیجهگیری
کپی کردن برنامه آیسی یک فرآیند بسیار تخصصی است که ترکیبی از:
استخراج داده
تحلیل امنیت
پروگرام دقیق
و گاهی مهندسی معکوس
را شامل میشود.
با انجام صحیح مراحل، میتوان یک آیسی را بهصورت ۱۰۰٪ مشابه روی مدل دیگر تکرار کرد و دستگاه اصلی را بدون تغییر رفتار دوباره اجرا کرد.
در این مقاله یک مسیر کامل و مرحلهبهمرحله برای آشنایی با بازکردن قفل میکروکنترلر و روشهای استخراج برنامه میکروکنترلر ارائه شد. از ساختار امنیتی MCUها گرفته تا نحوه خواندن حافظه، کپی کردن برنامه آیسی، استخراج فایل HEX، انتقال آن به میکرو جدید، و بررسی فیوزبیتها—all covered.
در واقع، شما اکنون یک دید جامع دارید از اینکه:
چطور خواندن برنامه میکرو قفل شده انجام میشود
چه روشهایی برای استخراج کد میکروکنترلر وجود دارد
فیوزبیتها چگونه کار میکنند
چگونه میتوان برنامه را از یک آردوینو یا هر MCU دیگری استخراج کرد
روش استاندارد و روش پیشرفته برای کپی برنامه آیسی چیست
چه ابزارهایی برای این کار استفاده میشود
و در چه شرایطی امکان باز کردن قفل وجود دارد
این دانش برای برنامهنویسان، تکنسینها، مهندسان الکترونیک و شرکتهایی که با دستگاههای بدون سورس کد کار میکنند، بسیار کاربردی است.
نکات کلیدی که باید همیشه در ذهن داشته باشید
✓ ۱. امنیت میکروکنترلرها جدی است
فیوزبیتها، Bootloader، Read-Out Protection و لایههای امنیتی دیگر سبب میشوند که برخی میکروها بهراحتی خوانده نشوند. در بسیاری از موارد نیاز به تجهیزات تخصصی وجود دارد.
✓ ۲. استخراج برنامه همیشه امکانپذیر نیست
در برخی مدلها سطح امنیتی غیرقابل بازگشت وجود دارد
(مثلاً RDP Level 2 در STM32).
✓ ۳. همیشه قبل از پروگرام، فیوزبیتها را ذخیره کنید
اشتباه در فیوزها میتواند باعث شود میکرو:
بوت نشود
قفل شود
یا حتی نیاز به پروگرام با ولتاژ بالا پیدا کند
✓ ۴. کپی کردن آیسی نیازمند دقت بالا است
اگر هدف شما یک کپی ۱۰۰٪ مشابه است،
حتماً FLASH + EEPROM + FUSE باید دقیق و کامل استخراج و دوباره نوشته شود.
✓ ۵. استخراج برنامه از آردوینو سادهتر است، ولی همیشه امکانپذیر نیست
در صورت قفل بودن Lock Bits، نیاز به روشهای تخصصی خواهد بود.
✓ ۶. انتقال برنامه به میکرو جدید باید با تطابق کامل انجام شود
حتی تفاوت کوچک در Bootloader، سرعت کلاک، یا Memory Mapping
میتواند مشکل ایجاد کند.
تعمیرکاران و تکنسینهای الکترونیک
سازندگان دستگاه که سورس کد در دسترس ندارند
مهندسان معکوسکار
توسعهدهندگان نرمافزارهای Embedded
شرکتهای صنعتی و تولیدکنندگان دستگاه
افراد علاقهمند به امنیت یکی از MCUها
باز کردن قفل میکروکنترلر ترکیبی از دانش الکترونیک، امنیت سختافزار و ابزارهای تخصصی است و با تحلیل صحیح فیوزبیتها، استخراج برنامه و انتقال آن به میکرو جدید، میتوان دستگاههای بدون سورس را دقیقاً بازتولید یا تعمیر کرد.
تماس با ما
برای مشاوره و ثبت درخواست خود همین حالا با تیم ReverseTech(زیرمجموعه ایده تجهیز مهر) تماس بگیرید.
-
شماره شرکت: 44903590-021
-
واتساپ و تلگرام : 09014209488