Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Niewidzialny Seagate Baracuda 7200.12 ST31000528AS Fw:CC38

Labinnah 26 Apr 2013 18:58 15276 36
Computer Controls
  • #31
    Labinnah
    Level 9  
    Witam ponownie

    Niestety analiza danych zgranych z dysku na razie niewiele pomaga w odzyskaniu danych. Co prawda okryłem parę ciekawostek z informatycznego punktu widzenia (jak będą chętni to podzielę się), ale do wgrania części firmware'u z talerzy przez terminal zbliżyło mnie to w bardzo niewielkim stopniu.

    W każdym razie udało mi się stwierdzić że można pobierać dane komendami "+" i "-" porcjami 4-bajtowymi. To skłoniło mnie do poprawy mojego programiku do zrzutu danych z dysku. Tym razem jest to ładniejszy kawałek kodu, i co ważniejsze działa lepiej i szybciej niż starsza wersja. Licencja to ISC więc możecie z nim robić prawie wszystko co chcecie. I tak jak poprzednio, chociaż programik nie powinien robić żadnych szkód, używacie go na własne ryzyko.

    Dostępnych poleceń jest więcej niż poprzednio więc nie będę ich tu cytował. Aby wyświetlić listę wszystkich wpiszcie "h [Enter]" po odpaleniu programu. Program ma też kilka parametrów w linii poleceń dostępnych po uruchomieniu go np. z opcją "-h".

    Z nowości:
    - Wspominane transfery po 4 bajty na raz.
    - Dostępne wyższe szybkości terminali (najwyższa stabilna jaką udało mi się uzyskać to 460800 - co dało transfery z dysku ~2 kiB/s).
    - Tryb interaktywny - można wpisywać komendy z palca przez mój program.
    - Poprawione problemy z inicjalizacją terminala i zamykaniem plików zrzutów.
    - Jest szansa że będzie działał na dyskach 7200.10 i starszych - nie mam jednak jak tego przetestować.
  • Computer Controls
  • #32
    Labinnah
    Level 9  
    Udało mi się dokonać iniekcji kodu na dysk. Na razie była to taka testowa pierdółka:
    Code: asm
    Log in, to see the code


    Zwrócił on zależnie od miejsca iniekcji takie wartości:
    Code:
    Hello World!
    
    CPSR=0x0000001F SP=0x060C6594 MainID=0x41259661 CoreFeatID=0x41259661

    lub
    Code:
    Hello World!
    
    CPSR=0x00000092 SP=0x04001188 MainID=0x41259661 CoreFeatID=0x41259661


    W każdym razie nawet ten kod jest przydatny. MainID=0x41259661 mówi nam że rdzeń ARM w dysku to "ARM966E-S".

    Chętnym mogę opisać metodę iniekcji, niestety dla każdego modelu (>7200.11) a najprawdopodobniej także wersji firmware'u pewnie ważne zmienne będziecie musieli ustalić sami.


    Edit:

    Udało mi się przy pomocy poniższego kodu odczytać zawartość flash'a bezpośrednio z chipa:

    Code: asm
    Log in, to see the code


    Zawartość wydaje się być częściowo zakodowana - brak ciągów znaków, które występują w pamięci RAM. Jest natomiast kod wyświetlający początkowe "Rst 0x20M", którego w RAM'ie już nie ma.


    Edit 2:

    Dokonałem próby zmierzenia prędkości procesora przy pomocy wewnętrznego timera dysku o częstotliwości 15MHz i petli NOPów. Przy założeniu 1 instrukcja 1 takt zegara, odpowiednio dla 8 NOPów i 18 NOPów + dekrementacja + skok, otrzymałem odpowiednio wartości ~162MHz i ~148MHz. Można wiec przypuszczać że procesor dysku ma częstotliwość ~150MHz.


    Interesuje kogoś bootloader przedstawiający się tak jak poniżej?
    Code:
    SEA-3 Yeti Boot ROM 2.0  (12/06/2007)
    
    Copyright Seagate  2007

    Boot Cmds:
     DS
     AP <addr>
     WT <data>
     RD
     GO
     TE
     BR <divisor>
     BT
     WW
    ?
     RET

    Aby się do niego dostać trzeba wysłać do dysku w trakcie ładowania kodu z pamięci flash dwa znaki "U" (duże U). W praktyce sprowadza się to do trzymania w terminalu "Shift+U" w trakcie podłączania zasilania do dysku.
  • Computer Controls
  • #33
    stibur
    Level 10  
    Miałem problem z tym dyskiem (ST31000528AS), że w pewnym momencie zaczął nienaturalnie stukać głowicą, a przy następnym uruchomieniu pokazywał 30 MB.
    Zaryzykowałem pokazane na początku wątku zwarcie dwóch punktów na płycie i postukał inaczej głowicami. Następne uruchomienie bez zwarcia i zdziwienie. Odzyskałem dysk.
    Pozdrowienia dla założyciela wątku.
  • #34
    Labinnah
    Level 9  
    Dzięki.

    Cieszę że Ci się udało, ale sądzę że zwarcie tych pinów nie miało związku z "samonaprawieniem" się twojego dysku.

    W każdym razie ten dysk uważałbym za wysoce niepewny i skopiował z niego dane na inny najszybciej jak to tylko możliwe.
  • #35
    Shuin
    Level 2  
    Labinnah przestałeś pisać, udało ci się odzyskać dane z dysku czy ostatecznie wszystko poleciało do kosza?
  • #36
    Labinnah
    Level 9  
    Ani jedno ani drugie, nadal próbuje - ale coraz bardziej mi się wydaje że nic z tego nie będzie.


    A nie piszę dlatego, że nie widzę sensu w celowym podbijaniu tematu i zamieszczaniem informacji o systemie operacyjnym na dysku jakie udało mi się znaleźć, a na które na forum nie ma najwyraźniej zapotrzebowania. Szczególnie że od ostatniego wpisu nic szczególnego nie odkryłem.

    Ale skoro zostałem już wywołany do tablicy, to jeżeli będą chętni mogę zamieścić:
    - poprawioną wersję mojego programiku (dodane wysyłanie eksploitów na dysk 7200.12, "U-flood" do wejścia do bootloadera);
    - opis komend bootloadera;
    - dekoder plików macierzy dysków pasujących do aktualizacji danym firmwarem (tylko pliki *cfs z nagłówkiem "020410" i niedoskonały dla "092881").

    Edit:
    Kupiłem uszkodzony 500GB 7200.12 ST3500418AS z fw: CC38 i widzę światełko w tunelu. Udało mi się z niego zgrać pamięć z załadowanymi overlay'ami. Powinienem to zrobić dawno temu - już bardzo wstępna analiza pozwoliła mi ustalić gdzie leży overlay nr 4.

    Jest to adres 0x00330000 oraz 0x06130000 rozmiar 0x30000. Zawartość jest identyczna - co więcej pamięć od 0x00200000-0x00400000 i 0x06000000-0x06200000 wydaje się być połączona. Zmiana w pierwszym zakresie jest od razu widoczna w drugim i na odwrót.

    Spróbowałem od razu wgrać go do pamięci mojego dysku, ale niestety jest jeszcze jakieś sprawdzenie załadowania tego overlay'a i nadal próbuje go odczytać z talerzy. Ale pewnie wystarczy znaleźć i wy-NOP-ować to sprawdzenie i pewnie zadziała. Niepokoi mnie jednak to że firmware pomiędzy 500GB a 1TB nieznacznie się różni...

    Przy okazji - poniżej przykład jak wygląda nagłówek overlay'a
    Code:

    04000000 066140FC 00000300 02000000
    BCE81406 00000000 00000000 00001306
    B8423400 FFFFFFFF FFFFFFFF FFFFFFFF
    00000000 FFFFFFFF FFFFFFFF FFFFFFFF
    FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
    FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
    FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
    FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF

    Pod offsetem:
    0x00 - numer overlaya
    0x04 - prawdopodobnie "nazwa/deskryptor" pliku z tym overlay'em
    0x08 - rozmiar
    0x1C - adres docelowy

    Bez problemu można takie odnaleźć w plikach *lod z aktualizacją firmware'u.
  • #37
    Labinnah
    Level 9  
    Najprawdopodobniej to koniec zabawy.

    Udało mi się wgrać overlay nr 4 i 5, który okazał się też potrzebny. Wy-NOP-ować kodu się nie dało bo jest jakieś zabezpieczenie, ale znalazłem miejsce gdzie jest zapisywane jakie overlay'e są załadowane. Wpisanie tam odpowiednich wartości pomogło. Komendy 'Q' na 'C' (pomoc) i 'x' na '7' (opis stref) zadziałały pięknie. Niestety 'X' na '7' (oporność przedwzmacniaczy) już nie. Głowice zaczęły kilkać przez jakieś pół minuty a potem dostałem info o opornościach 'FFFF'. Spróbowałem jeszcze 'N1' na '1' ale po tej komendzie głowice zaczęły kilkać permanentnie. 'V1' na 'T' (lista slipów) natomiast dał mi LED'a - tu zapewne wyszła niezgodność fimware'u pomiędzy 500GB a 1TB.

    Niestety wszystko wskazuje na uszkodzenie fizyczne a nie logiczne dysku. Ale jeżeli ktoś jeszcze ma pomysł, co mogę zrobić, to chętnie posłucham.