红队专题-从零开始VC++远程控制软件RAT-C/S-[2]界面编写及上线

红队专题

  • 招募六边形战士队员
  • 1.课前回顾
    • unicode编码 字符串
  • 2.界面编程(下)
    • 对话框
      • 重载消息函数
      • 更改对话框同步更改
  • 3.服务端上线,下线,以及客户端的资源销毁(上)
    • 添加socket 变量
    • 添加 socket 消息
    • 填补config信息
    • 创建线程函数 并运行
    • 添加Addhost
    • 添加 getItemData
    • 创建列表节点类
    • ItemData编写
      • 构造函数
      • 类成员监听线程
      • 运行函数
      • 监听线程

招募六边形战士队员

一起学习 代码审计、安全开发、web攻防、逆向等。。。
私信联系
红队专题-从零开始VC++远程控制软件RAT-C/S-[2]界面编写及上线_第1张图片

1.课前回顾

#pragma comment(lib,“ws2_32.lib”)

unicode编码 字符串

_T 宏

多字节编码 ----字符集 知识点
项目属性

红队专题-从零开始VC++远程控制软件RAT-C/S-[2]界面编写及上线_第2张图片
红队专题-从零开始VC++远程控制软件RAT-C/S-[2]界面编写及上线_第3张图片

2.界面编程(下)

对话框

对话框资源


头文件 添加
private:
	CToolBar m_toolbar;
	CImageList m_imagelist;
	CStatusBar m_statusbar;
	CBitmap m_subbmp[6];
	CImageList m_mainicon;
	void UpdateMain(int port);

	UINT m_port;
	UINT m_max;
	UINT m_Sound;
	CRect m_rect;   //  矩形变量



红队专题-从零开始VC++远程控制软件RAT-C/S-[2]界面编写及上线_第4张图片
红队专题-从零开始VC++远程控制软件RAT-C/S-[2]界面编写及上线_第5张图片

重载消息函数

查看声明

红队专题-从零开始VC++远程控制软件RAT-C/S-[2]界面编写及上线_第6张图片

 

Dlgcpp里


//  当客户端大小发生改变   计算差值  客户端内部控件 同步改变
void CExecN0vvDlg::OnSize(UINT nType, int cx, int cy)
{

//  基类 对对话框改变
	 CDialog::OnSize(nType, cx, cy);
// 类型等于最小化的 宏
    if(nType == SIZE_MINIMIZED)
    {
        return;
    }
    // TODO: 在此处添加消息处理程序代码
    CWnd *pWnd;  // 窗口类指针
    pWnd = GetDlgItem(IDC_LIST1);     //获取控件句柄  条目id

// 控件大小操作
    if(pWnd)//判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建
    {
        CRect rect,rect_l;   //获取控件变化前大小  eg  50x50
        GetClientRect(&rect_l);   // 客户区  控件大小
        pWnd->GetWindowRect(&rect);
        ScreenToClient(&rect);
        rect.right = cx;  // 把控件大小变换

		//rect_l 变化前   
        rect.bottom= rect.bottom + (rect_l.bottom - m_rect.bottom);
        pWnd->MoveWindow(rect);//设置控件大小
        
        //  重设状态栏  置底
        RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
    }
    /*
    else
    {
        delete pWnd;
    }
    */
    GetClientRect(&m_rect);
    //  还是记录初始值

	 
}


红队专题-从零开始VC++远程控制软件RAT-C/S-[2]界面编写及上线_第7张图片

更改对话框同步更改

红队专题-从零开始VC++远程控制软件RAT-C/S-[2]界面编写及上线_第8张图片
初始化时候调用了 updatemain
初始化程序界面
获取客户端程序客户区 界面大小
存放在 m_rect

3.服务端上线,下线,以及客户端的资源销毁(上)

列表控件

红队专题-从零开始VC++远程控制软件RAT-C/S-[2]界面编写及上线_第9张图片

常规对应 socket指针
我们对应一个类指针

启动监听线程
不会发生阻塞状态

添加socket 变量

红队专题-从零开始VC++远程控制软件RAT-C/S-[2]界面编写及上线_第10张图片

添加 socket 消息

头文件定义 InitSocket
红队专题-从零开始VC++远程控制软件RAT-C/S-[2]界面编写及上线_第11张图片


Dlgcpp 加入 


bool C你的Dlg::InitSocket() //初始化SOCKET
{
    WSADATA WSAData;  // 初始化
	WSAStartup(MAKEWORD(2,2), &WSAData);
	SOCKADDR_IN saddr;  //  声明结构体


	// 结构体操作 初始化 
    s=::socket(AF_INET,SOCK_STREAM,0);
	if(s==SOCKET_ERROR)
	{
		MessageBox(_T("创建连接失败"),_T("提示"),MB_OK|MB_ICONWARNING);
        return false;
	}
	
// 结构体赋值
	saddr.sin_family=AF_INET;
	saddr.sin_addr.S_un.S_addr=INADDR_ANY;
	saddr.sin_port=htons(m_port);
	
	int nRet;
    nRet=::bind(s,(SOCKADDR *)&saddr,sizeof(saddr));
	if(nRet == SOCKET_ERROR)
	{
		MessageBox(_T("绑定端口失败"),_T("提示"),MB_OK|MB_ICONWARNING);
        return false;
	}


// 最大上线主机数量  m_max   Wint类型
	nRet=listen(s,m_max);
	if(nRet == SOCKET_ERROR)
	{
		MessageBox(_T("监听端口失败"),_T("提示"),MB_OK|MB_ICONWARNING);
        return false;
	}

	while(1)
	{
		SOCKET SerSock;
		SOCKADDR_IN Seraddr;  // 结构体
		int Seraddrsize=sizeof(Seraddr);
		
		// 接受连接
		SerSock = accept(s,(sockaddr *)&Seraddr,&Seraddrsize);
		if (SerSock == INVALID_SOCKET)
        {
			continue;
        }
        //  添加主机
        AddHost(SerSock,Seraddr);
	}
    return true;
}



