Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ¿Cómo evitar que una DLL se ejecute antes que cualquier otra cosa de mi programa? (https://www.clubdelphi.com/foros/showthread.php?t=91087)

escafandra 10-11-2016 20:51:23

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.

dec 10-11-2016 21:58:23

Hola a todos,

Cita:

Empezado por escafandra (Mensaje 510624)
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.

escafandra 10-11-2016 22:31:50

Cita:

Empezado por dec (Mensaje 510625)
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.

mamcx 10-11-2016 23:35:33

Cita:

Empezado por escafandra (Mensaje 510626)
El problema es que ese tipo de usuarios son los que publicarán o difundirán el crack.

No creo que sea tan practico intentar "ganar" el pulso.

Me hace recordar a:

http://www.codeproject.com/Articles/...ntional-Wisdom

---
Una forma de verlo es que cada descarga es una perdida. Es cierto que es muy dificil que se conviertan de pago asi como asi.

----
Otra forma de verlo es que es publicidad.

Seria interesante que tantas descargas genera el sitio. Ves forma de estimarlo?

---
Ahora, digamos que en vez de pelear contra un hacker en un area en la que no eres experto, te pones a pelear por "convertir" los clientes de no pago a pago. En este negocio, lograr un <10% en conversiones se considera "normal".

Asi que en vez de invertir en anti-hacking, invierte en un actualizador automatico.

Que NO INTENTE DESACTIVAR EL HACK.

Entonces, empiezas a recolectar algunos datos utiles. (Por ejemplo, sabes cuantos clientes/instalaciones tienes?). Para no hacerlo intrusivo, puedes simplemente hacer el logeo de la informacion en el servidor que tiene la descarga (sino te parece estar haciendo "ping" desde el cliente) en cada vez que haya una actualizacion.

Asi obtienes la primera metrica util: Cuantos clientes hay por ahi vs. Cuanto se supone que has perdido.

Eso te dejara ver si la pelea tiene o no tiene sentido.

Si no tiene sentido, mejor que te sigan distribuyendo la app lo mas posible!

Luego, si tiene sentido, empiezas a utilizar tecnicas de conversion de clientes. Hay que estudiar el tema, en especial si como intuyo no quieres ponerte de spammer sino hacerlo bien.

---

Por lo demas, darle mas publicidad a la app, y quizas mirar la forma de ganar un cliente corporativo (quizas un distribuidor?) terminaria siendo mas rentable a largo plazo.

dec 11-11-2016 07:56:28

Hola,

Cita:

Empezado por escafandra (Mensaje 510626)
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.

¡Gracias por comentar escafandra! Yo trataba de indicar el hecho de que, en este caso, el "vector de ataque" (siempre quise decir esto...) se basa en una DLL, pero, mañana puede ser usando otra DLL... o un "parche" desde otro ejecutable, o... en fin, es un camino sin retorno en el que uno debe acompañar al "cracker" hasta el final, y, ciertamente, ¿para conseguir qué?

Sea como sea, si no me equivoco, este "cracker" en concreto, no parece haber sacado aún el crack "cinco", o sea,... igual para él ya no es posible seguir usando el mismo "vector de ataque"... o bien es que sencillamente no encontrado el "crack" todavía pero este ya existe y está publicado por ahí. ¡Ya veremos! :)

dec 11-11-2016 08:04:01

Hola a todos,

Gracias por comentar Mario. En general estoy de acuerdo contigo. Ahora estoy leyendo el artículo que enlazas. Seguramente después comente más respecto de lo que dices tú y/o el artículo. :)

dec 11-11-2016 09:14:16

Hola a todos,

Leído (yo creo que releído) el artículo que enlaza Mario, este resume muy bien lo que pienso sobre el asunto de la "piratería", ciertamente. Algunas cosas son matizables, por ejemplo, él dice que tal vez, cuando uno habla de "pan" quiere decir "dinero", mientras que, muchos "piratas", cuando hablan de "pan" quieren decir "pan"... Bien. Yo discrepo en esto. Ciertamente, vivo (¡sobrevivo!) en un país del llamado "primer mundo", pero, me gusta utilizar las palabras con propiedad también, y, puedo asegurar que cuando yo hablo de "pan"... estoy hablando del mismo "pan" del que hable cualquiera. No sé si me explico. Pero en fin, seguramente esto mismo es matizable también...

