mips 아키텍처인걸 알 수 있는데
헥스레이가 안되니 직접 동적 디버깅을 통해 분석을 해야한다.
프로그램을 실행하면 OTP라고 뜨면서 랜덤값을 준다
이 값에 대한 문자열을 보내면 flag를 얻을 수 있다.
vaildate함수를 보면 이 함수를 통과해야하는데
이 함수를 분석해서 소스를 한번 짜봤다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | # -*- coding:utf-8 -*- text = raw_input("text: ") arr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" result = "" result += text[0] result += text[-1] if ord(text[7]) <= 0x40: result += chr(ord(text[7])+0x40) else: result += chr(ord(text[7])+32) if ord(text[3]) < 0x41: num = ord(text[3])-0x16 result += arr[num-0xA] else: num = ord(text[3])-ord("A") result += arr[num+0xA] if ord(text[4]) < 0x41: num = ord(text[4])-0x16 result += arr[num-0xA] else: num = ord(text[4])-ord("A") result += arr[num+0xA] num = abs(ord(text[1])-ord(text[2])) result += arr[num] num = abs(ord(text[5])-ord(text[6])) result += arr[num] if ord(text[8]) > 0x41: num = ord(text[8]) ^ 0x4b ^ 0x61 ^ 0xA result += chr(num) else: pass print result | cs |
마지막 8번째 자리를 구할 때 else 조건을 안입력해서
한 5번 정도 소스를 돌리면 키값을 구할 수 있다
if ord(text[3]) < 0x41:
num = ord(text[3])-0x16
result += arr[num-0xA]
else:
num = ord(text[3])-ord("A")
result += arr[num+0xA]
이부분에서 시간을 엄청 잡았는데 갑자기 너무 분기쪽만 잡고있던게 문제였다.
'CTF > Write-up' 카테고리의 다른 글
AlexCTF Reverse Engineering (0) | 2017.02.06 |
---|---|
BITSCTF Riskv and Reward (0) | 2017.02.05 |
Plaid ctf prodmanager (0) | 2017.01.16 |
codegate 2014 angry doraemon (0) | 2017.01.15 |
Warm-Heap (0) | 2017.01.15 |