2012-06-25 22 views
12

Para la certificación 8 aplicación de Windows, hay (entre otros) los siguientes requisitos:Habilitar el control de excepciones de seguridad en C++ Builder

  • 3,2 Su aplicación debe ser compilado usando la bandera /SafeSEH para asegurar excepciones segura Manipulación
  • 3.3 su aplicación debe ser compilado usando la bandera /NXCOMPAT para evitar la ejecución de datos
  • 3.4 su aplicación debe ser compilado usando la bandera /DYNAMICBASE para la aleatorización dirección de espacio de diseño (ASLR)

No pude encontrar la manera de habilitar ninguno de estos en C++ Builder XE.

Para /NXCOMPAT y /DYNAMICBASE, se puede utilizar editbin.exe de VS o peflags.exe de Cygwin. Aunque me sentiría más seguro acerca de posibles efectos secundarios, si hubiera una manera nativa de habilitarlos.

De todos modos, estoy totalmente en pérdida con respecto a /SafeSEH.

+2

Ciertamente Delphi XE2 no produce ejecutables con [Safe Exception Handler Tables] (http://www.jwsecure.com/2007/07/06/the-safe-exception-handler-table/). No tengo CPPBuilder para verificar eso, pero apostaría que no. Creo que no tendrás suerte y deberías enviar una solicitud de control de calidad. En realidad, es posible que los manipuladores de excepciones estructurados sean seguros, pero eso no es muy útil si los archivos PE no están marcados para decirlo. Sus aplicaciones de 64 bits estarán bien, pero eso tampoco es posible aún en CPPBuilder. –

+0

Informe de CC relevante: http://qc.embarcadero.com/wc/qcmain.aspx?d=106781 –

Respuesta

4

Primero,/SafeSEH solo se aplica a x86, no a x64 o ARM. Requiere que el compilador genere tablas adicionales que indiquen las direcciones de las funciones que se consideran manejadores de excepciones válidos por razones de seguridad. Existe una pequeña posibilidad de que pueda hacerlo usted mismo, pero requeriría que observe la cadena de manejo de excepciones fs:0 en su código ensamblado compilado y enumere todas las direcciones que alguna vez se inserten en esa cadena, luego descríbalas como documentadas aquí: http://msdn.microsoft.com/en-us/library/9a89h429(v=VS.80).aspx. Hay una (pequeña) posibilidad de que su código no tenga controladores, y están todos en el tiempo de ejecución de C++ Builder (podría facilitar que el tiempo de ejecución sea una DLL separada).

Debería intentar convencer a C++ Builder de que actualice su compilador para admitir SafeSEH. Ha existido en la plataforma de Windows desde XP SP2, y conecta un agujero de seguridad bastante desagradable (las direcciones del controlador de excepción existen en la pila en x86, esperando un desbordamiento de búfer para poner allí cualquier dirección aleatoria)

1

For el tema relacionado con /NXCOMPAT y /DYNAMICBASE, he creado una solicitud para el enlazador C++ Builder para apoyar estas banderas aquí: https://quality.embarcadero.com/browse/RSP-13072

Usando editbin.exe desde Visual C++ no es una solución ideal, y su enlazador debe ser compatible con estas banderas de forma nativa.

ACTUALIZACIÓN: Una petición adicional se ha creado aquí por los archivos de tiempo de ejecución del constructor/Delphi C++ (DLL/BPLS) para ser distribuidos con estas banderas ya establecidos, con el fin de evitar tener que utilizar EDITBIN desde Visual C++ para establecer usted mismo: https://quality.embarcadero.com/browse/RSP-13231

Cuestiones relacionadas