Index  •  FAQ  •  Szukaj  


Teraz jest 16 sie 2018, o 16:56




Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 2 ] 
 DumpROM; prefixy, makra, komentarze, czyli jak pisać Patche 
Autor Wiadomość
 Tytuł: DumpROM; prefixy, makra, komentarze, czyli jak pisać Patche
PostNapisane: 21 wrz 2010, o 19:21 
User
Avatar użytkownika

Offline

Dołączył(a): 21 wrz 2010, o 19:11
Posty: 4
Telefon: N95-1
Firmware: 35.0.002
Operator: Play
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.

Obrazek Obrazek


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ć:
Kod:
Zripper.exe romdump.dmp

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) ;>

Obrazek

Jeśli napisy wam za szybko przelatują :hihi: to możecie zapisać cały log w pliku tekstowym. ;D
Kod:
Zripper.exe romdump.dmp>>log.txt 



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:
Kod:
SnR:sys\bin\sysap.exe:7a003a00730079007300610070002e006d00690066:63003a00730079007300610070002e006d00690066
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:
Kod:
Rel:sys\bin\SnifferAIPlugin.dll:00000000:79:00
Rel:sys\bin\SnifferAIPlugin.dll:00000003:10:00

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:
Obrazek

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:
Kod:
Rel:sys\bin\SnifferAIPlugin.dll:00000010:5A:43



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.
Obrazek

Patch z użyciem prefiksu Rel wyglądałby tak:
Kod:
Rel:sys\bin\splashscreen.exe:00000E18:5A:43


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

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:
Kod:
0x03377CA8
+ 80000000
= 83377CA8

Więc nasz patch z użyciem adresu absolutnego będzie więc wyglądał tak:
Kod:
Abs:83377CA8:5A:43


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:
Obrazek
Adres litery d jest równy: 0x0004b31A, dodajemy 0x80000000 i możemy napisać patch:
Kod:
Abs:8004b31A:64:6F

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.
Obrazek
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:
Kod:
; *** Patch: No Standart Themes ***
; Author: rap-st
; Test on 6120c
SnR:sys\bin\aknskinsrv.dll:5a003a005c00700072006900:43003a005c00700072006900
SnR:sys\bin\aknskinsrv.dll:5a003a005c0070007200690076006100740065005c00:43003a005c0070007200690076006100740065005c00


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.

Kod:
#ifdef MACHINE_20002496
   tutaj znajduje się patch dla E90
#endif

#ifdef MACHINE_20002D82
   tutaj znajduje się patch dla N96
#endif

#ifdef MACHINE_2000060B
   tutaj znajduje się patch dla N95-1
#endif

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):

Obrazek


Tutaj kolejny przykład wykorzystania instrukcji warunkowej. Przydatne jeżeli chcemy by patch działał tylko na jednym telefonie.
Kod:
#ifdef MACHINE_2000060B
   #define N95-1
#endif

#ifdef N95-1
    tutaj znajduje się patch dla N95-1
#else
    error:Ten patch jest przeznaczony tylko dla N95-1!
#endif

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.
Kod:
#ifdef RP+VERSION_2.0
   #define NOT_COMPATIBLE
#endif

#ifdef RP+VERSION_2.1
   #define NOT_COMPATIBLE
#endif

#ifdef NOT_COMPATIBLE
   error:Zaktualizuj RP+ do wersji 2.2 lub nowszej!
#else
   tutaj znajduje się patch
   tutaj znajduje się patch
   tutaj znajduje się patch
   tutaj znajduje się patch
#endif


Teraz małe wyjaśnienie:
Cytuj:
#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:

    Kod:
    #ifndef MACHINE_2000060B
               error: Ten patch nie jest na twoj telefon.
    #endif

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

    Kod:
    #ifdef MACHINE_2000060B
               tutaj znajduje się patch
    #endif

    info: Patch zostal aktywowany!


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:

    Kod:
    #ifdef LANG_4
       ; Język hiszpański
       info:Leer el archivo ReadMe.txt
       return:
    #endif

    #ifdef LANG_5
       ; Język włoski
       info:Leggi il file ReadMe.txt
       return:
    #endif

    #ifdef LANG_27
       ; Język polski
       info:Przeczytaj plik Readme.txt
       return:
    #endif


    ; Język domyślny. Jeżeli w telefonie jest ustawiony język inny niż hiszpański, włoski lub polski, to polecenie return: nie zostanie wykonane. Patch dojdzie do końca i pokaże komunikat w języku angielskim.

    info:Read the ReadMe.txt file


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:
Kod:
SnR:sys\bin\installserver.exe:0011????02233043:0028??E00B20C043

Jak widzimy w patchu pojawiły się pytajniki. Teraz rozbijemy patch na dwie części:
Kod:
Search:  0011????02233043
Replace: 0028??E00B20C043


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.
Kod:
0011ABCD02233043
0011000002233043
0011147E02233043
0011907A02233043

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.
Kod:
#ifdef MACHINE_2000060B
   #ifdef FW_35.0.002
      SnR:sys\bin\idle.exe:290009a8:002601e0
      SnR:sys\bin\phone.exe:29000fa8:002601e0
   #else
      error: Musisz zaktualizowac FirmWare.
   #endif
#else
   error: Ten patch dziala tylko na N95-1!
#endif

info: Patch aktywowany!



Przykład 2. Patch "Disable Popup Fader" zadziała tylko na N95, N96 i 5800:
Kod:
#ifdef MACHINE_2000060B
   ; N95
   #define OBSLUGIWANY
#endif

#endif MACHINE_20002D82
   ; N96
   #define OBSLUGIWANY
#endif

#endif MACHINE_2000DA56
   ; 5800
   #define OBSLUGIWANY
#endif


#ifdef OBSLUGIWANY
   SnR:sys\bin\avkon.dll:70b50d001c00:70470d001c00
#endif

#ifndef OBSLUGIWANY
   error: Patch niekompatybilny!
#endif

info: Patch aktywowany!



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.

Obrazek

Teraz wystarczy przenieść gotowy patch na telefon.


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


Artykuł mojego autorstwa. Aktykuł pochodzi z forum NokiaHacking.pl. Zezwalam na rozpowszechnianie tego artykułu pod warunkiem umieszczenia mojego nicku (kosmita1993).


Linki

DumpROM by zorn + zripper
http://www.4shared.com/file/G8USGxAY/Du ... ipper.html

HxD 1.7.7.0 PL Portable - edytor HEX:
http://www.4shared.com/file/Ji8ME54r/HxDpl.html

_________________
Obrazek


 Zobacz profil  
 
 Tytuł: Re: DumpROM; prefixy, makra, komentarze, czyli jak pisać Pat
PostNapisane: 21 wrz 2010, o 22:04 
User
Avatar użytkownika

Offline

Dołączył(a): 7 wrz 2010, o 19:46
Posty: 50
Lokalizacja: warszawa/ochota
Telefon: E52
Firmware: najnowsze
Operator: różne
ładny artykuł.

_________________
--
.:aRt:.


 Zobacz profil  
 
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 2 ] 


 Kto przegląda forum 

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 3 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  

[ Time : 0.048s | 16 Queries | GZIP : Off ]

 
Index  |  FAQ  |  Szukaj

Style created by Quantum
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
zwyzka bielsko