
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.
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.
python3 "Reversing Scripts/Novatek もな BCL1 - Firmware Parser/main.py" \
"Firmwares Files/OLD_SJCAM_Novatek_NT9665X/SJCAM001.bin" \
-o firmCode.bin \
--extract
ウタ.py implementiert das proprietäre TCP-Protokoll, das von der mobilen Anwendung verwendet wird, um die Kamera über Port 6666 zu steuern. Es behandelt die Login-Sequenz der Kamera, Keepalive-Nachrichten, IOCTRL-Frames, Dateiübertragung und Videostream-Anfragen ausschließlich mit der Python-Standardbibliothek.
Verbinde deinen Computer mit dem Wi-Fi-Netzwerk der Kamera und führe Folgendes aus:
python3 "AVIOCTRL Script/ウタ.py"
Das Standardziel ist 192.168.100.1:6666. Bei Bedarf kann eine andere Adresse angegeben werden:
python3 "AVIOCTRL Script/ウタ.py" --host 192.168.100.1 --port 6666 --debug
Der interaktive Client kann den Batteriestand und die Konfiguration auslesen, die SD-Karte untersuchen, Fotos aufnehmen, Aufnahmen starten oder stoppen, Dateien auflisten, hochladen, herunterladen oder löschen, Miniaturen anfordern, Wi-Fi konfigurieren, den Videostream anfordern und manuelle IOCTRL-Befehle senden.
Das Formatieren der SD-Karte, das Löschen von Dateien, das Ändern der Wi-Fi-Einstellungen und das Durchführen eines Factory-Resets verändern die Kamera. Verwende diese Befehle nur bei Hardware und Daten, die dir gehören.
Die untersuchte Firmware stellt bei aktivem Kamera-Hotspot einen nicht authentifizierten HTTP-Endpunkt bereit. Dieser akzeptiert beliebige Datei-Uploads und schreibt sie direkt auf die SD-Karte, ohne den Client oder den hochgeladenen Inhalt zu validieren. Dies ermöglicht einen vollständigen Firmware-Austausch, da ein Angreifer ein benutzerdefiniertes eGON-Image mit dem Namen full_img.fex hochladen kann; die Kamera erkennt diesen Dateinamen als OTA-Paket und installiert die vom Angreifer kontrollierte Firmware über ihren normalen Update-Ablauf, als wäre es ein offizielles Update.
Eine erfolgreiche Ausnutzung verschafft der hochgeladenen Firmware die vollständige Kontrolle über die auf dem Gerät laufende Software. Der enthaltene Proof of Concept demonstriert dies, indem er die ursprüngliche Anwendung durch eine benutzerdefinierte MiniGUI/AudioTrack-Payload ersetzt, die nach der Installation des schädlichen OTA-Images das Bad Apple!!-Video mit rohen RGB565-Frames und PCM-Audio abspielt.
Das Verzeichnis POC/ enthält:
run_exploit.sh, das die vom Angreifer kontrollierte Datei full_img.fex auf die Kamera hochlädtfull_img.fex, das manipulierte eGON-Firmware-Image, das vom OTA-Update-Mechanismus der Kamera akzeptiert wirdバイバイ/, die MiniGUI- und AudioTrack-Payload Bad Apple!!, die verwendet wird, um die Ausführung beliebigen Codes nach dem Update zu demonstrierenextract_rgb_pcm_from_mp4/, ein Hilfsprogramm zum Konvertieren des Demonstrationsvideos in rohe RGB565- und PCM-DatenDas Medienkonvertierungs-Hilfsprogramm erfordert ffmpeg. Die erzeugten Dateien video.rgb und audio.pcm werden von der Demonstrations-Payload im Wurzelverzeichnis der SD-Karte der Kamera erwartet.
Der Proof of Concept ist von Natur aus zerstörerisch. Ein fehlerhaftes oder inkompatibles Image kann die Kamera dauerhaft unbrauchbar machen. Führe ihn nicht gegen Geräte aus, die dir nicht gehören, oder ohne einen vollständigen Wiederherstellungspfad.
Das Projekt wurde für Reverse Engineering, Interoperabilität, Bildung und Sicherheitsforschung an Hardware erstellt, die der Autor legal erworben hat. SJCAM, Allwinner, Novatek, Android und die Namen ihrer Komponenten gehören ihren jeweiligen Eigentümern.
Das Repository enthält originären Quellcode sowie Firmware-Beispiele, Reverse-Engineering-Datenbanken, Header und Shared Libraries, die aus Produkten von Dritten stammen. Für Material von Dritten wird keine Lizenz gewährt. Prüfe die Herkunft und das anwendbare Recht, bevor du diese Dateien außerhalb einer Forschungsumgebung weiterverteilst oder verwendest.
Derzeit gibt es keine repositoryweite Open-Source-Lizenz. Der wpa_supplicant-Quellcode behält seine eigene Upstream-Lizenz in Lelouch/modified_lelouch_wpa_supplicant_source/COPYING.
| 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 |