W dawnych czasach

HTC bardzo mocno kombinowało z zabezpieczaniem urządzeń... dzisiaj już tylko CID lock jest. Kiedyś, zamiast CID locka, było m.in. szyfrowanie (no, bardzo słabe, ale jednak) obrazów ROMu oraz coś, o czym dzisiaj napiszę - sygnaturka urządzenia na karcie SD.
O co chodzi?
W dzisiejszych urządzeniach ze stajni HTC, aby wgrać ROM z karty SD (bez użycia kabla), wystarczy skopiować na nią obraz ROMu i tyle. W przypadku Himalayi jednak, to nie wystarczy, ponieważ obraz ROMu zostaje wzbogacony nagłówkiem, sygnaturką, która jest niestety indywidualna dla każdej pary urządzenie-karta. Jest to problem o tyle, że nie dość, że musimy mieć ową sygnaturkę z naszego urządzenia, to jeszcze na dodatek dla danej konkretnej karty SD!
1. Uzyskanie nagłówka.Skąd wziąć ten nagłówek? Trzeba zrobić backup swojego aktualnego ROMu. Do tego będzie nam potrzebny kabel i urządzenie w trybie bootloadera (
tutaj więcej info na temat bootloadera w Himalayi).
Wykonujemy backup ROMu na kartę za pomocą komendy
d2s (przykładowa sesja poniżej):
password BOOTLOADER
Pass.
USB>d2s
SD:Waiting for card insert.........
CMD3 for SD, it's OK, ready to get RCA from response.
SD:Detected one card
SD:ready for transfer OK
pc->drive.total_lba=F5800
pc->drive.num_heads=0
pc->drive.sec_p_track=0
pc->drive.num_cylinders=0
pc->drive.block_size=200
pc->drive.features=0
pc->drive.RCA=2
pc->drive.drv_type=40000000
pc->drive.securedAreaSize=0
pc->drive.securityDrv=0
pc->drive.busWidth=1
pc->drive.erasedSize=0
Total card size=1EB00000
SDCARDD2S+,cStoragePlatformType=FF
*******************************************************************************************************************************
Store image to SD/MMC card successful.
USB>
Gdy spróbujemy jednak odczytać kartę, okazuje się, że nie jest ona zapisana bynajmniej w postaci pliku - bootloader dosłownie sektor po sektorze zapisał kartę obrazem ROMu. Dlatego musimy teraz użyć specjalnego programu do odczytu naszego backupu. Pierwszym nasuwającym się narzędziem jest
ntrw, jednak ma on zasadniczą wadę - zrzuca do pliku zawartość całej karty, czyli jeśli mieliśmy w czytniku kartę 1GB, takiej wielkości plik nam utworzy. Z tego też powodu
itsme napisał program, który umożliwia odczyt/zapis dowolnej porcji, a także podgląd zawartości -
psdread, który załączam do tego tutoriala.
Za pomocą tego programu odczytujemy najpierw nagłówek obrazu. Załóżmy, że nasza karta otrzymała od systemu literkę
m: (tak wyszło to u mnie

). Wydajemy polecenie:
c:>psdread.exe m: 0 0x19c
W efekcie otrzymamy na ekranie np. coś takiego:
00000000: 48 49 4d 41 4c 41 59 41 53 20 20 20 20 20 20 20 HIMALAYAS
00000010: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 0000000000000000
00000020: 31 2e 30 36 20 20 20 20 20 20 20 20 20 20 20 20 1.06
00000030: 78 7e a8 50 96 f5 45 3b 13 0d 89 0a 1c db ae 32 x~.P..E;.......2
00000040: 20 9a 50 ee 40 78 36 fd 12 49 32 f6 9e 7d 49 dc 1.P..x6..I2..}I.
00000050: ad 4f 14 f2 44 40 66 d0 6b c4 30 b7 32 3b a1 22 .O..D.f.k.0.2;..
00000060: f6 22 91 9d e1 8b 1f da b0 ca 99 02 b9 72 9d 49 .............r.I
00000070: 2c 80 7e c5 99 d5 e9 80 b2 ea c9 cc dd 00 4c f2 ,.~...........L.
00000080: 53 41 30 30 e1 dc d6 ae 83 90 49 f1 f1 ff e9 eb SA00......I.....
00000090: b3 a6 db 1e 87 0c 3e 77 24 42 0d 1c 06 b7 47 de .......w$B....G.
000000a0: 6d 12 4d c8 43 2e cb a6 1f 03 5a 7d 09 38 25 1f m.M.C.....Z}.8%.
000000b0: 5d 9f d4 fc 96 f5 45 3b 13 0d 89 0a 1c d3 90 2d ].....E;.......-
000000c0: 48 9a 50 ee 40 78 36 fd 12 49 32 f6 9e 81 49 dc H.P..x6..I2...I.
000000d0: ad 4f 14 f2 44 40 66 d0 6b c4 30 b7 3c 84 f2 87 .O..D.f.k.0.....
000000e0: 61 49 d1 4f 0a d8 16 e7 72 e6 bb 12 84 34 a6 77 aI.O....r....4.w
000000f0: 02 37 e4 97 2c 74 cb c9 12 68 33 74 9e ad 87 d5 .7..,t...h3t....
00000100: fa 16 bb 11 ad ae 24 88 79 fe 52 db 25 43 e5 3c ......$.y.R.%C..
00000110: b3 12 4d c8 43 bb 8b a6 1f 03 5a 7d 09 38 25 1f ..M.C.....Z}.8%.
00000120: 5d d4 cb fc 96 f5 45 3b 13 0d 89 0a 1c db ae 32 ].....E;.......2
00000130: 20 9a 50 ee 40 78 36 fd 12 49 32 f6 9e 7d 49 dc ..P..x6..I2..}I.
00000140: ad 4f 14 f2 44 40 66 d0 6b c4 30 b7 32 3b a1 22 .O...D.f.k.0.2;.
00000150: f6 22 91 9d e1 8b 1f da b0 ca 99 02 b9 72 9d 49 .............r.I
00000160: 2c 80 7e c5 99 d5 e9 80 b2 ea c9 cc 53 bf 67 d6 ,.~.........S.g.
00000170: bf 14 d6 7e 2d dc 8e 66 83 ef 57 49 61 ff 69 8f ...~-..f..WIa.i.
00000180: 48 54 43 53 41 30 30 34 30 30 30 30 30 31 46 43 HTCSA004000001FC
00000190: 30 30 30 30 46 45 46 39 46 32 43 44 0000FEF9F2CD
W zasadzie punkt pierwszy tutoriala mamy już za sobą, jakbyś nie wiedział

