免费教程_免费网赚教程_破解版软件-寂涯网络学习基地

当前位置: 主页 > 系统综合 > 系统安全 > 远程同步CMD SHELL 程序的实现(vc)(2)

远程同步CMD SHELL 程序的实现(vc)(2)

时间:2012-04-28 19:16来源:未知 整理:寂涯网络 点击:


WSACleanup(); BOOL RecvSreen()
{
int fromlen = sizeof(toSockaddr); DWORD NumberOfcharsWriten;
COORD dwWriteCoord; SREEN_INFO buffer;
//从 hsocket 中接收发送端发来的控制台屏幕缓冲区数据
if( 16 > recvfrom( hsocket, (PCHAR)(&buffer) , sizeof(SREEN_INFO) , 0 ,
&toSockaddr, &fromlen ) )
{
return TRUE;
}
if ( buffer.packhead.packType != KEY_SREEN)
{
return TRUE;
}
if ( buffer.packhead.SreenBufferSize != 24036)
{
return TRUE;
}
if( !memcmp( &buffer.consoleBuffer.wCodePageID , &cmdBuffer , 6000) )
{
return TRUE;
}
dwWriteCoord.X = 0;      //写屏幕缓冲区的起始位置
dwWriteCoord.Y = 0;
//将接收到的数据显示到当前的控制台屏幕中
WriteConsoleOutputAttribute(        hConsoleOutput       ,     (const      WORD
*)(&buffer.consoleBuffer.Attribute), 8000 , dwWriteCoord , &NumberOfcharsWriten);
WriteConsoleOutputCharacter(        hConsoleOutput       ,     (const      char
*)(&buffer.consoleBuffer.Character), 8000 , dwWriteCoord , &NumberOfcharsWriten);
SetConsoleScreenBufferSize(                  hConsoleOutput                 ,
buffer.consoleBuffer.csb.dwSize );
SetConsoleCursorPosition(                   hConsoleOutput                 , buffer.consoleBuffer.csb.dwCursorPosition);
SetConsoleOutputCP( buffer.consoleBuffer.wCodePageID ); memcpy( &cmdBuffer , &buffer.consoleBuffer , 6000); return TRUE;
}
BOOL KeyboardEvent( DWORD dwMilliseconds)
{
INPUT_RECORD Buffer;
DWORD NumberOfEventsRead; HANDLE input;
input = GetStdHandle( STD_INPUT_HANDLE );        //获得当前的标准输入句柄
if( WAIT_OBJECT_0 == WaitForSingleObject( input , dwMilliseconds ) )
{
//将当前控制台的输入数据存入 buffer
if( ReadConsoleInput( input , &Buffer , 1 , &NumberOfEventsRead))
{
if ( Buffer.EventType == KEY_EVENT )
{
//将本地控制端的控制台输入数据发送给远程被控端
SendKeyInfo( KEY_NO_CTRL , &Buffer , sizeof(INPUT_RECORD) );
}
}
}
return TRUE;
}
在目标机上运行远程被控端程序。该程序首先绑定 UDP 8124 端口。随后打开一个控制
台,并创建一个新的控制台屏幕缓冲区且将其设置为当前控制台的屏幕缓冲区。然后创建一
个 cmd.exe 进程,该进程的输入输出都会通过刚才创建的控制台屏幕缓冲区显示出来。同时 该缓冲 区中的数据都会通 过 UDP 包向接 收端程序 发送(此处使用的地 址为
192.168.123.119),而接收到的键盘数据也会写入当前的屏幕缓冲区当中,从而实现了远程 运行各种 CMD 命令的功能。远程被控端程序如图三所示:

远程被控端程序的部分关键代码如下:
 
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR          lpCmdLine,
int       nCmdShow)
{
......
//创建互斥,避免多次运行
HANDLE MutexClient = CreateMutex( NULL,FALSE,"RemoteCMDS");
if (GetLastError()==ERROR_ALREADY_EXISTS)
{
MessageBox( 0,"RemoteCMDS has running...",NULL,MB_OK );
return 0;
}
......
//绑定 UDP 端口
UdpPort = htons(8124); bindSockaddr.sin_family = AF_INET; bindSockaddr.sin_port = UdpPort; bindSockaddr.sin_addr.s_addr = INADDR_ANY;
if( SOCKET_ERROR == bind( hsocket ,(const struct sockaddr *)&bindSockaddr ,
sizeof(bindSockaddr) ) )
{
MessageBox( 0,"Bind RemoteCMD port fail...",NULL,MB_OK ); CloseHandle( MutexClient );
closesocket( hsocket ); WSACleanup();
return 0;
}
AllocConsole();   //为调用进程分配一个新的控制台  即打开一个控制台窗口
ShowWindow( GetConsoleWindow(), SW_SHOW );         //获得控制台窗口句并,并将控制

本页地址 http://www.jybase.net/xitonganquan/20120428876.html

百度搜索更多

谷歌搜索更多

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------

评价:
昵称: 验证码:点击我更换图片
推荐内容
赞助商
赞助商


关于本站免责声明视频更新google百度地图视频地图RRS订阅

如有什么问题请在本站留言,或发邮件到 hxt167#foxmail.com