Forum CDRinfo.pl

Forum CDRinfo.pl (https://forum.cdrinfo.pl/)
-   Homebrew (https://forum.cdrinfo.pl/f106/)
-   -   Odszyfrowywanie PS3 HDD (https://forum.cdrinfo.pl/f106/odszyfrowywanie-ps3-hdd-92014/)

Berion 30.04.2016 00:34

Ilość załączników: 1
Zrobiłem taki skrypt:
Kod:

erk_data=$(xxd -p -u -c 32 -l 32 "eid_root_key")
erk_iv=$(xxd -p -u -c 16 -s -16 "eid_root_key")
openssl aes-256-cbc -e -in "ata_data_seed" -out "ata_data_key" -K $erk_data -iv $erk_iv -nopad -nosalt
openssl aes-256-cbc -e -in "ata_tweak_seed" -out "ata_tweak_key" -K $erk_data -iv $erk_iv -nopad -nosalt
openssl aes-256-cbc -e -in "endec_data_seed" -out "endec_data_key" -K $erk_data -iv $erk_iv -nopad -nosalt
openssl aes-256-cbc -e -in "endec_tweak_seed" -out "endec_tweak_key" -K $erk_data -iv $erk_iv -nopad -nosalt
adk=$(xxd -p -u -c 32 ata_data_key)
atk=$(xxd -p -u -c 32 ata_tweak_key)
edk=$(xxd -p -u -c 32 endec_data_key)
etk=$(xxd -p -u -c 32 endec_tweak_key)
echo "$adk" "$atk" | xxd -r -p > hdd_key.bin
echo "$edk" "$etk" | xxd -r -p > vflash_key.bin

Generuje mi klucze 64 bajtowe, a podobno mają być 16. Jak k*a!? Przecież to niemożliwe skoro "data" to pierwsze 32 bajty ERK, a "iv" kolejne 16.

No i to jest dla Slim bo dla Fat w ogóle nie rozumiem tek wiki. Wszystko co się tyczy odszyfrowywania HDD to jest wielki chaos i burdel... Raz piszą że to jest AES-XTS, innym razem że AES-256-CBC (dla Slim). Jak dam "aes-128-xtc" to żadnych kluczy nie generuje i żadnego komunikatu nie dostaję.

Cytat:

Slim Consoles

XTS-AES-128 is used to encrypt all data on PS3 HDD.
XTS is NOT CBC!!! It's AES-ECB with tweak XORing. AES-CBC is impractical for HDD encryption. Each sector can be encrypted/decrypted independantly from other HDD sectors.
Good paper about XTS-AES: http://ntnu.diva-portal.org/smash/ge...753/FULLTEXT01
VFLASH is encrypted twice. First with ENCDEC keys and then with ATA keys.
Tweak and data XTS keys are of size 32 bytes but only the first 16 bytes are used.
You can set and clear ATA keys with my Linux ps3encdec device driver which i use to test HDD/VFLASH encryption. But be careful, never set/clear ATA keys while some HDD regions/partitions are mounted !!! You will corrupt your data on your HDD !!!

Phat Consoles

On the PHAT consoles AES-CBC-192 is used for HDD encryption and AES-CBC-128 for VFLASH encryption.
So no tweak and tweak key here. Each sector is encrypted with the same zeroed IV.
VFLASH is encrypted once with ENCDEC key and zeroed IV!
Data key is of size 32 bytes but only the first 24 bytes are used for HDD and 16 bytes for VFLASH.
See also http://www.multiupload.nl/6PIFV4GKSH (contains scripts of ENCDEC emulator for both types of consoles).
VLASH na razie zostawiam w spokoju, chcę się skupić na działającym generowaniu kluczy HDD_KEY.

Nie rozumiem co oznacza, że "ata_data_key" i "ata_tweak_key" mają 32 bajty, ale tylko 16 jest używane. Czyli "ata_data_key" i "ata_tweak_key"mają po pierwsze 16 bajtów czy reszta 16 jest zerowana?

Z fatem jest gorzej, a to na facie będę testować... Napisali, że "no tweak and tweak key here" czego w ogóle nie rozumiem. Jeśli "ata_tweak _key" nie bierze udziału w generowaniu hdd key to jak ja mam to zrobić?

Czy oni do ***** po pijaku pisali tą dokumentację? Cały dzień siedzę nad tym i niczego konstruktywnego nie wymyśliłem...
Nie ma się nawet kogo o to zapytać bo albo nikt nic nie wie albo ma w dupie. Czemu ta scena jest tak sp*a? :/

MajsterPopsuj 23.10.2018 01:25

Ilość załączników: 3
Niżej jest teoretycznie poprawny skrypt generujący parę kluczy HDD Key i VFLASH Key. Należy odczytać ERK na konsoli i wrzucić w to samo miejsce co skrypt plik "eid_root_key.bin".
Kod:

        erk_data=$(xxd -p -u -c 32 -l 32 "eid_root_key.bin")
        erk_iv=$(xxd -p -u -c 16 -s -16 "eid_root_key.bin")
        echo "0: D92D65DB057D49E1A66F2274B8BAC508" | xxd -r > 1.tmp
        echo "0: 83844ED756CA79516362EA8ADAC60326" | xxd -r > 2.tmp
        echo "0: C3B3B5AACC74CD6A48EFABF44DCDF16E" | xxd -r > 3.tmp
        echo "0: 379F55F5777D09FBEEDE07058E94BE08" | xxd -r > 4.tmp
        echo "0: E2D05D4071945B01C36D5151E88CB833" | xxd -r > 5.tmp
        echo "0: 4AAA298081D8C44F185DC660ED575686" | xxd -r > 6.tmp
        echo "0: 02083292C305D538BC50E699710C0A3E" | xxd -r > 7.tmp
        echo "0: 55F51CBAA535A38030B67F79C905BDA3" | xxd -r > 8.tmp
        cat 1.tmp 2.tmp > ata_data_seed.bin
        cat 3.tmp 4.tmp > ata_tweak_seed.bin
        cat 5.tmp 6.tmp > encdec_data_seed.bin
        cat 7.tmp 8.tmp > encdec_tweak_seed.bin
        rm *.tmp
        openssl aes-256-cbc -e -in "ata_data_seed.bin" -out "ata_data_key.bin" -K $erk_data -iv $erk_iv -nopad -nosalt
        openssl aes-256-cbc -e -in "ata_tweak_seed.bin" -out "ata_tweak_key.bin" -K $erk_data -iv $erk_iv -nopad -nosalt
        openssl aes-256-cbc -e -in "encdec_data_seed.bin" -out "encdec_data_key.bin" -K $erk_data -iv $erk_iv -nopad -nosalt
        openssl aes-256-cbc -e -in "encdec_tweak_seed.bin" -out "encdec_tweak_key.bin" -K $erk_data -iv $erk_iv -nopad -nosalt
        adk=$(xxd -p -u -c 32 -l 16 ata_data_key.bin)
        atk=$(xxd -p -u -c 32 -l 16 ata_tweak_key.bin)
        edk=$(xxd -p -u -c 32 -l 16 encdec_data_key.bin)
        etk=$(xxd -p -u -c 32 -l 16 encdec_tweak_key.bin)
        echo "$adk" "$atk" | xxd -r -p > hdd_key.bin
        echo "$edk" "$etk" | xxd -r -p > vflash_key.bin

I o ile dysk twardy ze Slim daje się deszyfrować i zamontować, o tyle tylko partycje dev_hdd0 i dev_hdd1. Z jakiegoś powodu dev_flash2 nie działa...

Zaś dysk z Fat w ogóle nie mogę odszyfrować.

Czy ktoś mógłby poświęcić trochę czasu i spróbować na jego modelach? W przykładzie niżej gotowa lista czynności, jeśli HDD nie jest obrazem dysku tylko podłączonym dyskiem należy zastąpić loop1 fizycznym odpowiednikiem (sda, sfb, sdc itd. rzecz jasna zgodne z prawdą, sprawdź za pomocą lsblk).

Kod:

losetup loop1 /media/mint/DMP/ps3hdd_slim.img
'/home/mint/ps3/makedev.sh' '/home/mint/ps3/bswap16.elf' /dev/loop1
cryptsetup create -c aes-xts-plain64 -d /home/mint/ps3/hdd_key.bin -s 256 ps3hdd /dev/nbd0 && kpartx -a /dev/mapper/ps3hdd
ls -la /dev/mapper/
hexdump -C /dev/mapper/ps3hdd | head -16
mount -t ufs -o ufstype=ufs2,ro /dev/dm-2 /home/mint/ps3/dev_hdd0
cd /home/mint/ps3/dev_hdd0 && ls -la

umount -l /home/mint/ps3/dev_hdd0
kpartx -d /dev/mapper/ps3hdd && cryptsetup remove ps3hdd && ./stop-nbd0
losetup -d /dev/loop1

Dla vflash podobno trzeba dodać "-p 8" żeby przeskoczył o 8 sektorów. A dla Fat algorytmem podobno jest "aes-cbc-essiv:sha256".

Załączam programy i skrypty (działa na Linux Mint 18.3, ale na 19.0 v1/v2 już nie!). Nie działa na dystrybucjach live bo loop0 musi być wolny!

Jeśli hexdump zwróci sieczkę, a nie w większości zera to znaczy, że deszyfracja się nie powiodła.

MajsterPopsuj 23.10.2018 21:54

Ilość załączników: 1
Udało się. Slimowy HDD rozpykany.

https://forum.cdrinfo.pl/attachment....1&d=1540324344

Nadal jednak nie mam pojęcia co zrobić z Fat-owym. Poniższa klepanina daje sieczkę:

Kod:

cryptsetup create -c aes-cbc-essiv:sha256 -d /home/mint/ps3/hdd_key_FAT.bin -s 256 ps3hdd /dev/nbd0


Wszystkie czasy w strefie CET. Aktualna godzina: 08:51.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc.