2010-01-30 13 views
14

Estoy escribiendo una clase para manejar la seguridad en mi ejecutable (verificando publicaciones seriadas, verificación de fecha de prueba, etc.). Después de compilar el ejecutable (incluso en Release build, con toda la generación de depuración y RTTI desactivadas), cuando lo abro en el Bloc de notas y busco el nombre del método en los datos brutos, puedo ver todos los nombres de los métodos que ensamblan mi clase . No hay miembros publicados en ninguna clase en la base de código.Delphi: Impedir que los nombres de los métodos aparezcan en ejecutables

Esto es malo para la protección. ¿Hay alguna manera de decirle a Delphi que no almacene nombres de métodos en el ejecutable? ¿Por qué los almacena en absoluto si no se necesita RTTI y no hay explosión de COM? ¿Hay alguna opción de compilación que controle esto?

Puede ser que CUALQUIER método de CUALQUIER clase en el ejecutable de destino se almacene dentro del ejecutable en forma de texto. Al parecer, esto se debe a la prolongada RTTI está activada de forma predeterminada para todas las clases en Delphi 2010.

+0

@FractalizeR -. no toman a mal pero si basa (parte de) su seguridad en la ofuscación, está tomando el enfoque equivocado. Sé poco o nada sobre la seguridad, pero lo suficiente como para saber que no debe intentar dispositivo su propio esquema 'irrompible'. Sugiero que busque una solución comercial o de código abierto para manejar el aspecto de seguridad de su aplicación. –

+0

Si desea ver qué símbolos (por ejemplo, nombres de procedimientos y funciones) permanecen en su exe, una buena prueba sería cargar el exe en Ida (The Interactive Disassembler): http://www.hex-rays.com/idapro/versiones de evaluación y freeware están disponibles. – Remko

+0

@Lieven Estoy planeando utilizar Themida protector sobre mi exe, pero incluso en este caso uno tiene que eliminar toda la información excesiva de exe para reforzar la protección. –

Respuesta

15

Si se está preguntando acerca de la extensión de RTTI en Delphi 2010, que se puede desconectar por

{$ RTTI EXPLÍCITO MÉTODOS ([]) PROPIEDADES ([]) CAMPOS ([])}

ver también docwiki.

+1

Supongo que tienes razón. Pero, ¿esta opción no se puede controlar desde la GUI? ¿Si es así, entonces cómo? –

+2

AFAIK no hay control de GUI para el RTTI mejorado. Necesita agregar esas directivas a cada unidad. –

-1

Lo que probablemente verá es la definición de su formulario como recurso (por ejemplo, la representación binaria de los archivos DFM de su proyecto).

Si no desea mostrar esto (para la pantalla de información de serie, etc.) debe crear estos formularios "en código". Por ejemplo, cree un TForm, coloque un TButton y un TEdit en él, adjunte los controladores de eventos en el código.

Para hacer esto de una manera manual: comience con un formulario y cree el DFM. Al visualizar el formulario, elija Ver como texto en el menú contextual y sabrá qué cosas debe copiar en el código. Y asegúrese de no colocar ningún varaiablerefernces debajo de publicado (siempre puso pública/protected/privada como la primera línea dentro de su definición de clase

+1

No se trata de formularios, sino de clases personalizadas derivadas de TObject. –

+0

@FraktalizeR: dada la información que proporcionó anteriormente, podría haber sido sobre los recursos integrados Y el RTTI. Solo en su última actualización mencionó que se trata del nuevo RTTI extendido. Aún así: los recursos también regalan nombres de clase, por lo que no puedo entender por qué descarta esta información de esta manera.Es correcto que este es un método de incrustación de nombres de clase en un ejecutable. –

6

también despojar a las reubicaciones, toma la siguiente en el archivo DPR del proyecto:.

{$IFDEF RELEASE} 
    // Leave out Relocation Table in Release version 
    {$SetPEFlags IMAGE_FILE_RELOCS_STRIPPED} 
{$ENDIF RELEASE} 
+0

Da error del compilador en Delphi 2010. ¿Para qué versión está destinado? –

+0

La constante se declara en Windows.pas: IMAGE_FILE_RELOCS_STRIPPED = $ 0001; {Información de reubicación eliminada del archivo. } Por lo tanto, debe agregar la unidad de Windows a la cláusula uses en el dpr o declararlo usted mismo. – Remko

6

... y no se olvide de apagar "td 32 información de depuración" (en versiones anteriores) o la información de depuración en la pestaña enlazador en los posteriores

Cuestiones relacionadas