SNEWS 21 - HTC TOUCH ROMBACKUP

Nos, kezdjük azzal, hogy az ember gyarló, és szeretne mindenféle extrát. Szeretne telefonálgatni, szeretne PDA-t bökdösni, jól érezni magát. Hosszas töprengés, szenvedés után végül vásárol egy HTC Touch névre hallgató kis csodát, amin ugyan mobilvindóz fut, de hát miért is ne…?. A készülék gyönyörű, a mobilvindóz szoftverellátottsága jó, szóval minden együtt van, hogy boldog tulajdonosai lehessünk egy Touch-nak. Egy idő után felmerül az emberben, hogy a készülékkel szállított operációs rendszer némileg elavult, és/vagy egyéb szoftveres igényeink vannak, fel kéne rakni egy másik ROM-ot. A ROM tartalmazza az operációs rendszert, magyarul ha frissítjük, (remélhetőleg) több, jobb, szebb alkalmazáshoz jutunk, illetve talán takarékosabban bánik a CPU-idővel, illetve a memóriahasználattal. Az új operációs rendszer feltöltése viszont nem csak játék és mese… Mindig veszélyekkel jár rengeteg buktatója van, nem biztos, hogy azt kapjuk amit szeretnénk, s visszatérnénk az eredeti operációs rendszerünkhöz. Esetleg mégis elégedettek vagyunk, de még mindig beüthet valami hiba… A szerviz ha  „idegen” ROM-ot talál a gépen, jó magyar szokás szerint mindenért, akár egy kipukkant hangszóróért, kiégett világításért (bármiért) az általunk feltett ROM-ot teszi felelőssé, és a garancia elszállt.

Na, innen jön az igény, hogy mielőtt bármilyen új operációs rendszert telepítünk, a régiről jó lenne egy biztonsági mentést készíteni, hisz ezzel bármikor „gyárira” visszaállíthatjuk a telefonunkat. Persze nem akarok hitegetni senkit, jó eséllyel észre lehet venni, hogy más ROM is fenn volt a gépen, de egy felületes szervizmunkánál remélhetőleg nem fog feltűnni, hisz mondjuk egy hangszórócseréhez nem kell a készülék memóriájában kutakodni.

Mielőtt nekilátsz, kérlek vedd figyelembe a következőket!

  • Először olvasd végig a cikket, szerezd be a hozzá való szoftvereket, és nézd meg, hogy működnek-e.
  • Ha nem vagy biztos a tudásodban, a szoftverek, hardverek stabil működésében, inkább ne próbálkozz, kérj meg valakit, aki már csinált ilyet.
  • Az alábbi leírt folyamat elvileg nem okoz kárt semmilyen szoftverben vagy hardverben (nekem sem tette), ám erre semmi garancia nincs.
  • Nem szabad „mechanikusan” követni a leírást, ha valahol  jelentősebb eltérés merül fel a leírás és a gyakorlat után, próbálj meg máshol is utánaolvasni a backupnak!

Nos, nézzük hogyan is kellene ezt csinálni:

Először is az xda-developers weboldaláról letöltjük a backuphoz szükséges szoftvereket:

Mint látszik, nem is kevés dologra lesz szükségünk, de ne essünk kétségbe.

Kezdésnek a letöltött cuccokat ki kéne tömöríteni. Mivel jelen pillanatban teljesen érdektelen a programok egyéb irányú felhasználása, mindent kiborítunk egyetlen mappába, hogy kéznél legyenek. Mivel az „akció” java része az asztali gépünk parancssor-ablakában zajlik, így célszerű olyan mappát készíteni neki, amiben a lehető legkevesebb (=0) szóköz van. Legyen ez a mappa mondjuk a C meghajtónkon, s hívjuk mondjuk _ROM-nak. Miután mindent kiborítottunk ebbe a mappába, nyitunk egy parancssort, s könyvtárat váltunk:

C:\Document and Settings\User>cd c:\_rom

Ezzel elértük, hogy a parancsorunk már készen áll a nagy akcióra. Ezután a készüléket csatlakoztatjuk egy USB-porthoz, lehetőleg úgy, hogy ha szükséges, tudjuk használni még a készüléket. Abból nem lehet senkinek baja, ha kikapcsol a telefonon mindenféle kommunikációs lehetőséget, és flight módba állítja. (Én nem tettem, de lehet hogy csak szerencsém volt vele.) Miután a systray-en (a magyar win tán „értesítési terület”-nek nevezi) kizöldült az ActiveSync ikonja, minden együtt van az első próbához:

