категории | RSS

Как многие знают недавно появилась такая прекрасная программа как ROMPatcher, автор _zorn_. Как её ставить, устанавливать к ней патчи и т.д. можно прочесть здесь. Наш разговор пойдет о том, как самому написать патч.

Так как легче и понятнее всего смотреть на примере - то будем разбирать патч changeswipolicypath.

Начнем с того, что программа может действовать не со всем диском Z, а только с его частью. Определим и выделим эту часть. Это позволит сузить место поиска в дальнейшем.
Для этого нужно поставить утилиту DumpROM из этого пакета, и снять ей дамп (пробежит полоска. на карте памяти образуется файл romdump.dmp, размером в мб этак 15 и более, у всех по разному). Собственно он и являет собой просто скопированный кусок памяти который мы можем изменять. т.е этого в принципе достаточно что бы сделать патч. Запомните что начальный адрес снятия патча был F8000000 (для Symbian 9.1) или 0х80000000 (для Symbian 9.2), его можно было видеть в самом начале снятия дампа, верхняя строка. Это просто адрес в памяти. ничего более.
Вот мы сделали дамп. Открываем его 16-тиричным редактором (например, WinHex) и ишем что там надо. в данном случае нам надо найти путь к файлу swipolicy.ini или хотя бы какое-то его упоминание, чтобы было ясно в каком направлениии копать. ищем обязательно в UNICODE !!!!(приложение 1 (скриншот 102 кб)), где бы не искали. Программа перейдет на кусок кода в котором найдены похожие строки. а именно:
z.:./.s.y.s.t.e.m./.d.a.t.a./.s.w.i.p.o.l.i.c.y...i.n.i - вот этот путь (в юникоде после каждой буквы/символа будет стоять байт 00 - нулевой, он обычно отображается в виде точки)
теперь нам надо определить адрес этого блока в памяти. для этого переставляем курсор на z (первый символ из приведенной мною строки), и смотрим его адрес в нижней строке состояния, у меня это 7FA9F8, но это адрес на диске. В памяти начальный адрес у нас был или F8000000 или 80000000, зависит от того, какая ОС. данные пример я проделывал на телефоне 6120с, значит прибавляем этот адрес к 0х80000000, получаем 807FA9F8.

сам файл патча *.rmp очень прост. содержит минимум 2 строки, где 1-я это название. а вторая - сам патч, некое руководство к действию для программы.

в данном случае автор решил присудить патчу имя ChangeSwipolicyPath.rmp, что вполне уместно.
1-я строка - название. назовем как и ранее *** ChangeSwipolicyPath 1.0 ***
2-я - метод. в данном случае мы знаем точный адрес, и можем сделать вообще просто используя такую команду патча как abs (патч по абсолютному адресу). Формат abs:Адрес:старые байты:новые байты. тогда строка примит вид:
abs:807FA9F8:7a003a005c:63003a005c
где старые байты я взял z.:., новые c.:., подсвечен байт, отвечающий за буквы Z (7a) и C (63).
должно работать. остается только перенести файл swipolicy.ini по пути z:/system/data/swipolicy.ini и отредактировать его как хочется.

Полученый патч желательно применять на точно таком же телефоне с той же версией прошивки, иначе возможно проблемы, так как по полученому нами адресу в телефоне другой марки но той же версии операционной системы может лежать другой код !!!

будьте осторожнее при использовании abs, ибо он может патчить ЛЮБОЙ адрес (даже некоторые в ядре), например abs:60000148:1E:10 ни что иное как патч капабилити для 9.1.
также при чтении некоторых адресов телефон перезагружается (так на всякий случай)
добавление _zorn_, ибо мне об этом известно не было.
Есть способ, с моей точки зрения, более удобный. А именно извлечь из этого дампа все файлы и просматривать их поотдельности. Делается это так. Из ранее скаченого набора для дампа, запускаем утилиту Zripper.exe и указываем ей наш дамп на компьютере, т.е кладем Zripper.exe и romdump.dmp в корень диска С, жмем комбинацию клавиш Windows - R (или просто заходим Пуск - Выполнить), набираем CMD, появится черное окно. Вводим в нем cd C: и оказываемся в корне диска C. далее вводим
Zripper.exe romdump.dmp
и жмем Enter (выполнить). Пойдет процесс распаковки, после чего появится папка C:/DiskZ, внутри которой лежат те файлы, что и в области памяти, которую мы можем изменять (патчить).

при обычном перетаскивании файла дампа на консольный распаковщик диск Z сохраняется в C:/Documents and Settings/User/ - это для ХР
Далее идет изучение этих файлов с помошью 16-тиричного редактора чаще всего, но в нашем случае цель нам ясна и мы просто можеи искать в юникоде часть названия нужного нам файла. Очень удобно это делать в таком файловом менеджере как Total Commander, например. Стоит нажать Alt - F7, и ввести в нижней строке "с текстом" часть того названия которое нам нужно (например, swipoli), выбрать ЮНИКОД, и нажать Искать.

в Юникоде содержатся в основном пути, так что если будете чего-то искать - ищите и в ASCII тоже, на всякий.

в любом случае мы наткнемся только на 1 файл, а именно на securitymanager.dll, находящимся в sys/bin (это все важно).

опять следует процедура открытия этого файла 16-тиричным редактором, и поиск нужного значения. и опять мы увидим ту же строку z.:./.s.y.s.t.e.m./.d.a.t.a./.s.w.i.p.o.l.i.c.y...i.n.i . значит мы на правильном пути!

