DumpROM by zorn; prefixy, makra, komentarze, czyli jak pisać Patche?

Post by kosmita1993 » 19 Sep 2010, o 10:43

Zauważyłem że nie mamy tego na forum więc proszę - może komuś się przyda (ja przy okazji też się kilku rzeczy dowiedziałem o o możliwościach ROMPatcher'a ;) )

Spis treści:


DumpROM by zorn
Jest to mała aplikacja (link na samym dole) na telefon która wykona nam pełny zrzut pamięci ROM. Wystarczy zainstalować, uruchomić i wybrać opcję Dump. Cała zawartość pamięci ROM zostanie zapisana do pliku E:\romump.dmp.

Image Image


Rozpakowanie pliku romdump.dmp na komputerze - Zripper
Aby rozpakować plik romdump.dmp należy skopiować go na komputer i wrzucić do folderu z aplikacją Zripper (link na samym dole). Aplikacja działa z linii komend, więc aby ją uruchomić należy wejść w konsolę (uruchom -> cmd.exe), wejść do folderu z aplikacją (polecenie: CD nazwa_folderu) i wpisać:
Code: Select all
Please Login or Register, to see this Content

Po kilku minutach w folderze DiskZ pojawią się wszystkie pliki z pamięci ROM naszego telefonu. Pliku romdump.dmp nie kasujemy, ponieważ może się nam jeszcze przydać... (patrz: prefiks Abs) ;>

Image

Jeśli napisy wam za szybko przelatują :hihi: to możecie zapisać cały log w pliku tekstowym. ;D
Code: Select all
Please Login or Register, to see this Content



Patche - co oznaczają prefiksy SnR, Rel i Abs?
Prefiksy w patchach dla ROMPatcher'a:
  • SnR - Search and Replace (znajdź i zamień) - znajduje i zamienia wybrany ciąg znaków na inny.
  • Rel - adres relatywny, liczony od początku pliku;
  • Abs - adres absolutny, odnosi się do adresu absolutnego w pamięci ROM;

SnR
Prefiks SnR znajduje ciąg znaków i zamienia go na inny, przykładowo:
Code: Select all
Please Login or Register, to see this Content
Ten prefiks jest najczęściej używany ponieważ dzięki niemu patch staje się bardziej uniwersalny - nie będzie problemu gdy wybrany ciąg znajdzie się na początku pliku, a w innym telefonie na końcu. Jednak problemy mogą występować jeżeli w danym pliku taki ciąg znaków się powtarza (np. dwa razy występuje ścieżka do danego pliku). Aby tego uniknąć stosujemy prefiksy Rel i Abs.

Schemat budowy patcha z prefiksem SnR:
SnR:ścieżka\plik:znajdź:zamień

ścieżka - katalog w którym znajduje się plik, np. sys\bin
plik - nazwa pliku i jego rozszerzenie, np. sysap.exe
znajdź - ciąg znaków do znalezienia
zamień - ciąg znaków jakimi chcemy zastąpić znaleziony fragment pliku.


Rel
Prefiks Rel jest podobny do SnR, z tym że znajduje ciąg znaków w wybranej lokalizacji i zamienia go na inny. Przykład:
Code: Select all
Please Login or Register, to see this Content

Dzięki temu prefiksowi zabezpieczamy się przed sytuacją opisaną przy prefiksie SnR, gdy dany ciąg znaków występuje kilka razy w pliku.

Schemat:
Rel:ścieżka\plik:adres:znajdź:zamień

ścieżka - katalog w którym znajduje się plik, np. sys\bin
plik - nazwa pliku i jego rozszerzenie, np. sysap.exe
adres - tutaj oznaczamy adres wybranego znaku/ciągu znaków (format 0x????????)
znajdź - ciąg znaków do znalezienia
zamień - ciąg znaków jakimi chcemy zastąpić znaleziony fragment pliku.

Skąd wziąć ten adres? Musimy wykorzystać edytor HEX (np. HxD). Adres znajduje się w kolumnie po lewej stronie:
Image

Początek odczytujemy z prawej kolumny (w naszym przypadku 0X00000000), a za ostatnie zero podstawiamy wartość z wiersza u samej góry. I tak jeśli chodzi nam o pierwszy bajt w tej linii to za zero podstawiamy zero (czyli zostawiamy bez zmian) :D, jeżeli o czwarty to wstawiamy 3 (0X00000003), a jeżeli o ostatni to podstawiamy F (0X0000000F). Sytuacja wygląda analogicznie dla pozostałych wierszy.

Jeżeli chcemy podmienić np. literę Z na C w ostatnim bajcie (F) w drugiej linii (0x00000010) w pliku SnifferAIPlugin.dll to patch musi wyglądać tak:
Code: Select all
Please Login or Register, to see this Content



Abs
Tutaj mamy sytuację identyczną jak w prefiksie Rel, jednak zamiast adresu relatywnego (liczonego tylko od początku pliku) musimy użyć adresu absolutnego w pamięci ROM. Aby go uzyskać potrzebujemy zrzutu pamięci ROM wykonanego aplikacją DumpROM.

Schemat:
Abs:adres:znajdź:zamień

położenie - tutaj oznaczamy adres wybranego znaku/ciągu znaków (format 0x????????)
znajdź - ciąg znaków do znalezienia
zamień - ciąg znaków jakimi chcemy zastąpić znaleziony fragment pliku.

Otwieramy wybrany plik (np. SplashScreen.exe) edytorem HEX i szukamy ciągu znaków który chcemy zamienić. Np. aby sprawić żeby plik splashscreen.mif był odczytywany z dysku C: zamiast Z: musimy zmienić ścieżkę z z:splashscreen.mif na c:splashscreen.mif.
Image

Patch z użyciem prefiksu Rel wyglądałby tak:
Code: Select all
Please Login or Register, to see this Content


Teraz otwieramy plik romdump.dmp edytorem HEX i znajdujemy ciąg: z:splashscreen.mif
Image

Widzimy że bajt zawierający literę Z znajduje się w adresie: 0x03377CA8. UWAGA! W przypadku adresu absolutnego dla FP1 i FP2 musimy jeszcze dodać 0x80000000 (dla preFP1 należy dodać 0xF0000000). Dodawanie wygląda tak:
Code: Select all
Please Login or Register, to see this Content

Więc nasz patch z użyciem adresu absolutnego będzie więc wyglądał tak:
Code: Select all
Please Login or Register, to see this Content


Nie zaleca się korzystania z tego prefiksu do modyfikacji plików (ponieważ patch będzie działał tylko na jednym modelu telefonu i tylko na jednej wersji FW), ale można go wykorzystać do innych celów:

a) zmiana nazwy pliku znajdującego się w pamięci ROM
Patch może się przydać gdy chcemy np. zainstalować aplikację zawierającą plik domainsrv.exe a telefon wywala nam błąd uaktualnienia (ponieważ taki plik już znajduje się w Z:\SYS\BIN). Możemy tymczasowo zmienić nazwę pliku na np. oomainsrv.exe a następnie bezproblemowo zainstalować aplikację. Jak to zrobić? Otwieramy romdump.dmp i szukamy "domainsrv.exe". Powinniśmy znaleść coś takiego:
Image
Adres litery d jest równy: 0x0004b31A, dodajemy 0x80000000 i możemy napisać patch:
Code: Select all
Please Login or Register, to see this Content