C:\_ROM>pdocread.exe –l

Ha az eredmény a következő, akkor a telefonunk nem díjazza az aláíratlan alkalmazásokat:

Copying C:\_ROM\itsutils.dll to WCE:\windows\itsutils.dll
Could not update itsutils.dll to the current version, maybe it is inuse?
try restarting your device, or restart ActiveSync

Nos, akkor felkapjuk a telefont, és kicsit belenyúlkálunk a lelkivilágába. Remélehtőleg mindenkinek van valami registry editora, legrosszabb esetben egy Total Commander CE is megfelel.

A következő kulcsot kell módosítanunk a telefon regisztrációs adatbázisában:

HKLM\Security\Policies\Policies\00001001

A kulcs típusa dword, és elvileg 2 az értéke. A típust meghagyjuk dword-nek, az értéket viszont 1-re módosítjuk. Ha a kulcs 1, akkor a rendszer engedi az aláíratlan (unsigned) alkalmazásokat, ha bármi más, akkor nem. Tehát beírjuk szépen a 2 helyére az 1-et, elmentjük, kilépünk, stb, majd egy határozott resettel érvényesítjük is a változásokat. Vissza a kályhához: ha megvolt a reboot, és zöld az Activesync, újra megpróbáljuk:

C:\_ROM>pdocread.exe –l

És már jön is az eredmény:

Copying C:\_ROM\itsutils.dll to WCE:\windows\itsutils.dll
70.95M (0x46f2000) TrueFFS
| 3.06M (0x30fc00) Part00
| 3.06M (0x310000) Part01
| 64.82M (0x40d2000) Part02
32.74M (0x20be800) TrueFFS
| 3.06M (0x30fc00) Part00
| 3.06M (0x310000) Part01
| 64.82M (0x40d2000) Part02
9.99M (0x9fd800) TRUEFFS
| 3.06M (0x30fc00) Part00
| 3.06M (0x310000) Part01
| 64.82M (0x40d2000) Part02
952.50M (0x3b880000) DSK1:
| 952.44M (0x3b86fe00) Part00
20.00k (0x5000) BTD1:
| 19.00k (0x4c00) PART00
STRG handles:
handle 4dea0026 19.00k (0x4c00)
handle 4e6ad536952.44M (0x3b86fe00)
handle 0f1a0f7a 9.99M (0x9fd800)
handle 6f2e487a 32.71M (0x20b5c00)
handle 2fb6aea6 64.82M (0x40d2000)
handle 8fb6ae82 3.06M (0x310000)
handle cfb6afae 3.06M (0x30fc00)
disk 4dea0026
0 partitions, 0 binary partitions
customerid=00000000 uniqueid= 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
disk 4e6ad536
0 partitions, 0 binary partitions
customerid=00000000 uniqueid= 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
disk 0f1a0f7a
3 partitions, 2 binary partitions
customerid=ffffffff uniqueid= ff ff ff ff 6f ff ff ff dd 50 3f ba 07 00 cd d4
disk 6f2e487a
3 partitions, 2 binary partitions
customerid=ffffffff uniqueid= ff ff ff ff 6f ff ff ff dd 50 3f ba 07 00 cd d4
disk 2fb6aea6
3 partitions, 2 binary partitions
customerid=ffffffff uniqueid= ff ff ff ff 6f ff ff ff dd 50 3f ba 07 00 cd d4
disk 8fb6ae82
3 partitions, 2 binary partitions
customerid=ffffffff uniqueid= ff ff ff ff 6f ff ff ff dd 50 3f ba 07 00 cd d4
disk cfb6afae
3 partitions, 2 binary partitions
customerid=ffffffff uniqueid= ff ff ff ff 6f ff ff ff dd 50 3f ba 07 00 cd d4

Persze ne várjuk, hogy betű szerint megegyezzen a fentiekkel amit kapunk eredménynek, ám valami hasonlót kell látnunk, a főbb adatok megegyeznek.

