본문 바로가기

CTF/Write-up

insomnihack CTF bender_safe

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