есть ли где-нибудь, где я мог бы начать программирование настроек MobileSubstrate?

После поиска здесь, на форуме, я нашел такой вопрос, и он перенаправил меня на учебник, который дал им некоторые основные инструкции по управлению SpringBoard с помощью CapitainHook.

Для начала я хотел бы сделать это только с обычными %hooks. Любой намек, где я мог бы начать?


person Matoe    schedule 25.05.2011    source источник


Ответы (3)


Итак, поскольку я (надеюсь, что я) сейчас далек от новичка в программировании MobileSubstrate и считаю этот вопрос довольно популярным, я решил создать ответ, охватывающий все, что вам нужно знать по этому вопросу, надеюсь, вкратце.

Это небольшое введение предназначено для тех, кто имеет минимальные знания о Objective-C и знает, что делает.

ПРИМЕЧАНИЕ. Я буду называть путь установки theos $THEOS. Это может быть ~/theos, /var/theos, /usr/theos... Да.

Самый популярный способ создания расширений MobileSubstrate, также известных как твики, — это использование Дастина Хоуэтта. комплект сборки theos. Подробности следуют:

Что такое теос?

Итак, мы должны начать с того, чем theos не является:

  • Операционная система
  • Греческий бог
  • Компилятор

И, конечно же, то, что theos не делает:

  • Научит кодить.
  • Создает настройки, не заставляя вас думать
  • Настраивает всю среду построения и/или устанавливает iOS SDK.

Theos — это кроссплатформенный набор инструментов разработки для управления, разработки и развертывания программного обеспечения iOS без использования Xcode, включающий:

  • Надежная система сборки, основанная на GNU Make, которая упрощает создание файлов Makefile. может быть развернут везде с установленным theos.

  • NIC, система шаблонов проектов, которая создает готовые к сборке пустые проекты для различных целей.

  • Logos, встроенная библиотека директив на основе препроцессора, предназначенная для упрощают разработку расширений MobileSubstrate и оптимизируют генерацию кода.

  • Автоматическая упаковка: Theos может напрямую создавать пакеты DEB для распространения в Cydia, самом популярном средстве распространения пакетов среди джейлбрейков.

Как установить теос?

Как использовать теос?

Это очень заданный вопрос и слишком расплывчатый. Поскольку theos — это целый набор инструментов разработки, не имеет смысла спрашивать Как им пользоваться, а более конкретно спрашивать Как создавать программы с помощью theos.

Прежде всего, всегда имейте под рукой справочник по Makefile компании Theos. Он охватывает основы создания make-файла theos, включая решение проблем с связыванием, добавление фреймворка или частного фреймворка в проект.

Теперь вы можете создать свой собственный Makefile с нуля, создать свой маленький клон/символическую ссылку theos и начать кодирование, но theos упрощает этот шаг. Вы можете просто использовать nic.pl.

Очень простой пример запуска NIC для создания чего-либо можно найти здесь. Это очень просто и сразу настраивает вас на программирование.

Теперь, вот где мы начинаем возвращаться к теме.

Создание твика с помощью theos

Во-первых, не запускайте сетевую карту внутри $THEOS/bin. Сетевая карта создаст каталог проекта именно там, откуда вы его запускаете, и это позволит избежать создания любого проекта в $THEOS/bin. Таким образом, вы получите простую ошибку, которой можно избежать, создав каталог проекта в каком-нибудь приличном месте.

Запустите $THEOS/bin/nic.pl и выберите шаблон iphone/tweak. Вам будет предложена простая информация, на которую вы, возможно, хорошо знаете, как ответить, за исключением последнего поля: MobileSubstrate bundle filter.

Поскольку большая часть MobileSubstrate — это не только hooker (библиотека, которая переключает оригинальные методы/функции с вашими), но также и loader (часть, которая заставляет вас подключаться к быть вставленным в определенные процессы), вы должны предоставить эту основную информацию, чтобы загрузчик знал, куда загрузить ваш твик. Это поле является всего лишь идентификатором пакета для приложения, в которое будет вставлен этот проект.

com.apple.springboard параметром по умолчанию является идентификатор пакета для SpringBoard, приложение, которое:

  • Домашний экран iOS
  • Средство запуска/отображения общих приложений
  • Строка состояния iOS
  • Обработчик некоторых важных фоновых процессов высокого уровня

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

Программирование твика с помощью Logos

Теперь каталог, сгенерированный NIC, будет содержать:

  • Theos Makefile, где вы будете изменять информацию, связанную с компиляцией
  • Файл control, в котором вы будете изменять информацию, связанную с упаковкой.
  • Символическая ссылка (или ярлык) на $THEOS с именем theos/
  • Основной файл кода, по умолчанию Tweak.xm. Он уже добавлен в Makefile для компиляции, поэтому вы можете сразу приступить к написанию кода!

Зная, что делать

Теперь у вас нет исходного кода SpringBoard, и вы не можете угадать, какие методы взять из ниоткуда. Поэтому вам нужен набор заголовков SpringBoard. Для этого вам нужно использовать инструмент с именем class-dump-z и запустить его в двоичном файле SpringBoard (который находится внутри файловой системы iOS), чтобы получить файлы заголовков, включая все объявления классов и его методы внутри приложения.

