This documents shows some USB logs from a NetMD download session, in order to figure out the protocol and use NetMD minidisc units under Linux.
00 18 08 10 10 01 00 00 09 18 08 10 10 01 00 00 00 18 00 08 00 46 f0 03 01 03 80 ff 09 18 00 08 00 46 f0 03 01 03 80 00My guess is that this indicates the start of a download session (command 81 is probably the complement of this command).
00 18 00 08 00 46 f0 03 01 03 11 ff 09 18 00 08 00 46 f0 03 01 03 11 00 01 00 00 35 3b a3 00 00Don't know what this is. This data seems to be always the same for a specific minidisc player. Looks like a unique ID for a specific minidisc player. Others people have found the following data
09 18 00 08 00 46 f0 03 01 03 11 00 01 00 00 1a 60 85 00 00and
09 18 00 08 00 46 f0 03 01 03 11 00 01 00 00 08 2d cd 00 00
00 18 00 08 00 46 f0 03 01 03 12 ff 00 38 00 00 00 38 00 00 00 01 00 00 00 09 00 01 00 01 00 00 00 00 01 ca be 07 2c 4d a7 ae f3 6c 8d 73 fa 60 2b d1 0f f4 7d 45 9c 72 da 81 85 16 9d 73 49 00 ff 6c 6a b9 61 6b 03 04 f9 ce 09 18 00 08 00 46 f0 03 01 03 12 01 00 38 00 00 00 38My guess is that this provides info about the PC to the MD. The data is the same for the silence sample as for the sine wave. This is probably the EKB (enabling key block), since parts of this data is also found in a file in C:\Program Files\Common Files\Sony Shared\OpenMG\Ekb The 16-byte block starting with 01 ca be .. is identical to the contents of bytes 0x58-0x67 in file 00010001.ekb. The 24-byte block starting with 0f f4 7d .. is identical to the contents of bytes 0x08-0x1f in file 00010001.ekb.
00 18 00 08 00 46 f0 03 01 03 20 ff 00 00 00 xx xx xx xx xx xx xx xx 09 18 00 08 00 46 f0 03 01 03 20 00 00 00 00 xx yy yy yy yy yy yy yy8-byte sequences xx and yy are different each time, even when downloading the same track. My guess is that keys/hashes are exchanged.
00 18 00 08 00 46 f0 03 01 03 22 ff 00 00 xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx 09 18 00 08 00 46 f0 03 01 03 22 00 00 0032-byte sequence xx is different each time, even when downloading the same track. Submit some kind of hash???
00 18 00 08 00 46 f0 03 01 03 28 ff 00 01 00 10 01 ff ff 00 ww ww 00 00 yy yy zz zz zz zz 0f 18 00 08 00 46 f0 03 01 03 28 00 00 01 00 10 01 00 01 00 ww ww 00 00 yy yy zz zz zz zzThis sub-command seems to initiate the actual download.
*** BULK DATA *** 09 18 00 08 00 46 f0 03 01 03 28 00 00 01 00 10 01 tt tt 00 ww ww 00 00 yy yy zz zz zz zz xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xxThe bulk data seems to start with a 0x18 length header:
00 18 00 08 00 46 f0 03 01 03 48 ff 00 10 01 tt tt xx xx xx xx xx xx xx xx 09 18 00 08 00 46 f0 03 01 03 48 00 00 10 01 tt ttVerify hash??? It takes quite a long time between request and response (several seconds), so apparently this command requires physical access to the disc. tt is the track number just recorded, same as in the 09 18 00 08 00 46 f0 03 01 03 28 response.
00 18 00 08 00 46 f0 03 01 03 21 ff 00 00 00 09 18 00 08 00 46 f0 03 01 03 21 00 00 00 00Thrash keys??? No data is exchanged with this command. This command may be the complement of the earlier command 0x20, that exchanged 8 byte sequences between PC and MD.
00 18 00 08 00 46 f0 03 01 03 81 ff 09 18 00 08 00 46 f0 03 01 03 81 00End secure session??? This sub-command is probably the complement of sub-command 0x80.
Sub-command | Data to MD | Data to PC | Guessed function |
---|---|---|---|
80 | - | - | Begin download session??? |
11 | - | 8 bytes constant | Unique player ID |
12 | 40 bytes constant | - | Enabling key block (EKB) |
20 | 8 bytes variable | 8 bytes variable | Exchange random |
22 | 32 bytes variable | - | Encrypted content key??? |
28 | sample type and length | 32 bytes variable track nr | Authentication??? + download start |
48 | 8 bytes variable track nr | - | Authentication??? |
21 | - | - | Discard random |
81 | - | - | End download session??? |
Data returned from sub-command 0x20 is different every time.
0x20 can also be issued without any arguments:00 18 00 08 00 46 f0 03 01 03 20 ff 09 18 00 08 00 46 f0 03 01 03 20 00 00 00 1d xx xx xx xx xx xx xx xxwhere xx is again an 8-byte random sequence, again different every time.
Sub-command 0x20 can be issued at any time (no 0x80 command required).
00 18 00 08 00 46 f0 03 01 03 20 ff 09 18 00 08 00 46 f0 03 01 03 20 00 00 00