swlug

[2주차] 프로젝트 과제

memo1240 2025. 4. 30. 15:07

TCP/IP 소켓 기반 악성코드 원리 실습

1. 실습 개념 이해

사용된 주요 개념

TCP 소켓 네트워크에서 데이터를 신뢰성 있게 주고받기 위한 양방향 연결 방식
클라이언트-서버 모델 서버가 대기하고, 클라이언트가 접속하여 데이터 전송
파일 전송 클라이언트가 로컬 파일을 읽고 서버로 전송. 서버는 수신된 내용을 저장
악성코드 유출 시뮬레이션 보안이 없는 TCP 통신에서 민감 데이터가 쉽게 유출될 수 있음을 체험

 

2. 통신 코드 작성 및 실행

client_file.c 파일을 서버로 전송하는 클라이언트
server_file.c 클라이언트로부터 파일을 받아 저장하는 서버
file.txt 클라이언트에서 전송할 테스트 파일
received.txt 서버에서 저장되는 수신 파일

 

#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>

int main() {
    int sock;
    struct sockaddr_in server;
    FILE *file;
    char buffer[1024];

    sock = socket(AF_INET, SOCK_STREAM, 0);
    server.sin_family = AF_INET;
    server.sin_addr.s_addr = inet_addr("127.0.0.1"); // 서버 주소
    server.sin_port = htons(8888);                   // 서버 포트

    connect(sock, (struct sockaddr *)&server, sizeof(server));

    file = fopen("file.txt", "rb");
    if (!file) {
        printf("file.txt 열기 실패\n");
        return 1;
    }

    int bytes;
    while ((bytes = fread(buffer, 1, 1024, file)) > 0) {
        send(sock, buffer, bytes, 0);
    }

    fclose(file);
    close(sock);
    printf("파일 전송 완료!\n");
    return 0;
}

클라이언트 코드 (client_file.c)

#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>

int main() {
    int server_socket, client_socket;
    struct sockaddr_in server, client;
    char buffer[1024];
    FILE *received_file;

    server_socket = socket(AF_INET, SOCK_STREAM, 0);
    server.sin_family = AF_INET;
    server.sin_addr.s_addr = INADDR_ANY;
    server.sin_port = htons(8888);

    bind(server_socket, (struct sockaddr *)&server, sizeof(server));
    listen(server_socket, 1);

    socklen_t c = sizeof(client);
    client_socket = accept(server_socket, (struct sockaddr *)&client, &c);

    received_file = fopen("received.txt", "wb");

    int bytes;
    while ((bytes = read(client_socket, buffer, 1024)) > 0) {
        fwrite(buffer, 1, bytes, received_file);
    }

    fclose(received_file);
    close(client_socket);
    close(server_socket);

    printf("파일 수신 완료!\n");
    return 0;
}

서버 코드 (server_file.c)

3. 파일 암호화 실습

 

4. 파일 복호화 실습

 

실습 내용

  • 암호화된 test.enc 파일을 동일 키로 복호화
  • 복호화된 결과를 test_dec.txt로 저장