Estoy intentando compilar mi propia copia de Security.framework de Apple, concretamente la versión 55471.14.18, que se incluyó en OS X 10.9.5 y cuyo código fuente se puede descargar desde https://opensource.apple.com/tarballs/Security/Security-55471.14.18.tar.gz .
Estoy usando una copia de Mac OS X 10.9.5 en una VM. Se ha instalado Xcode 6.2, y xcode-select --install
se ha ejecutado por separado para adquirir las cabeceras del sistema.
El archivo readme incluido en la descarga de la fuente dice:
Para construir este proyecto en un entorno Darwin (en lugar de construir en Apple), utilice el estilo de compilación Darwin. Si está construyendo con Xcode, seleccione "Darwin" en la ventana emergente "Estilo de compilación activo". Si está Si está construyendo desde la línea de comandos, especifique el estilo de construcción así:
% xcodebuild -buildstyle Darwin install
Pero cuando ejecuto el comando dado, me dice:
xcodebuild: error: option '-buildstyle' is no longer supported
Como mi copia de Xcode era actual en el momento en que se publicó este código, no estoy seguro de qué hacer con este error. Decidí ignorarlo y seguir adelante con sólo un estándar xcodebuild
comando.
El primer problema con el que me encontré fue fácil de solucionar, pero me preocupa que me esté perdiendo algo más grande. El compilador se queja:
/Users/Jonathan/Desktop/Security-55471.14.18/libsecurity_utilities/lib/macho++.cpp:39:18: error:
unused variable 'MAX_ARCH_COUNT' [-Werror,-Wunused-const-variable]
static const int MAX_ARCH_COUNT = 100;
Como la variable no se utiliza de todos modos, simplemente abrí el archivo y comenté la línea static const int MAX_ARCH_COUNT = 100;
.
Desgraciadamente, aquí es donde me topé con un muro de ladrillos. Xcodebuild parece querer todo tipo de encabezados que no están en mi sistema o incluidos en el proyecto. Por ejemplo:
/Users/Jonathan/Desktop/Security-55471.14.18/libsecurity_utilities/lib/mach++.cpp:33:10: fatal error:
'bootstrap_priv.h' file not found
#include <bootstrap_priv.h>
Estas cabeceras son también de código abierto, ¡y sé dónde encontrarlos! Bootstrap_priv.h, por ejemplo, forma parte de launchd; la versión para OS X 10.9.5 puede descargarse de https://opensource.apple.com/tarballs/launchd/launchd-842.92.1.tar.gz
Sin embargo, no entiendo dónde debo poner estas cabeceras para que el compilador las encuentre. Cosas que he intentado:
- Copiar el proyecto launchd a /usr/include/
- Copiar el proyecto launchd a root del proyecto de seguridad
- Copiando sólo Bootstrap_priv.h a /usr/include/
- Copiar sólo bootstrap_priv.h a root del proyecto de seguridad
- Copiando sólo bootstrap_priv.h al directorio del proyecto/libsecurity_utilities/lib/
Este último intento me permitió superar el error (y ver el siguiente encabezado que faltaba), IOPMLibPrivate.h
), pero estoy seguro de que no es lo que debo hacer. Como sigo añadiendo cabeceras en lugares aleatorios dentro del proyecto, otros archivos fuente se atascan encontrando cabeceras que ya he copiado en otros lugares. Algunas de las cabeceras mismas se atascan de esta manera, esperando una ruta relativa diferente para las dependencias de lo que el proyecto principal parece necesitar.
Me siento extremadamente no estoy en condiciones de hacerlo. ¿Dónde se supone que van estos archivos de cabecera, y cuál es el significado de ese -buildstyle
opción que debo incluir pero que no se puede ejecutar? Nada de esto parece estar documentado en ninguna parte.
1 votos
Esto no encaja en ninguna parte de la pregunta, pero porque sospecho que alguien va a preguntar... ¡mi objetivo final es retroalimentar algunos cifrados SSL más recientes a esta versión antigua de Security.framework, para que Mavericks pueda interactuar con la web moderna! Si realmente voy a ser capaz de hacer que el código funcione es una pregunta abierta, pero una cosa a la vez - ¡sólo conseguir que el original compile es un primer paso necesario!
0 votos
Si se mira la pregunta, hay que dedicar tiempo a aprender a gestionar y construir proyectos basados en c. Así que usted sabe lo suficiente para depurar este yourself.an respuesta aquí sería demasiado largo b
0 votos
Los includes cpp actuales están en
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/chrono
así que podría valer la pena intentarlo. También hay esta forma de añadir rutas de inclusión al compilador: stackoverflow.com/questions/5846804/ pero todo esto parece off-topic y bueno para stackoverflow0 votos
En realidad no, aprendí programando en diferentes sistemas operativos y haciendo construcciones a medida que las necesitaba. Para los builds quizás mirar en macports y ver cómo funciona y arreglar algunos de sus tickets. Homebrew podría ser posible también
0 votos
Por lo general, si usted tiene un archivo xcodeproj puede abrirlo en xcode, ir a la configuración de la construcción, y añadir en las rutas de búsqueda de cabecera. Parece que un xcodeproj está incluido como parte del paquete, así que puedes probarlo. También estoy interesado en seguir tu búsqueda de backportar los cifrados más nuevos. Por favor, publica algo si haces algún progreso.
0 votos
(cont.) Aunque creo que para el objetivo de usar mavericks con la web moderna, podría ser más fácil evitar el securetransport nativo por completo y sólo usar openssl. Puedes enlazar la mayoría de las herramientas de línea de comandos contra openssl, y cualquier navegador que no sea Safari utiliza su propia implementación de ssl (boringssl, openssl, etc.).
0 votos
@1110101001 ¡Gracias! -¡No sé por qué estaba tan empeñado en usar la línea de comandos inicialmente! Esto me permitió obtener mucho en el proceso de compilación, aunque todavía estoy recibiendo algunos errores en torno a los objetos no declarados. También he encontrado algo que es frustrante y alentador a la vez: alguien más consiguió que esto compilara, pero parece que no puedo replicarlo con su SDK. github.com/samdmarshall/OSXPrivateSDK/blob/master/OpenSource.md
0 votos
@1110101001 Estoy de acuerdo con respecto a las herramientas de código abierto, lo que quiero arreglar son las aplicaciones GUI de Mac que utilizan el securetransport de Apple. Apple Mail, NetNewsWire, varios widgets del Dashboard, etc. todos tienen problemas con SSL.
0 votos
> Sigo recibiendo algunos errores en torno a los objetos no declarados. ¿Qué error está recibiendo? ¿Son esos símbolos parte de las cabeceras adicionales, o faltan por completo? El proyecto que enlazaste menciona que no lo han probado con security.framework. Podría valer la pena abrir un tema en esa página, ya que podrían tener más experiencia en la depuración de esto.
0 votos
También esto podría ser una locura, pero como último recurso se podría tratar de configurar algún tipo de proxy TLS y luego interceptar / retransmitir las solicitudes. Por supuesto, esto no es muy elegante ya que esencialmente estás haciendo MITM en tu propio sistema y necesitarás añadir tu propio certificado root. Una opción un poco más limpia cuando conoces los dominios a los que te conectas de antemano podría ser parchear tu objetivo de forma binaria para que se conecte a través de http plano a un dominio que controles, que luego puedes retransmitir. Lo fácil que sea hacer esto dependerá de la aplicación específica a la que te dirijas.