Pero el artículo deja algunas cosas claras que, en realidad, ya tenía yo claras: seguramente leí el artículo hace tiempo también enlazado por Mario. Yo creo que mis esfuerzos contra la piratería esta semana no pueden ni deben ir mucho más allá por las razones mencionadas por otro lado en el mismo artículo. A nivel personal, no me gusta incluir demasiado código específico "antipiratería", porque, ¿y si este código funciona (por error) en algún cliente legítimo? ¿Y si este código causa algún problema, por ejemplo, requiere de alguna DLL, que antes el programa no tenía? Esto también podría afectar a clientes legítimos. ¿Y si el código ralentiza el programa? Y así podríamos seguir.

Yo creo que he tomado una buena dirección validando las licencias "online". De este modo y como ya he dicho, los "keygen" que había para mis programas ya no funcionan, directamente. Además, el hecho de tener una base de datos "online" con las licencias y clientes, también me ha permitido añadir una sección en mi sitio web "sólo para clientes", que, tampoco puede "crackearse", o, al menos no tiene nada que ver con el "crack" de los programas. Actualmente en dicha "sección de clientes" básicamente estos pueden descargar sus licencias (que no moco de pavo, puesto que están ahí disponibles "online" para cuando las necesiten) y en el futuro intentaré añadir más "valor añadido" (siempre quise decir esto...).

¿Más cosas positivas del artículo en cuestión? Pues, también lo había pensado, pero, el artículo vuelve a recordármelo: ¿qué tal si intento poner los precios de mis productos acordes a cada país? Es decir, actualmente, ha de pagar lo mismo un suizo acaso millonario (que oyes, bienvenido sea) que un ugandés acaso no tan rico (pero bienvenido). Creo que esto sería complicado de hacer, y, tampoco tengo muy claro cómo tendría yo que lidiar con este tipo de ventas a nivel fiscal, pero, desde luego, suena muy interesante poner precios a los productos acordes a la generalidad de las gentes en un determinado país. Por lo demás sigo las instrucciones del artículo ya mencionado en bastantes puntos y coincido en prácticamente todo con el autor. :)

dec 13-11-2016 14:25:18

Hola a todos,

Pues nada, informaros de que, según me cuentan (un infiltrado que tengo en el foro "warez" donde el "cracker" en cuestión publica) este hombre ya no puede ir más allá, o sea, de momento, no habrá "crack" número cuatro por parte de este hombre, al menos. Tal vez mi información no es fiable del todo. Seguramente otra persona o esta misma podrá seguir adelante en un momento dado. La solución que estoy empleando ahora mismo es la que ha propuesto Neftalí, o sea, cerrar el programa si se encuentra cargada cualquier DLL desde el directorio de los programas. :)

Neftali [Germán.Estévez] 13-11-2016 18:17:35

^\||/^\||/^\||/
Me alegro.
Aunque sólo sea temporal, al menos a ver si dura.

Otra cosa he de decir David, a raiz de todo esto.
Siempre he dicho que hay programas que se protegen solos, porque son tan malos que no vale la pena crackerlos.

Creo que en tu caso es todo lo contrario, y el hecho de que alguien esté poniendo tanto empeño en ello, habla directamente de la valía del producto.

dec 13-11-2016 19:26:16

¡Hola a todos!

Cita:

Empezado por Neftali (Mensaje 510698)
^\||/^\||/^\||/
Me alegro.
Aunque sólo sea temporal, al menos a ver si dura.

Otra cosa he de decir David, a raiz de todo esto.
Siempre he dicho que hay programas que se protegen solos, porque son tan malos que no vale la pena crackerlos.

Creo que en tu caso es todo lo contrario, y el hecho de que alguien esté poniendo tanto empeño en ello, habla directamente de la valía del producto.

Muchas gracias Germán, majo. Cómo se nota que miras mi trabajo con buenos ojos. :)

Y muchas gracias también por la solución, pues, ciertamente, es la que ahora mismo aplico. :)

