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 09-11-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por dec Ver Mensaje
O sea, que, curiosamente, si después de ejecutar la función de marras, compruebo si existe la DLL, en efecto, parece que la comprobación es correcta y así el programa se cierra. Pero, si no compruebo la existencia de la DLL el programa sigue adelante sin problemas, esto es, cargando la DLL "shfolder.dll" que se encuentra en el directorio de la aplicación y no en el directorio del sistema...

La verdad es que esto desconcierta a cualquiera... esto es, se supone que usando la función "SetDefaultDllDirectories" estamos indicando a Windows que busque las DLL en el directorio del sistema, donde, en efecto, se encuentra una DLL "shfolder.dll", pero, aún y con esas la DLL que copiamos en el directorio del ejecutable del programa parece seguir cargándose antes sin problemas...
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

Código Delphi [-]
uses Winapi.SHFolder.pas;

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.

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?

LineComment Saludos
Responder Con Cita
  #2  
Antiguo 09-11-2016
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por roman Ver Mensaje
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?
Entiendo que eso valdría para probar, pero no serviría para distribuir el crack a otros usuarios.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 09-11-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Neftali Ver Mensaje
Entiendo que eso valdría para probar, pero no serviría para distribuir el crack a otros usuarios.
Claro, pero nada me impide publicar la dll maliciosa junto con las instrucciones de uso.

LineComment Saludos
Responder Con Cita
  #4  
Antiguo 09-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 roman Ver Mensaje
Claro, pero nada me impide publicar la dll maliciosa junto con las instrucciones de uso.

LineComment Saludos
¡Ya lo creo que hay instrucciones! Pero no es igual que te digan, copia esta DLL en el directorio del programa, a que te digan, sustituye la DLL del sistema X por esta otra... que yo te doy... algunos usuarios se lo pensarían, al menos. Tal vez no mucho.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 10-11-2016
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Supongo que el resultado es similar al que finalmente has utilizado, pero otra cosa que podrías hacer aprovechando que tu programa (por ahora) no utiliza DLL's diseñadas por ti, es lo siguiente:

Código Delphi [-]
var
  Handle: THandle;
  ModuleEntry: TModuleEntry32;
  Str1, Str2, Str3:String;
begin
  // Path de todos los módulos cargados
  Handle := CreateToolHelp32SnapShot(TH32CS_SNAPMODULE, 0);
  Win32Check(Handle <> INVALID_HANDLE_VALUE);
  try
    ModuleEntry.dwSize := Sizeof(ModuleEntry);
    Win32Check(Module32First(Handle, ModuleEntry));
    repeat
      // Añadirlo
      Memo1.Lines.Add(ModuleEntry.szExePath);
      // Para todas las DLL's...
      if (UpperCase(ExtractFileExt(ModuleEntry.szExePath)) = '.DLL') then begin
        // Es el mismo directorio del EXE?
        if ExtractFilePath(ModuleEntry.szExePath) = ExtractFilePath(Application.ExeName) then begin
          Str1 := ExtractFilePath(ModuleEntry.szExePath);
          Str2 := ExtractFilePath(Application.ExeName);
          Str3 := ModuleEntry.szExePath;

          // Eliminar el mensaje ··············································.
          ShowMessage('Halt!!'  + sLineBreak +
                      Str1 + sLineBreak +
                      Str2 + sLineBreak +
                      Str3);
          // ···································································
          Halt;
        end;
      end;
    until not Module32Next(Handle, ModuleEntry);
  finally
    CloseHandle(Handle);
  end;
end;
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 10-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,

Muchas gracias Neftalí, tengo que probar ese código.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #7  
Antiguo 10-11-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Neftali Ver Mensaje
Código Delphi [-]
        // Es el mismo directorio del EXE?
Creo que hay que tener cuidado aquí. Hasta donde entiendo, el primer directorio donde se busca una dll es el current working directory (CWD) o directorio de trabajo actual, que no necesariamente coincide con el directorio donde se ubica el ejecutable. Por ejemplo aquí, donde se habla del DLL preloading, menciona una prueba abriendo la aplicación haciendo doble clic sobre un archivo asociado a la aplicación (en caso de que la aplicación maneje archivos) en cuyo caso, el CWD será el directorio donde se ubica el archivo.

