2020년에 진행되었던 국정원 주최 사이버공격방어대회
묵혀놨던 Write Up을 이제야 포스팅 해 본다.
이번에 포스팅 할 문제는 My Friend 라는 제목의 리버싱 문제이다.
주어지는 파일은 mf 라는 이름의 바이너리 파일이다.
리버싱 카테고리에 있는 문제고,
알 수 없는 바이너리 파일을 받았으니 바로 IDA 라는 디스어셈블러를 이용해 열어보았다.
IDA에서 인식하길 해당 파일은 Mach-O 파일이라고 한다.
Mach-O 파일은 애플의 MacOS 에서 동작하는 프로그램이다.
개인적으로 CTF에서 Mach-O 파일이 나오는걸 이때 처음봤다.
IDA로 분석해보면 함수가 친절하게 이거밖에 없다.
그중 _main 함수와 _get_flag 함수가 눈에 띈다.
_main 함수의 내용이다.
별 내용이 없다.
사용자에게 전달받은 인자의 갯수를 확인하고
printf 로 출력하는 기능이 전부이다.
_get_flag 함수의 내용이다.
qmemcpy 를 이용해서 v2 변수에 알수 없는 이상한 값(llj=?=?tfknPf|PbvPi}fjakr)을 담고 있다.
그리고 나서 for 문으로 v2 변수에 담겨있는 값을 앞에서부터 한글자씩 가져와서
0xF(15) 와 XOR 연산을 한 결과를 printf 로 출력시켜 주고 있는 모습이다.
v2 = "llj=?=?tfknPf|PbvPi}fjakr"
flag = ""
for i in range(len(v2)):
flag += chr(ord(v2[i]) ^ 0xF)
print(flag)
파이썬을 이용해 간단하게 계산할 수 있다.
IDA에 써있는 내용을 그대로 파이썬 코드로 옮겨주면 된다.
코드를 실행시키면 플래그를 찾을 수 있다.
f = open('mf', 'rb')
mf = f.read()
flag = ''
for i in range(len(mf)):
flag += chr(int(mf[i]) ^ 0xf)
print(flag)
이런식으로 할 수도 있다.
어차피 v2 배열에 들어가는 llj=?=?tfknPf|PbvPi}fjakr 라는 값이 바이너리 어딘가에 있기 때문에
바이너리 전체를 rb로 읽어들여서 XOR 해버리는 것이다.
아까보다 조금 보기는 힘들지만
cce2020{} 이라는 플래그 포맷을 알고 있기때문에
금방 찾을 수 있다.
'CTF > 리버싱' 카테고리의 다른 글
[PoseidonCTF] The Large Cherries - 리버싱 / IDA / Pwntool (48) | 2022.11.12 |
---|---|
[2020CCE] Easyransom - 리버싱 / IDA / HxD / XOR (42) | 2022.11.04 |
[2020CCE] Simple Botnet - 리버싱 / IDA (60) | 2022.10.11 |
[SharkyCTF] SIMPLE - 리버싱 / 어셈블리어 / IDA (40) | 2022.08.27 |
[SharkyCTF] Z3ROBOTWAVES - 리버싱 / IDA (44) | 2022.08.16 |