elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Borrar dll y que no se pueda recuperar
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Borrar dll y que no se pueda recuperar  (Leído 7,473 veces)
Meta


Desconectado Desconectado

Mensajes: 3.439



Ver Perfil WWW
Borrar dll y que no se pueda recuperar
« en: 15 Abril 2022, 15:21 pm »

Hola:

Quiero hacer un programa, el propio programa lo que hace es que cuando llegue una fecha y hora exacta que he programado, muestre en el escritorio un archivo de texto llamado Hola.txt y en su contenido dice:

Hola compañero.

Desde un archivo .bat se puede hacer, que cree ese texto y se borre el propio archivo .bat. Si hago un programa con C# o C++, no es capaz de autoborrarse. Se me ha ocurrido crear un ejecutable que llame al dll que solo hace crear el archivo .txt en el escritorio y dicho ejecutable borrre la dll. Antes de borrar la dll, tiene que modificarla para destruirla, guardar la modificación y luego borrar la dll para que nadie la recupere con programas de recuperación de archivos, y si lo recupera, que no descifre las funciones de las dll de lo que hace realmente. El ejecutable .exe solo llama la .dll que sabe donde está.

La pregunta del millón.

¿Es posible hacerlo?

Saludos.


En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.355


Ver Perfil
Re: Borrar dll y que no se pueda recuperar
« Respuesta #1 en: 15 Abril 2022, 15:59 pm »

Si usas un bat... el mismo bat puede tener estas funcionalidades.
- Crear el txt...
- Invocar a un exe, que al ser llamado, extrae la dll, que permanece cifrada (físicamente) detrás del exe, invoca las funciones de la dll, que necesites, espera a que termine y luego que se cierre y no esté en uso, rescriba el contenido del fichero 2-3 veces y lo borre, tras esto el exe, se cierra.
- El bat termina...

Ahora, pinta más como una actividad vírica.

Uno puede desear eliminar x fichero al terminar de usarlo por alguna razón de espacio (por ejemplo descomprimido ocupa muchísimo espacio).
...pero cuando se alega que se borra para que no se intente 'descifrar sus funciones', pasa una de 3 cosas:
A - O tratas de ocultar funciones que están a la espera de una patente (por poner un caso)...
B - O tratas de ocultar una funcionalidad de creación de un serial-validador para x programa.
C - O tratas de ocultar actividad vírica.

Como lo primero no es lo 'frecuente', la tercera emerge de la profundidad como un volcán...

Si la funcionalidad de la DLL, no es actividad vírica, ni ofreces una funcionalidad nunca visto... déjalo estar, cualquier otra funcionalidad que alojes, (seguramente) cualquiera podrá crearla desde 0, sin siquiera mirar tu código (de hecho mirar el código, puede suponer un obstáculo y llevaría más tiempo que recrearla desde 0), y además puede ser incluso más eficiente que la versión que tu mantienes en tu dll...

Si fuera el caso, 'B' la forma óptima de solucionarlo es que no salga de tu pc. Un serial debería ser creado desde un servidor (al que solo tú tienes acceso), que luego se envía al mail del destinatario y copia a tu mail. No me entretengo en detallar esto, ya que es bastante probable que no sea el motivo... sino el hilo se titularía: "Proceso para crear seriales" o similar...

La inutilidad del esfuerzo por protegerlo, es que si alguien pretende obtener el código, si no sabe se quedará con las ganas y si sabe, no podrás impedirlo... acabará viendo que hay un exe que se ejecuta, que luego surje una dll y que esta desaparece... no tardará en concluir que el exe lo 'machaca', con lo que en la próxima tras crear el exe y este crear la dll, matará el proceso del exe, con lo que de este modo o algún otro acabará teniendo copia de la dll 'original'...


En línea

RayR

Desconectado Desconectado

Mensajes: 239


Ver Perfil
Re: Borrar dll y que no se pueda recuperar
« Respuesta #2 en: 15 Abril 2022, 16:50 pm »

Aunque es cierto que, hasta donde sé, un exe no puede eliminarse a sí mismo, hay maneras de hacerlo indirectamente. Por ejemplo, en C++ podrías poner algo similar a esto como última instrucción del programa antes de salir:

Código
  1. ShellExecuteA(NULL, "open", "cmd", "/c timeout /t 2 & del ejecutable.exe", NULL, SW_HIDE);

para que se ejecuten los comandos timeout y del. Lo que hace es esperar un par de segundos para estar seguros de que el ejecutable ya se cerró, y entonces borrarlo. Si quisieras hacer algo más complejo que sólo borrarlo, en lugar de "del" ejecutas lo que quieras, incluso un archivo .bat.

