EMBEDDED LINUX / REVERSE ENGINEERING / AUTOMOTIVE MARCH 2026
Deep Dive

Reverse Engineering a
Wireless CarPlay Adapter

From mystery firmware  →  Allwinner V851S3, Tina Linux, SWUpdate & SquashFS

Embedded Linux Reverse Engineering Security Analysis ARM Cortex-A7
// TL;DR — Final Findings
DeviceWireless CarPlay / Android Auto adapter
SoCAllwinner V851S3 (ARM Cortex-A7)
OSTina Linux (OpenWrt-derived)
Boot formatAndroid boot image (kernel-only)
Root FSSquashFS (XZ-compressed)
Update systemSWUpdate (.swu)
LY3370Board / project identifier, not the SoC

Wireless CarPlay "4-in-1" adapters are everywhere: small USB dongles that magically turn a wired infotainment system into wireless CarPlay and Android Auto. Sold under dozens of brand names with virtually no technical documentation.

This post documents a complete reverse-engineering journey of one such adapter, starting with a vague firmware image and ending with a full understanding of the update mechanism, boot format, operating system, root filesystem, and the actual SoC behind the product.


Initial Clues: "LY3370"

The investigation started with a firmware file named update.img, associated with a "Ziyun series" wireless CarPlay adapter. Early hints surfaced identifiers like LY3370, but nothing clearly pointed to a known processor or platform. Time to dig deeper.


Step 1 — SWUpdate & the .swu Container

A hex dump of the firmware immediately revealed readable ASCII strings: update.swu and sw-description. This pointed directly to SWUpdate — a well-known open-source embedded Linux update framework.

Note
Key takeawayThis device uses a standard, open-source update system — not a proprietary firmware updater.

Step 2 — The "Kernel" Is an Android Boot Image

The extracted kernel file opened with the magic string ANDROID!, identifying it as an Android boot image. Despite the name, this does not imply Android userspace — the format is simply reused as a container for a bare Linux kernel.

Parsing the boot image header revealed the embedded product name:

v851s3-lybox_rtl

Step 3 — The Real SoC: Allwinner V851S3

The string v851s3 directly identifies the platform as Allwinner V851S3 — an ARM Cortex-A7 SoC commonly used in compact embedded Linux systems.

  • LY3370 is a board/project identifier from the OEM
  • The actual silicon is Allwinner V851S3

Step 4 — The Ramdisk That Isn't One

The Android boot image claimed a ramdisk of just 12 bytes. Dumping those bytes revealed a simple placeholder:

ramdisk.img\n

This is intentional. The system uses no initramfs — the kernel mounts its root filesystem directly from a separate partition.

Step 5 — The Real System: SquashFS Root

The customer image turned out to be a SquashFS filesystem:

  • SquashFS v4, XZ-compressed, ~6 MB on-disk
  • Contains init scripts, CarPlay/Android Auto binaries, Wi-Fi drivers & firmware

Final Architecture

SWUpdate (.swu) └── cpio archive ├── sw-description ├── kernel ← Android boot image (kernel-only) └── customer ← SquashFS root filesystem (XZ)

Security Implications

01 — Brand Names Are Meaningless

The same hardware and firmware stack ships under many product names. A vulnerability in one brand likely affects all the others — patch availability depends on the OEM, not the reseller.

02 — Open-Source Components Everywhere

Linux kernel, BusyBox/OpenWrt-derived userspace, SWUpdate. Good for transparency — but only if vendors actually keep them updated.

03 — No Secure Boot, No Signature Enforcement

⚠ Risk
The firmware update process does not appear to enforce cryptographic signatures or secure boot. Modified firmware can be flashed; attackers with update access could persistently compromise the device — a potential attack surface inside the vehicle.

04 — SquashFS: Double-Edged Sword

Immutable FS improves reliability and boot speed, but security fixes require full firmware updates. If vendors stop shipping updates, known vulnerabilities remain unpatched indefinitely.

05 — It's a Computer, Not a Dongle

Wi-Fi, Bluetooth, USB, direct interaction with the infotainment system. This device should be threat-modeled like any other networked embedded computer — not a passive cable replacement.

Take
Convenience features added to vehicles increasingly bring general-purpose computers along for the ride.

Credential Scan — Filesystem Deep Dive

With the SquashFS root extracted, a full static credential scan was run across all text files, shell scripts, binaries (via strings), and kernel modules. Several findings stand out.

06 — Hardcoded Aliyun Access Key in CGI Binary

⚠ Critical
Hardcoded cloud credentials baked into the OTA binary The file ota/www/cgi-bin/index.cgi contains a static Alibaba Cloud Access Key ID compiled directly into the binary. It is used to authenticate against Alibaba STS to generate temporary credentials for uploading firmware and logs to OSS buckets.
AccessKeyId  : LTAI5tPPbTZ5JjXvbGWnHe6g
Account ID   : 1869969722566981
Role ARN     : acs:ram::1869969722566981:role/ramosstest
Session name : user01
STS endpoint : https://sts.aliyuncs.com
Sig method   : HMAC-SHA1

The role name ramosstest strongly suggests a development/test role left in production firmware. The OSS buckets targeted are cpbox (Shenzhen, China) and cpbox-abroad (US West). Every device running this firmware ships the same key ID — extractable by anyone with a screwdriver and a copy of strings.

07 — Developer Identity Embedded in Binary

The same CGI binary contains the string wangyanshen immediately adjacent to the credential block, and references the company domain liaoyuan.tech. This is consistent with a developer username or internal identifier compiled in at build time rather than injected at runtime.

08 — PSK Logged in Plaintext During CarPlay Connection

⚠ Risk
Strings extracted from lylinkapp include startCp psk = %s, startCp ssid = %s, and startCp bssid = %s. The device logs the phone's Wi-Fi PSK in plaintext to logcat at connection time. The OTA web interface exposes a /cgi-bin/index.cgi?id=logcat endpoint that returns a compressed logcat dump — meaning the PSK is retrievable over the local network from any device connected to the adapter's AP.

09 — OTA Web Interface Has No Authentication

The BusyBox httpd config (ota/httpd.conf) is minimal — no auth directives, no TLS. The CGI endpoint accepts firmware uploads, triggers reboots, reads/writes MTD partitions, retrieves logcat, and can switch the device between AP and P2P Wi-Fi modes. All of this is accessible to any client on the same network segment as the adapter with zero credentials required.

H:/usr/ota/www
E404:index.html

10 — Hardcoded Network Defaults

Multiple shell scripts (lyLoadModule.sh, p2p.sh, ly_wifi_mode.sh) fall back to hardcoded network values when environment variables are unset. These are predictable across all devices of this type.

AP  IP  : 192.168.1.101 / 255.255.255.0
P2P IP  : 192.168.43.1  / 255.255.255.0
P2P freq: 2437 MHz (2.4GHz ch6) or 5180 MHz (5GHz)
Note
No private keys or certificates found on-disk — the SquashFS bundle contained no .pem, .key, .crt, or .p12 files. Runtime credentials (STS tokens, session PSKs) exist only in memory and writable partitions not present in this image.

What began as an opaque consumer gadget turned out to be a well-structured, understandable embedded Linux system — with all the power and responsibility that implies.