ale dociągniemy tę sprawę do końca, w celu uzyskania pełnosprawnego backupu ROMu.
Spójrzmy na końcówkę tego bloku:
HTCS A0040000 01FC0000 FEF9F2CD
Mamy tutaj:
A0040000 - położenie obrazu ROM w urządzeniu
01FC0000 - rozmiar samego systemu ( czyli dziesiętnie 33292288 bajtów)
FEF9F2CD - suma kontrolna
Na samym końcu zrzutu obrazu znajduje się jeszcze znacznik końca obrazu, złożony z 4 bajtów (
HTCE), W związku z tym rozmiar całego obrazu ROMu wynosi sumę rozmiarów nagłówka, systemu i znacznika końcowego, czyli:
19C + 1FC0000 + 4 = 0x1FC01A0 bajtów łącznie.
Możemy więc już teraz spokojnie utworzyć plik obrazu naszego ROMu za pomocą komendy:
c:\> psdread.exe m: 0 0x1FC01A0 os.img
Natomiast sam nagłówek (sygnaturkę) w celach podmiany ROMu zapisujemy do osobnego pliku:
c:\> psdread.exe m: 0 0x19c header.img
2. Uzyskanie gołego pliku OS.nbW nowszych urządzeniach plik OS.nb jest codziennością, natomiast podczas normalnego gotowania pod Himalayę mogłeś się nawet nie zetknąć z tą czystą formą obrazu ROMu, jaką jest plik OS.nb. Jak go więc uzyskać?
Normalny obraz ROMu jest w postaci pliku nk.nbf. Jest to zaszyfrowany (no, powiedzmy... użyto algorytmu XOR) obraz. Rozkodowujemy go komendą:
c:\> xda2nbftool.exe -x nk.nbf nk.nba 0x20040304
w efekcie czego otrzymamy plik nk.nba. Następnie ten plik rozbieramy poleceniem:
c:\> dump.exe -o 0x40040 -l 0x1FC0000 nk.nba os.nb
W wyniku otrzymujemy gotowy do użycia plik OS.nb
3. Złożenie obrazu do wgrania na kartę.Złożenie obrazu końcowego jest trywialne... obraz to po prostu nasz nagłówek + OS.nb, czyli:
c:\> type header.img > SD_img.img
c:\> type OS.nb >> SD_img.img
Otrzymany plik SD_img.img jest plikiem, który należy wgrać na kartę SD:
c:\> psdwrite m: SD_img.img
Tutaj chciałbym polecić pewien program, o ile jeszcze z niego nie korzystacie.... wszystkie powyższe czynności, jak i wiele innych, znacznie łatwiej i szybciej wykonać można przy pomocy edytora binarnego HxD (tutaj można go pobrać), który jest wyposażony w szereg bardzo pomocnych funkcji (w tym również operacje na dyskach bezpośrednio oraz na obrazach dysku).
4. Wczytanie ROMu do urządzenia.Uwaga, to będzie najtrudniejsza część.....
No, może nie do końca

Wyłączamy urządzenie (całkiem! najlepiej wyjąć baterię), wkładamy spreparowaną kartę SD, włączamy urządzenie w tryb bootloadera. Pojawi się napis
"press power to flash". Wciskamy przycisk Power i czekamy, aż proces się zakończy.
NIE PRZERYWAMY PROCESU, NAJLEPIEJ PÓJŚĆ ZROBIĆ SOBIE KAWĘ/HERBATĘ/ZAPALIĆ !!!i.... to tyle

udanych flaszy!