De todas formas, coincido en que esto no parece tener mucho sentido, salvo que se trate de actividad maliciosa.
En línea

fary


Desconectado Desconectado

Mensajes: 1.062



Ver Perfil WWW
Re: Borrar dll y que no se pueda recuperar
« Respuesta #3 en: 15 Abril 2022, 20:06 pm »

Busca sobre hacer melt.

https://foro.elhacker.net/programacion_visual_basic/source_how_to_melt_a_file_in_vb6-t164724.0.html;msg777286
En línea

Un byte a la izquierda.
Meta


Desconectado Desconectado

Mensajes: 3.439



Ver Perfil WWW
Re: Borrar dll y que no se pueda recuperar
« Respuesta #4 en: 16 Abril 2022, 00:31 am »


La inutilidad del esfuerzo por protegerlo, es que si alguien pretende obtener el código, si no sabe se quedará con las ganas y si sabe, no podrás impedirlo... acabará viendo que hay un exe que se ejecuta, que luego surje una dll y que esta desaparece... no tardará en concluir que el exe lo 'machaca', con lo que en la próxima tras crear el exe y este crear la dll, matará el proceso del exe, con lo que de este modo o algún otro acabará teniendo copia de la dll 'original'...

De eso se trata, podrá encontrar el ejecutable, pero no la dll. Si descifra el ejecutable, sabrá la dirección donde estaba la dll y su nombre, pero jamás sabrá su funcionalidad. Que es crear el archivo.txt y dentro dice Hola, por poner un ejemplo.

Sabrá que la dll antes será:

La dll hará su función de crear archivo por poner un ejemplo.
Cerrar la dll y que no esté en uso.
Sobreescribir la dll en formato lo que quieras, cualquier cosa.
Guardar la dll que ya no funciona por si el listillo quiera recuperarla con un programa de recuperación de datos.
Borrar la dll modificada e inservible.
El ejecutable crea un archivo .bat.
El ejecutable se cierra después de haber creado un archivo .bat.
No se si el .bat será capaz de modificar el ejecutable y que que inútil para que no se sepa su interior si alguien desea hacer ingeniería inversa al código compilado, por decirlo de alguna manera.
El achivo bat borra la el ejecutable y el propio bat así mismo que si se puede hacer, ya que el bat es un archivo y el que lo borra realmente es el cmd que este si es ejecutable que viene en el Windows. También vale el PowerShell.

¿Crees que puede recuperar la dll un listillo?

Como dice el dicho, en la Viña del Señor hay de todo, nunca se sabe.

A todos, gracias por los consejos.
Saludos.
En línea

RayR

Desconectado Desconectado

Mensajes: 239


Ver Perfil
Re: Borrar dll y que no se pueda recuperar
« Respuesta #5 en: 16 Abril 2022, 19:14 pm »

Todo eso que dices se puede hacer sin mayor problema, pero es difícil hacer que un archivo sea 100% irrecuperable por muchas razones. Si sólo necesitas evitar que un "listillo" los recupere, hay varias alternativas.

Si quieres sobrescribir el ejecutable desde un .bat, lo mejor sería invocando herramientas externas como SDelete. Esto lo podrías hacer como te dije en el mensaje anterior, reemplazando el "del" con "sdelete" o algún programa equivalente, y así podrías incluso prescindir de la .dll. Te sugiero una herramienta especializada porque borra de forma relativamente segura, haciendo difícil la recuperación, y porque los comandos estándar con los que podrías intentar sobrescribir el archivo (echo, copy, xcopy, etc.) en realidad crean uno nuevo y borran el anterior.

Si no quieres usar programas adicionales, puedes usar la opción de una .dll. Obviamente deberás usar carga explícita (LoadLibrary, etc.) para poder cerrarla. Luego la puedes sobrescribir, por ejemplo, con WriteFile. Aunque seguramente no hay garantías de que los bytes originales se sobrescriban, creo que (normalmente) sí sucede así. Eso sí, en este caso, al final no podrías sobrescribir el .exe sino sólo borrarlo.
En línea

Meta


Desconectado Desconectado

Mensajes: 3.439



Ver Perfil WWW
Re: Borrar dll y que no se pueda recuperar
« Respuesta #6 en: 16 Abril 2022, 23:34 pm »

Por si algún "listillo" recupera la dll, si la recupera, antes hay que modificar la dll, guardar la dll modificada que es inservible, solo hay datos corrupto por llamarlo de alguna manera, se guarda la dll y luego se borra.

Al recuperar dicha dll por el "listillo", recuperará si, la dll pero modificada. Ahí está el truco. La dll original no se puede recuperar porque ha sido modificada. Si fuera solo borrada sin modificar si puede hacerlo.

