[Reversing.kr] Ransomware

semon·2022년 11월 15일
0

Reversing

목록 보기
9/10

Reversing.kr의 Ransomware 문제입니다.

실행을 하면 다음과 같은 화면이 나오고 key 값을 입력해야 합니다. 암호화된 파일을 복호화하는 문제인 것 같습니다.

readme.txt를 보면 복호화해야 하는 file은 exe 파일이라고 알려주고 있습니다.

DIE로 run.exe 파일을 확인해보니 upx packing이 적용되어 있어서

unpacking을 해주었습니다.

IDA로 열어보니 디버깅을 방해하기 위해 쓸데없는 값을 넣어 디컴파일을 방해하고 있습니다.

하지만 보이는 부분만으로 해결 할 수 있는 문제이기에 상관은 없습니다.

Ollydbg로 입력을 받는 부분을 찾아 함수 시작 부분에 break point를 걸고 실행을 했습니다.

key 값으로 12345를 입력해 주었더니

그 값을 [ebp-18] (0x004D370)에 저장을 하고 그 값을 1byte씩 0과 비교하며 문자열의 길이를 확인합니다.

그 후 파일을 열고 getc 함수로 문자를 입력받아 반복문을 통해 [ECX+0x5415B8]에 저장을 해줍니다.

이렇게 생성된 메모리 내용을 보니 hxd로 확인한 file의 hex 값과 일치합니다. 이 부분으로 복호화를 진행하는 것 같습니다.

그 이후 부분을 보면 반복문에서 입력값으로 주었던 12345와 0x5415b8에 저장된 값(file의 hex값)을 1byte씩 xor 연산을 해주고 그 값에 0xFF를 다시 xor 연산을 해주고 저장을 합니다. 결과적으로 (file(1byte) ^입력값(1byte))^0xFF를 통해 원하는 값을 만들어야 합니다.

이때 file은 exe 파일이므로 PE 파일 포맷이 동일하고 그 값은 다음과 같이 MZ(0x4d, 0x5a, 0x90)으로 시작을 합니다.

이를 이용하여 python으로 연산을 해주면

다음과 같은 결과가 나오고

letsplaychess가 반복되므로 이것이 key 값인 것 같습니다.

key 값으로 letsplaychess를 주고 실행을 해보면

다음과 같이 file의 내용이 일반적인 exe파일로 바뀌고

실행을 해보면 다음과 같은 내용이 나옵니다.

profile
보안을 공부합니다

0개의 댓글