Since the ScanHdd analysis work has cooled off a little bit, I decided to turn my attention to the file format used by $ony. Specifically, I looked at the OtherOS.self and updater.sce files.
Here are some findings:
There seems to be a lot of relative pointers within the file (offset values).
- SCE file format has 0x90 bytes of header at the beginning of the file.
- There is a "SCE\0" magic marker at the beginning of the file.
- The SCE header length seems to be mentioned at 0x30.
- The file size is stored as 0x7bf bytes smaller than what it is at 0x40.
- There IS an ELF image in both files starting at exactly 0x90 bytes into the file (right after the header).
- ELF image checks out fine except for the following issues:
- OS ABI version is of unknown type (0x66)
- Segment header table's offset is waaay out of bounds relative to file size (0xDF2548 for the otheros.self file that is only 0x149D07 bytes)
- Therefore, we cannot determine what sections exist in the file (.text, .init, .data, etc.)
Also, there are file size related values. I have not been able to decipher them yet, help is welcome.
There is a 16 byte block that is exactly the same at the beginning of the ELF section, after (what seems to be) more program header/section header/segment header tables:
0x627CB180 8AB938E3 2C8C0917 08726A57