Po aktywacji patcha zmieni się nazwa pliku na dysku Z:. ;D


b) zmiana rozmiaru pliku znajdującego się w pamięci ROM
Rozmiar pliku jest zapisany zaraz przed nazwą pliku.
Image
Nie zaleca się modyfikować rozmiary plików EXE i DLL, ale można modyfikować rozmiar innych, np. TXT. Możemy utworzyć patch w ten sam sposób jak w podpunkcie a).


W czym i jak pisać patche oraz jak je zapisywać?
Aby napisać patch można użyć systemowego Notepad'a.

Komentarze
Na początku pliku, jeszcze przed patchem można umieścić dowolny tekst poprzedzony średnikiem - ";". Tekst ten może zawierać nazwę patcha, jego zastosowanie jak i nick autora. Te informacje pojawią się w RP+ po wybraniu opcji "Info o patchu" (opcja może nazywać się inaczej, w zależności od spolszczenia).

Przykładowy patch z użyciem komentarzy:
Code: Select all
Please Login or Register, to see this Content


Instrukcje warunkowe
ROMPatcher w wersji 2.3 pozwala na użycie instrukcji warunkowych. Można je wykorzystać jeżeli mamy różne rodzaje patcha (dla różnych telefonów) i chcemy je umieścić w jednym patchu.

Code: Select all
Please Login or Register, to see this Content

Kod jest stosunkowo prosty: jeżeli telefon ma podane UID, aktywuj patch. MACHINE_XXXXXXXX oznacza UID telefonu. Można go znaleźć tutaj lub odczytać za pomocą aplikacji PhoNetInfo (zakładka HAL, pole Machine UID):

Image


Tutaj kolejny przykład wykorzystania instrukcji warunkowej. Przydatne jeżeli chcemy by patch działał tylko na jednym telefonie.
Code: Select all
Please Login or Register, to see this Content