Miután ilyen jól haladunk, időszerű, hogy ellenőrizzük a kimenteni szánt memóriarész tényleges méretét. Mi a „Part02” tartalmát, azaz az operációs rendszerre vagyunk kíváncsiak:

C:\_ROM>pdocread -w -d TrueFFS -p Part02 -t
real nr of sectors: 132752 - 64.82Mbyte (0x40d2000)

Miután ez megvolt, már tudjuk, mit is kéne lementenünk, neki is kezdhetünk az egyik legidőigényesebb feladatnak, a ROM image RAW-ban történő kimentéséhez:

C:\_ROM>pdocread -w -d TrueFFS -p Part02 0 0x40d2000 Part02.raw

CopyTFFSToFile(0x0, 0x40d2000, Part02.raw)

Ezzel jó ideig el fog szórakozni a gép, nekem húsz percnél is tovább tartott, szóval csak nyugalom. Semmi különös aktivitás nem mutatkozik majd sem a telefonon, sem a parancssori ablakban, de ez így természetes. Miután hosszú-hosszú várakozás után megkapjuk újra a promptot, megnézzük, valóban megvan-e a zsákmány:

C:\_ROM>dir Part*.*

Directory of C:\_ROM

03/27/2008 10:03 PM 67,969,024 Part02.raw
1 File(s) 67,969,024 bytes
0 Dir(s) 37,610,442,752 bytes free

Nos, ez pontosan az, amit szerettünk volna, név, méret oké, folytathatjuk a munkát. Valahogy a RAW formátumot át kell alakítani imgfs-re (imagefilesystem-re), hogy értelmezhető adatokat kapjunk, előkészítjük hozzá a terepet:

C:\_ROM>prepare_imgfs.exe Part02.raw -nosplit
Searching for IMGFS start... Found at 00000000
Dumping IMGFS ...

Miután ez megvolt, megnézzük, hogy tényleg sikerült-e:

C:\_ROM>viewimgfs.exe imgfs_raw_data.bin

Ennek az eredménye rengeteg, olvashatatlan tempóban  felfelé száguldó sor, aminek a vége valahogy így fog kinézni:

….
….

Header type: FFFFFEFE, Addr: 034AA374
dwNextDataTableOffset: 00000000
dwNextStreamHeaderOffset: 00000000
cchName: 00000003
wFlags: 00000000
szShortName: .VM
dwStreamSize: 00000010
dwFileAttributes: 00000047
fileTime: 83BDDA00 01C7AC5A
dwReserved: 00000000
dwDiskOffset: 034AA480
cbOnDiskSize: 00000040
wCompressedBlockSize: 0010
wDecompressedBlockSize: 0010
dwDiskOffset: 034AA4C0

Header type: FFFFFFFF, Addr: 034AA3A8
Empty header

Itt is fontosnak tartom megemlíteni, hogy ne pont ugyanezeket az értékeket várjuk, operációs renszerenként eltérőek, de valahogy így fest. Az a fontos, hogy hibaüzenettel ne találkozzunk. Ha találkoznánk, igazából fogalmam sincs mi van, mert eddig nekem mindig hibaüzenet nélkül futottak le ezek az dolgok.

Nekiláthatunk a tényleges imgfs létrehozásának, csak így egyszerűen:


C:\_ROM>buildimgfs.exe

Egy kevéske munka után az output valami ilyesmivel ér véget:

….
….
Processing "_suite_8.png" as file
Processing "_suite_8_2.png" as file
Processing "_url.png" as file
Total Sectors: 0000
Used Sectors : 1a515
Free Sectors : fffe5aeb

Tudjátok: más OS, más értékek…

Most pedig elővesszük a jó öreg WinRar-t, és megnyitjuk vele az ausztrál DOPOD-féle ROMot. (Nálam ez RUU_Elf_DOPOD_AU_1.14.710.2_4.1.13.46_02.97.90_BLUE_Ship.exe névre hallgat) Mielőtt tovább mennénk, elmondom, hogy azért van rá szükség, hogy az eredeti, aláírt környezetébe kerüljön vissza az elmentett operációs rendszerünk. Szóval megnyitottuk, és a RUU_SIGNED.NBH névre hallgató file-t tömörítsük ki a C:\_ROM mappába. Miután megvolt, az NBHEXTRACT segítségével szétcincáljuk:

