مقاله های سیسوگ, STM32, امنیت و نفوذ, توصیه شده

هک پروگرامر ST-Link: شکستن رمز و آپدیت برنامه

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

در مقاله قبل ( هک پروگرامر ST-Link نفوذ به بوت لودر ) ، با بررسی دیتاهای به دست آمده و آنالیز عملکرد به نتایج خوبی از هک پروگرامر رسیدیم ، نتایج حاکی از آن بود که فایل فریمور پروگرامر ST-Link احتمالا باید درون برنامه آپدیتر باشد و از طرفی به دلیل نمایش ورژن فریمور قابل آپدیت در نرم افزار احتمالا کلید آن باید جایی درون برنامه ذخیره شده باشد. در این قسمت به عنوان آخرین قسمت از سری مقالات هک پروگرامر St-Link قصد داریم نحوه استخراج کد را آموزش دهیم پس با سیسوگ همراه باشد.

 

دسترسی به سورس نرم افزار

نقص های امنیتی جاوا

برای استخراج کد از درون برنامه نیاز است که ابتدا سورس کد برنامه آپدیتر را به دست آوریم و بعد از آن با بررسی آن قادر خواهیم بود که کلید مورد نظر را از برنامه اسنخراج کنیم . همانطور که قبلا هم اشاره کردیم، Java یک زبان میانی است که توسط ماشین مجازی Java بر روی سیستم اجرا می شود ، همین قابلیت به برنامه هایی که با استقاده جاوا نوشته می شوند امکان میدهند که بر روی سیستم عامل های مختلف قابل اجرا باشند. البته به ما هم این امکان را می دهند که بتوانیم کدهای نوشته را از دل برنامه اجرایی استخراج کنیم !

برای استخراج کد از فایل اجرایی جاوا نرم افزار های زیادی وجود دارند ، ما از نرم افزار procyon decompiler استفاده کردیم.

شاید برای شما مفید باشد: همه چیز درباره دیکد نرم‌افزاری MP3 به کمک میکروکنترلر 

 

پیدا کردن کلید رمزگذاری پروگرامر ST-Link

کلید های رمزگذاری AES-128

برای پیدا کردن کلید رمز گذاری لازم است که کد های برنامه آپدیتر ST-Link را بررسی کنیم ، معمولا تمام برنامه های از تابع Main شروع به اجرا می کنند و این می‌شود سرنخ ؛ با بررسی و تحیلی کد Java که بسیار هم به زبان C شبیه است و شاید این هم از اقبال ماست .

بعد از بررسی های طولانی ، بلاخره کلید مذکور را در کد پیدا کردیم ، و کلید چیزی نیست جز “best performance” ، اما از کجا میتوانیم مطمئن باشیم که عبارت درستی را به عنوان کلید انتخاب کرده اینم !

قبلا اشاره کردیم که احتمالا کدگذاری بر اساس AES-128 انجام شده است ، اگر با این روش رمزگذاری آشنایی داشته باشید ، حتما میدانید که 128 بیت کلید برای رمز گذاری لازم است ، که در واقع 128 بیت معادل است با 16 بایت ، و جالب این است که واژه “best performance” نیز 16 بایت یا 128 بیت است.

پیدا کردن کلید رمزگذاری پروگرامر ST-Link

و البته تنها یک راه برای اطمینان کامل وجود دارد ، و آن هم دکد کردن فایل رمز گذاری شده است ، برای این کار لازم است از ابزار دکدر AES-128 لازم دارید. برای انجام این کار میتونید از ابزار (Sisoog_ST-Link_HackTools.7z) استفاده کنید.

این ابزار با استفاده از جاوا نوشته شده است که هم برای کد کردن و هم برای دکد کردن میتوان از آن استفاده کرد. برای دکد کردن به صورت زیر از آن استفاده خواهیم کرد.

بعد از رمزگشایی فایل مروبط به فریمور پروگرامر ST-Link فایل مذکور را با استفاده از روش ذکر شده در مقاله دوم جهت تشخیص این که فایل مذکور فایل اجرایی یک پردازنده است بررسی می کنیم . بله خوشیختانه همه چیز درست است.

روش دیگری که میتوانیم برای اطمینان بیشتر استفاده کنیم این است که فایل فریمور دکد شده را با استفاده از یک ویرایشگر باینری باز کنیم ، معمولا فایل های فریمور حاوی رشته هایی برای نشان دادن خطا به کاربر هستند که در فریمور به صورت رشته ذخیره می شوند ، اگر فایل را درست دکد کرده باشیم ، باید چنین رشته هایی در درون فریمور وجود داشته باشد.

