Foro de elhacker.net

Seguridad Informática => Análisis y Diseño de Malware => Mensaje iniciado por: nts94 en 20 Marzo 2012, 01:10 am



Título: Borrar ejecutable en ejecucion
Publicado por: nts94 en 20 Marzo 2012, 01:10 am
Hola, soy nts94 y me gustaría saber si en windows es posible modificar un binario mientras se está ejecutando (con lo facil que es en linux!).

Vereis: estoy trabajando en un virus (como siempre, solo una POC, no lo vereis pululando por ahí) el cual quiero que al llegar el momento de activar su payload (algo original, que abrir la disquetera ya esta muy visto  :D) se desinfecte a sí mismo SOLO DEL BINARIO ACTUAL (es decir, el virus lleva un contador del numero de infecciones, y llegado a un punto solo uno de ellos se activara, y ese es el unico que quiero que se desactive de todo el sistema).

La idea es que cuando al usuario le salte una pantallita en plan "TONTO, TE HAS INFECTADO", pues como que le va a dar click a "Mandar a analizar" y nos va a joder el invento. Por todo lo que he dicho, no me vale usar CopyFileEx con MOVEFILE_DELAY_UNTIL_REBOOT.

PD: se me había ocurrido que tal vez podia inyectar parte del codigo (el que desinfecta) en otro proceso, y desde ahí desinfectarme, pero en Windows Vista/7 la inyeccion de codigo esta más complicada (por lo de los "Procesos Protegidos", sesiones, etc)

Bueno, gracias por adelantado


Título: Re: Borrar ejecutable en ejecucion
Publicado por: Karcrack en 20 Marzo 2012, 01:50 am
Eliminar el ejecutable no parece sencillo. Eso sí, puedes modificarlo e incluso puedes renombrarlo. Para ello debes cerrar todos los handles que haya abiertos al fichero. Había un código dando vueltas por ahí... si lo encuentro lo posteo. Es básicamente lo que hace el Unlocker.

saludos


Título: Re: Borrar ejecutable en ejecucion
Publicado por: nts94 en 26 Marzo 2012, 11:51 am
La verdad es que es justo lo que estoy buscando. Y a quien pertenece el handle? Podría usar para ello NtQuerySystemInformation con SystemHandleInformation y duplicarlo con DuplicateHandle? Y luego como los cierro? (no digo en mi proceso, sino en el proceso que lo posee)

PD: Si el proceso dueño no está protegido, supongo que con un CreateRemoteThread en CloseHandle sobraría, no?

Gracias