
من UART إلى الجذر: اختراق Xiaomi C200 عبر U-Boot
في هذا المستودع سأوضح كيف تمكنت من الوصول إلى واجهة UART حتى بدون وجود مجموعة
شائعة من الدبابيس / وسادات الاختبار، باستخدام U-Boot وحيل للحصول على صلاحيات الجذر في مرحلة مبكرة
وفي النهاية تفريغ البرنامج الثابت (firmware)
هناك عدة نقاط رئيسية واضحة من لوحة الدوائر المطبوعة (PCB)
أولاً توجهت إلى المرشحين الواضحين للوصول المباشر إلى UART،
هناك 4 وسادات اختبار في صف تبدو وكأنها Tx Rx والأرضي والطاقة،
لكن اختبارها بمقياس متعدد أعطى قراءات خاطئة كما هو موضح في الصورة.
جربت معظم وسادات الاختبار الأخرى وما زلت لم أجد القراءة الصحيحة لذلك اضطررت
لتغيير الاستراتيجية
نظرًا لعدم وجود موصلات متبقية على اللوحة ولا وسادات اختبار يمكن أن تساعد
قررت الذهاب عبر المصدر، والتوصيل بدبابيس المعالج والحصول على
غلاف UART بهذه الطريقة، قمت بسحب ورقة البيانات (datasheet) لذلك المعالج
وحددت دبابيس بروتوكول UART

الآن نحتاج فقط إلى العثور على الأرضي على اللوحة، والتوصيل
استخدمت بعض مجسات PCBite ومحول USB 2 TTL لهذا الإعداد

الآن يمكننا استخدام picocom للحصول على غلاف UART الذي نبحث عنه
sudo picocom -b 115200 /dev/ttyUSB0
إذا لم يتم فعل أي شيء، فقد حصلت فقط على سجلات الإقلاع ولا يوجد غلاف في نهاية عملية الإقلاع
لذا كان عليّ مقاطعة U-Boot بالضغط على Enter فورًا.
عند الحصول على غلاف U-Boot قمت أولاً بطباعة وسائط البيئة (environment args)
الأمور المهمة لنا هي
للحصول على وصول سريع كجذر يمكنني استخدام خدعة تغيير أمر init باستخدام setenv
لكي أحصل على غلاف بدلاً من تشغيل ثنائي linuxrc، ثم يمكنني تحميل الذاكرة
يدويًا وتشغيل الجهاز (أساسًا نسخ أمر bootcmd)
الآن عندما ينتهي الإقلاع سأُسقط في غلاف مبكر مع عدم تشغيل أي شيء أساسًا
على النظام، لذا سأقوم بتشغيل ثنائي linuxrc الأصلي في الخلفية والتحقق من
أي منافذ مفتوحة على هذا النظام
لا حظ! الكاميرا تتحدث فقط مع سحابتها على " 47.237.75.249 "، لا توجد واجهة ويب مكشوفة
للتعديل عليها.
نظرًا لأن فك تشفير ثنائي الاتصال السحابي خارج نطاق بحثي،
هذا هو المكان الذي قررت فيه إنهاء بحثي :)
القليل الإضافي لأي شخص مهتم باللعب بالبرنامج الثابت، إليك
كيفية الحصول عليه.
نفس الإعداد السابق مع UART ولكن هذه المرة فقط استكشاف وتحميل الذاكرة
من الفلاش إلى RAM ولكن بدون الإقلاع فيه.
ثم يمكنك طباعة البيانات من ذاكرة RAM وتسجيل مخرجات الطرفية
(مع minicom هذه المرة) لحفظها في ملف، تنظيفها قليلاً باستخدام Python والحصول على
البرنامج الثابت، مطابقة binwalk و bootargs تساعد في تسمية كل قسم.