LineComment Saludos
Responder Con Cita
  #8  
Antiguo 10-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!

Gracias al código de Neftalí acabo de descubrir que la función "SetDefaultDllDirectories" no funciona, o, mejor dicho, no lo hace como se espera. Esto se demuestra situando la DLL del "crack" en el directorio del programa: incluso después de ejecutar la función susomentada (recordemos que sin errores, o sea, se ejecuta correctamente) la DLL del "crack" (situada en el directorio del programa) aparece listada por el código de Neftalí. *

O sea, aunque usando la función que no funciona... puedo comprobar si existe la DLL en el directorio del programa, ya he dicho que esto no me convence y que creo que el siguiente "crack" podría con ello. El código que propone Neftalí me parece mejor que usar la función "SetDefaultDllDirectories" (ojo, al menos en mi caso particular) puesto que el "cracker" no consiguiese saltárselo de otra forma que no fuese tocando el propio ejecutable.

*También se lista la DLL "shfolder.dll" del directorio del sistema, pero, más abajo en el listado...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #9  
Antiguo 14-11-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
De verdad, hay veces que parece que no me leen :

Cita:
Empezado por roman Ver Mensaje
Creo que hay que tener cuidado aquí. Hasta donde entiendo, el primer directorio donde se busca una dll es el current working directory (CWD) o directorio de trabajo actual, que no necesariamente coincide con el directorio donde se ubica el ejecutable. Por ejemplo aquí, donde se habla del DLL preloading, menciona una prueba abriendo la aplicación haciendo doble clic sobre un archivo asociado a la aplicación (en caso de que la aplicación maneje archivos) en cuyo caso, el CWD será el directorio donde se ubica el archivo.

LineComment Saludos
LineComment Saludos
Responder Con Cita
  #10  
Antiguo 10-11-2016
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Aunque consigas evitar la carga de la dll maliciosa en el arranque de tu app, siempre se puede inyectar con un pequeño ejecutable. Esto quiere decir que no puedes quedarte en la defensa de la carga, has de ir más allá y cambiar el código de protección. Además deberás comprobar, en ese código, que no está cargada una dll no deseada. Puedes usar la API GetModuleFileName para ello pues te da la ruta completa de la dll. También puedes explorar las funciones que exporta. Un hook a la indocumentada ldrLoadDll también te puede ayudar a evitar cargas e inyecciones. Eso puede dificultar al crack en la investigación de un nuevo crack. Pero todo esto no quita para que no fortalezas y ofusques el sistema inicial de protección, es fundamental.

Saludos.
Responder Con Cita
  #11  
Antiguo 10-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,

Cita:
Empezado por escafandra Ver Mensaje
Aunque consigas evitar la carga de la dll maliciosa en el arranque de tu app, siempre se puede inyectar con un pequeño ejecutable. Esto quiere decir que no puedes quedarte en la defensa de la carga, has de ir más allá y cambiar el código de protección. Además deberás comprobar, en ese código, que no está cargada una dll no deseada. Puedes usar la API GetModuleFileName para ello pues te da la ruta completa de la dll. También puedes explorar las funciones que exporta. Un hook a la indocumentada ldrLoadDll también te puede ayudar a evitar cargas e inyecciones. Eso puede dificultar al crack en la investigación de un nuevo crack. Pero todo esto no quita para que no fortalezas y ofusques el sistema inicial de protección, es fundamental.

Saludos.
Gracias escafandra. La verdad sea dicha, no estoy muy seguro de cómo fortalezer el sistema en cuestión, aunque, al comprobarse las licencias "online", ciertamente los "keygen" que habían creado en el pasado han dejado de funcionar... o sea que igual por ahí esto ya "podría servir". El problema está en que alguien "inyecte" cierto código que se salte dicha comprobación... yo creo que en ese caso lo daría por perdido, porque, ciertamente, este tipo de "usuarios" probablemente nunca serán clientes, así que, igual no merece la pena el tiempo ni el trabajo.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #12  
Antiguo 10-11-2016
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por dec Ver Mensaje
Hola a todos,