Исходя из этого (включается угадывание и регистрация вызова метода), вы можете начать возиться с тем, что вы хотите в настройке.

Конечно, если вы не подключаете SpringBoard, вы можете использовать class-dump-z, как и в других двоичных файлах, таких как UIKit, MobileSafari и т. д.

Обратите внимание, что при реверсировании приложений из App Store они будут зашифрованы. Вам нужно расшифровать их (к сожалению, мне не разрешено рассказывать вам, как это сделать), а затем просто запустить на них class-dump-z.

При получении приватных заголовков

Для таких вещей, как пакеты предпочтений, требуются заголовки для частных фреймворков, в этом случае заголовки фреймворка Preferences. В противном случае вы получите бесконечные отсутствующие ошибки объявления (как я думаю, вы могли бы предположить).

Для их получения применяется та же логика, что и на предыдущем шаге. Запустите class-dump-z, в данном случае, двоичный файл Preferences и бросьте заголовки в ваш INCLUDEPATH. INCLUDEPATH — это место, где компилятор будет искать заголовки, которые вы включаете, например #include <stdio.h>. Да, stdio.h находится внутри одного из каталогов, которые создают INCLUDEPATH компилятора!

При компиляции с помощью Makefile theos $THEOS/include считается частью вашего INCLUDEPATH, а это значит, что вы можете просто кинуть туда свои выгруженные заголовки и включить их позже.

(Обратите внимание, что заголовки с дампом класса не всегда идеальны, поэтому у вас, вероятно, будет несколько ошибок компиляции, связанных с заголовками, которые можно легко исправить, например, удалив директиву #import или изменив ее, или добавив пару объявлений. .)

Советы по коду

  • Вы не можете ссылаться на SpringBoard, поэтому всякий раз, когда вам требуется класс из SpringBoard, вы должны использовать либо директиву Logos %c, либо функцию objc_getClass, как определено в <objc/runtime.h>, чтобы получить его. Пример: [%c(SBUIController) sharedInstance], [objc_getClass("SBUIController") sharedInstance].
  • Если вы не знаете, что делает метод или как что-то работает в SpringBoard, попробуйте разобрать его с помощью IDA или других. Я использую IDA Demo (‹- noob!) для дизассемблирования.
  • Взгляд на пример кода невероятно полезен как для изучения, так и для выяснения того, как что-то работает внутри SpringBoard или других (опять же..). Замечательные люди на GitHub, на которых можно посмотреть проекты: rpetrich, chpwn, DHowett, EvilPenguin и, конечно же, гораздо больше.
  • Чтобы также узнать о том, как работает SpringBoard и другие (...), ознакомьтесь со статьей класса на iPhone Dev Wiki. !

Эпилог

Подожди, а где хорошая часть? Где я могу узнать о кодировании в Tweak.xm?

Ну, первоначальный вопрос на самом деле был Как начать программирование настроек MobileSubstrate?. Вы все настроили, надеюсь, все заголовки размещены, готовы ввести make и увидеть, как ваш проект волшебным образом скомпилирован с помощью theos.

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

Справочник по логотипам точно описывает, как подключать и использовать другие функции логотипов, а Статья о MobileSubstrate на devwiki также очень полезна.

Удачи. А если есть сомнения, присоединяйтесь к IRC-каналу irc.saurik.com #theos. Это отличный способ обсудить темы, связанные с теосом, и задать вопросы. Я в основном там, вместе с другими очень умными людьми ;)

person Community    schedule 19.07.2012
comment
Это лучший и самый подробный ответ о Теосе, который я когда-либо видел. Написав Theos, я должен честно нанять этого парня для написания документации. - person Dustin Howett; 19.07.2012
comment
здесь показано, как использовать theos в среде Windows. - person Mardok; 26.05.2016

Вы ищете Theos, созданный DHowett. Theos позволяет вам вносить изменения, но не дает вам всего, что вам нужно. Вы не получаете все заголовки для iOS, поэтому вам нужно выполнить class-dump-z frameworks/private-frameworks из iOS SDK. Начните здесь: http://iphonedevwiki.net/index.php/Theos/Getting_Started , или присоединитесь к irc.saurik.net #theos для получения дополнительной помощи. Вы также можете посмотреть мои проекты, использующие theos: https://github.com/evilpenguin

person EvilPenguin    schedule 01.02.2012

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

person edc1591    schedule 25.05.2011
comment
Я уже ненавижу Теоса. Я хочу узнать, как начать изучать кодирование theos. - person Matoe; 26.05.2011
comment
Посмотрите на файл Tweak.xm, который создается при создании нового твика с помощью theos, он должен показать вам все, что вам нужно знать. Теос в основном не задокументирован. Если вам нужна дополнительная помощь, спросите в #theos на irc.saurik.com. - person edc1591; 26.05.2011
comment
У меня теперь другая проблема. При добавлении пакета настроек в приложение он не найдет Preferences.h :( - person Matoe; 27.05.2011
comment
Создайте новый проект в theos, используя шаблон пакета Preference, и просмотрите его для получения справки. Я действительно мало что знаю о теосах, кроме основных настроек. - person edc1591; 27.05.2011