![]() |
Register | Login |
Site Rules
• FAQ
• Search • Contact
Portal • Blog • Wiki • Chat |
Board index » Strefa Symbian S60 » Patche & Tuning » Modyfikacje S60v3 |
Previous topic | Next topic Page 1 of 1 [ 3 posts ] Topic evaluate: ![]() ![]() ![]() ![]() ![]() |
Print view |
Write comments | Post new topic |
DumpROM by zorn; prefixy, makra, komentarze, czyli jak pisać Patche? |
---|
![]() |
19 Sep 2010, o 11:43 |
kosmita1993 ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
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. ![]() ![]() 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ć: 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) ![]() ![]() Jeśli napisy wam za szybko przelatują ![]() ![]() Patche - co oznaczają prefiksy SnR, Rel i Abs? Prefiksy w patchach dla ROMPatcher'a:
SnR Prefiks SnR znajduje ciąg znaków i zamienia go na inny, przykładowo: 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: 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: ![]() 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) ![]() 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: 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. ![]() Patch z użyciem prefiksu Rel wyglądałby tak: Teraz otwieramy plik romdump.dmp edytorem HEX i znajdujemy ciąg: z:splashscreen.mif ![]() 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: Więc nasz patch z użyciem adresu absolutnego będzie więc wyglądał tak: 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: ![]() Adres litery d jest równy: 0x0004b31A, dodajemy 0x80000000 i możemy napisać patch: Po aktywacji patcha zmieni się nazwa pliku na dysku Z:. ![]() b) zmiana rozmiaru pliku znajdującego się w pamięci ROM Rozmiar pliku jest zapisany zaraz przed nazwą pliku. ![]() 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: 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 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): ![]() Tutaj kolejny przykład wykorzystania instrukcji warunkowej. Przydatne jeżeli chcemy by patch działał tylko na jednym telefonie. 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. Teraz małe wyjaśnienie: Quote: #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.
Ze względu na podobną budowę postanowiłem umieścić tutaj jeszcze jedno polecenie:
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)
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: Jak widzimy w patchu pojawiły się pytajniki. Teraz rozbijemy patch na dwie części: 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. 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. Przykład 2. Patch "Disable Popup Fader" zadziała tylko na N95, N96 i 5800: 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. ![]() Teraz wystarczy przenieść gotowy patch na telefon. Za informacje wielkie podziękowania dla: templove, segalx, Microx256 oraz Marco. ![]() Linki DumpROM by zorn + zripper HxD 1.7.7.0 PL Portable - edytor HEX: |
Last edited by kosmita1993 on 20 Sep 2010, o 19:01, edited 19 times in total. Reason: instrukcje warunkowe, makra, spis treści, wieloznaki, polecenie return |
Last post |
![]() |
![]() |
19 Sep 2010, o 11:44 |
Wodnik Szuwarek ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
No dobre
![]() ![]() |
![]() |
![]() |
19 Sep 2010, o 11:46 |
kosmita1993 ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
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. ![]() |
Top |
![]() |
Write comments | Post new topic |
Page 1 of 1 [ 3 posts ] Previous topic | Next topic Topic evaluate: ![]() ![]() ![]() ![]() ![]() |
|
Users browsing this forum: No registered users and 0 guests |
Board index » Strefa Symbian S60 » Patche & Tuning » Modyfikacje S60v3 |
© 2009-2023 Forum NokiaHacking.pl • Full version of site (Hi-Fi)
Powered by phpBB & phpBB3.PL & phpBB SEO modified by Pawelooss Time : 1.066s | 47 Queries | GZIP : Off |