در مقاله قبل ( هک پروگرامر ST-Link نفوذ به بوت لودر)، با بررسی دیتاهای بهدستآمده و آنالیز عملکرد به نتایج خوبی از هک پروگرامر رسیدیم، نتایج حاکیاز آن بود که فایل فریمور پروگرامر ST-Link احتمالا باید درون برنامه آپدیتر باشد و از طرفی بهدلیل نمایش ورژن فریمور قابل آپدیت در نرمافزار احتمالا کلید آن باید جایی درون برنامه ذخیرهشدهباشد. در این قسمت بهعنوان آخرین قسمت از سری مقالات هک پروگرامر St-Link قصدداریم نحوه استخراج کد را آموزش دهیم پس با ما همراه باشد.
دسترسی به سورس نرم افزار
برای استخراج کد از درون برنامه نیاز است که ابتدا سورس کد برنامه آپدیتر را بهدست آوریم و بعداز آن با بررسی آن قادر خواهیمبود که کلید موردنظر را از برنامه اسنخراجکنیم . همانطورکه قبلا هم اشارهکردیم، Java یک زبان میانی است که توسط ماشین مجازی Java برروی سیستم اجرا میشود، همین قابلیت به برنامههایی که بااستقاده جاوا نوشته می شوند امکان میدهند که برروی سیستمعاملهای مختلف قابل اجرا باشند. البته به ما هم این امکان را میدهند که بتوانیم کدهای نوشته را از دل برنامه اجرایی استخراج کنیم! برای استخراج کد از فایل اجرایی جاوا نرمافزارهای زیادی وجود دارند، ما از نرمافزار procyon decompiler استفادهکردیم.
پیدا کردن کلید رمزگذاری پروگرامر ST-Link
برای پیداکردن کلید رمزگذاری لازماست که کدهای برنامه آپدیتر ST-Link را بررسیکنیم، معمولا تمام برنامههای از تابع Main شروعبه اجرا میکنند و این میشود سرنخ؛ با بررسی و تحیلی کد Java که بسیار هم به زبان C شبیه است و شاید این هم از اقبال ماست . بعداز بررسیهای طولانی، بالاخره کلید مذکور را در کد پیداکردیم، و کلید چیزی نیست جز “best performance”، اما ازکجا میتوانیم مطمئن باشیم که عبارت درستی را بهعنوان کلید انتخاب کرده ایم؟! قبلا اشاره کردیم که احتمالا کدگذاری براساس AES-128 انجامشدهاست ، اگر با این روش رمزگذاری آشنایی داشتهباشید، حتما میدانید که ۱۲۸بیت کلید برای رمزگذاری لازماست، که در واقع ۱۲۸بیت معادل است با ۱۶بایت، و جالب این است که واژه “best performance” نیز ۱۶بایت یا ۱۲۸بیت است.
و البته تنها یک راه برای اطمینان کامل وجود دارد، و آنهم دکد کردن فایل رمزگذاریشده است، برای اینکار لازماست از ابزار دکدر AES-128 لازمدارید. برای انجام اینکار میتونید از ابزار (ST-Link_HackTools.7z) استفادهکنید. این ابزار بااستفادهاز جاوا نوشتهشدهاست که هم برای کد کردن و هم برای دکد کردن میتوان از آن استفادهکرد. برای دکد کردن بهصورت زیر از آن استفاده خواهیم کرد.
ٰjava -jar aes128.jar --key "encryption key" -i firmware.bin -o firmware_decrypted.bin
بعداز رمزگشایی فایل مربوط به فریمور پروگرامر ST-Link فایل مذکور را بااستفادهاز روش ذکرشده در مقاله دوم جهت تشخیص اینکه فایل مذکور فایل اجرایی یک پردازنده است بررسی میکنیم. بله خوشبختانه همهچیز درست است. روش دیگری که میتوانیم برای اطمینان بیشتر استفادهکنیم این است که فایل فریمور دکد شده را بااستفادهاز یک ویرایشگر باینری بازکنیم، معمولا فایلهای فریمور حاوی رشتههایی برای نشاندادن خطا به کاربر هستند که در فریمور بهصورت رشته ذخیره میشوند، اگر فایل را درست دکد کردهباشیم، باید چنین رشتههایی در درون فریمور وجود داشتهباشد.
پروگرامر ST-Link به جهان سلام کن !
بعداز کشف نوع و کلید رمزگذاری و همچنین محل قرارگیری برنامه در حافظه (استفادهاز آدرس وکتور در فریمور (0x8004000) ) قصدداریم برنامهای بنویسیم که بااستفادهاز پایه PA5 یک LED را چشمکزن کنیم. پایه SWD روی این پایه تعریفشدهاست. اولین اقدام تنظیم لینکر است که باتوجهبه آدرس وکتور و مقدار RAM میکروکنترلر بهصورتزیر تعریف میشود:
MEMORY { rom (rx) : ORIGIN = 0x08004000, LENGTH = 64K - 0x4000 ram (rwx) : ORIGIN = 0x20000000, LENGTH = 20K }
و اما برنامه اصلی هم بهصورتزیر خواهد بود:
void main() { rcc_clock_setup_in_hse_8mhz_out_72mhz(); rcc_periph_clock_enable(RCC_GPIOA); gpio_set_mode(GPIOA, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO5); while (1) { gpio_toggle(GPIOA, GPIO5); delay_ms(250); } }
بعداز کامپایل، یک فایل bin خواهیمداشت که باید قبلاز انتقال به پروگرامر St-Link رمزگذاری شود. برای رمزگذاری از دستور زیر استفاده میکنیم:
java -jar aes128.jar -k "best performance" -i main.bin -o f1_1.bin --encrypt
بعداز کدکردن با کلید مربوطه، فایل جدید را درون برنامه جاوا بروزرسانی میکنیم و ST-Link را بااسنفادهاز آن آپدیت میکنیم:
تکمیل فرایند هک پروگرامر ST-Link
تااینجا از هک پروگرامر توانستیم قفلهای موجود در نرمافزار را بشکنیم و برنامه دلخواه خود را برروی سختافزار آپدیت کنیم! اما برای اینکه بتوانیم یک فریمور کاملا کلون بسازیم نیاز است که علاوهبر داشتن کد برنامه، کد بوت لودر را نیز داشتهباشیم. برای بهدستآوردن کد بوت لودر بهسادگی برنامهای بنویسید که حافظه فلش میکروکنترلر را بخواند و دادهها را برروی پورت سریال ارسالکند. بههمینسادگی فرآیندهای قبل را در کامپایل کد کردن برنامه و آپدیت برروی پروگرامر ST-Link اجرا کنید، بهمحض روشن شدن، برنامه شروع به ارسال دادههای (فایل باینری) بوت لودر خواهد کرد. بههمین سادگی فرایند هک پروگرامر St-Link را کامل میکنیم.
نکته مهمی که همیشه در تولید یک محصول باید موردتوجه قراردهید نکات امنیتی درخصوص هک شدن، کپی شدن و… است؛ و این مسیر نمیشود مگر با تجربه و دقت در نکات امنیتی!
منبع: سیسوگ