Gracias escafandra. La verdad sea dicha, no estoy muy seguro de cómo fortalezer el sistema en cuestión, aunque, al comprobarse las licencias "online", ciertamente los "keygen" que habían creado en el pasado han dejado de funcionar... o sea que igual por ahí esto ya "podría servir". El problema está en que alguien "inyecte" cierto código que se salte dicha comprobación... yo creo que en ese caso lo daría por perdido, porque, ciertamente, este tipo de "usuarios" probablemente nunca serán clientes, así que, igual no merece la pena el tiempo ni el trabajo.
El problema es que ese tipo de usuarios son los que publicarán o difundirán el crack. Puedes crear un sistema anti-inyección realizando un control exhaustivo de la carga de dll que impida la carga de la no deseada, al fin y al cabo toda inyección realiza un ldrLoadDll que puedes interceptar, si quieres información sobre el tema te la facilito.

Saludos.
Responder Con Cita
  #13  
Antiguo 14-11-2016
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
El siguiente artículo es de recomendable lectura para el tema en cuestión: Carga segura de las bibliotecas para evitar ataques de precarga de DLL

Saludos.
Responder Con Cita
  #14  
Antiguo 14-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
Cita:
Empezado por escafandra Ver Mensaje
El siguiente artículo es de recomendable lectura para el tema en cuestión: Carga segura de las bibliotecas para evitar ataques de precarga de DLL

Saludos.
Gracias escafandra. Leído el artículo se hace hincapié en el uso de "SetDLLDirectory" para eliminar el directorio "actual" de la búsqueda de DLL. Sin embargo, en el mismo artículo se indica que esto no sirve si el "atacante" tiene acceso al directorio de la aplicación, que, es precisamente donde se situaban los "cracks" en mi caso. Claro, no estamos hablando de ningún "atacante", sino de un "crack" con unas instrucciones precisas que indican dónde copiar la DLL "maliciosa": como será el propio usuario (y no un "atacante") el que lo haga, poco podemos hacer para evitarlo.

También he probado (además de con "SetDLLDirectory") probé con "SetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_SYSTEM32)", pero, aunque se ejecuta correctamente, no parece surtir el efecto que buscamos, pues la DLL "maliciosa" consigue ser cargada, aunque, ignoro porqué, en este escenario podemos comprobar su existencia y cerrar el programa. La solución de Neftalí se me antoja la más acertada mientras la DLL en cuestión no pueda evitar su correcto funcionamiento: en este caso nos da igual que la DLL se cargue... porque cerraremos el programa en tal caso.

En fin, según parece, el "cracker" hasta ahora encargado no puede seguir adelante, tal vez porque quiera ser elegante y encontrar un método que no "toque" los ejecutables de los programas. Ya veremos.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 14-11-2016 a las 08:11:27.
Responder Con Cita
  #15  
Antiguo 10-11-2016
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por roman Ver Mensaje
Claro, pero nada me impide publicar la dll maliciosa junto con las instrucciones de uso.
¿El problema es que entonces estás invalidando la DLL de sistema, no?
Por lo que yo he entendido, al copiar la DLL hackeada en el directorio de la aplicación, el resto del sistema sigue funcionando correctamente, porque nadie más usa esa DLL, el resto de aplicaciones usan la correcta (que está en el directorio de sistema).
Si sustituimos la del directorio de sistema (la correcta) por esta, entiendo que el resto del sistema utilizará también la librería modificada.

¿Qué pasa con la original? ¿Se mantiene? ¿La renombras?
¿La modificada llama a la original?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #16  
Antiguo 10-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!

Cita:
Empezado por Neftali Ver Mensaje
¿El problema es que entonces estás invalidando la DLL de sistema, no?
Por lo que yo he entendido, al copiar la DLL hackeada en el directorio de la aplicación, el resto del sistema sigue funcionando correctamente, porque nadie más usa esa DLL, el resto de aplicaciones usan la correcta (que está en el directorio de sistema).
Si sustituimos la del directorio de sistema (la correcta) por esta, entiendo que el resto del sistema utilizará también la librería modificada.

¿Qué pasa con la original? ¿Se mantiene? ¿La renombras?
¿La modificada llama a la original?
Apuntas a algo que yo no había pensado, ciertamente. Sustituir la DLL original implica también "cambios" para otros programas y no sólo para el nuestro. Siempre será mejor un "crack" que no tenga que tocar para nada los archivos del sistema a otro "crack" que tenga que meterse en esos berengenales.

