Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-11-2016
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
¿Cómo evitar que una DLL se ejecute antes que cualquier otra cosa de mi programa?

¡Hola a todos!

Pues eso. Hace poco me propuse validar las licencias de mis programas "online", de modo que los "keygen" que había por ahí ya no funcionan. Sé perfectamente que la lucha contra la piratería está perdida de antemano, pero, me ha resultado curioso el "crack" que se ha ideado cierto "cracker" (por lo visto español) para saltarse las licencias de mis programas. Veréis.

El "crack" de este hombre consiste en una DLL de nombre "shfolder.dll" que hay que situar al lado de los ejecutables de mis programas. Dicha DLL, en efecto, hace su trabajo, y, mis programas aparecen como "registrados". Pero este no es el tema que yo quiero tratar. El caso es que yo he tratado de contrarestar el "crack" de estos modos:

1º En el formulario principal, en el evento "OnCreate", comprobando que exista cualquier DLL en el directorio del programa, y, si es así, cerrar el programa. Este "contraparche" no tardó nada en saltárselo el "cracker", publicando una nueva versión de su "parche" que hacía inútil mi comprobación.

2º En el bloque "inicialización" de una unidad situada en primer lugar en mi programa, de modo que, según yo (equivocadamente) es el primer código que se ejecuta. De nuevo, se trata de comprobar si existe un archivo DLL, y, cerrar el programa si es así. Pero el "cracker" contrarestó de nuevo y dejó mi intento otra vez en nada.

Ahora bien, entonces, mi pregunta es, ¿qué demonios pasa? ¿Cualquier DLL (de nombre "shfolder.dll" u otra) situada en el directorio de mi programa se cargará sin más antes que mi programa y podrá hacer con el mismo lo que quiera? A mí me da la risa (literalmente), porque, ciertamente, no es algo que pueda evitarse, según me parece.

La DLL en cuestión "shfolder.dll" es en efecto usada en mis programas, puesto que ella se incluye en la unidad "Winapi.SHFolder.pas" de la VCL de Delphi, que sirve para obtener las rutas de ciertos directorios del sistema como "Mis Documentos", etc. Parece ser que, al incluirse dicha DLL sin indicar una ruta absoluta, Windows carga la DLL que se encuentre en el directorio de nuestro programa.

Realmente a mí me llama la atención que nuestro programa no pueda hacer nada contra eso, al menos no tratando de localizar dicha DLL previamente, puesto que, como he indicado arriba, aunque uno compruebe la existencia de la DLL en un código que, supuestamente, será el primero en ejecutarse, en realidad no sucede así y el código de la DLL se ejecuta primero.

Me parece que esta técnica se llama "DLL hijacking", pero, poca información se encuentra en Google en relación a Delphi, sino es que deberíamos indicar las rutas absolutas de las DLL, lo que implicaría tocar el código de la VCL, y, posibles problemas también, puesto que tal vez no sea tan sencillo indicar las rutas de las DLL de forma absoluta para distintas versiones de Windows, por ejemplo.

En fin, ya no os aburro más, porque, como digo, en realidad lo de la piratería es lo que menos me preocupa. En realidad mi "post" surge de la necesidad de saber cómo evitar dichas DLL... pero no tanto por el caso particular del "crack" que han creado para mis programas, sino porque, en efecto, igual que este "crack" podría ser cualquier otro tipo de código "malicioso"...

¡Un saludo a todos, espero que estéis bien y podáis ayudarme en algo!
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 08-11-2016 a las 19:09:53.
Responder Con Cita
  #2  
Antiguo 08-11-2016
bitbow bitbow is offline
Miembro
 
Registrado: jul 2006
Posts: 366
Poder: 18
bitbow Va camino a la fama
Eso se soluciona encryptando las funciones de la dll y los llamados (si la dll es de tu propiedad y cuentas con el codigo), tambien puedes generar la validacion desde hardware id (disco duro, tarjeta de red u otro).

Saludos.
__________________
¡Ni como ayudarte Niño!!
bitbow
Responder Con Cita
  #3  
Antiguo 08-11-2016
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por bitbow Ver Mensaje
Eso se soluciona encryptando las funciones de la dll y los llamados (si la dll es de tu propiedad y cuentas con el codigo), tambien puedes generar la validacion desde hardware id (disco duro, tarjeta de red u otro).

Saludos.
Gracias por comentar. Ciertamente, la DLL no es mía. Después de probar con una ruta absoluta para la DLL "shfolder.dll" parece que esto tampoco funciona (?) y ahora estoy investigando acerca de la función "SetDefaultDllDirectories", que, parece puede forzar a que se cargen las DLL desde el directorio del sistema. ¡Ya veremos!
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 08-11-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Vaya, qué curioso. Lucha de titanes
Responder Con Cita
  #5  
Antiguo 08-11-2016
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
¡Hola a todos!

Na... es un caso perdido Casimiro! Peeeeeeeero.... Gracias a la ayuda del proyecto Inno Setup y de esta su unidad, acabo de cargarme el último "crack", es decir, la DLL "shfolder.dll" no es cargada ya antes que el código que comprueba su existencia... de modo que el programa se cierra si la DLL existe. ¿El próximo paso? Lo dará el "cracker", estoy seguro. ¿Mi objetivo? Ahora no lo tengo tan claro (mira que ponerme a perder el tiempo en esto...), pero, hace unos días pensaba que me conformaría conque el "crack" en cuestión tuviese que "tocar" el programa, de modo que "mi firma" se rompiese. Con esto me conformaba hace unos días. Puesto que a partir de ahí... creo que tengo la batalla completamente perdida.

P.D. Acabo de actualizar todos mis programas ahora mismo... de momento van tres parches y otros tantos "contraataques". A ver qué pasa mañana. Je je je... me lo tengo que tomar a risa esto.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #6  
Antiguo 08-11-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Ya te digo, esto da para una película y todo
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como evitar q se ejecute el Explorer.exe ing_arismendy API de Windows 3 02-02-2009 06:13:08
Como evitar que una apicacion se ejecute dos veces. manitoba C++ Builder 4 28-05-2007 16:50:04
Como evitar que se ejecute el msn JODELSA Varios 7 26-12-2005 14:17:22
Cualquier cosa me puede servir cmgenny Conexión con bases de datos 1 02-07-2003 22:27:24


La franja horaria es GMT +2. Ahora son las 14:16:44.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi