DEV Community

syrex1013
syrex1013

Posted on

I Replaced My Huawei E3372’s 2014 WebUI With a 10.5 KB Dark-Tech SPA

If you have ever owned a Huawei E3372 HiLink stick, you know the ritual: plug it in, open 192.168.8.1, and get greeted by a UI that feels like it time-traveled from 2014 — because it basically did. Ancient jQuery frames. A “helpful” no-SIM redirect that traps you in a 307 loop. Half the interesting hardware locked behind menus that pretend you are a casual prepaid user, not someone building an SMS gateway or poking at RF.

I got tired of that. So I built a modded firmware toolkit that swaps the stock WebUI partition for a modern, offline, dark-tech SPA — and unlocks the engineering toys the stick already had.

Repo: github.com/syrex1013/huawei-e3372-modded-firmware


Why bother with a USB LTE stick in 2026?

Because the E3372 is still everywhere: IoT benches, travel routers, SMS gateways, lab SIMs, backup LTE. The radio is fine. The Balong V7R2 (Cortex-A5) is doing its job. The weak link is the front door — mini_httpd serving a UI that fights you the moment a SIM is missing or unregistered.

Stock experience in three moods:

  1. No SIM → redirect loop, console gone, settings gone.
  2. Want AT commands → good luck finding a sane path.
  3. Want live RSRP/SINR → refresh-and-pray.

I wanted a cockpit, not a brochure.


What I actually built

This project does two related things:

  1. A modern WebUI — vanilla HTML/CSS/JS SPA that lives in the 0x5B0000 WEBUI partition.
  2. A Python flashing toolkit — repack the CPIO, talk Balong HDLC over USB, flash the partition, relay AT commands.

No React. No CDN fonts. No analytics. The whole gzipped SPA is about 10.5 KB. It respects prefers-color-scheme, so dark or light follows your system.

Feature tour (the fun part)

Cockpit & telemetry

Live RSRP, RSRQ, RSSI, SINR, Cell ID, PCI, and traffic meters — polled from /api/net/signal-para without full page reloads. Watching SINR move while you tilt the stick is weirdly satisfying.

Messaging suite

SMS inbox/outbox, GSM-7 / Unicode part counter, interactive USSD (*100# and friends), SMSC manager. Gateway builders, this is the page you open first.

Cellular & SIM

LTE band mask selector, PLMN scan/register, multi-profile APN editor, PIN lock. Manual band locking without spelunking through carrier-locked menus.

Engineering suite

Direct AT console with history and presets (ATI, AT^VERSION, AT^GODLOAD, AT^HCSQ?), raw NVRAM read/write by ID, USB mode switcher (14dc HiLink / 1566 PCUI / 1442 true DLOAD), plus diagnostics.

Router controls

DHCP pools, port forwards, DMZ, SIP ALG, domain/MAC filters — still there, just not buried under dusty frames.

And the one that sold me on shipping it: zero no-SIM lockout. Boot without a card and you still get AT, router settings, and status. The stick stays a tool, not a prepaid kiosk.


How the making-of felt

Under the hood this is less “magic firmware” and more respectful surgery:

  • Host: Balong V7R2, Linux 3.4, BusyBox mini_httpd 1.19
  • Target: CPIO in partition 0x005B0000 (~15.7 MB ceiling)
  • Tooling: Python 3 + pyusb, custom Balong HDLC framing, SCSI mode switching

The happy path in the README looks roughly like:

  1. repack_webui.py — inject webui_mod/app.html, rebuild the CPIO, patch config.xml so first-run redirects die.
  2. Kick the modem into true download mode (12d1:1442) with AT^GODLOAD.
  3. flash_webui.py — stream ~2,119 × 4 KB blocks over HDLC, soft-reset.
  4. Browse http://192.168.8.1 and smile.

I am not going to paste a brick-risk novel here — the repo has the exact steps, prerequisites (libusb, pyusb), and compatibility notes. Flash carefully; this is real hardware.

Tested on: E3372s-152, E3372s-153, E3372h-153 (with the right partition offset).


Who this is for

  • IoT folks who need a stick that stays usable without a SIM
  • People building SMS / USSD automation
  • Network admins who want band locks and live RF numbers
  • Hardware researchers who want AT + NVRAM without fighting the UI

If you just want “plug in and browse,” stock is fine. If you want a lab instrument that happens to be an E3372, this is the vibe.


Caveats

Custom firmware flashing can brick a modem if you flash the wrong image or interrupt a write. Read the repo, match your model, and do not do this on the only stick that keeps grandma online.

MIT licensed. Contributions and screenshots of your dark-mode cockpit are welcome.


Links

Grab an E3372, open the cockpit, and give that 2014 jQuery a well-earned retirement.

— Adrian

Top comments (0)