محتوای فریمور ST-Link

 

پروگرامر ST-Link به جهان سلام کن !

بعد از کشف نوع و کلید رمز گذاری و همچنین محل قرارگیری برنامه در حافظه (استفاده از آدرس وکتور در فریمور (0x8004000) ) قصد داریم برنامه ای بنویسیم که با استفاده از پایه PA5 یک LED را چشمک زن کنیم. پایه SWD روی این پایه تعریف شده است.

اولین اقدام تنظیم لینکر است که با توجه به آدرس وکتور و مقدار RAM میکروکنترلر به صورت زیر تعریف می شود

و اما برنامه اصلی هم به صورت زیر خواهد بود

بعد از کامپایل ، یک فایل bin خواهیم داشت که باید قبل از انتقال به پروگرامر St-Link رمزگذای شود. برای رمزگذاری دستور زیر استفاده می کنیم :

بعد از کدکردن با کیلد مروبطه ، فایل جدید را درون برنامه جاوا بروز رسانی می کنیم و ST-Link را با اسنفاده از آن آپدیت می کنیم.

آپدیت پروگرامر ST-Link برد دیسکاوری

 

تکمیل فرایند هک پروگرامر ST-Link

تا اینجا از هک پروگرامر توانستیم قفل های موجود در نرم افزار را بشکنیم و برنامه دلخواه خود را بر روی سخت افزار آپدیت کنیم ! اما برای این که بتوانیم یک فریمور کاملا کلون بسازیم نیاز است که علاوه بر داشتن کد برنامه ، کد بوت لودر را نیز داشته باشیم . برای به دست آوردن کد بوت لودر به سادگی برنامه ای بنویسید که حافظه فلش میکروکنترلر را بخواند و داده ها را بر روی پورت سریال ارسال کند. به همین سادگی فرایند های قبل را در کامپایل کد کردن برنامه و آپدیت بر روی پروگرامر ST-Link اجرا کنید ، به محض روشن شد ، برنامه شروع به ارسال داده های (فایل باینری) بوت لودر خواهد کرد. به همین سادگی فرایند هک پروگرامر St-Link را کامل می کنیم.

نکته مهمی که همیشه در تولید یک محصول باید مورد توجه قرار دهید نکات امنیتی در خصوص هک شدن ، کپی شدن ، و… است؛ و این مسیر نمی شود مگر با تجربه و دقت در نکات امنیتی

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

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