В этом случае нельзя пользоваться командой abs, потому что мы не знаем где в памяти располагается этот файл. для обхода этого есть 2 другие команды
rel - патч по относительному адресу, Формат rel:путь до файла в РОМ:адрес относительно начала файла:старые байты:новые байты.
snr - SearchNReplace (поиск и замена), Формат snr:путь до файла в РОМ:старые байты (которые нужно найти):новые байты (которыми нужно заменить).

при этом структура файла патча не меняется. все те же минимум 2 строки.

значит в этом случае патч будет либо
rel:36a8:7a003a005c:63003a005c
что значит выделение описывал выше.

либо
SnR:sysbinsecuritymanager.dll:1C0000007A003A005C00730079007300740065006D005C0064006100740061005C0073007700690070006F006C006900630079002E0069006E006900:1C00000065003A005C00730079007300740065006D005C0064006100740061005C0073007700690070006F006C006900630079002E0069006E006900
здесь берут обычно строку подлинее, чтобы не она не встретилась в этом файле больше чем 1 раз, иначе могут быть плачевные последствия. благо что почти все они исправляются перезагрузкой смартфрна
так же, если необходимо заменить небольшой файл, с большим патчер может не справится (не забывайте что это все же мобильний телефон), то можно воспользоваться такой комбинацией:
rel:file:00:oldbytes:newbytes
из описаного выше понятно что будет найден файл в памяти и заменен с самого первого байта, т.е. с начала

исходя их этого всего вытекают несколько минимальных правил написания патча:
-- количество старых и новых байт должно быть одинаково
-- 1 байт это два символа в 16-тиричном виде, а значит если в какой-то момент вы пересчитали байты и оказалось что они указаны 7-ю (например, любое нечетное число) символами, то это ошибка и о ней вам скажет патчер и патч не будет работать.

Будете искать какие файлы использует то или иное приложение - советую для быстроты использовать ActiveFile. запустили программу, выбрали в меню Инструменты - Менеджер задач. нажали 9, и смотрите. далее изучайте эти файлы.

про 16-тиричную систему и hex редакторы можно найти информацию в интернете, но к примеру цифры отображаются как 30, 31, 32, ... 39. а мы их видим как 0,1,2, ... 9
посмотреть это можно набрав в 16-тиричном редакторе символ/букву и увидив сразу её код. там в принципе не сложно.

это пока грубо описано. еще будет подвергаться редактированию и добавлению скриншотов. если у вас есть варианты как подоступнее описать некоторые моменты - пришлите мне их пожалуйста.

Tolyan__19
2008-05-05T23:53:39Z

Здесь находятся
всего 0. За сутки здесь было 0 человек

Комментарии 22

#22   Rastaman    

Да, статья супер. Эх, комп... Если будет комп, мне, к примеру, легче изучить язык C++, переписать экзешники, dll-шки, собрать их в прошивку и прошиться J.A.F.-ом. Правда, это титанический труд, но это будет лучше для смарта. А патчи - это патчи, заплатки.
Всем удачи!


0 ответить

#22   Kreck.    

Огромное спасибо за статью!Абсолютно нипонимаю, почему рейтинг так мал.Очень жаль, что статья разбрелась по инету без указания авторства.Себе таких патчиков настряпал.Tolyan_19, жду от Вас статейки, как собрать патчики посложнее, такие как Rem_rec_Tone, installserver, enableHiddenMenu, noOpenMenuShows.


0 ответить

#22   Lagostos    

Ну в целом все понятно, теперь ясно с чем патчи едят вообще. Ответьте пожалуйста, у меня е52 RM-469 ПО 021.013( 9.3 конечно же) Выложенные на сайте патчи не гасят писк в программе что пишет разговоры. Я так понял что нужно взять патч от телефона с 9.3 и переписать под свой дамп, правильно? Т.е. я правильно понимаю что тело патча которое обращается к коду который отвечает за писк будет таким же, только адрес будет у меня свой?
Заранее спасибо за комментарии!


0 ответить

#22   [Tracer]    

Tolyan__19, огромное спасибо за статью, многое стало понятнее smile

-------------
Добавлено в 20.35: Но некоторое остается непонятно . Если я хочу сделать патч с нуля, то от чего идти?
Например, я хочу убрать часы с рабочего стола, но с каким файлом работать? Искать наугад по похожему названию? Это первое, что я не понял.
Второе. Допустим я нашел этот файл (пусть будет clock.dll), а что именно там изменять? Опять же искать наугад?
Надеюсь на вашу помощь!


0 ответить

#22   Tolyan__19    

начит после чистки половину файлов тут убили и дамптулза тут больше нет. выкладываю его заново, WinHex можете найти в инете совершенной свободно.

набор для дампа лежит ТУТ.


0 ответить

#22   serega1007    

а где все проги для этого дела брать? жму на ссылки- файл нот фаунд.


0 ответить

#22   MysticBeast    

перезалейте пожалуйста пакет для дампа, пишет что файл не найден


0 ответить

#22   fakToff    

Сделаю на заказ для вашего телефона патч c2z тут.


0 ответить

#22   zaykadim    

Как делать патч я понял и во всём разобрался! Но не могу ничего найти! Пример с swipoli очень хорошо приведён сразу находит! Хотел найти Startup! толком ничего не нашёл! Решил попробовать уже по готовому патчю c2z (замена звука камеры) но тоже ничего не нашёл! Подскажите как определить по какому слову искать!?


0 ответить

#22   artoroman    

эх((( ничего-то я не понял
хотя нет, вру) сделал тестовый патчик на смену диска для файлов aspa и он даже вроде правильно сработал winked


* редактировал(а) artoroman 03:33 1 фев 2009

0 ответить

Яндекс.Метрика