Здравствуйте, гость ( Вход | Регистрация )
![]() |
Форум переехал на новый адрес: forum.elfse.com Текущий форум остаётся в качестве архивного. Обсудить текущее положение дел можно здесь. |
![]() ![]() |
|
|
14.2.2010, 13:42
Сообщение
#1
|
||||||||||
![]() 292 SE
О пользователе |
BinEdit Возможности программы: - поиск и замена HEX-кода - портирование простых патчей (встроенный редактор патчей) Остальные возможности по большей части предназначены для работы с прошивками Samsung, поэтому особо останавливаться на них не буду. В данном примере рассмотрим: - открытие прошивки - портирование функции Прим.: встроенные функции позволяют портировать как в пределах одной платформы, так и между платформами 2020<--->2010; ]]>портировать функции расположенные в ОЗУ и тд.. ]]> 1) Качаем приложение:
BinEdit_v.2010.05.24.7z
( 896.99 килобайт )
Кол-во скачиваний: 6042) Запускаем редактор: 3) Жмём открыть и выбираем RAW-файл прошивки: 4) После загрузки прошивки сканируем её Если требуется, указываем адрес загрузки 44140000, либо 44020000 в зависимости от платформы. Остальные параметры не изменяем, на все сообщения нажимаем ОК (кроме предложения подгрузить ещё один файл). 5) Прошивка загружена в ОЗУ и диасемблирована, готова к работе (поиску, замене hex-значений, сигнатур THUMB и ARM, применению патчей и тд.. и тп.) Прим.: тут и далее опишу много лишнего, что бы показать некоторые функции, даже те, которые не требуются для портирования функций либо простых адресов патчей. Выполнять все эти действия не обязательно (скажу даже больше - можно было и не сканировать прошивку, а сразу приступить к поиску значений, однако пришлось бы к полученным адресам прибавлять офсет вручную, что не есть удобно. Кроме того, сканирование прошивки упростит межплатформенное портирование). 7) Открываем прошивку, на которую будем портировать необходимые функции. Действия--->связанный bin--->открыть новый редактор 8) Для второй прошивки выполняем сканирование, как было написано в п. [4-5] 9) Переходим к первой прошивке, для которой известны адреса необходимых функций. Переходим по адресу функции: Код ;K800_R8BF003 0EB0: 00000000 F93C4645; 3AC: BOOK* GUI_GetBook(GUI* gui); для этого непосредственно вводим перевёрнутый адрес функции F93C4645 ---> 45463CF9 в поле и жмём ENTER Прим.: перевернуть адрес побайтно возможно средствами программы: ![]() 10) Просматриваем исходный код функции (действие не обязательное, однако крайне желательное) 11) В режиме просмотра HEX-кода выделяем и копируем часть кода для поиска. Прим: количество кода необходимое для корректного поиска может варьироваться и в разных случаях необходимо разное количество байт. Так же различаются и режимы поиска и выделения. Наиболее точным является поиск HEX кода, более приблизительным поиск "сигнатур". Следует отметить, что такой поиск может давать на выходе не один а несколько результатов. Тогда следует проанализировать asm-код каждого полученного адреса. Если таких адресов слишком много, то советую изменить методику поиску значений - как показывает практика, простое выделение большего или меньшего числа кода тут помогает слабо. В таком случае следует "подняться вверх", либо "опуститься вниз" в исходной прошивке и искать соседние адреса, либо проанализировав исходный код искать аналогичные адреса на которые есть переходы (в другой прошивке). У каждого свои методы, тут описываю только основные приёмы. 12) Переходим во вторую прошивку (в нашем случае взял пример порта на W580_R8BE001) В строку для поиска вводим наш код (я выбирал сигнатуру THUMB, однако можно и в ARM) Если просто нажать ENTER, то автоматически будет выполнен поиск HEX-данных, если выбрать режим поиска сигнатур, то произойдёт поис всех возможных сигнатур в прошивке. В результате получим: Побайтно перевернув адрес 45364CAD---->AD4C3645 получим нашу функцию Код ;W580_R8BE001 0EB0: 00000000 AD4C3645; 3AC: BOOK* GUI_GetBook(GUI* gui); Сравнив исходные коды, как написано в п.10 можно быть окончательно уверенным в правильности портированного. Некоторые приёмы работы: 1) Выделять слишком много кода, для поиска - бессмысленно. 2) Если найденных значений больше 4-6, то как правило следует изменить методику поиска. Как показывает практика, часто бывает, что ни одно из найденных значений неверно. 3) Если найдено одно значение, особенно если поиск произведён функцией "искать HEX код", то как правило это значение верное. Дополнительно сравнивать asm-коды обоих прошивок нет необходимости, но визуально сравнить полученные и исходные байты всё-же стоит. 4) Как быть когда нужно портировать 10-20 функций с одной прошивки на несколько прошивок? Поочерёдно вводим все необходимые адреса и переходим на них в исходной прошивке. В "истории останутся все адреса", переходя каждый раз к нужному адресу можно копировать байты исходного кода либо просматривать его. В окне второй прошивки можно загрузить любую другую прошивку, столько раз сколько это потребуется; на сообщение "Буфер файла не пустой..." отвечаем ДА. После того, как открыли прошивку повторяем процедуру сканирования. Всех возможностей не описывал, для этого пришлось бы потратить не один час времени. Описал только основные функции необходимые для портирования. Данный редактор не является заменой IDA, но может выступать неплохой альтернативой WinHEX, HxD и подобным решениям. При этом практически не уступает им по скорости работы, а по возможностям значительно превосходит их. Ещё один пример работы с программой: ]]>http://elfse.com/forum/topic1407.html]]>
Прикрепленные файлы
|
||||||||||
|
|
12.7.2010, 22:49
Сообщение
#2
|
![]() 0 SE
О пользователе |
Подскажите, как программой (встроенным редактором патчей) портировать патчи между платформами (db2020->db2010)?
|
|
|
12.7.2010, 23:44
Сообщение
#3
|
![]() 292 SE
О пользователе |
jurgen, Встроенный редактор патчей не совсем корректно портирует даже в пределах одной платформы - на выходе получаем не то, что хотелось. Лучше портировать адреса руками, тогда видно, что портируется и что выходит (видно адреса), хотя можете и встроенным редактором...
Открываете и сканируете две пошивки; открываете редактор, загружаете патч и портируете его на другую прошивку. Однако, многое не будет найдено из-за различий в структурах. Если Вы уже пробовали портировать функции из библиотеки, то думаю поймёте о чём речь. Да, не отрицаю - возможность такая есть, но не всё так просто. Пробуйте. Но, если совсем "не судьба" - портируйте в пределах одной платформы. Всё. Что ещё добавить к сказанному, просто не знаю. |
|
|
20.9.2010, 3:24
Сообщение
#4
|
![]() 2 SE
О пользователе |
Последняя версия BinEdit 2010.05.24
|
|
|
20.9.2010, 11:49
Сообщение
#5
|
![]() 404 SE
О пользователе |
добавил новую версию в 1-й пост
-------------------- Nokia 5800 XM 51.0.006 Cracked + 8Gb + Sennheiser HD 201 + МТС (БИТ)
|
![]() ![]() |