四个工程,gh0st,install,loadmr,svchost。分别是控制端,安装程序,xxx,被控端。
一。install工程,安装程序.
1.WinMain函数。
加载svchost工程的dll为服务,启动服务。
二。svchost工程.被控端(服务端).
1.main函数,
在当前目录获取上线名称,获取不到退出。设置当前进程为winsta0的windowsstation。
通过SetUnhandledExceptionFilter设置进程崩溃时重新创建main线程。在services下面创建
启动注册表项目。删除安装文件。死循环等待进程退出事件,每隔2分钟检查一次。通过base64解码出
服务器url地址,主机地址,代理地址,获取登录信息。获取登录信息时,连接url,通过InternetReadFile,下载
文件,解码出字串,依次取出代理主机地址,端口等。获取后设置CClientSocket的登录代理,端口等信息。
调用CClientSocket::Connect连接服务端,连接上之后,调用CClientSocket::WorkThread函数死循环等待服务端发送来的消息,
调用CClientSocket::OnRead函数接收信息,判断信息完整性,调用zlib解压缩信息,调用manager成员的OnReceive函数处理命令。
获取本地硬件信息,比如ip,cpu,内存,硬盘,视频,网速,版本,上线密码,上线分组等上线信息发送给服务端。
设置CClientSocket的ManagerCallBack为CKernelManager,以便进入CKernelManager::OnReceive函数处理服务端发来的命令。
等待控制端发送激活命令,超时为10秒,10秒后还没有收到控制端发来的激活命令,说明对方不是控制端,重新连接。
2.CKernelManager::OnReceive服务端命令处理函数.
3.如果是文件管理,创建线程进入Loop_FileManager函数处理,处理本次连接的收发数据。
产生新的CClientSocket,连接一次服务器,生成CFileManager对象,和这个socket和具体的xxxManager对象关联,进入CClientSocket::WorkThread等待新的连接。
后面的数据发送和接收和这个具体的xxxManager对象的CFileManager::OnReceive函数来处理.
在构造函数中完成操作,调用socket的send函数发送驱动器列表数据。调用CFileManager::SendDriveList函数,发送驱动器列表.
在该函数中,获取驱动器列表,获取已用和空闲大小,发送给服务端。
4. CFileManager::OnReceive具体的文件管理功能函数。
(1).比如获取文件列表,调用CFileManager::SendFilesList,参数为文件路径.调用函数FindFirstFile获取第一个文件,FindNextFile获取
后面文件,调用Send发送。
(2).如果是上传文件,解析出多个路径,判断路径是否存在,发送第一个文件大小。如果是继续上传文件命令,读取文件,发送。如果还有下一个文件,则
发送需要传输的文件大小。没有下一个文件,则发送完成命令,
5.如果是屏幕查看,进入CScreenManager的构造函数和OnReceive处理。
在构造函数中,创建一个WorkThread工作线程和一个ControlThread控制线程,控制线程是用于保持黑屏。
在工作线程中,调用WaitForDialogOpen等待控制端对话框打开。调用sendFirstScreen发送第一个屏幕。截屏使用的方法如下:
获取桌面窗口句柄,桌面窗口的DC,根据这个DC创建兼容DC,根据兼容DC创建一个DIBSection,调用BitBlt函数获取内存数据。
然后调用CScreenManager::sendNextScreen不断截取下一个屏幕。
三。gh0st工程.控制端
1.CGh0stApp::InitInstance初始化函数。
初始化CMainFrame窗口,调用CMainFrame::Activate启动iocp服务器.
进入CMainFrame::OnCreate函数创建窗口,
(1).如果是生成服务端,在函数CBuildServer::OnBuild中。
获取主机名,服务名,描述等。读取server.exe文件内容,在文件后面一次写入随机数据,上线地址,安装路径,版本,上线密码,自删除判断等信息,然后使用
upx压缩文件。
2.在函数 CMainFrame::ProcessReceive和函数CMainFrame::ProcessReceiveComplete中处理服务端发来的命令,主要是一次调用每种操作的对话框的OnReceiveComplete和
OnReceive函数。
|