Dzięki poleceniu #define możemy definiować nowe zmienne. Jak widać w powyższym przykładzie pojawiło się polecenie error. Wyświetla ono w RP+ małe okienko w którym znajdzie się tekst napisany po dwukropku.


Dodatkowo jeżeli patch korzysta z funkcjonalności dodanych dopiero w nowszych wersjach ROMPatcher'a, można wykorzystać instrukcje warunkowe.
Code: Select all
Please Login or Register, to see this Content


Teraz małe wyjaśnienie:
#ifdef - Jeżeli...
#ifndef - Jeżeli nie...
#else - ...w innym wypadku...
#endif - ... i koniec.
#define - Tworzy nową definicję.


Komunikaty
ROMPatcher w czasie aktywacji patcha może wyświetlać komunikaty.

  • error - czyli po prostu błąd, patch nie zostaje aktywowany. Przykładowo:

    Code: Select all
    Please Login or Register, to see this Content

  • info - zwykły komunikat, przykładowo:

    Code: Select all
    Please Login or Register, to see this Content


Ze względu na podobną budowę postanowiłem umieścić tutaj jeszcze jedno polecenie:

  • return - to polecenie sprawia że patch zostaje aktywowany ale tylko w pewnej części. Wszystkie linijki patcha napisane przed tym poleceniem zostają aktywowane, natomiast wszystko co znajduje się po nim jest zwyczajnie omijane. Na liście patchów zobaczymy więc zieloną ikonkę informującą o poprawnym aktywowaniu patcha. Przykład:

    Code: Select all
    Please Login or Register, to see this Content


Makra
Patch może odczytać nie tylko wersję ROMPatchera czy UID telefonu, ale również kilka innych rzeczy...

MACHINE_(wartość HEX) - UID telefonu (np. MACHINE_2000060B czyli N95-1)

CPU_(wartość dziesiętna) - rodzaj procesora (np. CPU_0 czyli AMR)
  • 0 => ECPU_ARM,
  • 1 => ECPU_MCORE,
  • 2 => ECPU_X86,
CPUABI_(wartość dziesiętna) - rodzaj procesora (np. CPUABI_0 czyli AMR4)
  • 0 => ECPUABI_ARM4,
  • 1 => ECPUABI_ARMI,
  • 2 => ECPUABI_THUMB,
  • 3 => ECPUABI_MCORE,
  • 4 => ECPUABI_MSVC,
  • 5 => ECPUABI_ARM5T,
  • 6 => ECPUABI_X86,
PLATFORM_(wartość dziesiętna) - platforma (np. PLATFORM_3.1 dla 3rd Edition FP1)
  • 3.0 => 3rd Edition
  • 3.1 => 3rd Edition FP1
  • 3.2 => 3rd Edition FP2
  • 5.0 => 5th Edition
LANG_(wartość dziesiętna) - język telefonu (np. LANG_27 dla języka PL)

FW_(wartość dziesiętna) - wersja FirmWare (np. FW_30.0.0.15)

RP+VERSION_(wartość dziesiętna) - Wersja RP+ (np. RP+VERSION_2.3)


Wieloznaki

Aplikacja ROMPatcher pozwala na stosowanie pytajników "??" w patchach. Co to daje? Tutaj przykład patcha z wykorzystaniem wieloznaków:
Code: Select all
Please Login or Register, to see this Content

Jak widzimy w patchu pojawiły się pytajniki. Teraz rozbijemy patch na dwie części:
Code: Select all
Please Login or Register, to see this Content


Search (znajdź)
Zaczynamy od ciągu bajtów które ROMPatcher musi znaleźć (Search). Użycie wieloznaków w polu "Search" sprawia że RP podczas wyszukiwania nie będzie zwracał uwagi na bajty oznaczone pytajnikami. Co to oznacza? Że szukając ciągu bajtów 0011????02233043 może znaleźć np.
Code: Select all
Please Login or Register, to see this Content

i podmienić ciąg bajtów bez względu na to znajdzie się pod pytajnikami. Teraz pytanie: do czego można to użyć? Głównym zastosowaniem pytajników jest zwiększenie uniwersalności patcha po zastosowaniu prefiksu SnR. Im dłuższy ciąg do wyszukania tym trudniej o sytuację w której ROMPatcher znajdzie dwa takie samie ciągi bajtów. Jednak może się zdarzyć że na innym telefonie ten ciąg będzie wyglądał trochę inaczej - wtedy różniące się bajty zastępujemy pytajnikami.

