motofan logo
> 

Учимся портировать патчи! Уроки! Обсуждаем!, На основе IDA PRO

GALL
сообщение 10.7.2007, 15:59


Гуру
******

Группа: Почётные мотофаны
Сообщений: 706
Регистрация: 25.12.2004
Из: Барнаул
Пользователь №: 29 674
Модель телефона: Iphone 4s
Прошивка: IOS 7.1.1
Победитель конкурса 2008

Рейтинг: 274



Урок 1. Понятия и инструментарий.

Определимся вначале по предмету наших занятий. Мы не будем учиться писать патчи – заплатки на прошивки. Пусть этим занимаются люди, имеющие специальные знания по архитектуре прошивки в целом и способам доступа к требуемым функциям прошивки. В последнее время появляется всё больше и больше новых телефонов и ,соответственно, прошивок для них. Патчеры просто не в состоянии писать одновременно для всех свои разработки. Целью уроков является привлечение максимально широкого круга новичков, желающих перенести полезные функции патчей на свои прошивки. Надеюсь, что эти уроки заинтересуют и бывалых мастеров патчестроения в русле просвещения начинающих. Сам я не отношу себя к патчерам – я всего лишь пытаюсь перенести полезные функции на ту прошивку, которую я выбрал для себя. Я уверен, что многие мои выкладки будут оказаться наивными и вычурными для настоящих патчеров. Я знаю об этом, но с чего-то должно всё начаться. Сами патчеры не спешат делиться с нами, обычными пользователями, жаждущими творчества, своими секретами поиска и исправления функций прошивок. Не знаю почему, будем считать, что в этом виновата нехватка времени у патчеров =). Сам я пришел к первому успешному порту серьезных патчей, наступив предварительно лес граблей.
Поговорим о методах портирования патчей. Само портирование подразумевает перенос в нужные места искомой прошивки измененных определенным образом кодовых последовательностей. На начальном этапе нам даны некие кодовые последовательности и адреса их нахождения в прошивке-источнике. Конечная цель – найти правильным образом адреса переносимого кода, а также адаптировать его к логике работы нашей прошивки-приемника. Способ портирования сильно зависит от функции самого патча. На нашем форуме уже рассматривался один метод портирования кодовых последовательностей – паттерн – с помощью поиска 16-ричных схожих значений в Hex-редакторе (программа для просмотра и редактирования любого файла в виде 16-ричных байтовых последовательностей). Как показала практика¸ портирование методом поиска подходит для портирования очень незатейливых патчей, где изменению подвергаются либо какие-то уникальные константы, либо замена коротких переходов, либо отмена каких-либо действий (расстановка NOP-команд – отсутствие операции). Для портирования более сложных патчей, содержащих различные переходы к подпрограммам, обращения к массивам и т.д., требуется прибегать к ДИЗАССЕМБЛИРОВАНИЮ.
Что же такое дизассемблирование? Это процесс получения некоего кода функций и логики управления нашей прошивки на языке мнемоник АССЕМБЛЕР. Этот язык наиболее приближен к машинному языку центрального процессора. В телефонах Motorola используется, т.н. ARM-архитектура процессора. Очень настоятельно рекомендую новичкам накачать себе литературы по ARM-архитектуре для изучения хотя бы основных команд ARM- и THUMB-процессов, способов адресации и доступа к данным. В процессе изучения портирования, конечно же будем останавливаться на основных командах, которые необходимо знать, чтобы правильно перенести логику патча на другую прошивку.
Каким же образом будем переводить набор байтов в стройный ряд понятных мнемонических команд “асмы”?  А мы будем использовать отличную разработку для дизассемблирования – IDA PRO. Поработав с ней, понимаешь чуть позже, как нетрудно заниматься портированием сложного патча. Вся логика кода максимально разжевана для конечного пользователя. Занятия я буду проводить на примере версии 4.9, хотя уже появилась версия 5.0. Ничего страшного – все основные операции портирования подойдут для любой версии.
Что же ещё потребуется для работы? Составим для себя набор инструментов.
1. Binedit – маленький и простой редактор, компилятор, отладчик и прочая и прочая….=) Но я всё ж таки выбрал ИДУ для дизассемблирования! Я лично не смог адаптироваться к интерфейсу binedit, как не старался. В binedit я использую КАЛЬКУЛЯТОР КОДА
2. Стандартный калькулятор Windows, переведенный в режим операций с шестнадцатиричными числами. Устанавливаем в ВИД “Инженерный” и радиокнопку на Hex. Потребуется для вычислений адресов,значений¸смещений в Hex-формате.
3. WinHex в качестве Hex редактора. Нужен для поисков последовательностей. Показывает количество найденных значений. Может где-то и есть этот функционал в ИДЕ или BinEdit? Но я не нашел и прошу простить тупого учителя за это =)
Этот весь инструмент, которого достаточно для решения наших задач. На следующем уроке подробно изучим процесс дизассемблирования прошивки.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
 
