Itubes Library Format 2 Reversing the iTunes Library File Format
A few days ago I wrote some things about the iTunes library file format. Today I will try to write the remainder about this subject.
A small recap
In the previous post I discussed the structure of the encrypted file and there should also be enough information for a mediocre programmer to decrypt a .itl
file by yourself. In this post I will be using a decrypted .itl
file.
The base structure
Every .itl
file starts with an hdfm
information header. The approximate format of this header block is documented the older file format from iTunes v1.x - v3.x. Basically after this everything is the same as in the older file format, except the header ‘names’. The hdsm
now is reversed to msdh
. The whole file is basically build of msdh
blocks with variable sizes.
Here is a small screenshot that shows the header and the msdh
blocks:
Structure of the ‘msdh’ blocks
The msdh
blocks contain the headerLength
, totalLength
and blockType
as most important fields. After the msdh
header, there is blockData
that can contain various other types of structures. These structures very often look similar to this C-style structure:
typedef struct
{
char signature[4]; //"mlrh" as signature identification.
int headerLength; //total length of the header.
char unknown[headerLength - 8]; //structure-specific data.
} mlrh;
A screenshot of how such a grammar looks:
Content of the ‘msdh’ blocks
The blockType
field of the msdh
block says something about the contents of the block. The value 4
for example has blockData
that contains a path to the music library, /Users/xxxxxx/Music/iTunes/iTunes%20Media
in my case. blockData
can also contain other blocks. The miah
and mith
blocks for example both contain mhoh
blocks. mhoh
blocks are some kind of general-purpose block that can contain a lot of things.
Conclusion
The basic file format was all I needed to continue fixing requiem, so this it all for now. Maybe I will blog more about my progress later. You can find the grammar here, feel free to expand on it and don’t forget to send me the latest version if you do ;)
Merry Christmas,
mrexodia
blog comments powered by Disqus