12 KiB
Hisense HE40E5600FFWTS — Root & Modding — Final Documentation
Ein Ordner, zwei Abteilungen, kein Suchen mehr.
TV: Hisense HE40E5600FFWTS, FW V0100.01.00A.N0410, LAN 192.168.188.94
Host: Linux, Python 3, arm-linux-gnueabihf-*; Host-IP im Beispiel 192.168.188.150
Stand: 2026-10-26 — Root + Dropbear-SSH (key-only) + PTY live bestätigt; Boot-Persistenz installiert (Reboot-Test offen). SFTP optional (statischer OpenSSH-sftp-server + gepatchter Dropbear).
Die drei Fragen in 30 Sekunden
Welches Linux?
Hisense/MediaTek Embedded Linux, kein Standard-Distro:
- Linux 3.18.25, ARMv7 (Cortex-A53, NEON/VFPv4), MediaTek MT53xx/MT5863-Klasse (
mt53xx-emmc,mt5863_sa_768_linux) - glibc 2.18, BusyBox 1.18.5, SysV-Init (
inittab/rcS/rc.local), kein systemd - Kein
/etc/os-release; FirmwareV0100.01.00A.N0410 - squashfs-ro:
/(38.8 MB, 100 %),/3rd(141 MB, 100 %) - ext4-rw:
/3rd_rw(1.1 GB, 56 %),/data(1.9 GB),/perm(3.9 MB);/spdataro - Kein overlayfs → Modding über rw-Partitionen +
mount --bind
Gibt es einen Package Manager?
Nein. Kein apt, dpkg, opkg, ipkg, rpm, apk, yum, pacman; keine /etc/opkg//var/lib/dpkg.
Konsequenz: statische ARM-Binaries/Shell-Skripte bauen, per File.download/SSH/base64/tar nach /3rd_rw bringen. Kein opkg install.
Wo ist das UI und wie läuft es?
TV-UI = Web-UI im hisenseUI-Browser (root, GLES):
/basic/autorun.sh (Zeile 168)
→ /3rd/opera4x/hisenseUI/start-UI.sh
→ ./bin/hisenseUI --hw-gles --jsplugins-dir=/3rd/UI_jsplugins \
--disable-web-security ... -u /3rd_rw/UI/index.html
- UI:
/3rd_rw/UI/index.html(PIXI), UI-ProzesshisenseUI(z. B. PID 589), DevTools 9223 - Launcher/Apps:
/3rd_rw/appdata/launcher/mitpreset.txt(26 vorinstallierte Tiles),Appinfo.json(User-Apps),deletedPresetApp.txt(ausgeblendet),data/Category*.xml,PicInfo.xml,res/ - LauncherService:
/3rd/launcherservice/bin/LauncherService(viastartLS.shausdelayrun.sh) - Native Apps / AM:
/basic/app_man -c /basic/am_config -s /basic/am_start.ini;dtv_svc,netflix,dialserver,samba,browser_base,securetime, …; Steuerung:am,<app>,:<verb>=<val> - Web-Browser (nicht das TV-UI):
hisense_browser(z. B. PID 1320),run-Browser.sh,--hw-dfb,--allow-file-access-from-files, DevTools 9224; hier läuft die Recon-Seite.
UI ≠ Browser: hisenseUI (TV-UI) und hisense_browser (Web-Browser) sind getrennte Prozesse mit eigenen Startskripten, Renderern, JS-Plugins und Debug-Ports.
Ordnerstruktur
hisense-he40e5600-root-modding/
├── README.md # diese Datei
├── dead-ends.md # kurze Liste der Sackgassen
├── SHA256SUMS
├── root/ # ABTEILUNG 1: Root
│ ├── ROOT-GUIDE.md # kompletter Weg (manuell + Skripte)
│ ├── README.md # kurzer Index
│ ├── tools/
│ │ ├── server.py # Host: Recon + /pub + /cmd + /recon + /dump
│ │ ├── recon.html # TV-Seite (fileXHR/listDir/HiBrowser-Hook)
│ │ ├── live_cmd.txt # optionaler Live-Kanal (leer)
│ │ └── pub/ # ausgelieferte Dateien
│ │ ├── libtvsysinfo.so # finaler Root-Payload
│ │ ├── dropbear/dropbearkey # statischer ARM-Dropbear 2022.83
│ │ ├── dropbear-sftp # Dropbear mit SFTPSERVER_PATH=/3rd_rw/sshd/sftp-server
│ │ ├── sftp-server # statischer OpenSSH-9.9p1-sftp-server
│ │ ├── authorized_keys # dein Public Key
│ │ ├── start_sshd.sh # Dropbear + passwd/PTY-Bindmounts
│ │ ├── root_loop.sh # Root-Kommandokanal
│ │ ├── hamservice-wrapper.sh # Boot-Hook
│ │ ├── deploy_sshd.sh # Installation als root
│ │ ├── verify.sh / rollback.sh
│ ├── scripts/
│ │ ├── host/
│ │ │ ├── prepare_usb.sh # ext4/MBR-Stick + tvi-Symlink
│ │ │ ├── start_http.sh # Server auf :9000
│ │ │ ├── plant_payload.js # Payload durch tvi schreiben
│ │ │ ├── upload_to_appdata.js # Dropbear/Deploy nach appdata
│ │ │ ├── run_root_cmd.js # root_cmd/root_out
│ │ │ ├── build_payload.sh # Payload reproduzieren
│ │ │ ├── build_tvi_payload.py # Builder (deterministisch)
│ │ │ ├── build_dropbear.sh # Dropbear aus sources/ bauen
│ │ │ ├── build_sftp_server.sh # statischen sftp-server bauen
│ │ │ ├── patch_dropbear_sftp.py # Dropbear-SFTP-Pfad patchen
│ │ │ └── install_sftp.sh # SFTP installieren/testen/auf 22 tauschen
│ │ └── tv/
│ │ ├── start_sshd.sh
│ │ ├── root_loop.sh
│ │ ├── hamservice-wrapper.sh
│ │ ├── deploy_sshd.sh
│ │ ├── verify.sh
│ │ ├── rollback.sh
│ │ ├── install_sftp_stage.sh # sftp-server + Test-Dropbear auf 2222
│ │ ├── enable_sftp.sh # Tausch auf 22 planen
│ │ └── swap_sftp.sh # Tausch detached ausführen
│ └── artifacts/
│ ├── tvi_original.so # Original-Lib (33.220 B)
│ └── keys/{authorized_keys,host-key-fingerprint.txt}
├── modding/ # ABTEILUNG 2: Modding
│ ├── README.md # Modding-Index/TL;DR
│ ├── 01-system-linux.md # Linux/SoC/Userland/PackageManager/Storage
│ ├── 02-boot.md # Boot, autorun, developer.sh, Services
│ ├── 03-ui.md # hisenseUI vs hisense_browser, UI-Daten, AM
│ ├── 04-modding.md # Rezepte: eigene App/UI/Services/Bloat
│ ├── 05-bloat.md # 26 Preset-Apps, Service-Matrix, Deaktivieren
│ ├── 06-toolchain-deploy.md # statisch ARM bauen/deployen, SSH/PTY
│ ├── 07-evidence-unknowns.md # Belege, Status, bekannte Unknowns
│ └── templates/
│ ├── developer.sh # früher Root-Boot-Hook
│ ├── custom-app.json # Appinfo-Tile
│ ├── hide-preset.json # deletedPresetApp.txt
│ ├── custom-ui.html # minimale Custom-UI
│ ├── start-UI-custom.sh # start-UI.sh mit custom.html
│ └── README.md
└── sources/
├── dropbear-2022.83.tar.bz2 # Offline-Buildquelle
└── openssh-9.9p1.tar.gz # Offline-Buildquelle für sftp-server
In 11 Schritten replizieren
# 1) Host: Stick (DESTRUKTIV)
sudo root/scripts/host/prepare_usb.sh /dev/sdX
# 2) Host: Server
root/scripts/host/start_http.sh
# 3) TV: http://<host-ip>:9000/recon.html öffnen
# 4) TV-Konsole: USB-Dev anpassen, plant_payload.js ausführen
# -> /3rd_rw/loglevel/lib/libtvsysinfo.so (33500 B, SHA 37b13f…)
# 5) TV rebooten
# 6) Root prüfen: /3rd_rw/root_proof.txt = ROOT_EXEC_TVI
# 7) TV-Konsole: upload_to_appdata.js
# 8) TV-Konsole: run_root_cmd.js (deploy_sshd.sh)
# 9) ssh root@192.168.188.94
#10) Rollback: /bin/sh /3rd_rw/appdata/rollback.sh
#11) SFTP optional: root/scripts/host/install_sftp.sh
# danach: sftp root@192.168.188.94
Vollständig: root/ROOT-GUIDE.md
Modding: modding/README.md
Sackgassen: dead-ends.md
Integrität: sha256sum -c SHA256SUMS
Was der Root-Weg macht (Kurz)
- Browser ist root:
hisense_browserUID/GID 0,CapEffvoll, Single-Process, kein Seccomp. - USB-Schreibprimitive: dangling Symlink
tviauf ext4 →IsSubDentry-Bypass → neue Root-Datei. - Loader-Shadow:
libtvsysinfo.soist direktesNEEDED;LD_LIBRARY_PATH-Index 17 ist/3rd_rw/loglevel/lib; dort liegt die Shadow-Lib. - DT_INIT-Payload: appended Code am Dateiende, RX
p_filesz/memszerweitert,DT_INIT=0x81c4; unlink self, Proof, fork/execroot_loop.sh, Original-Init. - Root-Loop:
root_cmd.sh→root_out.txt. - SSH: Dropbear 2022.83 statisch, key-only,
/etc/passwd-Bind (Root-Home/3rd_rw/sshd/home), devpts auf/dev/shm/pts→ bind/dev/pts(PTY),HamService-Wrapper für Boot-Persistenz. - SFTP (optional): Dropbear hat keinen eigenen sftp-server; statischer OpenSSH-9.9p1-sftp-server + Dropbear mit
SFTPSERVER_PATH=/3rd_rw/sshd/sftp-server. Installation testet Port 2222, dann Tausch auf 22; danachsftp root@….
Sicherheit / Spielregeln
- Kein Flash, kein
.pkg, kein Bootloader. Rootfs//3rdsind squashfs-ro; Änderungen nur in/3rd_rw,/data,/perm, Bind-Mounts. - SSH ist key-only root im LAN. Kein Passwort; privaten Key schützen; nicht ins Internet exponieren.
- SFTP ist optional und root-equivalent. Key-only wie SSH; Installation testet zuerst 2222, Backup
/3rd_rw/sshd/dropbear.nosftp, Rollback im Root-Guide. - Der Root-Loop ist root-equivalent. Wer
root_cmd.shschreiben kann (Browser root), kann Root-Befehle ausführen. - Backup vor UI-/AM-/Launcher-Eingriffen. Besonders
/3rd_rw/UI/index.html,/3rd_rw/appdata/launcher/*,/basic/am_config/am_start.ini. - SSH/Root als Rettungsweg behalten. Kaputte UI = schwarzer Bildschirm;
hisenseUIper SSH/root-Loop killen/neu starten, Seite aus Backup zurückholen. developer.shist ein früher Root-Hook (vorms_service/UI/app_man/delayrun); Fehler dort können den Boot/UI beeinflussen./3rd_rw/patch/opera4xist ein full bind mount über/3rd/opera4x; nur mit vollständiger Kopie/Symlink-Baum; für einzelne Dateien lieber Datei-Bind-Mount viadeveloper.sh.- Keine Secrets im Ordner: kein Root-Hash, kein privater SSH-Key; nur Public Key + Host-Fingerprint.
- Nicht alles ist getestet: Root/SSH/PTY live; die Modding-Rezepte sind aus statischen/live Daten abgeleitet; Status in
modding/07-evidence-unknowns.md.
Verifikationsstatus (Auszug)
| Punkt | Status |
|---|---|
| Browser root / CapEff voll | CONFIRMED live |
| USB-ext4-Symlink-Bypass | CONFIRMED live |
libtvsysinfo-Shadow / DT_INIT |
CONFIRMED live (ROOT_EXEC_TVI, Self-Unlink) |
| Root-Loop / Kommandokanal | CONFIRMED live (uid=0, root_out.txt) |
| Dropbear-SSH / Port 22 / Pubkey root | CONFIRMED live |
| PTY / interaktive Shell | CONFIRMED live (pts/0) |
| SFTP (optional) | statischer sftp-server + gepatchter Dropbear; Installer testet 2222 vor 22; TV-Test nach Install |
| HamService-Boot-Persistenz | eingerichtet; Reboot-Test im Root-Guide |
| Modding-Rezepte / Custom UI / Bloat | UNVERIFIED (static/live abgeleitet, noch nicht alle ausgeführt) |
Host-Key (SSH): SHA256:7tFL8xcKAh7+wC/3T5QiutxYMqcBTM7p+P4uEMAOwts
Dein Key: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKLzgdRrwTGWMSHIurddPrQBY/2zOk+BlsU4jJWtPh/B (Fingerprint SHA256:RzgGjRHkR756azwKjS6mTClWOZFa/nyLMdi7TqgrHoY)
Provenienz
Der frühere Run-Ordner docs/re/20261025-vidaa-takeover/ (im alten Projekt) bleibt als Evidence/History erhalten. Für die Replikation und das Modding brauchst du ihn nicht: dieser Ordner enthält den finalen Stand, die Binaries, die Skripte und die Doku. Die alten Experimente/Dead Ends sind in dead-ends.md kurz zusammengefasst.