objective-c cocoa-touch ios jailbreak

objective c - ¿Hay algún lugar donde pueda comenzar la programación de ajustes de MobileSubstrate?



objective-c cocoa-touch (3)

Estás buscando Theos creado por DHowett ... Theos te permite hacer ajustes, pero no te da todo lo que necesitas. No obtiene todos los encabezados para iOS, por lo que tiene que clasificar en clase los marcos / frameworks privados desde el SDK de iOS. Comience aquí: http://iphonedevwiki.net/index.php/Theos/Getting_Started , o únase a irc.saurik.net #theos para obtener más ayuda. También puede ver mis proyectos que usan theos: https://github.com/evilpenguin

Después de una búsqueda aquí en el foro encontré una pregunta como esa, y me redirigió a un tutorial que les dio algunas instrucciones básicas sobre cómo manipular SpringBoard con CapitainHook.

Para empezar me gustaría hacerlo solo con% ganchos normales. ¿Alguna pista de por dónde podría empezar?


Por lo tanto, dado que (espero que) esté muy lejos de un noob con la programación de MobileSubstrate ahora, y vi esta pregunta como bastante popular, decidí crear una respuesta que abarque todo lo que necesita saber sobre el tema, con suerte, brevemente.

Esta pequeña introducción está dirigida a quien tenga un conocimiento mínimo sobre Objective-C y sepa lo que está haciendo.

NOTA : Me referiré a la ruta de instalación de theos como $THEOS . Esto podría ser ~/theos , /var/theos , /usr/theos ... Sí.

La forma más popular de crear extensiones de MobileSubstrate, también conocidas como ajustes , es usar el conjunto de aplicaciones theos de Dustin Howett . Los detalles siguen:

Que es theos

Entonces, deberíamos comenzar con lo que Theos no es:

  • El sistema operativo
  • Un dios griego
  • Un compilador

Y por supuesto, lo que Theos no hace :

  • Te enseña a codificar.
  • Crea retoques sin que tengas que pensar.
  • Configura todo un entorno de construcción y / o instala el SDK de iOS.

Theos es una suite multiplataforma de herramientas de desarrollo para administrar, desarrollar e implementar software iOS sin el uso de Xcode , que incluye:

  • Un sistema de construcción robusto impulsado por GNU Make , que hace que sus Makefiles sean fácilmente implementables en todas partes con theos instalado también.

  • NIC , un sistema de plantillas de proyectos que crea proyectos vacíos listos para construir para diferentes propósitos.

  • Logos , una biblioteca de directivas incorporada basada en preprocesador diseñada para facilitar el desarrollo de extensiones de MobileSubstrate con una generación de código óptima.

  • Embalaje automatizado : Theos es capaz de crear directamente paquetes DEB para su distribución en Cydia, el medio más popular de distribución de paquetes en la escena jailbreak.

¿Cómo instalar theos?

  • En OSX : instale el SDK de iOS y siga estas instrucciones .
  • En iOS : instale el paquete de herramientas recomendadas de installtheos3 desde Cydia y ejecute installtheos3 .
  • En Linux : encuentre un medio para tener la cadena de herramientas instalada y siga estas instrucciones .
  • En Windows : nada es imposible, pero si realmente logra hacerlo, hágamelo saber. :PAG

¿Cómo usar theos?

Esta es una pregunta muy hecha y demasiado vaga. Ya que theos es un conjunto completo de herramientas de desarrollo, no tiene sentido preguntar cómo usarlo , sino más específicamente, cómo crear software utilizando theos .

En primer lugar, siempre tenga el Theos Makefile Reference en la mano. Cubre los conceptos básicos de la creación de un Makefile theos, y eso incluye resolver sus problemas de vinculación agregando un marco o marco privado al proyecto .

Ahora, puedes crear tu propio Makefile desde cero, crear tu pequeño clon / enlace simbólico de Theos y comenzar a codificar, pero te facilita este paso. Usted puede simplemente utilizar nic.pl

Un ejemplo muy simple de ejecutar NIC para crear algo se puede encontrar here . Es muy sencillo y te prepara de inmediato para la programación.

Ahora, aquí es donde empezamos a volver al tema.

Creando un tweak con theos.

En primer lugar, no ejecute NIC cuando esté dentro de $THEOS/bin . NIC creará el directorio del proyecto exactamente desde donde lo está ejecutando, y evita cualquier proyecto que se cree en $THEOS/bin . Por lo tanto, terminará con un simple error que puede evitarse creando el directorio del proyecto en algún lugar decente.

Ejecute $THEOS/bin/nic.pl y elija la plantilla de iphone/tweak . Se le pedirá información simple que puede que sepa muy bien cómo responder, excepto en el último campo: el MobileSubstrate bundle filter .

Dado que una gran parte de MobileSubstrate no es solo la conexión (la biblioteca que intercambia los métodos / funciones originales con la suya), sino también el cargador (la parte que hace que su conexión se inserte en ciertos procesos), debe proporcionar esta información básica. para que el cargador sepa donde cargar tu tweak. Este campo no es más que el identificador de paquete para la aplicación donde se insertará este proyecto .

