본문 바로가기
Write Up/CTF

[CTF]encrypt

by wlgpdnjs 2018. 1. 14.

어디 ctf였는지 기억이... 나중에 알아서 수정합니다.


encrypt문제는 golang(golang)으로 만들어졌고 flag파일을 읽어와 flag.encrypt파일을 생성한다.

ida로 열어보면 main_writeF, main_readF, main_main, main_encrypt가 있는데 main_encrypt에서 readF에서 읽어온 flag파일의 데이터를 가지고 연산을 한다.



encrypt함수에서 사용하는 파일 사이즈와 encryptkey



총 3단계로 이루어짐

1. data[i]=readdate[i-4]^readdate[i] (0~4는 연산x)

2. data[i]와data[i+4]위치 바꿈, 8개씩 끊어서

3. encryptkey와 data xor연산



def round1(data): encryptkey="encryptk" tmp=[] for i in range(0,filesize): tmp.append(ord(data[i])^ord(encryptkey[i%8])) return tmp def round2(data): for k in range(0,filesize,8): for i in range(4): tmp=data[i+k] data[i+k]=data[i+k+4] data[i+k+4]=tmp return data def round3(data): encrypted=data for i in range(filesize-1,3,-1): encrypted[i]=data[i]^data[i-4] return encrypted filesize=0x29e0 if __name__ =="__main__": flagtest=open("flag.jpg","wb") content=open("flag.encrypt","rb").read() ret=round3(round2(round1(content))) data=''.join(chr(char) for char in ret) flagtest.write(data)


디크립트되어 생성된 파일을 열어보면 JFIF라고 처음에 적혀있는데 이건 jpeg라고 해서 jpg로 확장자를 바꿔주면 키값이 적혀있는걸 찾을 수 있다.



flag : g01ang_rev3rs1ng

'Write Up > CTF' 카테고리의 다른 글

Wandere bits write up  (0) 2018.01.29
[Secuinside2017]snake  (0) 2018.01.14
[CODEGATE2017]HelloProtector  (0) 2018.01.07
[CODEGATE2017]RamG  (0) 2018.01.07
Defcon CTF 2017 Witchcraft  (0) 2017.07.08