Урок 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? Но я не нашел и прошу простить тупого учителя за это =)
Этот весь инструмент, которого достаточно для решения наших задач. На следующем уроке подробно изучим процесс дизассемблирования прошивки.
Определимся вначале по предмету наших занятий. Мы не будем учиться писать патчи – заплатки на прошивки. Пусть этим занимаются люди, имеющие специальные знания по архитектуре прошивки в целом и способам доступа к требуемым функциям прошивки. В последнее время появляется всё больше и больше новых телефонов и ,соответственно, прошивок для них. Патчеры просто не в состоянии писать одновременно для всех свои разработки. Целью уроков является привлечение максимально широкого круга новичков, желающих перенести полезные функции патчей на свои прошивки. Надеюсь, что эти уроки заинтересуют и бывалых мастеров патчестроения в русле просвещения начинающих. Сам я не отношу себя к патчерам – я всего лишь пытаюсь перенести полезные функции на ту прошивку, которую я выбрал для себя. Я уверен, что многие мои выкладки будут оказаться наивными и вычурными для настоящих патчеров. Я знаю об этом, но с чего-то должно всё начаться. Сами патчеры не спешат делиться с нами, обычными пользователями, жаждущими творчества, своими секретами поиска и исправления функций прошивок. Не знаю почему, будем считать, что в этом виновата нехватка времени у патчеров =). Сам я пришел к первому успешному порту серьезных патчей, наступив предварительно лес граблей.
Поговорим о методах портирования патчей. Само портирование подразумевает перенос в нужные места искомой прошивки измененных определенным образом кодовых последовательностей. На начальном этапе нам даны некие кодовые последовательности и адреса их нахождения в прошивке-источнике. Конечная цель – найти правильным образом адреса переносимого кода, а также адаптировать его к логике работы нашей прошивки-приемника. Способ портирования сильно зависит от функции самого патча. На нашем форуме уже рассматривался один метод портирования кодовых последовательностей – паттерн – с помощью поиска 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? Но я не нашел и прошу простить тупого учителя за это =)
Этот весь инструмент, которого достаточно для решения наших задач. На следующем уроке подробно изучим процесс дизассемблирования прошивки.