com.apple.springboard , la opción predeterminada es el identificador de paquete para SpringBoard, la aplicación que es:

  • La pantalla de inicio de iOS
  • El lanzador / visualizador de aplicaciones comunes.
  • La barra de estado de iOS
  • Controlador de algunos procesos de fondo esenciales de alto nivel.

Por lo tanto, allí es donde ocurren muchos ajustes, que alteran el comportamiento de algo tan trivial como el lanzamiento de una aplicación a algo así como el aspecto de la interfaz de usuario de la pantalla de inicio.

Programando un tweak con logotipos.

Ahora, el directorio generado por NIC contendrá:

  • Theos Makefile , donde cambiará la información relacionada con la compilación
  • El archivo de control , donde cambiará la información relacionada con el embalaje.
  • Un enlace simbólico (o acceso directo) a $THEOS llamado theos/
  • El archivo de código principal, predeterminado como Tweak.xm . Ya se ha agregado a Makefile para compilar, ¡así que puedes comenzar a codificar de inmediato con él!

En saber que hacer

Ahora, no tiene el código fuente de SpringBoard, y no puede adivinar qué métodos enganchar de la nada. Por lo tanto, necesita un conjunto de encabezado SpringBoard . Para eso, debe usar una herramienta llamada class-dump-z y ejecutarla en el binario SpringBoard (que está dentro del sistema de archivos iOS) para obtener archivos de encabezado que incluyen todas las declaraciones de clase y sus métodos dentro de la aplicación.

A partir de eso (se trata de adivinar y registrar una llamada a un método), puedes empezar a jugar con lo que quieras en un cambio.

Por supuesto, si no está conectando SpringBoard, puede usar class-dump-z como lo haría en otros binarios, como UIKit , MobileSafari , etc.

Tenga en cuenta que, al invertir las aplicaciones de App Store , se cifrarán. Tendrás que descifrarlos (desafortunadamente no puedo decirte cómo hacerlo) y luego ejecutas la class-dump-z en ellos.

En la obtención de encabezados privados.

Cosas como los paquetes de preferencias requieren los encabezados para los marcos privados, en ese caso los encabezados del marco de Preferences . De lo contrario, obtendrá un sinfín de errores de declaración faltantes (como supongo que podría asumir).

Conseguirlos tiene la misma lógica aplicada al paso anterior. Ejecute class-dump-z , en este caso, el binario de Preferences y lance los encabezados a su INCLUDEPATH . INCLUDEPATH es donde el compilador irá en busca de encabezados que incluya como #include <stdio.h> . Sí, stdio.h está dentro de uno de los directorios que construyen el INCLUDEPATH un compilador.

Al compilar con un Makefile theos, $THEOS/include cuenta como parte de su INCLUDEPATH , lo que significa que puede simplemente arrojar sus encabezados volcados allí e incluirlos más tarde.

(Tenga en cuenta que los encabezados volcados en clase no siempre son perfectos, por lo que es probable que tenga un par de errores de compilación relacionados con el encabezado que pueden solucionarse fácilmente con algo como eliminar una directiva #import o cambiarla, o agregar un par de declaraciones)

Consejos de código

  • No puede vincularse con SpringBoard, por lo que siempre que necesite una clase de SpringBoard debe usar la directiva Logos %c o la función objc_getClass , como se define en <objc/runtime.h> para obtenerla. Ejemplo: [%c(SBUIController) sharedInstance] , [objc_getClass("SBUIController") sharedInstance] .
  • Cuando no sepa qué hace un método o cómo funciona algo en SpringBoard, intente desarmarlo con IDA u otros. Uso la Demo de IDA (<- noob!) Para desensamblar.
  • Ver el código de ejemplo es increíblemente útil tanto para aprender como para descubrir cómo funciona algo dentro de SpringBoard u otros (nuevamente ...). Las personas excelentes en GitHub para ver un proyecto son rpetrich , chpwn , DHowett , EvilPenguin y, por supuesto, mucho más.
  • Para averiguar también cómo funciona SpringBoard y otros (...), eche un vistazo al artículo de una clase en el iPhone Dev Wiki .

Epílogo

Espera, ¿dónde está la parte buena? ¿Dónde puedo aprender sobre la codificación en Tweak.xm ?

Bueno, la pregunta original era en realidad ¿Cómo iniciar la programación de ajustes de MobileSubstrate? . Ya está todo preparado, con suerte con todos los encabezados colocados, listos para escribir make y ver su proyecto mágicamente compilado con theos.

¡Todo lo que necesita hacer ahora es profundizar en sus encabezados o su desmontaje e ir a enganchar, llamar, etc.!

Logos contiene exactamente cómo enganchar y usar otras funciones de Logos, y el artículo de MobileSubstrate en devwiki también es una excelente lectura.

Buena suerte. Y si tiene alguna duda, no dude en unirse al canal IRC de irc.saurik.com #theos . Es una excelente manera de discutir temas relacionados con theos y hacer preguntas. Estoy mayormente allí, junto con otras personas muy inteligentes;)