35 دیدگاه در “هک پروگرامر ST-Link: شکستن رمز و آپدیت برنامه

  1. Avatar for میثم میثم گفت:

    سلام ، چند عدد از پروگرامر های st-link که مستقیم به usb میخوره را دارم که همشون بعد از 5 یا 6 روز از کار می افتند و هنگام اتصال خطای Not recignized میده ،
    آیا راهی داره که اینها رو برگردونم؟

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

      خود به خود این تفاق افتاده ؟
      تست کنید اگر میکروشون پروگرام میشه که پروگرام کنید اگر نه که صدمه دیده و نمیشه کاریش کرد

  2. Avatar for صدرا فاضلی فرد صدرا فاضلی فرد گفت:

    سلام وقت بخیر مطالب بسیار عالی بودن مخصوصا اشاره مستقیم به توجه کردن در بحث امنیت محصولات. به نظر بنده اگر قسمت هایی با تحت عنواینی مثل تبدیل فایل باینری یا هگز به زبان هایی مثل C این سری مقالات تکمیل تر میشه. در کل خیلی عالی بود من که لذت بردم همیشه مطالب سیسوگ اموزنده و زیباس

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

      سلام دوست عزیز
      محدودیت هایی وجود داره که نگرانی های قانونی وجود در خصوص اون وجود داره

  3. Avatar for Catalyst Catalyst گفت:

    ممنون از مطلب بسیار مفیدتون ، دست مریزاد. چند سوال برام ایجاد شد که همه را در یک پست می‌پرسم، هر زمان وقتتون اجازه داد ممنون میشم پاسخ بدید.
    سوال اول: آدرس شروع برنامه را چطور پیدا کردید که 0x8004000 هست؟
    سوال دوم: اگر فایل bin رمزگشایی شده را با یه پروگرمر دیگه بریزیم روی ST-Link جواب میده؟
    سوال سوم: در بخش تکمیل فرایند هک پروگرامر ST-Link اشاره به خواندن کد بوت لودر کردید، میشه توضیح بدید بعد از استخراج بوت لودر چطوری باید با فایل bin دیکد شده ترکیبش کرد که بشه یک firmware کلون خوب؟
    سوال چهارم: چرا اگر آدرس شروع برنامه درست باشه ولی فضای اختصاص داده شده به بوت لودر خالی باشه برنامه کار نمی‌کنه؟
    سوال پنجم: نحوه کدنویسی برای اجرا در رم و خواندن فلش چطوریه؟ ممنون میشم در یه پست یک مثال واقعی را مطرح کنید.
    سپاس بیکران.

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

      سلام و درود بر شما
      جواب یک: از آدرس وکتور اینتراپت که از خود فریمور قابل استخراجه و هم از طریق خود چیپ (یک بار میخواستم آموزش هک STM32 رو بذارم که منصرف شدم)
      جواب دوم: اگر این کار رو بکنیم و در ادرس درست بریزیم و بوت لودر وجود داشته باشه بله کار میکنه بله خوبی
      جواب سوم: بعد از استخراج محتوای بوت لودر اونو به شکل باینری ابتدای فایل فریمور قرار میدیم به همین سادگی
      جواب چهارم: خیلی بستگی به فریمور داره معمولا فریمورها کار تنظیم آدرس وکتور رو به بوت لودر میسپارن اگر خودشون این کار رو انجام بدن و البته حافظه ابتدایی با NOP پر شده باشه مشکلی وجود نخواهد داشت.
      سوال پنجم: اول که باید به کامپایلر بگید آدرس فانکشن ها رو برای فضای رم تعریف کنه، بعد با کپی کردن برنامه در رم میتونید اونها رو صدا بزنید.

  4. Avatar for محمدرضا اطمینان راد محمدرضا اطمینان راد گفت:

    ایا امکان دراه راهی بگید بتونیم فریمور STLINKاپدیت کنیم و راهی هست مدلی که فریمورش پریده رو دوباره پروگرام و استفادش کنیم؟

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

      خوب آپدیت کردن که خیلی راحت از طریق خود نرم افزار شرکت ST موجود هست و از منو های نرم افزار میتونید پیداش کنید
      در خصوص این که اگه فریمور پریده باشه خیلی راحت الان با جستجو توی گیت هاب فایل هگزش هست که بتونید مجددا پروگرامش کنید.

  5. Avatar for مریم ابراهیمی مریم ابراهیمی گفت:

    سلام ، ممنون بابت مطالب خوبی که گذاشتید.
    من هم مشکلی مثل مشکلی کاربری به نام احسان دارم.
    برد دیسکاوری f7 دارم که به اشتباه برنامه ی stlink اونو پاک کردم.
    برنامه جدید که میریزم پورت کام ( همون بخش سریال ) رو نداره.

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

    1. Avatar for zeus zeus گفت:

      اخرین آپدیت رو از سایت st دانلود کنید – آیا بعد از دریافت آپدیت هم همچنان همین مشکل هست ؟

      1. Avatar for مریم ابراهیمی مریم ابراهیمی گفت:

        وقتی ابدیت میکنم همچنان فقط برنامه ساده ی stlink هست.
        بخش ارتباط سریال نداره. ( برنامه stlink کلی هست نه مخصوص برد دیسکاوری)
        همچنین قبلا برنامه اش جوری بود که تغذیه کل برد از همون کابل تامین میشد. ( یکی از پین های میکرو به عنوان en تغذیه خروجی و high شده بود) ولی در برنامه کلی stlink برای این پین عملکردی قرار داده نشده.

        1. Avatar for zeus zeus گفت:

          فکر میکنم بله احتمالا بتونید بخونید و دیکدش رو انجام بدید

          1. Avatar for مریم ابراهیمی مریم ابراهیمی گفت:

            چطور باید بفهمم کدوم فایل ابدیت هست؟

          2. Avatar for zeus zeus گفت:

            خوب ساده ترین راه سعی و خطا هست یا این که از اسمش تشخیص بدید
            اگر از اسمش نتونستید متوجه بشید میتونید تک تک فایل ها رو تست کنید و ببینید کدوم پورت سریال هم داره و به برد شما میخوره 🙂

  6. Avatar for VHD VHD گفت:

    سلام
    با cubeIDE و پروگرمر st-link میخواستم برد bluepill رو پروگرم کنم. ولی cubeIDE خطا میده که چیپ اصلی نیست!
    بنظرتون میشه کاریش کرد؟

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      سلام من این خطایی رو میگید تا حالا ندیدم – میشه متن کامل رو بذارید ؟
      عجیبه برام

      1. Avatar for VHD VHD گفت:

        ببخشید همش بهم ریخت 🙂
        یکی یکی میفرستم

        1. Avatar for زئوس Zeus زئوس Zeus گفت:

          جالبه من تا حالا با این خطا مواجه نشدم
          ولی شما میتونید از openocd استفاده کنید برای دیباگ کردن

        1. Avatar for زئوس Zeus زئوس Zeus گفت:

          جالبه تا قبل از این ساز و کار رو نداشت توی نرم افزار خودش حالا چس شده توی این نرم افزار اضافه کرده جالبه برام

  7. Avatar for wmp144 wmp144 گفت:

    سلام
    امکانش هست که پروگرمرهای ST link فیک که‌ اکثرا از اون ها استفاده می کنند رو به J link تبدیل کرد؟
    سایت شرکت segger میگه نمونه اصلی ST link رو میشه تبدیل کرد.
    https://www.segger.com/products/debug-probes/j-link/models/other-j-links/st-link-on-board/

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      نمونه اصلی رو من این کار رو کردم و فکر نمیکنم با نمونه های فیک نشه این کار رو کرد !
      احتمالا چون روشی برای تشخصی اصلی یا فیک بودن نداره – احتمالا بشه چنین کرد.

      1. Avatar for wmp144 wmp144 گفت:

        طبق توضیحات سایت عمل کردم ولی در مرحله آخر موقعی که گذینه یک رو برای آپدیت انتخاب می کنم ، همون جا میمونه و جلوتر نمیره.

  8. Avatar for امیر امیر گفت:

    وقت بخیر سلام
    ممنون از پست خوبی که داشتید
    راستش برای device هایی که frimware اونا تو ic لود شده و در دسترس نیست چه پیشنهادی دارید؟ سازنده device هم هیچ آپدیتی برای اون درنظر نگرفته.. چطور میشه به فریم ور دست یافت؟ و چطور میشه پسورد upload برنامه رو برداشت؟

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      خوب در واقع باید ببینید چه دسترسی هایی دارید ! و این قضیه برای هر چیپ میتونه متفاوت باشه – حتی هر طراحی !!!
      شنیدم که شرکت هایی هستند که با تراشیدن چیپ سلیکون داده ها رو از توش در میارن !

  9. بازتاب: پروگرامر Sis-Link ساخت پروگرامر ARM و AVR: دگردیسی - سیسوگ - Sisoog
  10. Avatar for احسان احسان گفت:

    سلام
    خیلی خیلی ممنون از این که پیگیر مشکل من هستید
    یه دونه پروگمر آنبورد stm32f429zit هست

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      بله خواهش میکنم ، بررسی میکنم

  11. Avatar for احسان احسان گفت:

    سلام ببخشید این سوال رو اینجا مینوسیم
    من یه stm32f429i discovery دارم که متاسفانه در یک آپدیت پورت سریال مجازی که پروگرامرش میسازه واسه ارتباط یوزارت از کار افتاده یعنی تو برنامه آپدیتر خود st نیست راه حلی داره که درست بشه بتونم فرمور رو درست کنم که پورت سریال مجازی روی پروگرامر بودر دوباره فعال بشه
    ممنون

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز خواهش میکنم ، احتمالا راهی وجود داره برای این خطایی که اتفاق افتاده ، قطعا شما بردتون رو با یک ورژن اشتباه بروز کردید
      امکان درست کردنش از طریق هک وجود داره ولی بعید می دونم خود شرکت ST راهی براش نداشته باشه ، یک بار سعی کنید با استفاده از آپدیتر خود شرکت آپدیت کنید ببینید مشکل حل میشه یا نه !

      1. Avatar for احسان احسان گفت:

        سلام
        آپدیت کردم با برنامه خود st الان به روزترین برنامه روش هست ولی متاسفان پورت کام رو نداره

        1. Avatar for زئوس Zeus زئوس Zeus گفت:

          سلام
          احتمالا قسمتی که نوع برد رو هم مشخص میکنه پاک شده – مدل بردتون چی بود ؟

          1. Avatar for احسان احسان گفت:

            سلام
            discovery stm32f429zi

          2. Avatar for زئوس Zeus زئوس Zeus گفت:

            سلام دوست عزیز
            متاسفانه با سرچ هایی که انجام دادم به نتیجه ای نرسیدم و هیچ راهکاری برای حل این مشکل از سوی شرکت ST ارائه نشده ، به نظرم بهترین کار اینه که توی فروم های پشتیبانی ST مشکل رو مطرح کنید.

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

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