En línea

RayR

Desconectado Desconectado

Mensajes: 239


Ver Perfil
Re: Borrar dll y que no se pueda recuperar
« Respuesta #7 en: 17 Abril 2022, 03:48 am »

Por si algún "listillo" recupera la dll, si la recupera, antes hay que modificar la dll, guardar la dll modificada que es inservible, solo hay datos corrupto por llamarlo de alguna manera, se guarda la dll y luego se borra.

Al recuperar dicha dll por el "listillo", recuperará si, la dll pero modificada. Ahí está el truco. La dll original no se puede recuperar porque ha sido modificada. Si fuera solo borrada sin modificar si puede hacerlo.



Sí, eso está claro desde el principio. A lo que me refiero es a que, dependiendo de cómo se haga, sobrescribir un archivo no necesariamente implica que se sobrescriban los sectores originales. Digamos que tienes un archivo C:\archivo.dll. Por más que lo sobrescribas, el SO, e incluso la controladora del disco/unidad (especialmente en SSD) son libres de escribir los datos nuevos en una ubicación completamente distinta, y simplemente hacer que C:\archivo.dll "apunte" a estos nuevos sectores, dejando intactos los anteriores, y por lo tanto, susceptibles de ser recuperados. Por eso la propia Microsoft en su documentación dice que la única manera más o menos confiable de hacer que un archivo sea (prácticamente) irrecuperable es usando herramientas especializadas.

En tu caso no estamos hablando de proteger información ante un análisis forense profesional ni nada por el estilo, así que, como te mencioné, probablemente con que sobrescribas la .dll mediante WriteFile u otra función similar sea suficiente. Pero es importante ser conscientes de que la posibilidad de recuperación existe, y de que, sin usar software especial, el hecho de que los datos sean o no realmente sobrescritos, es algo que no puedes controlar, al menos hasta donde sé.
En línea

Meta


Desconectado Desconectado

Mensajes: 3.439



Ver Perfil WWW
Re: Borrar dll y que no se pueda recuperar
« Respuesta #8 en: 17 Abril 2022, 10:56 am »

No tengo claro si es así como dices. Se que he modificado fotos desde un Pendrive, lo he recuperado y no se recupera la foto original, si no modificada. Lo que no he probado es antes de borrar e archivo.dll que lo renombre a otra cosa como fhsdkfgsfg.dat o otra cosa. Después modificar y borrar.

Al recuperar datos y depende de cuanto tiempo tarde en darse cuenta al descubrir el ejecuble principal archivo.exe, cuanto más tiempo tarde el "listillo" que hay algo en el PC borrado, más Windows tendrá posibilidad de sustituir por otro archivo en sectores que ya no se usa. Ahí está la cuestión.

Saludos.
En línea

RayR

Desconectado Desconectado

Mensajes: 239


Ver Perfil
Re: Borrar dll y que no se pueda recuperar
« Respuesta #9 en: 17 Abril 2022, 17:07 pm »

Es que no digo que sobrescribir en nuevas posiciones sea lo normal sino que es posible. No conozco todas las circunstancias en que eso pueda ocurrir ni sé si está documentado. Sí sé que, por ejemplo, si el archivo se encuentra en un directorio donde la compresión de Windows esté activada, o si se usa la cifrado de disco, sí puede suceder (y creo que es lo normal) que los datos se escriban en otras posiciones, pero la mayoría de los usuarios no usan esas características. No sé en qué otros casos pueda ocurrir, pero como te decía en el segundo mensaje al mencionar WriteFile, no me parece motivo de preocupación, pues creo que en la mayoría (si no es que en todos) de los casos típicos, sí se sobrescribirán correctamente.

Con los SSD y memoria flash en general, es diferente. Normalmente usan técnicas para que las escrituras estén bien distribuidas a lo largo de la unidad. Aunque dudo que las memorias USB económicas que la mayoría usamos las implementen (y si lo hacen, que lo hagan bien), los SSD, o al menos la mayoría, seguro que sí lo hacen. Cada fabricante usará sus técnicas, algunas más o menos agresivas, pero un ejemplo: https://en.wikipedia.org/wiki/Wear_leveling

Citar
The first type of wear leveling is called dynamic wear leveling (...) Each time the OS writes replacement data, the map is updated so the original physical block is marked as invalid data, and a new block is linked to that map entry. Each time a block of data is re-written to the flash memory, it is written to a new location.

Como sea, yo no me preocuparía mucho, a menos que estuviera haciendo algo ilegal. Con sobrescribir los datos de las maneras ya mencionadas, creo que es muy poco probable que una persona normal los pueda recuperar.
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines