Ransomware
Broken output until the code page is fixed, then recovering the key the sample uses to encrypt and restore files.
Cmd 에서 워게임을 실행 시켜본다. 문자 인코딩 깨짐 문제 때문에 처음엔 읽을수없다. 이건 출력 문자열은 존재하지만 코 드페이지가 틀려서 생기는 문제다. Cmd 를 런하기전 chcp 949 를 사용해 환경을 구성해준다.

해커는 패스워드를 갖고있는 파일을 암호화하고 키값을 알아내면 파일을 정상화 시킨다한다. 일단 문자열 찾기를 통해 “Key:” 가 어디있는지 찾는다. 어셈블리 코드를 분석해 보면, 프로그램은 크게 **[키 입력 -> 파일 읽기 -> 복호화(XOR) -> 파일 쓰기]**의 과정을 거친 다. 우리가 찾아야 할 ‘Key’는 파일을 올바르게 복호화할 수 있는 문자열이다.
중요한 복호화 로직 (0044A8B6 ~ 0044A8F2) 이 부분이 키를 찾는 핵심 알고리즘이다. 파일의 각 바이트를 가져와서 다음과 같은 연산을 수행함:
0044A8B9 | movsx ecx, byte ptr ds:[edx+5415B8] ; 파일에서 읽은 데이터
0044A8C5 | div dword ptr ss:[ebp-C] ; 파일 포인터를 키 길이로 나눔 (나머지 연산 준비)
0044A8C8 | movsx edx, byte ptr ds:[edx+44D370] ; 입력한 Key에서 (인덱스 % 키길이) 위치의 문자
0044A8CF | xor ecx, edx ; 1차 XOR: 데이터 ^ Key[i % len]
0044A8E9 | xor edx, FF ; 2차 XOR: (1차 결과) ^ 0xFF
즉, 복호화 공식은 다음과 같다:
$$DecryptedByte = (OriginalByte ^ Key[i % len]) ^ 0xFF
이 문제의 “파일”은 랜섬웨어에 의해 암호화된 상태다. 파일이 정상적인 실행 파일(PE)이나 문서라면, 우리는 **파일의 헤더(Magic Number)**를 알고 있다. 파일 형식 확인: 암호화된 file을 헥스 에디터로 열어본다. 그 이후 같은곳에 run.exe 의 헥스값과 파일의 헥스값을 사용해 역산을 한다:
Key[i] = (EncryptedByte ^ 0xFF) ^ OriginalByte

헥스 에디터 그후 헥스 에디터로 찾은 파일과 실행파일의 헥사값으로 연산을 하면 “letsplaythechess” 를 얻을수있다. 즉 키는 “letsplaychess” 다. 연산은 밑에서 연산식과 함께 한 문장이 나올때 까지 했다.

암호화된 ‘file’ 파일을 “letsplaychess” key 값으로 복호화한 결과 PE 실행 파일로 복호화 되었으며 해당 실행파일을 실행 한 결과 문제의 Flag 값을 얻을 수 있었다.
Flag : Colle System