Casimiro Noteví 13-11-2016 23:45:35

+1 ^\||/^\||/^\||/

escafandra 14-11-2016 02:22:18

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.

dec 14-11-2016 07:58:52

Cita:

Empezado por escafandra (Mensaje 510710)
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. :)

roman 14-11-2016 16:05:08

De verdad, hay veces que parece que no me leen :rolleyes: :p:

Cita:

Empezado por roman (Mensaje 510607)
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

dec 14-11-2016 16:53:47

Hola a todos,

Cita:

Empezado por roman (Mensaje 510728)
De verdad, hay veces que parece que no me leen :rolleyes: :p:

LineComment Saludos

Sí hombre, sí que se te lee... ejem,... ¿te refieres a que acaso sería bueno comprobar si, además de en el directorio de la aplicación, alguna DLL se ha cargado desde el "directorio actual"? ¿No podría causar esto algún problema que acaso se solucionase cambiando nosotros mismos dicho directorio al principio?

:)

Neftali [Germán.Estévez] 14-11-2016 16:56:32

Cita:

Empezado por roman (Mensaje 510728)
De verdad, hay veces que parece que no me leen :rolleyes: :p:

Ya sabes que no.
El problema es que en este hilo se nos ha notado mucho... :o:o:o

roman 14-11-2016 17:00:41

Cita:

Empezado por dec (Mensaje 510732)
Hola a todos,



Sí hombre, sí que se te lee... ejem,... ¿te refieres a que acaso sería bueno comprobar si, además de en el directorio de la aplicación, alguna DLL se ha cargado desde el "directorio actual"? ¿No podría causar esto algún problema que acaso se solucionase cambiando nosotros mismos dicho directorio al principio?

:)

Me refiero a que el enlace que pone escafandra está desde mi mensaje referido ;) Ahí donde dice Por ejemplo :D

LineComment Saludos

dec 14-11-2016 17:25:05

Cita:

Empezado por roman (Mensaje 510734)
Me refiero a que el enlace que pone escafandra está desde mi mensaje referido ;) Ahí donde dice Por ejemplo :D

LineComment Saludos

Bueno, al menos no necesitas que nadie te dé la razón... :D :D :D

dec 14-11-2016 18:03:30

Hola a todos,

En todo caso, Román, ¿tal vez sería buena idea incluir el "directorio actual" entre los excluídos (actualmente sólo el de la aplicación) como fuente de DLLs? No me queda muy claro el asunto... aunque, bueno, de momento el "cracker" no lo ha visto así, quiero decir, igual conviene esperarse sin más al próximo "ataque", si es que existe, y, si va en dicha dirección...

Edición: Pensándolo dos veces, para excluir el directorio actual podría usarse la función "SetDllDirectory" según la documentación...

dec 15-11-2016 11:47:27

Hola a todos,

Estoy alucinando... me he registrado en el foro del "cracker", y, lo primero que sorprende es la actividad de dicho foro: cientos de usuarios conectados y cientos de miles de mensajes publicados. Curiosamente, he podido leer el hilo en donde se trata de "crackear" mis productos: es increíble la falta de respeto con la que tratan mi trabajo, pero, también mi persona. Baste con citar el último mensaje del propio "cracker":

Cita:

Anyway, i think we'll find a way to make this guy stop bothering a little bit.
O sea... que cuando trato de proteger mi trabajo, al que llevo dedicado años (no porque yo quiera, sino porque los años pasan) es una molestia para este hombre, les estoy molestando, así que pronto verán cómo pueden hacer para que deje de molestarlos. No cito más mensajes, pero, todos siguen más o menos el mismo camino: el "cracker" es ponderado por el resto de usuarios, "muchas gracias", "eres el mejor", "gran trabajo"...

Je je je... me tengo que tomar esto a cachondeo y así lo hago de modo que ahora mismo me estoy partiendo de la risa. :D :D :D

He dudado entre si contestar en el hilo o no hacerlo... pero como que paso: que se diviertan crackeando programas y sigan considerando a sus autores "molestias" que quitar de en medio... ¡qué cosas! :)


La franja horaria es GMT +2. Ahora son las 01:33:27.

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