Editing LIC.DAT
Jump to navigation
Jump to search
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
=Description= | |||
*Paths | *Paths | ||
**dev_bdvd/'''PS3_GAME'''/LICDIR/'''LIC.DAT''' | **dev_bdvd/'''PS3_GAME'''/LICDIR/'''LIC.DAT''' | ||
Line 8: | Line 6: | ||
**etc... | **etc... | ||
Checked within Level 2 Kernel and possible via lv2syscall476<br> | |||
Final File size is: 0x10000 Bytes | |||
{ | |||
See also {{talk}} page | |||
=Example= | |||
00000000 50 53 33 4C 49 43 44 41 00 00 00 01 80 00 00 00 PS3LICDA........ | |||
00000010 00 00 09 00 00 00 08 00 00 00 01 00 00 00 00 01 ................ | |||
00000020 8C D3 A9 D8 00 00 00 00 00 00 00 00 00 00 00 00 ................ | |||
... | |||
00000800 01 42 4C 45 53 30 31 36 32 33 00 00 00 00 00 00 .BLES01623...... | |||
... | |||
=Structure= | |||
The structure is dependant of how the file is generated in PC and processed by the PS3 | |||
*CRC32 validation | |||
**LIC.DAT is readed from disc, and copyed to a different location excluding the padding at the end of the file (cropped from first byte of file up to '''lic_table_end''' offset) | |||
**The crc32 value stored at offset 0x20 is replaced by zeroes | |||
**Now is calculated the crc32 of the edited file | |||
**The crc32 calculated in previous step is validated against the crc32 value stored at offset 0x20 of the original LIC.DAT | |||
*CRC32 generation | *CRC32 generation | ||
<!--previous steps of how is generated the file could be longer to explain and not so easy to deduce--> | <!--previous steps of how is generated the file could be longer to explain and not so easy to deduce--> | ||
**A temporal file<!--or debug LIC.DAT for master disc?--> is created composed by: ''header'' + ''license table''. The crc32 value stored at | **A temporal file<!--or debug LIC.DAT for master disc?--> is created composed by: ''header'' + ''license table''. The crc32 value stored at offset 0x20 is filled with zeroes and works as a placeholder | ||
**Now is calculated the crc32 of the temporal file | **Now is calculated the crc32 of the temporal file | ||
**The crc32 calculated in previous step is stored at | **The crc32 calculated in previous step is stored at offset 0x20 replacing the zeroes placeholder | ||
**A padding is added after the '''lic_table_end''' offset to increase the final size of LIC.DAT up to 0x10000 | **A padding is added after the '''lic_table_end''' offset to increase the final size of LIC.DAT up to 0x10000 | ||
==Header== | |||
{|class="wikitable" | {|class="wikitable" | ||
|- | |||
! Offset !! Length !! Example !! Name !! Description | ! Offset !! Length !! Example !! Name !! Description | ||
|- | |- | ||
Line 54: | Line 46: | ||
| 0x8 || 0x4 || 0x00000001 || '''version''' || DAT structure version | | 0x8 || 0x4 || 0x00000001 || '''version''' || DAT structure version | ||
|- | |- | ||
| 0xC || 0x4 || 0x80000000 || ''' | | 0xC || 0x4 || 0x80000000 || '''type''' ? <!--type of what, master/retail disc?... or type of the EBOOT.BIN asociated with the first license in the table?--> || 0x80000000 = retail (used in LIC.DAT under directory PS3_GAME)<br>0x00000000 = debug (used in LIC.DAT under directory PS3_GM01, PS3_GM02, etc...) | ||
|- | |- | ||
| 0x10 || 0x4 || 0x00000900 || '''lic_table_end''' || License table absolute end offset. Calculated by: '' | | 0x10 || 0x4 || 0x00000900 || '''lic_table_end''' || License table, absolute end offset. Calculated by: ''license table start + (license amounts * license size)'' | ||
|- | |- | ||
| 0x14 || 0x4 || 0x00000800 || '''lic_table_start''' || License table absolute start offset. Always found 0x800 (static) | | 0x14 || 0x4 || 0x00000800 || '''lic_table_start''' || License table, absolute start offset. Always found 0x800 (static) | ||
|- | |- | ||
| 0x18 || 0x4 || 0x00000100 || '''lic_size''' || | | 0x18 || 0x4 || 0x00000100 || '''lic_size''' || License size. Always found 0x100 (static) | ||
|- | |- | ||
| 0x1C || 0x4 || 0x00000001 || '''lic_num''' || | | 0x1C || 0x4 || 0x00000001 || '''lic_num''' || License amount. Values found: 0x1 (single boot discs), 0x2 (dual boot discs), 0x3 (triple boot discs) | ||
|- | |- | ||
| 0x20 || 0x4 || | | 0x20 || 0x4 || 0xD8A9D38C || '''crc32''' || CRC32 from the first byte of LIC.DAT till the end of license table (includes the CRC32 placeholder filled with zeroes) | ||
|- | |- | ||
| 0x24 || ? || 0x0000... || '''padding''' || | | 0x24 || ? || 0x0000... || '''padding''' || is unknown where the header ends, probablly aligned to 0x200 but there are much more zeroes after it | ||
|} | |} | ||
==License table== | |||
Composed by one or more license entries | Composed by one or more license entries | ||
===License entry=== | |||
{|class="wikitable" | {|class="wikitable" | ||
|- | |- | ||
Line 81: | Line 73: | ||
| 0x1 || 0x0A (if '''id_type''' = 0x01)<br>0x2A (if '''id_type''' = 0x02)<br>0x25 (if '''id_type''' = 0x03) || 'BLES01623' || '''id''' || Bootable content identifyer (EBOOT.BIN related) | | 0x1 || 0x0A (if '''id_type''' = 0x01)<br>0x2A (if '''id_type''' = 0x02)<br>0x25 (if '''id_type''' = 0x03) || 'BLES01623' || '''id''' || Bootable content identifyer (EBOOT.BIN related) | ||
|- | |- | ||
| 0x0B (if '''id_type''' = 0x01)<br>0x2B (if '''id_type''' = 0x02)<br>0x26 (if '''id_type''' = 0x03) || up to | | 0x0B (if '''id_type''' = 0x01)<br>0x2B (if '''id_type''' = 0x02)<br>0x26 (if '''id_type''' = 0x03) || up to '''lic_size''' || 0x0000.... || '''padding''' || padding to fill the entry with zeroes up to the "license size" specifyed in the header | ||
|} | |} | ||
The first byte indicates type and size of following text: | The first byte indicates type and size of following text: | ||
* 0x01 means 0xA bytes, a regular TitleID (ex. BLES01623) with \0 terminating | * 0x01 means 0xA bytes, a regular TitleID (ex. BLES01623) with \0 terminating | ||
Line 90: | Line 81: | ||
* 0x03 means 0x25 bytes, a regular npdrm ContentID (ex. UP0002-BLES01623_00-0000111122223333) with \0 terminating | * 0x03 means 0x25 bytes, a regular npdrm ContentID (ex. UP0002-BLES01623_00-0000111122223333) with \0 terminating | ||
==Padding== | |||
Padding addded at bottom of LIC.DAT file, to make the total size a multiplyer of bluray disc sectors, and to protect the laser lens because otherway is too tiny and stressing for the laser | |||
This padding is added in the last step when the file is generated in PC, and removed in the first step before the crc32 hash is validated by the PS3 | |||
{{File Formats}} | {{File Formats}} | ||
<noinclude>[[Category:Main]]</noinclude> | <noinclude>[[Category:Main]]</noinclude> |