Sin embargo estamos hablando de una DLL particularmente "pequeña" (tres o cuatro funciones), os sea que acaso podría hacerse lo que apuntó Román arriba: que el "cracker" sustituya toda la DLL, de modo que igual no habría problema en situar la DLL en el directorio del sistema y sustituir con ella la DLL original.

Ya veremos cuando "salga" el cuarto "crack"...

Lo que me preocupa bastante es el hecho de que aún llamando a la función "SetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_SYSTEM32)" la DLL del "crack" sigue funcionando, a no ser que compruebe su existencia: en este caso parece que dicha función hace "algo" (que no logro entender) permite al programa al menos comprobar la existencia de la DLL.

Yo creo que los tiros van por lo que apuntó Román arriba: la DLL se carga antes que cualquier código de mi programa, esto es, antes de la llamada a la función "SetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_SYSTEM32)", y eso que esta función es llamada a partir de la cláusula "initialization" de una unidad situada en primer lugar en el programa. Se me ocurre usar la propia cláusula o bloque "initialization" en lugar de llamar a nada desde ahí, aunque probablemente esto no evite que la DLL se cargue y ejecuta antes que cualquier otro código del programa.

¡Os mantendré informados a todos de lo que vaya ocurriendo!
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #17  
Antiguo 10-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,

Dándole vueltas a este tema, digo que uno piensa que el código "initialization" de la primera unidad que se incluye en el programa es lo primero que se ejecuta, pero, ¿no será que antes de eso se incluyen las DLL que el programa necesita? De este modo, la DLL "maliciosa" siempre podrá hacer "algo" que impida a nuestro propio código funcionar como se espera.

Si lo de arriba es cierto, me pregunto si una posible solución (que no tomaré al menos hasta descubrir el siguiente "crack"... si es que al final sale) sería usar nosotros una DLL, de modo que esta sea además la primera que se cargue (no estoy muy seguro, pero, tal vez, importando una función de la DLL en la primera unidad del programa) y así poder tomar medidas ahí mismo.

Creo que puede funcionar: siempre que nuestra DLL sea la primera que se cargue, ya podremos comprobar la existencia de otras DLL "maliciosas" y podremos borrarlas (supongo) sin problemas antes de que dichas DLL se lleguen a cargar siquiera. Creo que el razonamiento es válido a no ser que Windows cargue primero las DLL "del sistema"...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #18  
Antiguo 10-11-2016
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por dec Ver Mensaje
Dándole vueltas a este tema, digo que uno piensa que el código "initialization" de la primera unidad que se incluye en el programa es lo primero que se ejecuta, pero, ¿no será que antes de eso se incluyen las DLL que el programa necesita? De este modo, la DLL "maliciosa" siempre podrá hacer "algo" que impida a nuestro propio código funcionar como se espera.
Pues parece que es así, aunque parece raro.
yo he realizado una sencilla prueba y no he conseguido que ese código se ejecute antes de la carga de la DLL, pues siempre se accede a los métodos de la DLL modficada.

Una solución sencilla en este caso, que creo que ya has comentado, es cargar esta DLL de forma dinámica, en lugar de estática. A tí te sería sencillo, pues como sólo hay 2 funciones, puedes hacerlo fácilmente.
Se supone que si la carga es dinámica, antes ya puedes haber ejecutado el método en cuestión y ya no debería cargar la "modificada".

Esto le obligará a repetir todo el proceso con otra DLL, con el trabajo que eso conlleva, contando que como has dicho esta es sencilla y lleva 2 métodos (no pasa eso con otras -supongo que por eso debe haber escogido esta-).
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #19  
Antiguo 09-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 Neftali Ver Mensaje
Entiendo que eso valdría para probar, pero no serviría para distribuir el crack a otros usuarios.
Eso es. Eso tal vez echaría atrás a algunos usuarios... que por otro lado tampoco es que tengan muchos escrúpulos, tal vez incluso jamás piensen en pagar, así que si pueden usar el programa gratis, bien, y si no, pues tampoco pasa nada... Pero también he comentado en mi post de arriba que esto puede causarle problemas al "cracker", puesto que no sé yo si tendría que añadir a la DLL "original" su propio código... puesto que de otro modo la DLL "original" (ahora su copia) no funcionaría... digo yo...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #20  
Antiguo 09-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!

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
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 20:07:27.


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