zip파일을 압축을 풀면 hwp 파일이 하나 존재한다. 특별히 힌트가 될만한 내용은 보이지 않는다. 모든 문서형 파일은 stroage 파일 형식을 사용하기 때문에 zip 파일로 확장자를 바꾸어 열어볼 수 있다.
확장자를 zip으로 변경하고 압축을 풀면 BinData에 ps 파일이 있다. ps 파일은 Post Script 파일로 최근 악성파일의 유행하는 형태로 한글 파일 내에 EPS(Encapsulated PostScript)를 삽입하여 동작시키는 형태이다. 따라서 ps 파일을 HxD 에디터를 사용해서 열어준다.
ps파일을 HxD로 열면 Decoded text가 모두 16진수로 채워져 있는데 누가 봐도 의도적으로 데이터가 삽입되어 있음을 짐작할 수 있다.
데이터를 메모장에 복사하고 HxD 새 파일을 생성하여 붙여넣으면 파이썬 코드가 숨겨져있는 것을 확인할 수 있다. 이번에도 Decoded text에 있는 데이터를 메모장으로 복사하면 아래와 같이 예쁘게 정렬된 채로 복사가 된다.
def enc_xor(msg, key):
msg_size = len(msg)
key_size = len(key)
enc = bytearray()
for i in range(msg_size): # 잘못된 코드
msg_xor = msg[i] ^ key[i%msg_size]
enc.appienc = bytearray()
for i in range(msg_size):
msg_xor = msg[i] ^ key[i%msg_size] # 여기도 수정할 부분이 있음
enc.append(msg_xor)
return enc
def main():
msg()
key = "25689"
enc_msg = enc_xor(msg.encode(), key.encode())
./shellcode(5B5B5557425C7830314F69555C725E425C7830324A5C6E4F)
코드를 살펴보면 조금 틀린 부분이 있긴 하지만 문제 출제자의 의도는 충분히 파악할 수 있다. 메시지 값과 key값을 xor 연산을 통해 암호화를 진행하는 코드이다. 따라서 xor 연산의 특징으로 한번 더 xor 연산을 해주면 원래 값을 알 수 있다. 코드는 아래와 같다. msg는 shellcode안에 있는 16진수를 아스키코드로 변경한 값이다.
def enc_xor(msg, key):
msg_size = len(msg) # 메시지 길이
key_size = len(key) # 키 길이
enc = bytearray() # 배열 생성
for i in range(msg_size):
msg_xor = msg[i] ^ key[i%key_size] # 문제에서는 i%msg_size로 되있지만 문제 출제자의 실수로 판단됨
enc.append(msg_xor) # 배열에 원소 하나씩 추가
return enc
def main():
msg='[[UWB\x01OiU\r^B\x02J\nO' # 메시지 전달
key ='25689' # 키값 전달
enc_msg = enc_xor(msg.encode(), key.encode()) #암호화 진행
print(enc_msg) # 출력
if __name__ == '__main__':
main()
'CTF > INCOGNITO 2021' 카테고리의 다른 글
[INCOGNITO CTF] EZ_steganography (0) | 2021.08.29 |
---|---|
[INCOGNITO CTF] Calculator (0) | 2021.08.28 |
[INCOGNITO CTF] inco_hack.png (0) | 2021.08.28 |
[INCOGNITO CTF] Deconstructionism (0) | 2021.08.28 |
[INCOGNITO CTF] hex carving (0) | 2021.08.27 |
댓글