#2 [27.06.09, 00:15] Re: Портирование функций с помощью плагина для IDA page/sub
Портирование функций с помощью плагина для IDA page/sub finder. Данный метод хорошо использовать для межплатформенного порта.
Если вы впервые пользуетесь этой программой, то необходимо скачать несколько дополнений: - ida_babeldr от den_po (позволяет не париться с оффсетом и не надо переводить прошивку в raw) файл babeldr.ldw положить в \%ваша папка%\IDA\loaders\ - pagesub от den_po. положить в \%ваша папка%\IDA\plugins\
Итак, приступим. Открываем прошивку в IDA, в поле тип файла выбираем SonyEricsson firmware file (babeldr.ldw). В поле Processor type выбираем ARM processors:-> OK -> Yes Hастраиваем далее: Options -> General -> IDA Options во вкладке Dissasembly в разделе Display disassembly line parts необходимо поставить галочку "Auto comments" и поставить в поле Number of opcode bytes 4. Для отображения хекс-кода в дисасме (опционально) Далее Options -> general -> analysis -> processor specific analysis options -> disable pionter referencing, ставим туда галку, и нажимаем кнопку: Options -> general -> analysis -> reanalyze program
Теперь запускаем плагин: Edit -> Plugins -> sub/page finder Некоторое время придётся подождать (от 5 до 10 минут, в зависимости от платформы телефона, прошивку которого вы открываете и мощности компьютера) То же самое проделываем с прошивкой на которую портируем.
Приготовления окончены, теперь, собственно, сам процесс портирования:
Рассмотрим простенький порт функции 366: int IrDa_GetState(char *state); с K810 SW-R8BA024 на W810 SW-R4EA031. Берём функу для K810
Патч:
0D98: 00000000 E5693E45 ; 366: int IrDa_GetState(char *state);
переворачиваем её - должно получиться 453E69E5, В программе нажимаем G и переходим по этому адресу. мы должны увидеть
Если нет, то поднимаемся на один байт вверх, нажимаем С, не забыв при этом указать, что нам нужен Thumb-режим (для этого нажимаем Alt+G и выбираем 1). Получилась наша функа. Эти циферки мало что говорят человеку не занимающемуся программированием. Так что будем искать что-то более осмысленное. Теперь переходим в графический режим: нажимаем на кнопку со структурой или пробел. Наверху блок-схемы 3 кнопки: нам нужна кнопка с черными стрелочками "Jump to xref" Нажимаем её и видим окошко с 3-мя адресами. Переходим по первой строчке на адрес 44EF0884, повторяем процедуру, переходим дальше. Видим что теперь что переход осуществляется в более менее осмысленную функцию pg_ObEx_IR_AlignDevices. Если интересно, то можно нажать на кнопку ещё раз. Там будет ивент. Мы пришли к самому началу. Теперь берём и копируем название pg_ObEx_IR_AlignDevices, переходим в окошко с прошивкой от W810, нажимаем Alt+T вставляем наш текст -> ставим галку на Find all occurences -> OK. После продолжительного ожидания появляется окошко, где мы видим все строки, что содержат данные слова. Из них функций всего 3. Просматриваем их и видим, что больше всего похожа на функцию от K810 та, что находится по адресу 44FD373C. Теперь смотрим куда идти дальше: в прошивке К810 нажимаем кнопки назад (Esc) вперёд (Ctrl+Enter) видим выделенную жёлтым sub_44EF0884. Она находится в третьем блоке снизу и второй вызов снизу (или говоря проще второй BL sub_xxxxxxxx). Смотрим то же место в прошивке W810. Нашли строчку Код:
ROM:44FD3794 01 F0 14 FB BL sub_44FD4DC0 ; Branch with Link
кликаем по ссылке и переходим по ней вперёд. Далее кликаем на off_44FD4DC4 и на sub_45535C3C+1. Вот мы и пришли к нашей искомой функе!
Структура немного не совпадает - это из-за разности платформ. Но для большей уверенности что мы нашли правильно, кликаем на sub_45555F34 и идём вперёд до адреса 450973CC. В прошивке от K810 делаем то же самое. Видим что по адресу 4510061C для К810 и 450973CC для W810 одинаковые функи, значит мы всё нашли правильно. Теперь остаётся записать её в либу. Берём наш адрес 45535C3C, прибавляем к нему 1 получается 45535C3D, переворачиваем 3D5C5345. получилось
Теперь устанавливаем функу в телефон и окончательно проверяем работоспособность. Напоследок могу сказать что xref-ов может быть много и не всегда так быстро можно найти что-то осмысленное, также некоторые функции могут по другому называться. Так что наберитесь терпения... Опыт приходит со временем. Надеюсь теперь запросов по портированию будет меньше. Успехов!
PS: Выражаю огромную благодарность den_po, UltraShot, Random, awg, MysticBeast и остальным за то что научили этой мудрёной науке добрыми советами и посылами в нужные темы
Сообщение скопировал zapret007 из темы: FAQ. Наиболее легкий способ портирования функций
SE Пешиход 810 [R4EA031fix] ЭП v1.9.2 Philips W632_1228_V13_root Android 2.3.5
#8 [27.06.09, 22:54] Re: Портирование функций с помощью плагина для IDA page/sub
dezertir, прочитай 100 раз, так лучше будет,чем ты видео посмотришь)) Учиться по видео слишком низкий уровень,нужно почитать,вникнуть...
Дуракам закон не писан! Если писан, то не читан. Если читан, то не понят. Если понят, то не так! --- SE K790 R8BF003+ SE W995 R1GA026
snzuev
Пользователь
Регистрация: 29.12.08 Сообщений: 57 Репутация: 176 Откуда: Санкт-Петербург
#9 [27.06.09, 22:58] Re: Портирование функций с помощью плагина для IDA page/sub
Застрял на этапе- В программе нажимаем G и переходим по этому адресу. мы должны увидеть ....а вижу: ROM:453E69F5 ?? % 1 Нажимаю Alt+G появляется segment reg volume-выбора 1 нет!Помогите!
Вы не можете начинать темы. Вы не можете редактировать свои сообщения. Вы не можете создавать опросы. Вы не можете вкладывать файлы в сообщения. Вы не можете отвечать на сообщения. Вы не можете удалять свои сообщения. Вы не можете голосовать.