Ответ в темуСоздание новой темы
Ответов
GALL
сообщение 10.7.2007, 17:19


Гуру
******

Группа: Почётные мотофаны
Сообщений: 706
Регистрация: 25.12.2004
Из: Барнаул
Пользователь №: 29 674
Модель телефона: Iphone 4s
Прошивка: IOS 7.1.1
Победитель конкурса 2008

Рейтинг: 274



Урок2. Дизассемблирование.

Пожалуй начнем ковырять прошивку. Используем полезную информацию из раздела “Учимся Дизассемблировать прошивку”.
Первым делом нам надо получить кодовую группу CG1 из самого файла прошивки. Для разложения файла прошивки по кодовым группам используем замечательную программу Flash@Backup 3. Устанавливаем в Активном профиле свою модель телефона, заходим в раздел “Обработка прошивок” и Выбираем файл. После обработки файла в таблице слева появится расшифровка кодовых групп по начальным и конечным адресам. Запоминаем диапазон адресов для CG1 в Hex-формате Далее сохраняем с расширением SMG. По умолчанию кодовые группы сохранятся в папку программы \Random's Developments\Flash&Backup 3\Backups. Из нашего последнего Backups извлекаем CG1. С ним и будем работать!
Итак, запускаем IDA pro и открываем сам файл *.smg: File-Open….-тип файлов: All files (*.*) – выбираем наш ****.smg. После этого появляется окошко, в котором надо указать тип процессора – Processor type. Наш выбор – ARM processors: ARMB – почти в самом верху списка. Жмём ОК и мподтверждаем изменение типа процессора. Следующее окно – “Disassembly memory organization”. Здесь-то нам и пригодятся значения диапазона адресов CG1. Заполняем значения:
RAM:
[V] Create RAM Section
RAM Start Adress – 0x03FC0000
RAM Size - 0x40000

ROM:
[V] Create ROM section
ROM start address – начальный адрес CG1
ROM size – ИДА вычисляет сама

Input file
Loading address – начальный адрес CG1

Остальные позиции оставляем в покое и жмем ОК… Идет процесс загрузки файла в базу..Далее нас IDA предупреждает о наличии двух форматов кода: ARM и THUMB и сама предлагает нам способ определения места нахождения кода. Но мы-то не её советами будем пользоваться! ….Жмем 2 раза ОК и ожидаем загрузки списка строк всей прошивки. Что видем перед собой? А мы видем пока ещё нераспознанный закомпилированный код прошивки в виде зеленой полосы на экране. Пора запускать скрипт распознавания ARM и THUMB команд, т.е. собственно сам процесс дизассемблирования. Воспользуемся файлом скрипта THUMB Big Endian.idc из нижнего закрепления. Заходим в меню: File-IDC file и выбираем наш скриптик. Скрипт попросит ввести начальный адрес CG1. вводим в формате: ROM: нач. адрес CG1. Потом конечный адрес CG1: ROM: кон. Адрес CG1. После этого можно заниматься другими делами и не подходить к компьютеру: процесс дизассемблирования длительный, в несколько проходов – вначале идет распознавание кода (бордовые полоски), потом идет инициализация процедур (синие полоски). Потом ещё проход. Окончание процесса полного дизассемблирования можно заметить по слову “idle” в нижнем левом углу вместо мельтешащих значений адресов. После окончания процесса дизассемблирования сохраняем нашу базу дизасма. Урок второй закончен – мы должны научиться получать на выходе рабочую базу дизассемблированной прошивки. На следующем уроке будем готовить инструментарий к работе по портированию патчей и искать смещения для патч-кодов!

Добавлено позже (10.7.2007, 17:23):
Neomoto, Вот домашним заданием и будет поиск рабочих ссылок на необходимый инструментарий и полезную литературу! smile.gif
Прикрепленный файл THUMB_Big_Endian.rar   ( 438 байт ) Кол-во скачиваний: 730
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить

Сообщений в этой теме
GALL   Учимся портировать патчи! Уроки! Обсуждаем!   10.7.2007, 15:59
Cot   :thumbsup: Просто класс!   10.7.2007, 16:26
Neomoto   Наконец кто-то все-таки начал рассказывать про тай...   10.7.2007, 17:01
GALL   Урок2. Дизассемблирование. Пожалуй начнем ковыр...   10.7.2007, 17:19
Neomoto   Ну что ж, вот что нашел. Что еще найду, буду сюда ...   10.7.2007, 17:43
Osta   ну... это ?   11.7.2007, 8:38
GALL   Osta, ну эт понятно. а ты покажи скрин с результат...   11.7.2007, 8:57
Osta   ну так ? по щелчку мыши переходит на адрес..   11.7.2007, 9:15
GALL   Osta, Спасибо! :)   11.7.2007, 11:27
GALL   Урок 3. Методы поиска последовательностей. ...   11.7.2007, 15:22
Mixa12   А когда будет продолжение, а то очень интересно. :...   27.8.2007, 15:06
c380гуру   И про написание и архитектуру эльфов напиши.   27.8.2007, 16:29
yakk   И про написание и архитектуру эльфов напиши. А к...   27.8.2007, 17:34
GALL   Mixa12, когда появятся конкретные вопросы по порти...   28.8.2007, 1:28
c380гуру   ткни носом. не увидел в теме про elfloader   28.8.2007, 8:59
yakk   c380гуру Вообще ты вначале не про elfloader спраш...   28.8.2007, 21:19
costello666   GALL раскажи как в ida редактировать строчки.   13.9.2007, 7:51
GALL   costello666, Концепция портирования маленько измен...   14.9.2007, 3:25
Nur87   <br />а вот какое окошко у меня выскакивает,...   6.11.2007, 6:41
AlexKooper   Что тут думать, нажимаете на нижнюю строку (верхня...   5.12.2007, 6:39
phocos   thank you very much for your lessons on patch port...   12.5.2008, 13:13
GALL   phocos, упомянутые тобой адреса,действительно, раз...   14.5.2008, 4:49
Джуманджи   Закрыл "хекс" окно, потом (после недолги...   3.6.2008, 7:24
Osta   Закрыл "хекс" окно, потом (после недолг...   3.6.2008, 7:59
cjValentine   Скиньте пожалуйста скрипт THUMB Big Endian... :lo...   3.6.2008, 19:27
Umka85   Держи   4.6.2008, 18:09
mushrom   На мой взгляд через бинэдит всё гораздо легче...   7.6.2008, 5:22
mushrom   как с помощью иды создавать исходник?   9.6.2008, 5:09
DJ Ibrus   Все. я сдаюсь :( несколько раз перечитал. вроде ...   12.6.2008, 11:02
Umka85   Найди меня 289-577-429 помогу :)   12.6.2008, 20:05
Джуманджи   У V3x начало оперативки 0x03FC0000 и 0x40000 со...   23.7.2008, 15:49
yakk   У V3x начало оперативки 0x03FC0000 и 0x40000 с...   23.7.2008, 19:09
Джуманджи   Скрапт не работает почему-то, прошел Found .... И ...   24.7.2008, 16:08
yakk   Джуманджи если ты имеешь ввиду что скрипт Thumb bi...   24.7.2008, 16:18
Джуманджи   yakk, что-то такого нет. Похоже только Motorola s...   24.7.2008, 16:36
yakk   yakk, что-то такого нет. Похоже только Motorola ...   24.7.2008, 16:53
Джуманджи   yakk, Спасибо! (= Вот решил выложить, потому ...   24.7.2008, 17:11
yakk   Если загружено все на правильные адреса - то скор...   25.7.2008, 1:53
Джуманджи   MIG~, Дизасм Ганжи не могу скачать, на работе зак...   25.7.2008, 12:36
Chik_v   Тут он http://mcore.ks.ua/files/R252211LD_U_85_9B_...   25.7.2008, 13:10
Джуманджи   Metalor, это для начала сделай, потом если будут...   2.10.2008, 14:24
Umka85   Ну во первых у тебя направильно найден адрес на чи...   2.10.2008, 15:24
Джуманджи   у тебя код уже продизассмен, "С" надо н...   3.10.2008, 10:13
Джуманджи   на sub_ХХХХХХХ   3.10.2008, 10:28
Umka85   Как мне сместиться назад Нужно не на BX PC курсор...   3.10.2008, 13:02
Metalor   Umka85, ещё раз) Я перешёл на 373_чистой на оффсет...   3.10.2008, 19:10
Umka85   Ну все прально, видишь первый адрес тот самый, с ...   4.10.2008, 4:09
Metalor   Umka85, ида поискала енту функцию по всей CG1 и ск...   4.10.2008, 11:27
Umka85   эх ты шутник, ищи лучше. Ты какую паттерну копиро...   4.10.2008, 14:51
Metalor   Я искал по sub_10B07F94 - забил её в поиске по тек...   4.10.2008, 15:07
Umka85   Паттерна это строка hex данных и брать её нужно не...   4.10.2008, 15:56
Metalor   Я забил паттерну во вкладке по хэкс "01 A0 00...   4.10.2008, 16:54
lavmen   Metalor, MOVEQ, насколько я помню это арм команды....   4.10.2008, 17:35
Umka85   Вот это мне ваще параллельно. Я тебе говорил нуж...   4.10.2008, 17:45
lavmen   Metalor, байт это не одна циферка а две.   5.10.2008, 2:49
Metalor   lavmen, СПС, но это я уж знаю (не настолько тупой)...   5.10.2008, 10:05
Джуманджи   Metalor, мой совет, попробуй пока через бинедит, ...   5.10.2008, 10:46
GALL   Metalor, слушай, а при чем здесь ида? я приводил о...   5.10.2008, 13:30
Umka85   Не подскажешь в какой именно? Я вот к бинедиту ни...   5.10.2008, 16:43
logotoy73   В бинэдите удобно по маске искать. Там проще всё и...   5.10.2008, 17:34
Джуманджи   http://www.idabook.com/collabreate Источник Думаю...   22.11.2008, 17:10
VEX   Скрапт не работает почему-то, прошел Found .... И...   10.6.2009, 14:50
lavmen   Теже. V3 это LTE, размер и местоположение RAM таки...   10.6.2009, 18:25
Charles Manson   Даже незнаю к кому и обратиться-то. Делаю всё так:...   27.4.2010, 19:56
Fenja   Это нормально. Если тебе нужны имена функций, то...   27.4.2010, 21:00
Джуманджи   Charles Manson, у v3i "ROM start address...   28.4.2010, 1:33
Fenja   : )   28.4.2010, 5:59
Rastаman   Привет всем Гуру!!! Раскажите пожалуст...   26.8.2010, 8:32
Osta   вначале отредактируй в блокноте конфиг.ини под сво...   26.8.2010, 9:57
Rastаman   Подскажи пожалуста как мне это портировать???   27.8.2010, 10:25
DmT   epicfacepalm 1)Тебе нужно определить идентификторы...   27.8.2010, 10:34
Osta   нужно тогда читать основы портирования Путеводител...   27.8.2010, 10:35
Rastаman   Оперативку портировал а это не могу обясни пожалу...   27.8.2010, 11:23
Евгений89   define DRMRES_SELECTED 0x120000CC #define DRMRES_A...   27.8.2010, 11:52
Rastаman   Fenja, LINK IMAGE !!!ERROR FROM LINK...   30.8.2010, 12:49
Fenja   Rastаman, fromelf.exe есть в папке, которая пропи...   30.8.2010, 12:56
Rastаman   Fenja, Теперь у меня пишет LINK IMAGE !...   1.9.2010, 11:35
Fenja   Rastаman, Что написано в log файле? И текст батни...   1.9.2010, 13:45
Rastаman   вот "armlink" ­Ґ пў«пҐвбп ў­гв७­Ґ© Ё...   1.9.2010, 20:50
CarbonZyn   :shok: и ты портируешь мидтрансфер??где хоть слово...   2.9.2010, 3:16
Rastаman   Я портирую тюнс :grin:   2.9.2010, 7:01
Fenja   На русском: То есть armlink.exe не найден в пап...   2.9.2010, 10:43
Rastаman   Fenja, А как его прописать путь к стк   2.9.2010, 12:29
Osta   Rastаman, начните с хелловорд , детский сад пр...   2.9.2010, 12:56
baat   Osta, ты карзину не видел) больше сотни сообшений ...   2.9.2010, 14:50
bill_kevin   Hi someone can help me *-properly analyzed? *-how...   29.5.2011, 2:21
Osta   about the analysis you're probably kidding :c...   31.5.2011, 10:01
bill_kevin   How Load Library or events on Ida where Find IDC??...   5.6.2011, 4:49
bill_kevin   where Find IDC for load Library on IDA??   8.6.2011, 19:37
Fenja   bill_kevin, Write specifically what you want to do...   9.6.2011, 9:47

Учимся портировать патчи! Уроки! Обсуждаем!, На основе IDA PRO · Патчи и всё для них · Forum
 

Ответ в темуСоздание новой темы
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 2.6.2024, 12:42

Форум живёт: