Melt

Iniciado por nhaalclkiemr, 31 Enero 2008, 23:36 PM

0 Miembros y 2 Visitantes están viendo este tema.

nhaalclkiemr

Bueno pues a ver, ya se que muchos sabeis que un Melt (autodestruccion) es hacer que después de ejecutarse el programa se borre a si mismo...pues el problema que tengo es que la mayoría de veces el archivo se copia y la nueva copia que se ejecuta es la que borra el original...pero yo no quiero tener que andar copiando ningun archivo...quiero que al terminar su ejecucion se borre...pero si todavía está en ejecución como puedo borrarme a mi mismo???

Esa es la cuestion...a ver si alguien me puede ayudar...se me ocurren métodos como poner una linea del cmd.exe en tareas programadas o para el proximo inicio...pero weno me gustaría algo profesional...que el propio programa se eliminase a si mismo...y como hago si se encuentra en ejecucion??? ese es el problema

A ver que ideas se os ocurren...no me hacen falta codigos...simplemente ideas...

Saludos ;)
StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%

Mad Antrax

#1
Vale, entonces tú no quieres hacer Melt... definamos antes algunos conceptos:

Melt

P1 = Programa Principal
P2 = Dummy Deleter

1) Ejecutamos P1
2) P1 crea el proceso P2 en %temp% (por ejemplo)
3) P1 ejecuta P2 y le pasa su ruta (P1 le da la ruta de P1 a P2)
4) P1 finaliza su ejecución
5) P2 entra en bucle, si encuentra el fichero P1 lo elimina
6) P2 continua en bucle hasta que no exista P1 (hasta que lo haya eliminado)
7) P2 sale del bucle (P1 está eliminado ya) y continua ejecutando el código
8) Fin

Efecto: El usuario ejecuta P1, y justo en ese instante el fichero de P1 es eliminado pero se sigue ejecutando (en realidad se ejecuta P2 que es una copia de P1 en otra ubicación)

Lo que tu quieres hacer

1) Ejecutamos P1
2) Trabajamos con P1 un buen rato
3) Al cerrar P1, que se autoelimine sin usar Dummies.

Ummm, lo que planteas no parece tener fácil solución. Yo al menos no lo sé resolver sin usar Dummies temporales. Podrías hacer esto...

1) Ejecutamos P1
2) P1 crea el proceso P2 en %temp% (por ejemplo)
3) P1 ejecuta P2 y le pasa su ruta (P1 le da la ruta de P1 a P2)
4) P1 finaliza su ejecución
5) P2 hace CreateProcess(P1) y obtiene su handle hProcess
6) El usuario trabaja con P1, P2 no se muestra en ningún momento.
7) P2 está esperando en WaitForSingleObject(P1) - Es decir, espera a que finalicemos P1
8) P1 es finalizado por el usuario
9) P2 se entera y manda un DeleteFile(P1)
10) P1 es eliminado porque ya no se ejecuta

Efecto: El usuario P1 es ejecutado por el usuario, P1 permanece físicamente en la misma ruta, y al finalizar su ejecución, éste (P1) es eliminado automáticamente (en realidad lo elimina P2).

Con este método sólo quedaría P2 en el disco del usuario sin ejecutarse ni nada. Es lo único que se me ocurre, y estoy hablando desde la teoría, tendría que probarlo antes...

Saludos!!
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.

Tughack

El mejor metodo para melt es crear un thread remoto en el explorer y borrar el .exe desde ahi. El problema esk los avs lo detectan :P (No se lo haces con asm, pero... estamos en la sección de vb xD).... Usa el cmd, es una novatada pero en vb no se puede mas jeje

Saludos

Chefito

#3
Chicos, este tema me ha gustado y he estado calentandome el tarro de como se podria hacer. Estaba pensando en si utilizase apis de prodesos e hilos y tal.....vamos.....la muerte jajajaja, hasta que se me encendio la bombilla y pense.....a ver si por casualidad se pueden aprovechar los comandos del win? Efectiviwonder, con Erase funciona!!!! te cagas....y yo hace años me comí la cabeza con este mismo tema, sin darle solución jajajaja. Poner esto en el proyecto .exe que compileis:
Private Sub Form_Terminate()
   Shell "cmd /c erase c:\proyecto1.exe /f", vbHide
End Sub


c:\proyecto1.exe esta claro.....es la localización y nombre de mi propio proyecto a borrar (el que esta en ejecución). El comando /f fuerza ha borrar los de solo lectura.
Si si, solo eso y nuestro proyecto se va a la mierd... cuando cerremos jajaja. Estas son las casualidades de la vida  ::) Por cierto, tambien funciona en el evento unload, pero he preferido meterlo en este por ser posterior. Que os parece?  :P
Saludos.
Moderador del foro oficial de AutoIt en español: www.AutoIt.es.

Todos tenemos inteligencia, lo malo es que algunos no nos acordamos donde la dejamos guardada ;)

Tughack

CitarQue os parece?

Me parece obvio y ademas ya lo havia dicho en el post anterior ^^

De todas formas con eso aclaras a todos (para los k no entendrian lo k keria decir con usar el cmd xD)

Salu2

Chefito

#5
Ha sido pura casualidad. Cuando iba a colgar el mensaje me ha puesto la pagina que habían posteado uno nuevo (el tuyo). Vamos, que no lo había visto hasta que he publicado el mio. Además, no es tan obvio como parece, porque primero probé con del y me mandaba a freir esparragos. Al ocurrir esto pense que no se podía, pero pensé que no perdía nada por intentarlo y funciono con erase. Como he dicho antes.....en mi caso ha sido casualidad.
Saludos.
Moderador del foro oficial de AutoIt en español: www.AutoIt.es.

Todos tenemos inteligencia, lo malo es que algunos no nos acordamos donde la dejamos guardada ;)

Tughack

Con el del tambien funciona...

Probalo asi:

Private Sub Form_Terminate()
    Shell "cmd /c del " & Chr(34) & App.Path & "\" & App.EXEName & ".exe" & Chr(34), vbHide
End Sub

El problema es se el CPU esta mas cargado, puede k falle, se lo vas hacer con el cmd talvez sea buena idea anadir unos segundos de retraso.

Saludos

Chefito

Compañero, tienes razón. Con el del también funciona. Mas, voy a decir otra cosa en la que también debes de tener razón....tengo un ordenador lento, amd k6-2 a 500 con xp, y con el comando del me falla muchas veces. El erase parece bastante más efectivo, pero alguna vez también me ha fallado. O sea, que en ordenadores lentos este metodo no es al 100% seguro de que funcione. Aunque les reitero que con el erase apenas me ha fallado. Habrá que seguir buscando el método 100% efectivo. Mientras tanto, esto es una buena solución.
Saludos.
P.D. He modificado el primer mensaje porque le había puesto cmd /k.....y como bien indica nuestro compañero Tughack es más correcto poner cmd /c. Fallo técnico  :P
Moderador del foro oficial de AutoIt en español: www.AutoIt.es.

Todos tenemos inteligencia, lo malo es que algunos no nos acordamos donde la dejamos guardada ;)

LeandroA

Hola esto anda bien


Open App.Path & IIf(Right(App.Path, 1) <> "\", "\Del.bat", "Del.bat") For Output As #1
Print #1, "@Echo off"
Print #1, ":S"
Print #1, "Del " & App.EXEName & ".exe"
Print #1, "If Exist " & App.EXEName & ".exe" & " Goto S"
Print #1, "Del Del.bat"
Close #1
Shell "Del.bat", vbHide
Unload Me


porlomenos no me falla.


nhaalclkiemr

Haber primero gracias a todos por vuestro interes...empecemos :xD :

MadAntrax...la verdad es que yo Melt no se si le daba o no el concepto correcto pero vamos que todo el mundo lo entiende...y weno de la primera forma que dices sería el Melt en caso de que te quieras copiar...ese ya lo se hacer, y la segunda forma (que como tu dices es lo que yo quiero) además de tener que andar creando un archivo y proceso nuevo el nuevo archivo no va a poder eliminarse tampoco...por eso no me sirve...

Sobre el thread remoto en el explorer es el método quizás más profesional...pero si es detectado por AVs como que no...

Sobre lo de:

Shell "cmd /c del " & Chr(34) & App.Path & "\" & App.EXEName & ".exe" & Chr(34), vbHide

No siempre funciona...a ver si pones justo esa linea antes del End el cmd.exe y el comando del tarda un tiempo en borrar el archivo y puede que en ese tiemo ya se cerrara el programa, sin embargo, si la carga de CPU es grande (como dice TugHack) o por cualquier razón se ejecuta antes el cmd /c del... no se borrará...por eso lo que os pasa en ordenadores lentos...

Sobre el bat ya había pensado en ello...mis ideas eran o crear una simple tarea programada que me lo borrase en 1 minuto (no me gusta esa idea) o crear un bat...lo malo es que los bat son archivos bastante vigilados por AVs...en muchos ordenadores incluso si intentas ejecutar uno no funcionará por las restricciones de los AVs...

De momento lo que tengo pensado es el bat (uno parecido al de LeandroA) pork es lo más efectivo quizás...incluso puedo incorporar los tres métodos...el que dice Chefito, el del bat y el de la tarea programada...

Aún asi si a alguien se le ocurre otro método mejor que lo diga...

Yo voy a provar a ver si con alguna API intenta varias veces borrar el archivo y mientras tanto me da tiempo a cerrarlo para que se borre...

Saludos ;)
StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%