Replace (zamień)
Teraz ciąg bajtów którym mamy zastąpić (Replace) to co RP znajdzie. Jeżeli nie ma konieczności aby zastąpić cały ciąg bajtów, ponieważ któryś bajt nie zawiera nic przydatnego, albo zaistnieje sytuacja w której wręcz konieczne będzie pozostawienie kilku bajtów bez zmian możemy użyć pytajników. Wieloznaki w części "Replace" informują ROMPatchera że zaznaczone bajty ma pozostawić bez zmian.

Uwaga! Nie można stosować pojedynczych pytajników! Za jeden bajt odpowiadają zawsze dwa pytajniki!


Przykładowe patche
Korzystając z makr i instrukcji warunkowych można robić bardzo rozbudowane patche.

Przykład 1. Patch "No Profile Name on Idle" od CODeRUS'a zadziała tylko na najnowszym firmware na n95-1. Na pozostałych telefonach lub gdy posiadamy starszy firmware wyskoczy błąd.
Code: Select all
Please Login or Register, to see this Content



Przykład 2. Patch "Disable Popup Fader" zadziała tylko na N95, N96 i 5800:
Code: Select all
Please Login or Register, to see this Content



Zapisywanie patcha (Notatnik)
Żeby zapisać patch należy wybrać Plik -> Zapisz jako..., następnie zmienić typ na "wszystkie pliki (*.*)" i dopisać do nazwy pliku rozszerzenie .rmp.

Image

Teraz wystarczy przenieść gotowy patch na telefon.


Za informacje wielkie podziękowania dla: templove, segalx, Microx256 oraz Marco. :clap:


Linki

DumpROM by zorn + zripper
Code: Select all
Please Login or Register, to see this Content


HxD 1.7.7.0 PL Portable - edytor HEX:
Code: Select all
Please Login or Register, to see this Content
Last edited by kosmita1993 on 20 Sep 2010, o 18:01, edited 19 times in total.
Reason: instrukcje warunkowe, makra, spis treści, wieloznaki, polecenie return
:E :E :E Zanim zadasz mi pytanie na PW, koniecznie zapoznaj się z forumowym FAQ! :E :E :EImage

Za ten post kosmita1993 otrzymał/a punkty reputacji.
kosmita1993 Male
Nokia Rulez
Friend

User avatar
 
Offline
 
Telefon: N95-1 Hacked
Soft: V35.0.002
Operator: Play
Age: 24
Location: !:\SYS\BIN

Joined: 25 May 2009
Online: 50d 19h 24m 44s
Posts: 1317Topics: 140
Reputation point: 3156
    Windows Vista Opera

Post by adam111 » 27 kwi 2009, o 00:00

BoTs RoX! :D
adam111 Mężczyzna
Oddajcie mi cześć!
50%

Avatar użytkownika
 
Online
 
Telefon: Nokia 3110c
Soft: v. 05.50
Operator: -----

Joined: 30 mar 2009
Online:
Posts:    •  Topics:  
    Ubuntu  Firefox

Post by Wodnik Szuwarek » 19 Sep 2010, o 10:44

No dobre :clap: Jakoś to zebrałeś do kupy z ruskiego forum? Bo chyba nie z ipmarta xP
Wodnik Szuwarek Male
Szef Wszystkich Szefów
Expert
 
Offline
 
Telefon: iPhone 7
Operator: Orange
Location: Warszawa

Joined: 9 Aug 2010
Online: 41d 1h 23m 51s
Posts: 4428Topics: 480
Reputation point: 5222
    Windows 7 Firefox

Post by kosmita1993 » 19 Sep 2010, o 10:46

Wodnik Szuwarek, przeczytałem instrukcje z symbian-freak.com, ipmart-forum.pl, instrukcję dołączoną do RP+ v2.3.

Jak załapałem o co kaman to napisałem poradnik.

PS: dodałem ciekawe info na temat makr i instrukcji warunkowych w patchach. :)
:E :E :E Zanim zadasz mi pytanie na PW, koniecznie zapoznaj się z forumowym FAQ! :E :E :EImage

Za ten post kosmita1993 otrzymał/a punkty reputacji.
kosmita1993 Male
Nokia Rulez
Friend

User avatar
 
Offline
 
Telefon: N95-1 Hacked
Soft: V35.0.002
Operator: Play
Age: 24
Location: !:\SYS\BIN

Joined: 25 May 2009
Online: 50d 19h 24m 44s
Posts: 1317Topics: 140
Reputation point: 3156
    Windows Vista Opera


Return to Modyfikacje S60v3

Who is online

Users browsing this forum: No registered users and 0 guests