ASIS CTF Final 2017 write up
ABC Reversing Challenge
ASIS CTF에 나왔던 ABC라는 리버스 엔지니어링 문제입니다.
처음에 문제를 열고 헤더를 보면 XZ 파일인걸 알수있습니다
XZ 확장자로 변경 후 파일을 꺼내 보면
ELF 파일 같은데 헤더가 이상해보입니다. 밑으로 내려보니 역시나 ELF 파일 헤더가 보입니다.
파일 data를 자르고 elf 파일로 변환 후 실행시켜보았습니다.
메인함수 모습입니다.
처음에 s, nptr, dest 변수에 4바이트씩 할당해줍니다.
후에 인자에 넣었던 값을 argv[1]를 통해 1~4번째 값은 s에 4~9번째 값은 dest에 9~12번째 값은 nptr에 넣어줍니다.
그 다음 sub_4024DF 함수를 통해 굉장히 복잡해보이는 연산이 진행됩니다.
sub_4024DF를 거친 값은 흡사 hash 암호화를 떠오르게 하는데 이 암호화는
SHA1 Encryption과 동일하였습니다
1 2 3 4 5 6 7 8 9 10 11 12 | import hashlib c = 0 for i in range(2): for j in range(c, 65535): h = "%04x" % j sha = hashlib.sha1(h).hexdigest() if sha[0:4] == h: print "str%d = " % (i + 1) + h c = j + 1 break #57d9 b53a |
s = 57d9 nptr = b53a
위 조건 3개를 만족하는 값이 나왔습니다.
마지막으로 남은 조건 변수 dest를 SHA1 암호화한 hash 값이 "69fc8b9b1cdfe47e6b51a6804fc1dbddba1ea1d9" 가 되어야합니다.
이부분도 파이썬으로 brute force 해주었습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import hashlib s = '69fc8b9b1cdfe47e6b51a6804fc1dbddba1ea1d9' bf_table = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$^*():_-<>?{}" for a in bf_table: for b in bf_table: for c in bf_table: for d in bf_table: sha = hashlib.sha1('9' + a + b + c + d + 'b').hexdigest() if sha == s: print '9' + a + b + c + d + 'b' exit(1) # 9:-*)b | cs |
(dest 배열은 6자리라 s의 4번째 배열값('9')과 nptr의 9번째 배열값('b')과 겹칩니다)
그렇게 나온 결과값은 9:-*)b 입니다.
이제 이 인자값들을 합쳐서 하나로 나타낸다면 57d9:-*)b53a 가 됩니다.
저 같은 경우에는 인자에 )에 들어가니 위와 같이 token ')' 오류가 떴습니다.
그래서 앞에 역슬래쉬('\') 를 붙여 ./abc 57d9:-*\)b53a 을 써주었더니 성공적으로 문제가 풀렸습니다.
'CTF' 카테고리의 다른 글
제 12회 정보보호올림피아드 본선후기 (20) | 2017.10.30 |
---|---|
제 12회 정보보호올림피아드 예선풀이 (2) | 2017.10.30 |
YISF 2017 본선 풀이(x) (0) | 2017.09.18 |
YISF 2017 write up (0) | 2017.08.09 |
DIMICTF 2017 write up (0) | 2017.07.16 |