ASIS CTF Final 2017 Write up (ABC Reversing challenge)
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 을 써주었더니 성공적으로 문제가 풀렸습니다.