Ver Mensaje Individual
  #18  
Antiguo 09-11-2016
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.112
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
¡Hola a todos!

Cita:
Empezado por Román
Vamos a ver si no digo una burrada. Yo creo que no es sorpresivo este comportamiento: cuando tú compruebas que la dll está en el directorio de la aplicación y cierras ésta, lo que estás haciendo es matar un problema que ya estaba presente, es decir, la dll maliciosa ya se había cargado. ¿Por qué? Porque desde el momento en que pones
... el caso es que la comprobación de la DLL se realiza después de usar la función "SetDefaultDllDirectories", y, además sin errores. Si no se usa esta función, aunque compruebe la existencia de la DLL, el "crack" hace su trabajo, o sea, la DLL "maliciosa" se carga y "pasa" de la comprobación que yo pueda hacer. Actualmente y usando la función "SetDefaultDllDirectories" la DLL se sigue cargando (?) pero la comprobación funciona y así puedo cerrar el programa.

Cita:
Empezado por Román
le indicas a tu aplicación que incluya la dll implícitamente, esto es, añade código que carga automáticamente la dll muy posiblemente antes de que cualquier código tuyo tenga la oportunidad de detenerlo o decirle dónde buscar.

Yo creo que lo más seguro sería, en la medida de lo posible, que te olvides de esa unidad y la hagas tú mismo (creo que son pocas funciones). Esto significa que uses tú mismo LoadLibrary y GetProcAddress para cargar la biblioteca exactamente de dónde la quieres e importar las funciones.
Sé que la unidad SHFolder.pas es bastante "sustituible", pero, ¿quién nos dice que el "cracker" no hará uso de otra DLL? Ha elegido dicha DLL, pero, ¿quién nos dice que no podrá elegir otra cualquiera? En ese caso igual el asunto se complica, puesto que hablamos ya de sustituir código de la VCL... en este caso una pequeña unidad, pero, ¿y en los siguientes casos?

¡Y todo esto para conformarme conque tengan que "tocar" el programa! Porque de llegarse a ese punto... allá el usuario que quisiera usar un programa "parcheado". Y además yo no podría hacer más, la verdad sea dicha. Por otro lado, esto está relacionado con esto otro:

Cita:
Empezado por Román
De todas formas, no me queda claro cómo esto te puede servir. Vamos a suponer que logras forzar la carga del shfolder.dll que está en el sistema. Pero estamos hablando del sistema del cracker. ¿Qué le impide al cracker reemplazar aunque sea temporalmente la bilbioteca del sistema, localizada en su directorio de sistema por la suya propia?
En primer lugar, no se trata de las mismas DLL. Es decir, el cracker usa una DLL del mismo nombre, pero, el contenido de las mismas difieren, de modo que creo que aquí sería él quien tendría un problema: su DLL tendría que "emular" toda la otra DLL... Por otro lado, hay que tener en cuenta que no hablamos del sistema del "cracker", sino del usuario del "crack"... de hecho el "crack" se distribuye con instrucciones (muy útiles para mí también) y en este caso se indica que se copie la DLL en el directorio de los programas. Yo creo que no podría sustituir la DLL del directorio del sistema, pero, si fuese así, allá el usuario que quisiera hacer algo así...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita