Как многие знают недавно появилась такая прекрасная программа как 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-тиричном редакторе символ/букву и увидив сразу её код. там в принципе не сложно.
это пока грубо описано. еще будет подвергаться редактированию и добавлению скриншотов. если у вас есть варианты как подоступнее описать некоторые моменты - пришлите мне их пожалуйста.
Похожие файлы
Как я воскресил NFC на восстановленном iphone 6s
Полезные советыChrome не обновляется на Android, способы решения
Полезные советыКак сделать переадресацию вызова на телефоне
Полезные советыЗдесь находятся
всего 0. За сутки здесь было 0 человек
Комментарии 23
Да трудно будет это понять людям.
вобще надо разбить на два варианта.
первый это обьяснение как править то что выше это перенос действия с Z на C.
и второй вариант как править без переноса . Тоесть просто делать замену в файле на Z .
и потом не у всех есть комп. Для тех у кого его нет про DАМР и думайте . Просто открывайте файлы dll и еxе иногда и rsc. и ищите что то интересное тоесть пути на интересные файлы функции и так далее.
всем спасибо, но это только первая задумка. буде править и делать понятнее по возможности. неудобно еще то, что тут предпросмотра нет когда пишешь. а вообще да. если не знаешь что хочешь так и получается открывай и листай просто, смотри что-нибудь знакомое. так в большенстве случаев и бывает
0 ответить