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

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

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

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

 

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

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

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

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

 

پیدا کردن کلید رمزگذاری پروگرامر 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 را کامل می کنیم.

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

حمایت از Zeus ‌

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

0 نفر

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

توجه

Zeus ‌
Zeus ‌

زئوس هستم ساکن المپ

دیدگاه ها

31 دیدگاه

  • Catalyst
    ۲۵ تیر ۱۴۰۱

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

    • Zeus ‌
      Zeus ‌
      ۳۰ تیر ۱۴۰۱

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

  • محمدرضا اطمینان راد
    ۱۳ دی ۱۴۰۰

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

    • Zeus ‌
      Zeus ‌
      ۲۴ بهمن ۱۴۰۰

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

  • مریم ابراهیمی
    ۲۵ اردیبهشت ۱۴۰۰

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

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

    • Zeus ‌
      zeus
      ۱ خرداد ۱۴۰۰

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

      • maryam
        ۱۹ مرداد ۱۴۰۰

        بله هست.

        • Zeus ‌
          zeus
          ۱۹ مرداد ۱۴۰۰

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

          • مریم ابراهیمی
            ۱۹ مرداد ۱۴۰۰

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

            0
          • Zeus ‌
            zeus
            ۲۰ مرداد ۱۴۰۰

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

            0
  • VHD
    ۱۳ مهر ۱۳۹۹

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

  • 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/

    • Zeus ‌
      زئوس Zeus
      ۱۳ مهر ۱۳۹۹

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

      • Wmp144
        wmp144
        ۱۳ مهر ۱۳۹۹

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

  • امیر
    ۱۵ اردیبهشت ۱۳۹۹

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

    • Zeus ‌
      زئوس Zeus
      ۲۷ اردیبهشت ۱۳۹۹

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

  • پروگرامر Sis-Link ساخت پروگرامر ARM و AVR: دگردیسی - سیسوگ - Sisoog
    ۲۵ شهریور ۱۳۹۸

    […] این راه در واقع نیاز بخش تحقیقاتی داشت که تحت عنوان “هک پروگرامر st-link” در سایت سیسوگ منتشر کردیم. که در ادامه بیشتر به […]

  • احسان
    ۱۴ شهریور ۱۳۹۷

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

    • Zeus ‌
      زئوس Zeus
      ۱۸ شهریور ۱۳۹۷

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

  • احسان
    ۳۱ مرداد ۱۳۹۷

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

    • Zeus ‌
      زئوس Zeus
      ۵ شهریور ۱۳۹۷

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

      • احسان
        ۸ شهریور ۱۳۹۷

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

        • Zeus ‌
          زئوس Zeus
          ۹ شهریور ۱۳۹۷

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

          • احسان
            ۱۷ شهریور ۱۳۹۷

            سلام
            discovery stm32f429zi

            0
          • Zeus ‌
            زئوس Zeus
            ۱۸ شهریور ۱۳۹۷

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

            0

پر بحث ترین ها

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

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

Zeus ‌ Zeus ‌
  • 2 سال پیش

راه اندازی LCD گرافیکی Nokia 1661 و دانلود کتابخانه آن

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

Zeus ‌ Zeus ‌
  • 4 سال پیش

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

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

Zeus ‌ Zeus ‌
  • 5 سال پیش

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

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

Zeus ‌ Zeus ‌
  • 5 سال پیش

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

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

Zeus ‌ Zeus ‌
  • 2 سال پیش

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

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

Zeus ‌ Zeus ‌
  • 11 ماه پیش

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

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

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

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

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

Zeus ‌ Zeus ‌
  • 3 سال پیش

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

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

Mahdi.h   Mahdi.h  
  • 3 سال پیش

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

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

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

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