syc系列 winSocket I/O模型

填补config信息

红队专题-从零开始VC++远程控制软件RAT-C/S-[2]界面编写及上线_第12张图片

创建线程函数 并运行

为了适配多线程

防止上面的循环死锁 堵塞
所以把初始化操作封装到一个函数内


Dlgcpp 



//  空指针  传递了一个 当前类的 this指针
DWORD WINAPI C你的Dlg::OninitSocket(LPVOID self) //初始化Socket线程
{

// 强制转换
    C你的Dlg* t = (C你的Dlg*)self;
    t->InitSocket();
    return 0;
}





头文件静态声明


static DWORD WINAPI OninitSocket(LPVOID self);


红队专题-从零开始VC++远程控制软件RAT-C/S-[2]界面编写及上线_第13张图片

关闭句柄

添加Addhost



void C你的Dlg::AddHost(SOCKET sock,SOCKADDR_IN addr) //添加主机函数
{
    GetNewItemData(sock,addr);
    //  每一个主机节点都是一个类的指针  新申请一个类指针
    return;
}



头文件声明
void AddHost(SOCKET sock,SOCKADDR_IN addr);

添加 getItemData


void C你的Dlg::GetNewItemData(SOCKET sock,SOCKADDR_IN addr) //获取新的条目数据
{


//   条目信息类  指针  并判断 id是否重复
    CItemData *item;
    int id;  //声明新的id
    int Count = m_list.GetItemCount();
    if(Count == 0)
    {
        id = 0;
    }
    else
    {
        id = 0;
        for(int i=0;im_id == id)  // 判断是否为这个 id
            {
                i = 0;
                id = id + 1;
                continue;
            }
        }
    }
    item = NULL;
    item = new CItemData(id,sock,&addr,this->m_hWnd);
    // 声明一个 条目类
    item->Run();
    // 最后调用了 run这个函数
}





头文件声明
void GetNewItemData(SOCKET sock,SOCKADDR_IN addr);

创建列表节点类

红队专题-从零开始VC++远程控制软件RAT-C/S-[2]界面编写及上线_第14张图片
红队专题-从零开始VC++远程控制软件RAT-C/S-[2]界面编写及上线_第15张图片
头文件中调用这个类

红队专题-从零开始VC++远程控制软件RAT-C/S-[2]界面编写及上线_第16张图片

ItemData编写

构造函数


cpp 方法   条目信息

CItemData::CItemData(UINT id,SOCKET sock,SOCKADDR_IN *addr,HWND m_hWnd)
{
    this->m_id = id;  // 上线主机id号  删除操作
    this->m_sock = sock;   // 消息传递   SOCKADDR_IN *addr  对方ip获取操作
    this->m_hWnd = m_hWnd;  //  获取父类指针
    char *csIP = inet_ntoa(addr->sin_addr);  // inet_ntoa 获取ip addr结构体
    m_IP.Format(_T("%s"),_T("127.0.0.1"));
    m_Address.Format(_T("未知"));
    if(m_Address.IsEmpty())  // 地理位置信息
    {
        m_Address.Format(_T("未知"));
    } 
}







头文件

#pragma once

class CItemData
{
public:
	CItemData(UINT id,SOCKET sock,SOCKADDR_IN *addr,HWND m_hWnd);
	~CItemData(void);
	UINT m_id;
	void Run();
	SOCKET GetSocket();
    CString m_IP;
    CString m_Address;
    CString m_OS;
    CString m_Ver;  // 操作系统版本
    bool Cam;   //  摄像头
		


private: 


	SOCKET m_sock; 
	HWND m_hWnd;
	static DWORD WINAPI OnListen(LPVOID lp);
	void OnBeginListen();
};

 

类成员监听线程

DWORD WINAPI CItemData::OnListen(LPVOID lp)
{
    CItemData* t = (CItemData*)lp;
    t->OnBeginListen();  // 调用监听线程
    return 0;
}

运行函数

用多线程手法来运行 监听线程


void CItemData::Run()
{
    ::CloseHandle(CreateThread(0,0,OnListen,(LPVOID)this,0,0));
}

监听线程

监听远程主机信息 操作

发送信息等等




void CItemData::OnBeginListen() //等待完善
{
}

红队专题-从零开始VC++远程控制软件RAT-C/S-[2]界面编写及上线_第17张图片

你可能感兴趣的:(c++,c语言,java)