
أبحاث الهندسة العكسية وبرامج ثابتة مخصصة لكاميرات إنترنت الأشياء القائمة على Allwinner V3، بما في ذلك محللات البرامج الثابتة، وعميل AVIOCTRL، وإثبات مفهوم CVE-2026-52656 لاستبدال البرامج الثابتة عبر OTA بدون مصادقة.

التبديل إلى البرتغالية (البرازيل)
ملاحظات الهندسة العكسية، أدوات البرامج الثابتة، كود إثبات المفهوم، وواجهة برامج ثابتة مخصصة لإصدار Allwinner V3 من كاميرا SJCAM SJ4000 Air.
مقال بحثي
يحتوي هذا المستودع على الكود والقطع الأثرية التي تم إنتاجها أثناء البحث. يشرح المقال الكامل التحقيق بدءًا من أول تفريغ للبرامج الثابتة حتى البرامج الثابتة المخصصة لولوش.
بدأ هذا العمل بسؤال بسيط: ما مدى التحكم الذي يمكنني الحصول عليه على كاميرا أكشن رخيصة بدون وثائق أو كود مصدر أو دعم من البائع؟
تبين أن الكاميرا تستخدم معالج Allwinner V3 ونظام Android 4.4 معدل بشكل كبير. تطبيقها الرئيسي، sdv، يتواصل مع خدمات الكاميرا والعرض الخاصة عبر Binder، ويعرض الواجهة باستخدام MiniGUI، ويكشف عن خادم HTTP لتحديثات البرامج الثابتة، ويتواصل مع تطبيق SJCAM Zone عبر بروتوكول خاص.
يوثق المستودع المسار من استخراج البرامج الثابتة إلى بديل عملي لـ sdv. يتضمن أدوات لتنسيقات البرامج الثابتة التي تمت مواجهتها أثناء البحث، وقواعد بيانات IDA للثنائيات المعكوسة، وعميل AVIOCTRL، ومصدر البرامج الثابتة المخصصة لولوش، وإثبات المفهوم المرتبط بـ CVE-2026-52656.
يستهدف الكود لوحة Allwinner V3 التي تم بحثها مع وحدة تحكم شاشة ST7789V ومستشعر صورة GC4653. يتم تضمين وحدات SJ4000 القديمة المستندة إلى Novatek NT9665X فقط كجزء من البحث السابق وتستخدم تنسيق برامج ثابتة مختلف. أسماء المنتجات وحدها ليست كافية لتحديد التوافق.
لولوش هي واجهة بديلة للتطبيق الأصلي sdv للكاميرا. تم بناؤه باستخدام المكتبات الخاصة المستردة من البرامج الثابتة ويستخدم نفس الواجهات الداخلية مثل التطبيق الأصلي.
يتضمن التنفيذ الحالي:
HerbCamera و CedarDisplaywpa_supplicantلولوش ليست توزيعة كاملة أو برامج ثابتة عامة لكل منتج يُباع باسم SJ4000. تعتمد على المكتبات والنواة والخدمات وتخطيط الأقسام ووحدة تحكم الشاشة ومستشعر الصورة وتكوين اللوحة المستخدمة من قبل وحدة Allwinner V3 التي تم بحثها.
تحتوي بعض الدلائل على مواد من طرف ثالث أو مواد خاصة مستردة من الجهاز. وجودها هو لأغراض التوافق والبحث الأمني ولا يجعل تلك المكونات مفتوحة المصدر.
تم اختبار البناء على نظام Linux x86-64. تحتاج إلى Python 3 وGNU Make وGit وبيئة بناء C/C++ ووصول إلى الشبكة لتنزيل سلسلة الأدوات الأولية.
git clone https://github.com/keowu/sjcam.git
cd sjcam/Lelouch
python3 prepare_build.py
يقوم prepare_build.py بتنزيل بيئة نظام Android API level 14 مثبتة ومترجم ARM arm-linux-androideabi-4.6 عبر المنصة إلى Lelouch/android_compilers/. ثم يقوم ببناء wpa_supplicant الثابت المعدل وتشغيل make. يتم تجاهل ملفات المترجم التي تم تنزيلها والثنائيات المولدة بواسطة Git.
الملفات الناتجة هي:
Lelouch/Lelouch
Lelouch/wpa_supplicant
لإعادة البناء بعد تغيير مصادر C++:
cd Lelouch
make clean
make
الملف الثنائي Lelouch المولد مخصص لاستبدال /bin/sdv في نظام الملفات الجذر المستخرج. يتوقع وضع محطة Wi-Fi أيضًا وجود wpa_supplicant المبني في /mnt/extsd/sta/wpa_supplicant على بطاقة SD الخاصة بالكاميرا.
يبحث كود كشف الوجه التجريبي عن ملف cascade المولد في:
/mnt/extsd/frontalface.casc
يتضمن المستودع ملف cascade مولد مسبقًا والمحول المستخدم لإنشائه:
cd Lelouch/gen_cascade
python3 gen_cascade.py haarcascade_frontalface_alt2.xml frontalface.casc
إجراءات الاستخراج الكامل، استبدال نظام الملفات الجذر، إعادة التعبئة، ووميض LiveSuit موثقة في المقال البحثي المرتبط في أعلى هذه الصفحة.
جميع نقاط الدخول للمحللات هي نصوص Python 3 مع مخرجات --help مدمجة وبدون تبعيات Python من طرف ثالث.
يقرأ صورة البرامج الثابتة الخارجية LiveSuit، ويستخرج ملفاتها، ويعيد بناء صورة من دليل مستخرج.
python3 "Reversing Scripts/AllWinner IMAGEWTY - ROM Parser/main.py" info firmware.img
python3 "Reversing Scripts/AllWinner IMAGEWTY - ROM Parser/main.py" extract firmware.img -o image_dump
python3 "Reversing Scripts/AllWinner IMAGEWTY - ROM Parser/main.py" repack image_dump rebuilt.img
يفحص ويستخرج ويعيد تعبئة حاوية full_img.fex الموجودة داخل صورة IMAGEWTY.
python3 "Reversing Scripts/AllWinner EGON - Firmware Parser/main.py" info full_img.fex
python3 "Reversing Scripts/AllWinner EGON - Firmware Parser/main.py" extract full_img.fex -o egon_dump
python3 "Reversing Scripts/AllWinner EGON - Firmware Parser/main.py" pack egon_dump \
--original full_img.fex \
-o rebuilt_full_img.fex
يستخدم المعيد التعبئة الملف الأصلي كقالب بحيث يمكن الحفاظ على التخطيط الأصلي والبيانات الوصفية أثناء استبدال الأقسام.
يفك ضغط حاوية BCL1 المستخدمة من قبل برامج SJ4000 الثابتة القديمة المبنية على Novatek ويمكنه مسح النتيجة بحثًا عن الأصول المضمنة وأقسام البرامج الثابتة.
python3 "Reversing Scripts/Novatek もな BCL1 - Firmware Parser/main.py" \
"Firmwares Files/OLD_SJCAM_Novatek_NT9665X/SJCAM001.bin" \
-o firmCode.bin \
--extract
يقوم ウタ.py بتنفيذ بروتوكول TCP الخاص المستخدم من قبل تطبيق الهاتف المحمول للتحكم في الكاميرا على المنفذ 6666. يتعامل مع تسلسل تسجيل الدخول للكاميرا ورسائل الإبقاء على الاتصال وإطارات IOCTRL ونقل الملفات وطلبات دفق الفيديو باستخدام مكتبة Python القياسية فقط.
قم بتوصيل جهاز الكمبيوتر الخاص بك بشبكة Wi-Fi للكاميرا وقم بتشغيل:
python3 "AVIOCTRL Script/ウタ.py"
الهدف الافتراضي هو 192.168.100.1:6666. يمكن توفير عنوان مختلف عند الحاجة:
python3 "AVIOCTRL Script/ウタ.py" --host 192.168.100.1 --port 6666 --debug
يمكن للعميل التفاعلي قراءة البطارية والتكوين، فحص بطاقة SD، التقاط الصور، بدء أو إيقاف التسجيل، سرد الملفات أو رفعها أو تنزيلها أو حذفها، طلب الصور المصغرة، تكوين Wi-Fi، طلب دفق الفيديو، وإرسال أوامر IOCTRL يدوية.
تنسيق بطاقة SD، حذف الملفات، تغيير إعدادات Wi-Fi، وإجراء إعادة ضبط المصنع يعدل الكاميرا. استخدم هذه الأوامر فقط على الأجهزة والبيانات التي تملكها.
تكشف البرامج الثابتة التي تم بحثها عن نقطة نهاية HTTP غير مصادق عليها أثناء تنشيط نقطة الاتصال بالكاميرا. تقبل تحميلات الملفات التعسفية وتكتبها مباشرة إلى بطاقة SD دون التحقق من العميل أو المحتوى الذي تم تحميله. هذا يتيح استبدال البرامج الثابتة بالكامل لأنه يمكن للمهاجم تحميل صورة eGON مخصصة باسم full_img.fex؛ تتعرف الكاميرا على اسم الملف هذا كحزمة OTA وتقوم بتثبيت البرامج الثابتة التي يتحكم فيها المهاجم من خلال تدفق التحديث العادي، كما لو كان تحديثًا رسميًا.
الاستغلال الناجح يعطي البرامج الثابتة التي تم تحميلها سيطرة كاملة على البرامج التي تعمل على الجهاز. يوضح إثبات المفهوم المضمن ذلك عن طريق استبدال التطبيق الأصلي بحمولة MiniGUI/AudioTrack مخصصة تشغل فيديو Bad Apple!! باستخدام إطارات RGB565 الخام وصوت PCM بعد تثبيت صورة OTA الضارة.
يحتوي دليل POC/ على:
run_exploit.sh، الذي يقوم بتحميل full_img.fex الذي يتحكم فيه المهاجم إلى الكاميراfull_img.fex، صورة البرامج الثابتة eGON المصنوعة التي تقبلها آلية تحديث OTA للكاميراバイバイ/، حمولة MiniGUI وAudioTrack Bad Apple!! المستخدمة لتوضيح تنفيذ الكود التعسفي بعد التحديثextract_rgb_pcm_from_mp4/، مساعد لتحويل فيديو العرض التوضيحي إلى بيانات RGB565 خام وPCMيتطلب مساعد تحويل الوسائط ffmpeg. يتوقع ملفات video.rgb و audio.pcm المولدة في جذر بطاقة SD الخاصة بالكاميرا بواسطة حمولة العرض التوضيحي.
إثبات المفهوم مدمر بطبيعته. يمكن لصورة غير صحيحة أو غير متوافقة أن تدمر الكاميرا بشكل دائم. لا تقم بتشغيله على أجهزة لا تملكها أو بدون مسار استرداد كامل.
تم إنشاء المشروع لأغراض الهندسة العكسية والتوافق والتعليم والبحث الأمني على أجهزة تم الحصول عليها بشكل قانوني من قبل المؤلف. SJCAM وAllwinner وNovatek وAndroid وأسماء مكوناتها مملوكة لأصحابها المعنيين.
يحتوي المستودع على كود مصدر أصلي إلى جانب عينات من البرامج الثابتة وقواعد بيانات الهندسة العكسية ورؤوس ومكتبات مشتركة من منتجات طرف ثالث. لا يتم منح ترخيص للمواد من طرف ثالث. راجع المصدر والقانون المعمول به قبل إعادة توزيع أو استخدام تلك الملفات خارج بيئة بحثية.
لا يوجد حاليًا ترخيص مفتوح المصدر على مستوى المستودع. يحتفظ مصدر wpa_supplicant بترخيصه الأصلي في Lelouch/modified_lelouch_wpa_supplicant_source/COPYING.
| المسار | المحتويات |
|---|
Lelouch/ | واجهة البرامج الثابتة المخصصة، بيئة البناء، الرؤوس المستردة، المكتبات المشتركة الخاصة، ومصدر wpa_supplicant المعدل |
Reversing Scripts/ | محللات ومُعيدو تعبئة لبرامج Allwinner IMAGEWTY وAllwinner eGON وNovatek BCL1 الثابتة |
AVIOCTRL Script/ウタ.py | عميل تفاعلي للبروتوكول TCP الخاص المستخدم من قبل SJCAM Zone |
Bin Files/ | قواعد بيانات IDA للتطبيقات الرئيسية والمكتبات المشتركة التي تم تحليلها أثناء البحث |
Firmwares Files/ | نماذج البرامج الثابتة لـ Allwinner وNovatek المستخدمة أثناء التطوير |
POC/ | إثبات مفهوم CVE-2026-52656، صورة eGON مصنوعة، وحمولة عرض الإطار/الصوت التجريبية |