s75.siemens-club.org - Всё о Siemens S75
   пятница, 21 ноября, 2008 <  |  > Письмо Webmasterу  Домой 
   
Новости
 
   О телефоне
 
   Азбука
 
   Руководство
 
   Прошивки
 
   Патчи
 
   Содержимое S75
 
   Программы
 
   Форум
 

Портируем патч

(c) ferro

Перед Вами краткая инструкция «старого» «взломщика» старых игрушек.

ВНИМАНИЕ! Эта инструкция может пагубно отразиться на умах молодёжи, изучающих СИ, СИ#, C NET…

Для начала необходимо сохранить фулфлэш заводской (с магазина) прошивки с полным контентом (см. http://s75.siemens-club.org/s75guide.html)

Для портирования патчей с одного телефона на другой или, что особенно легко, с одной прошивки на другую понадобятся: V_Klay, Smelter и WinHex.

Пример №1

Необходимо портировать патч «Убрать сообщение «Пожалуйста подождите» при запуске камеры» для S75sw26 на 47-ю прошивку:

Открыть в новом окне в полный размер

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

Для сравнения прошивок открываем оба фулфлэша sw26 и sw47 в WinHEX.

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

Открыть в новом окне в полный размер

В данном случае наблюдается не только несоответствие (сдвиг данных), но и абсолютное отсутствие подобного дампа памяти, что естественно не возможно показать, так как поиск подобного участка памяти занимает некоторое время и связан с рутинным поиском данных в огромном числе цифр на экране.

Для этого как нельзя подходит Smelter!

Запускаем Smelter и открываем фулфлэш нашей прошивки. Затем запускаем поиск значения 03D1 (или другого значения - зависит от задачи) и получаем огромное множество мест в памяти с подобными значениями. Но так оно и должно быть при столь малом числе данных:

Открыть в новом окне в полный размер

В данном случае я специально выбрал сложный пример, в котором, благодаря программистам из BenQ-Siemens части программы разбросаны.

Поэтому приходится опять вернуться в Winhex и просмотреть окрестности нужного нам дампа памяти. В частности впереди 03D1 находится очень «интересный», на мой взгляд массив: 10B5041C806B0028!

Попробуем теперь в Smelter задать поиск этого массива данных и (не так уж труден оказался пример) получаем:

Открыть в новом окне в полный размер

Вот она – наша искомая врезка! Вставляем и юзаем!

Этот метод поиска данных известен давно. Я лично применял его, не считая студенческих годов с играми на 286-х, но и на Siemens S45 (отобрали вооружённые люди на трассе Москва-Челябинск в районе Самары, Красноярский, как не странно, Район - водила мой Сашка, перенервничал - скончался, пусть земля ему будет пухом), C55, S55 - отобрал на улице злой дядька у моей 11-и летней дочери, CX75, S75 и SL75!!! И ещё куча программ и техники, которую я «освоил», работая в группе программно-технического обеспечения (дослужился до начальника), включая контроллеры отечественных инжекторов Январь-5хх, Bosch-5.хх, GM, M, MR, Micas-XX и т.д.

Этим методом я находил (портировал) функции, когда ещё Smelter этого делать не умел. Так что метод хоть и дедовский, но всё же – действенный.

Пример №2

Но есть патчи, в которых используются не функции, а ссылки, например, указатели на участок памяти.

Такие патчи портируются тоже легко, просто, в старом патче, вместо старого значения (некой функции или ссылки) указываем содержимое новой.

Например ElfLoader для sw42! Переделаем его на sw47!

Само тело патча, в данном случае не изменяется, за исключением строк:

0x00079000: 61D42FA037D22FA0334B97A0;RET_ADRS
0x0042C938: 37D22FA0 B48407A0;PATCH_ONCREATE
0x0042C94C: 61D42FA0 EC8307A0;PATCH_ONCLOSE
0x0065B778: 334B97A0 858707A0;PATCH_SHOWMSG_BLF
0x0067FEE8: A19B54A0 488507A0;PATCH_TXT_EXT
0x00903D0C: AA8701FA 08F09FE5;PATCH_ESI1
0x00903D1C: 7C25647C 008107A0;PATCH_ESI2

Причём, в строке 0x00079000 видно содержание других строк, это - наши функции!

По описанному выше алгоритму находим эти функции путём сравнения двух прошивок, в данном случае sw42 и sw47. И получаем следующее:

0079000: FFFFFFFFFFFFFFFFFFFFFFFF fbed2fa0e5eb2fa0237297A0 
042df10: e5eb2fa0 B48407A0  ;PATCH_ONCREATE
042df24: fbed2fa0 EC8307A0  ;PATCH_ONCLOSE
065d9C8: 237297A0 AD8707A0  ;PATCH_SHOWMSG_BLF
06820ec: bdb554a0 708507A0  ;PATCH_TXT_EXT
090637c: c88701fa 08F09FE5  ;PATCH_ESI1
090638c: 7C25647C 008107A0  ;PATCH_ESI2

Это и есть наш порт патча известных людей для нашей прошивки, нашего любимого телефона!

Последний пример показал возможное наличие тех или иных функций внутри тела патча. Для этого можно применить обычный текстовый поиск функций из тела патча в патче «Library», который теперь автоматически создаёт Smelter, со слитого фулфлэша. Обычно эти функции заканчиваются на “A0” или “A8” (если смотреть в WinHEX). Закономерность распределения символов также можно просмотреть в файле Library.

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

  Хостинг предоставлен Siemens Club - все для Сименс
Украинский Клуб любителей Lacetti            Siemens Club - мобильные телефоны Сименс