категории | 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

#12   Tolyan__19    

посмотрим как скоро...


0 ответить

#12   ActiveX    

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


* редактировал(а) ActiveX 02:58 22 июл 2008

0 ответить

#12   Tolyan__19    

ashatshem, уже обсуждали, она переход с 9.1 на 9.2 но ближе к 9.2 так что все с 9.2 на ней теоретически должно идти. и патчер тоже от 9.2


0 ответить

#12   ashatshem    

N93I 9.1 а скачивание дампа начинается с 0х8000000 чё за прикол?


0 ответить

#12   shohobcha    

nicho ne ponil laughing
no fse ravno thanx wink


0 ответить

#12   morfeg    

alexmaj467,
smile Все пути в написаны в Unicode, все параметры и настройки - в ASCII ;) так есть, не знаю что там х-плор понимает или нет

PS пост исправил, а то я его писал ночью и не дописал О_о одну мысль писать начал, потом другую))


* редактировал(а) morfeg 23:01 7 май 2008

0 ответить

#12   alexmaj467    

не может быть такого.
Так как Hеx в Xрlorе не понимает Utf8 не поймает он юникода. Просто не поймает. При том любой язык написаный в юникоде он не поймает.
так что пути в чем то другом написаны.


0 ответить

#12   morfeg    

проглядел мельком статью. замечание - в юникоде в файлах прошивки содержатся в основном только пути. Многие параметры и настройки в файлах содержатся в ASCII

зы. исправь статью, подправь пути, а то слэши удалились после редактирования видимо


0 ответить

#12   Arago    

За тотал коммандер для поиска - респект. Сделаю патч звука камеры на 6120 как до компа доберусь...


0 ответить

#12   Tolyan__19    

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


0 ответить

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