![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Cita:
__________________
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. |
|
#2
|
||||
|
||||
|
Cita:
LineComment Saludos |
|
#3
|
||||
|
||||
|
Hola,
Cita:
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. ![]() |
|
#4
|
||||
|
||||
|
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:
__________________
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. |
|
#5
|
||||
|
||||
|
Hola,
Muchas gracias Neftalí, tengo que probar ese código. ![]() |
|
#6
|
||||
|
||||
|
Cita:
LineComment Saludos |
|
#7
|
||||
|
||||
|
¡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... |
|
#8
|
||||
|
||||
|
Hola,
Probado el código de Neftalí este funciona como se espera y me convence más que el uso de la función "SetDefaultDllDirectories" y la posterior comprobación de la existencia de la DLL maliciosa. El código podría quedar poco más o menos que como se ve abajo, siendo la unidad en cuestión situada la primera en el "uses" del archivo de proyecto del programa:
Dicho código supone que en el directorio del ejecutable del programa no debe existir DLL alguna. Me queda la duda de si debo cerrar el "handle" antes del "Halt"... |
|
#9
|
||||
|
||||
|
De verdad, hay veces que parece que no me leen
:Cita:
|
|
#10
|
||||
|
||||
|
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? ![]() |
|
#11
|
||||
|
||||
|
Ya sabes que no.
El problema es que en este hilo se nos ha notado mucho... ![]() ![]() ![]()
__________________
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. |
|
#12
|
||||
|
||||
|
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. |
|
#13
|
||||
|
||||
|
Hola a todos,
Cita:
|
|
#14
|
||||
|
||||
|
Cita:
Saludos. |
|
#15
|
||||
|
||||
|
Cita:
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.
__________________
El malabarista. |
|
#16
|
||||
|
||||
|
Hola,
Cita:
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! ![]() |
|
#17
|
||||
|
||||
|
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. |
|
#18
|
||||
|
||||
|
Cita:
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. ![]() Última edición por dec fecha: 14-11-2016 a las 08:11:27. |
|
#19
|
||||
|
||||
|
Cita:
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. |
|
#20
|
||||
|
||||
|
¡Hola a todos!
Cita:
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! |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
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 |
|