Personal

From Lundman Wiki
Revision as of 11:42, 4 April 2014 by Lundman (talk | contribs)

Pioneer

My old amp (home cinema audio system) died, so this gave me a chance to buy a new set.

I bought the Pioneer MCS-434 - mainly as it was in the rough price bracket I was willing to pay for. (Ie, not too much).

This appear to share firmware file with these models:

MCS-838
MCS-737
MCS-434
MCS-333
MCS-FS131
MCS-FS232

and the file itself is named BD-HTS5_Vxxx


I don't care that it has a bluray player in it (but had no models without in the store) but that it could do UPNP Media devices was a nice surprise.

I found it working rather well with llink. Some minor troubles.

  • trickplay, ie, fast-forward and chapter skip did not work. llink was not sending the full DLNA flags required.
  • ObjID has a maximum length of 64 chars. Even though the spec has no limit, clearly the Pioneer does. Use shorter paths.
  • Refreshing (adding, or removing contents from a directory) does not work right.

The last issue is the only one I was unable to fix. The Pioneer subscribes to events in UPNP to be notified when ContainerID has been updated. llink informs it of that, and the Pioneer re-issues a listing, as you would expect.

But what it asks for in the listing is only 1 item. Ie, StartingIndex=1, RequestedCount=1. And no sorting. After that, it just stops. It is confusing as to what it expects to get here. I have sent a whole new record, as well as updated timestamps etc. But it also fails to refresh against Windows Media Center, so I think it is just plain broken.

I have attempted to contact Pioneer, and the developer of IPI/1.0 UPnP/1.0 DLNADOC/1.50 but I have had no replies.

So, attempting to gain access myself.


Firmware

The first file of the firmware is quite straight forward:

# binwalk MCS838_V00.38.bin 

DECIMAL         HEX             DESCRIPTION
-------------------------------------------------------------------------------------------------------
66580           0x10414         Mediatek bootloader
119052          0x1D10C         Mediatek bootloader
425000          0x67C28         U-Boot boot loader reference{
521792          0x7F640         uImage header, header size: 64 bytes, header CRC: 0xAC601819, created: Mon Oct  7 01:20:36 2013, image size: 1815444 bytes, Data Address: 0x3A00000, Entry Point: 0x3A00000, data CRC: 0xAD70A84B, OS: Linux,  CPU: ARM, image type: OS Kernel Image, compression type: none, image name: ""
539189          0x83A35         gzip compressed data, maximum compression, from Unix, last modified: Mon Oct  7 01:17:17 2013{file-epoch:1381076237}

4265104         0x411490        Squashfs filesystem, little endian, version 4.0, compression:gzip, size: 65376434 bytes, {file-size:65376434} 1189 inodes, blocksize: 65536 bytes, created: Mon Oct  7 01:46:24 2013 {
69772432        0x428A490       PNG image, 1920 x 1080, 8-bit/color RGB, non-interlaced
69810320        0x4293890       PNG image, 720 x 480, 8-bit/color RGB, non-interlaced
69834368        0x4299680       U-Boot boot loader reference{

Unpacking the squashfs, the bulk of the GUI code appears to be in;

-rwxr-xr-x  1 lundman  admin  20197340 Oct  7 01:45 usr/local/bin/bdpprog

and it would appear that it has some sort of secret code, based on;

g_onekey_secret_input
g_onekey_load_secret_input
g_onekey_sysinfo_secret_input
open_telnet
telnetd invoked ok
telnetd invoked failed

But IDA has not revealed anything that works. My best guess was

g_onekey_load_secret_input DCD 0x20103

Ie, 0 2 1 3, at the place where it prints the mcu and dsp versions. But that alone does not appear to work. Also checks for 0x03010200

I could roll my own firmware file, with telnetd running, and figure out whatever checksums they might have, but not that much time.

Preferably, Pioneer fixes the last issue and I don't have to do any of this :)