[Christmas 2020] REVERSING - screw_driver
by jennysgapChallenge:
Analysis:
sub_140002F10() 함수에서 3단계로 수행된다.
- if (v4 == 0x222004)
- file 파일을 읽어 word_140005060에 저장
- else if (v4 == 0x222008)
- word_140005040[0:25] = word_140005060[4:29]
- word_140005060[0:4]에 "XMAS" 문자로 덮어씌우기
- if (v4 == 0x222000)
- 미리 셋팅되어 있는 값(word_140005008)과 word_140005060 값(역순)을 xor 연산하여 str1에 저장
- str2는 input값으로 str1과 비교하여 일치하지 않으면 프로그램 종료
- str2[0:4]에 word_140005060[0:4] 덮어씌우기
- 그리고 마지막으로 while문 연산
- 연산 후의 str2 값이 flag 값이 된다.
Solve:
#!/usr/bin/env python2
#-*- coding: utf-8 -*-
#
# CTF: Christmas 2020
# screw driver (REV)
#
# if ( v4 == 0x222004 )
f = open('./file', 'r')
buf = f.read()
f.close()
buf_5060 = [0 for i in range(29)]
for i in range(0, 29):
buf_5060[i] = buf[i]
# else if ( v4 == 0x222008 )
buf_5040 = [0 for i in range(32)]
for i in range(4, 29):
buf_5040[i-4] = buf_5060[i]
buf_5060[0:4] = 'XMAS'
# if ( v4 != 0x222000 )
buf_5008 = [0x73, 0x6B, 0x0C, 0x6A, 0x54, 0x0D, 0x52, 0x3F, 0x0C, 0x64, 0x6C, 0x2E, 0x65, 0x4A, 0x33, 0x0B, 0x43, 0x4E, 0x40, 0x26, 0x7F, 0x72, 0x1F, 0x68, 0x5B, 0x63, 0x34, 0x03, 0x3C]
str1 = []
for i in range(len(buf_5060)):
str1.append(chr(buf_5008[i] ^ ord(buf_5060[28-i])))
str2 = str1
print('input: ' + ''.join(str2))
str2[0:4] = buf_5060[0:4]
v4 = 0
v8 = -1
v11 = 1
v5 = 4
v7 = 5
v6 = 0
while(1):
for j in range(v7):
v8 += v11
str2[v5] = chr(v6 + (ord(buf_5040[5*v4+v8]) ^ ord(str2[v5])))
v5+=1
v6+=1
v7-=1
if (v7<=0):
break
for k in range(v7):
v4 += v11
str2[v5] = chr(v6 + (ord(buf_5040[5*v4+v8]) ^ ord(str2[v5])))
v5+=1
v6+=1
v11 = -1 * v11
print('output: ' + ''.join(str2))
Flag:
XMAS{Y0u_@r3_tH3_b35t_dRiv3r}
반응형
'BOX' 카테고리의 다른 글
[Christmas 2020] REVERSING - lock (0) | 2021.01.07 |
---|---|
[TetCTF 2021] WEB - mysqlimit (0) | 2021.01.05 |
[TetCTF 2021] WEB - Super Calc (0) | 2021.01.05 |
[TetCTF 2021] WEB - HPNY (0) | 2021.01.05 |
공개키 암호 방식(RSA) (0) | 2020.12.15 |
블로그의 정보
jennysgap
jennysgap