
أبحاث الهندسة العكسية وبرامج ثابتة مخصصة لكاميرات إنترنت الأشياء القائمة على 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 التي تم بحثها.
| المسار | المحتويات |
|---|---|
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 مصنوعة، وحمولة عرض الإطار/الصوت التجريبية |
تحتوي بعض الدلائل على مواد من طرف ثالث أو مواد خاصة مستردة من الجهاز. وجودها هو لأغراض التوافق والبحث الأمني ولا يجعل تلك المكونات مفتوحة المصدر.
تم اختبار البناء على نظام 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، وإجراء إعادة ضبط المصنع يعدل الكاميرا. استخدم هذه الأوامر فقط على الأجهزة والبيانات التي تملكها.