Реверс-Инжиниринг Iphone 2G

Здравствуйте, уважаемые читатели, в этой статье я хотел рассказать вам о модификации системных файлов операционной системы IOS. Нашим подопытным станет iPhone первого поколения, который сейчас считается редкостью, но эта информация будет актуальна и для других устройств Apple. Для тех кто не знает, первый iPhone выглядит примерно так

Реверс-инжиниринг iPhone 2G

Для проведения экспериментов нам понадобится сам телефон, поврежденный Jajebreak, программа IFunBox для просмотра и изменения системных файлов, дизассемблер IDA и HEX-редактор.

На моем телефоне установлена iOS 3.1.3, но эти модификации будут работать и на других версиях (возможно).

Я думаю, мы можем перейти от слов к делу.

Доработаем системное приложение Весенняя доска который отвечает за интерфейс, в том числе за разблокировку, рабочий стол и т.д. Подключаем смартфон (не побоюсь этого слова) к компьютеру, открываем программу IFunBox и заходим в каталог Система/Библиотека/CoreServices/SpringBoard.app и скопируйте содержимое каталога на свой компьютер для дальнейшего изучения и модификации.



Реверс-инжиниринг iPhone 2G

Здесь мы видим множество файлов .

png, а также папки, где находятся данные локализации, но нас интересует не это.

Нас интересует сам код приложения и этот код находится в файле Весенняя доска .



Реверс-инжиниринг iPhone 2G

Запустите IDA и откройте в нем файл.

Весенняя доска , в появившемся окне нажмите ОК и также во всех последующих окнах нажмите ОК.



Реверс-инжиниринг iPhone 2G

Через некоторое время анализ кода завершится и нам откроется дизассемблированный листинг.



Реверс-инжиниринг iPhone 2G

Как видите, все функции имеют «человеческое» имя типа «класс + имя метода», что очень круто.

Теперь можно приступить к моддингу самого трамплина.



Изменение максимального количества значков на рабочем столе

Как видите, на рабочем столе можно разместить максимум 4 значка по горизонтали и столько же по вертикали, но это ограничение можно изменить и изменить его достаточно просто.

Самый простой вариант, конечно, установить твик с компакт-диска, но этот вариант не для нас, будем патчить исполняемый файл для достижения цели.

Откройте функцию «SBIconList maxIconRows».



Реверс-инжиниринг iPhone 2G

Весь алгоритм работы этой функции заключается в том, чтобы вернуть цифру 4, это число — максимальное количество иконок на рабочем столе по вертикали и я предлагаю попробовать его изменить, скажем на цифру 5. Для того, чтобы изменить это ограничение нам необходимо узнать смещение инструкции «MOV R0 #4» в файле и делается это очень просто, для этого нам нужно из адреса инструкции 0x4DE18 вычесть 0x1000 и мы получим смещение инструкции в исполняемом файле равно 4CE18. Откройте HEX-редактор и перейдите к смещению 4CE18.

Реверс-инжиниринг iPhone 2G

Байт, который я выделил на рисунке, содержит количество иконок на рабочем столе по вертикали и меняем его значение на 5 и сохраняем.

После сохранения файла перейдите в IFunBox и замените исходный файл.

Весенняя доска на модифицированный, затем перезагрузите телефон и посмотрите на результат. До модификации

Реверс-инжиниринг iPhone 2G

После

Реверс-инжиниринг iPhone 2G

Вместо цифры 5 можно поставить любую другую цифру.

Теперь изменим количество иконок по вертикали и для этого перейдем к соседней функции « SBIconList maxIconColumns и сделать абсолютно то же самое, что и в прошлый раз.



Реверс-инжиниринг iPhone 2G

Давайте изменим количество вертикальных иконок на 6, для этого посчитаем смещение команды, пропатчим файл еще раз и загрузим его на устройство.

Теперь рабочий стол выглядит так

Реверс-инжиниринг iPhone 2G



Теперь попробуем сделать так, чтобы значки вообще не отображались

Пользы эта модификация принесет мало, но для получения опыта и просто для развлечения сгодится.

Перейдите к функции «SBIconModel isIconVisible».



Реверс-инжиниринг iPhone 2G

Эта функция решает, отображать значок или нет, и возвращает соответствующий результат. Если функция решит, что значок необходимо отобразить, то она вернет 1; если решение отрицательное, то 0. Наша задача — настроить функцию так, чтобы она всегда возвращала 0. Откроем режим «Просмотр графика» и посмотрим на функциональную схему.

Обратим внимание на второй блок, а точнее на условный переход после него и куда он ведет.

Реверс-инжиниринг iPhone 2G

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



Реверс-инжиниринг iPhone 2G

Тот условный переход, о котором я говорил выше, если условие выполнено, переходит в блок, где регистру R3 присваивается номер 0, а если условие не выполняется, то переход не выполняется и начинаются дальнейшие вычисления по необходимости отобразить значок.

Самый простой способ сделать так, чтобы переход всегда происходил в нужную нам ветку, — изменить команду CMP, а точнее ее аргумент, например, на 2.

Реверс-инжиниринг iPhone 2G

Но мы поступим немного сложнее и заменим команду BNE (переход, если условие не выполнено) на команду BEQ (переход, если условие выполнено).

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

Откройте адрес команды BNE (который находится после CMP на рисунке выше) в HEX-редакторе.



Реверс-инжиниринг iPhone 2G

Эта команда занимает 2 байта.

Первый — это смещение, к которому нам нужно «перепрыгнуть», а второй — код операции команды, который нам нужно изменить.

Мы меняем код операции команды BNE, который равен 0XD1, на код операции команды BEQ 0xD0, затем сохраняем и загружаем измененный файл на устройство.

На скриншоте ниже показан результат

Реверс-инжиниринг iPhone 2G



Почему я решил изучить строение динозавра

О самой первой модели iPhone я мечтал уже довольно давно и только недавно у меня появилась возможность приобрести его, причем в очень хорошем состоянии.

После недели использования простого использования мне стало мало и мне захотелось узнать, что находится «под капотом».

Знания ассемблера и опыт реверс-инжиниринга у меня уже были, но все сильно осложнялось практически полным отсутствием документации (даже зарубежной) о внутреннем устройстве IOS, поэтому учиться пришлось методом проб и ошибок.

Если эта статья окажется вам интересной, то я напишу вторую часть, где расскажу еще много интересной информации о модификации прошивки первого iPhone. Теги: #iOS #разработка iOS #iphone #взлом #доступность #обратное проектирование #обратное проектирование

Вместе с данным постом часто просматривают: