
Reverse-Engineering-Forschung und Custom-Firmware für Allwinner-V3-basierte IoT-Kameras, einschließlich Firmware-Parsern, einem AVIOCTRL-Client und einem Proof of Concept für CVE-2026-52656 zum OTA-Firmware-Austausch ohne Authentifizierung.

Auf Portugiesisch (Brasilien) wechseln
Reverse-Engineering-Notizen, Firmware-Werkzeuge, Proof-of-Concept-Code und eine Custom-Firmware-Schnittstelle für die Allwinner-V3-Version der SJCAM SJ4000 Air.
Forschungsartikel
Dieses Repository enthält den Code und die Artefakte, die während der Forschung entstanden sind. Der vollständige Artikel erläutert die Untersuchung vom ersten Firmware-Dump bis zur Lelouch-Custom-Firmware.
Den vollständigen Forschungsartikel auf Englisch lesen) oder auf Portugiesisch.
Diese Arbeit begann mit einer einfachen Frage: Wie viel Kontrolle kann ich über eine günstige Action-Kamera erlangen, ohne Dokumentation, Quellcode oder Herstellerunterstützung?
Es stellte sich heraus, dass die Kamera einen Allwinner-V3-SoC und ein stark modifiziertes Android-4.4-System verwendet. Ihre Hauptanwendung sdv kommuniziert über Binder mit proprietären Kamera- und Anzeigediensten, rendert die Oberfläche mit MiniGUI, stellt einen HTTP-Server für Firmware-Updates bereit und kommuniziert über ein proprietäres Protokoll mit der Anwendung SJCAM Zone.
Das Repository dokumentiert den Weg von der Firmware-Extraktion bis zu einem funktionierenden Ersatz für sdv. Es enthält Werkzeuge für die während der Forschung angetroffenen Firmware-Formate, IDA-Datenbanken für die rekonstruierten Binärdateien, einen AVIOCTRL-Client, den Quellcode der Lelouch-Custom-Firmware und den Proof of Concept zu CVE-2026-52656.
Der Code zielt auf das untersuchte Allwinner-V3-Board mit einem ST7789V-Display-Controller und einem GC4653-Bildsensor. Ältere SJ4000-Geräte auf Basis des Novatek NT9665X sind nur als Teil der früheren Forschung enthalten und verwenden ein anderes Firmware-Format. Produktnamen allein reichen nicht aus, um Kompatibilität herzustellen.
Lelouch ist eine Ersatzoberfläche für das ursprüngliche sdv-Programm der Kamera. Es wurde gegen die proprietären Bibliotheken entwickelt, die aus der Firmware gewonnen wurden, und verwendet dieselben internen Schnittstellen wie die ursprüngliche Anwendung.
Die aktuelle Implementierung umfasst:
HerbCamera- und CedarDisplay-Schnittstellenwpa_supplicantLelouch ist keine vollständige Distribution und keine generische Firmware für jedes als SJ4000 verkaufte Produkt. Es hängt von den Bibliotheken, dem Kernel, den Diensten, dem Partitionslayout, dem Display-Controller, dem Bildsensor und der Board-Konfiguration ab, die in dem untersuchten Allwinner-V3-Gerät verwendet werden.
| Pfad | Inhalt |
|---|---|
Lelouch/ | Custom-Firmware-Schnittstelle, Build-Umgebung, wiederhergestellte Header, proprietäre Shared Libraries und modifizierter wpa_supplicant-Quellcode |
Reversing Scripts/ | Parser und Repacker für Allwinner-IMAGEWTY-, Allwinner-eGON- und Novatek-BCL1-Firmware |
AVIOCTRL Script/ウタ.py | Interaktiver Client für das proprietäre TCP-Protokoll, das von SJCAM Zone verwendet wird |
Bin Files/ | IDA-Datenbanken für die wichtigsten ausführbaren Dateien und Shared Libraries, die während der Forschung analysiert wurden |
Firmwares Files/ | Allwinner- und Novatek-Firmware-Beispiele, die während der Entwicklung verwendet wurden |
POC/ | CVE-2026-52656-Proof-of-Concept, manipuliertes eGON-Image und die Demo-Payload für Framebuffer/Audio |
Einige Verzeichnisse enthalten Material von Dritten oder proprietäres Material, das vom Gerät stammt. Ihre Bereitstellung dient der Interoperabilität und Sicherheitsforschung und macht diese Komponenten nicht zu Open Source.
Der Build wurde unter x86-64-Linux getestet. Du benötigst Python 3, GNU Make, Git, eine C/C++-Build-Umgebung und Netzwerkzugriff für den anfänglichen Download der Toolchain.
git clone https://github.com/keowu/sjcam.git
cd sjcam/Lelouch
python3 prepare_build.py
prepare_build.py lädt ein auf API-Level 14 festgelegtes Android-Sysroot und den ARM-Cross-Compiler arm-linux-androideabi-4.6 in Lelouch/android_compilers/ herunter. Anschließend baut es das modifizierte statische wpa_supplicant und führt make aus. Die heruntergeladenen Compiler-Dateien und erzeugten Binärdateien werden von Git ignoriert.
Die resultierenden Dateien sind:
Lelouch/Lelouch
Lelouch/wpa_supplicant
Um nach Änderungen an den C++-Quellen neu zu bauen:
cd Lelouch
make clean
make
Das erzeugte Lelouch-Binary soll /bin/sdv im extrahierten Root-Dateisystem ersetzen. Der Wi-Fi-Stationsmodus erwartet das gebaute wpa_supplicant ebenfalls unter /mnt/extsd/sta/wpa_supplicant auf der SD-Karte der Kamera.
Der experimentelle Gesichtserkennungscode sucht nach der erzeugten Kaskadendatei unter:
/mnt/extsd/frontalface.casc
Das Repository enthält eine vorab erzeugte Kaskade und den Konverter, der zu ihrer Erstellung verwendet wurde:
cd Lelouch/gen_cascade
python3 gen_cascade.py haarcascade_frontalface_alt2.xml frontalface.casc
Das vollständige Verfahren zum Extrahieren, Ersetzen des Root-Dateisystems, Neupacken und Flashen mit LiveSuit ist im Forschungsartikel dokumentiert, der oben auf dieser Seite verlinkt ist.
Alle Parser-Einstiegspunkte sind Python-3-Skripte mit integrierter --help-Ausgabe und ohne Python-Abhängigkeiten von Drittanbietern.
Liest das äußere LiveSuit-Firmware-Image, extrahiert dessen Dateien und erstellt aus einem extrahierten Verzeichnis ein Image neu.
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
Untersucht, extrahiert und packt den full_img.fex-Container neu, der sich im IMAGEWTY-Image befindet.
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
Der Packer verwendet die Originaldatei als Vorlage, damit das ursprüngliche Layout und die Metadaten erhalten bleiben können, während Partitionen ersetzt werden.
Dekomprimiert den BCL1-Container, der von älteren Novatek-basierten SJ4000-Firmwares verwendet wird, und kann das Ergebnis nach eingebetteten Assets und Firmware-Abschnitten durchsuchen.