ページ 11

Winsockプログラムがウイルス扱いされる

Posted: 2014年10月24日(金) 22:15
by Gear
CでWinsockを利用し、非同期通信のチャットプログラムを作成しました。
動作テストということで数人の友人に協力してもらい、起動してもらったのですがスマートスクリーンやノートンが総動員してプログラムを削除してしまったそうです。
一人だけ、普通に起動できた人がいて正しく通信できました。
どうしたらウイルス扱いされないか教えてもらいたいです。宜しくお願いします

以下サーバとクライアントのソース

コード:

//サーバー側
#include <stdio.h>
#include <winsock2.h>
#include <windows.h>
#include <conio.h>

DWORD WINAPI RecvFunc(LPVOID vdParam);

#pragma comment(lib, "wsock32.lib")

int main(){
	SOCKET sock;
	int mode;
	char username[20], recvmes[500], sendmes[500], buf[500];
	WSADATA wsaData;

	WSAStartup(MAKEWORD(2, 0), &wsaData);

	sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
		SOCKET hsock[20];
		sockaddr_in addr, client;
		int connectc = 0;
		int sockno[20];
		fd_set fds, rfds;

		memset(&addr, 0, sizeof(addr));
		addr.sin_family = AF_INET;
		addr.sin_port = htons(25555);
		addr.sin_addr.s_addr = htonl(INADDR_ANY);
		
		printf("-----サーバーモードで起動-----\n\n");

		bind(sock, (struct sockaddr *)&addr, sizeof(addr));
		listen(sock, 20);
		FD_ZERO(&rfds);
		FD_SET(sock, &rfds);
		while (1){
			int len = sizeof(client);

			memcpy(&fds, &rfds, sizeof(fd_set));
			select(0, &fds, NULL, NULL, NULL);

			if (FD_ISSET(sock, &fds)){
				char name[500];
				memset(buf, 0, sizeof(buf));
				hsock[connectc] = accept(sock, (struct sockaddr *)&client, &len);
				recv(hsock[connectc], name, sizeof(name), 0);
				sprintf(buf, "Server>%sが接続しました\n\n", name);
				FD_SET(hsock[connectc], &rfds);
				printf(buf);
				connectc++;
				for (int i = 0; connectc > i; i++){
					send(hsock[i], buf, sizeof(buf), 0);
				}
			}
			else {
				for (int i = 0; connectc > i; i++){
					if (FD_ISSET(hsock[i], &fds)){
						memset(buf, 0, sizeof(buf));
						recv(hsock[i], buf, sizeof(buf), 0);
						printf("%s",buf);
						for (int c = 0; connectc > c; c++){
							if (i != c)
								send(hsock[c], buf, sizeof(buf), 0);
						}
					}
				}
			}
		}
	

	WSACleanup();
	return 0;
}


//クライアント側
#include <stdio.h>
#include <winsock2.h>
#include <windows.h>
#include <conio.h>

#pragma comment(lib, "wsock32.lib")

DWORD WINAPI RecvFunc(LPVOID vdParam);

int main(){
	SOCKET sock;
	char username[20], recvmes[500], sendmes[500], buf[500];
	WSADATA wsaData;

	WSAStartup(MAKEWORD(2, 0), &wsaData);

	sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	printf("ユーザーネームを入力してください\n");
	scanf("%s", username);

	sockaddr_in server;
	LPHOSTENT lpHostEntry;
	char *lpHostName = "サーバーの名前";
	HANDLE recvth;
	DWORD dwParam;

	lpHostEntry = gethostbyname(lpHostName);
	server.sin_family = AF_INET;
	server.sin_port = htons(25555);
	server.sin_addr = *((LPIN_ADDR) lpHostEntry->h_addr_list[0]);
	printf("-----クライアントモードで起動-----\n\n");
	printf("接続待ち・・・");
	while (connect(sock, (struct sockaddr *)&server, sizeof(server)) == SOCKET_ERROR){
		printf("・");
	}
	recvth = CreateThread(NULL, 0, RecvFunc, &sock, 0, &dwParam);
	send(sock, username, sizeof(username), 0);
	printf("\n\nConnection!\n");

	while (1){
		memset(recvmes, 0, sizeof(recvmes));
		memset(sendmes, 0, sizeof(sendmes));
		memset(sendmes, 0, sizeof(buf));
		scanf("%s", buf);
		printf("\n");
		sprintf(sendmes, "%s>%s\n\n", username, buf);
		send(sock, sendmes, sizeof(sendmes), 0);
	}
	closesocket(sock);
	GetExitCodeThread(recvth, &dwParam);

	WSACleanup();
	return 0;
}

DWORD WINAPI RecvFunc(LPVOID vdParam) {
	SOCKET* sock = (SOCKET*) vdParam;
	char buf[500];

	while (1){
		if (recv(*sock, buf, sizeof(buf), 0) == -1){
			printf("%d", WSAGetLastError());
			break;
		}
		printf("%s", buf);
	}
	return 1;
}

Re: Winsockプログラムがウイルス扱いされる

Posted: 2014年10月28日(火) 15:47
by プラム
出来ればコードタグで挟んでいただくといいと思います。
自分で調べました?
たぶん発行元を設定すれば何とかなると思います
https://www.google.co.jp/search?q=%E7%9 ... D%E5%AE%9A
結構いろいろ参考になるようなものがありますよ?
人にばかり頼らず自分で調べてから書いたほうがいいです(調べてもわからなかったなかったならすいませんm(__)m)

Re: Winsockプログラムがウイルス扱いされる

Posted: 2014年10月28日(火) 16:13
by MoonGate
各人のウイルス対策ソフト側で、そのexeファイルを除外するように設定するか、またはセキュリティレベルを下げてもらうしかありません。
アプリ側でウィルス扱いされなくなるようにできる方法があったたら、ウィルスソフトもその方法を使用してすり抜けてしまいますよね(^_^;)

Re: Winsockプログラムがウイルス扱いされる

Posted: 2014年10月28日(火) 18:41
by プラム
そんなことないですよ
ウィルス対処ソフトは不正に動いているようなプログラムを削除しますから発行元を設定しておけばいいと思います。

Re: Winsockプログラムがウイルス扱いされる

Posted: 2014年10月28日(火) 19:15
by ISLe()
不正ソフトは、不正に動くプログラムではなく、不正を働くプログラムですよ。
使っているひとの少ないフリーソフト等を勝手に削除するウイルス対策ソフトは跡を絶ちませんし。

この掲示板でも過去に何度か話題になっていますね。

ハルルンさんは、電子署名と単なるプログラムリソースを取り違えているのだと思います。