C:\_ROM>nbhextract.exe ruu_signed.nbh
=== NBHextract v1.0
=== Extract contents from HTC NBH files
=== (c)2007 xda-developers.com
=== by: pof & TheBlasphemer based on itsme perl scripts

Device: ELF010000
CID: DOPOD001
Version: 1.14.710.2
Language: USA
Extracting: 00_Unknown.nb
Extracting: 01_SPL.nb
Extracting: 02_MainSplash.nb
Encoding: 02_MainSplash.bmp
Extracting: 03_ExtROM.nb
Extracting: 04_GSM.nb
Extracting: 05_OS.nb

A következő lépés, hogy a ROM-mentésünkhöz előkészítjük „shell”-nek a 05_OS.nb file-t:

C:\_ROM>make_imgfs.exe 05_OS.nb -nosplit
Searching for IMGFS start... Found at 00620000
Fixing... Done!

Ha eddig eljutottunk, már kezdhetünk is örvendezni, rövidesen elkészülünk. Elő kell vennünk a HTC ROM TOOL-t, ami a “htcrt.exe” paranccsal indítható, és abban a luxusban részesít minket, hogy grafikus felülete van. Itt fontosnak tartom megemlíteni, hogy a weboldalról leszedett 1.1-es ROM TOOL az internetről töltené le a legújabb adatbázist a HTC telefonokhoz. Nos, ez nekem nem jött össze, ám szerencsére más forrásból hozzájutottam egy régebbi (1.0) verzióhoz, amihez csatoltak már ini-t is. Szóval elindítjuk, és lelkesen nekilátunk a szép grafikus felületen egy “Build” gombot keresni, amit ha megnyomunk, máris az ablak második fülére jutottunk.

Itt már nem sok mindent nem kell tennünk. Az eszköz típusának (device) kiválasztjuk az ELF-et, és a jobb oldali oszlopban a legalsó sorban a „System” mezőbe kell a „…” nyomógomb segítségével kiválasztjuk a 05_OS.nb-t. Elvileg a „version”-t még szabadna piszkálni, én nem tettem, de minden egyebet úgy kell hagyni ahogy van. Ezután a bal alsó sarokban lévő „Build ROM” gombot megnyomjuk. Szépen adunk a backupnak egy nevet, enter, és hátradőlünk. A kimeneti ablakban százalékok pörögnek (csíkok is másznak tán?), s valami ilyesmi a vége:

ROM build process started...
Ceating temporary unsigned ROM file...
Writing ROM header...
System is 400h
Writing ROM contents:
05_OS.nb: 100%
Preparing destination...
Preparing ROM signer...
Signing ROM and copying it to destination...
Maximal chunk size is 1024 Kb
DONE: All seems to be ok!

Ezzel készen is vagyunk, gratulálhatunk magunknak!

Na persze jön a kérdés, hogy hogyan állítsuk vissza, ha esetleg meggondoljuk magunkat a sok újítgatás közepette. Én azt csináltam, hogy a fentebb emlegetett ausztrál DOPOD-féle update-et WinRar-ral kitömörítettem egy külön mappába, minden file-t. Fogtam az elkészített mentésem, (HTC_Touch_original_5.2.1238.nbh) és bemásoltam ebbe a mappába. Ezután letöröltem innen az eredeti RUU_signed.nbh file-t, és a sajátomat neveztem el ugyanígy. Ezt az egészet szépen beZIPeltem, és eltettem. Ha úgy gondolom, kicsomagolom, ROMUpdateUtility.exe, és szépen végigcsinálok egy „szimpla” frissítést.  Ehhez persze szükség lehet CID unlockra is, de aki már felrakott bármilyen “nem gyári” ROM-ot, annak nem lesz újdonság.

A leírás alapja az xda-developers.com wiki-je, akinek nem tiszta amit fentebb leírtam, vagy hibát vett észre közben, elolvashatja itt, hátha akad benne valami, amit kifelejtettem.

Továbbá szeretném megköszönni a segítséget Edemnek, aki “kezdőlöketet”adta a cikk megírásához.

Bye:

 

Szerzõ:
Zeus SH
(C) SpaceHawks 2004