FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
¿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! Última edición por dec fecha: 08-11-2016 a las 19:09:53. |
#2
|
|||
|
|||
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. |
#3
|
||||
|
||||
Hola,
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! |
#4
|
||||
|
||||
Vaya, qué curioso. Lucha de titanes
|
#5
|
||||
|
||||
¡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. |
#6
|
||||
|
||||
Ya te digo, esto da para una película y todo
|
|
|
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 |
|