Story of CowHacker

PicoCTF 13번 문제 ( keygenme-py ) 본문

공부/PicoCTF

PicoCTF 13번 문제 ( keygenme-py )

Cow_Hacker 2022. 5. 18. 02:41
728x90

안녕하세요 Cow Hacker입니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

https://play.picoctf.org/practice/challenge/121?page=2 

keygenme-py라는 제목의 13번 문제를 풀어 볼 거다.

키진미?

키젠미?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

https://www.google.com/search?q=genme+%EB%9C%BB&oq=genme+%EB%9C%BB&aqs=chrome..69i57j0i13l9.1830j0j7&sourceid=chrome&ie=UTF-8 

 

genme 뜻 - Google 검색

유전체(遺傳體) 또는 게놈(독일어: genom, 영어: genome 지놈)은 한 개체의 모든 유전정보를 뜻하며, 유전자(진핵생물의 경우 엑손+인트론)와 유전자가 아닌 부분(반복 서열 등을 포함)을 모두 포함한

www.google.com

문제의 제목은 지놈을 잘못 적었다고 한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

일단 문제에 첨부된 파이썬 파일을 설치했다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

243줄을 가진 코드 파일이었다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

코드를 실행시켜보니 위 사진처럼 출력됐다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

https://papago.naver.com/?sk=en&tk=ko&hn=0&st=Welcome%20to%20the%20Arcane%20Calculator%2C%20FREEMAN!%0A%0AThis%20is%20the%20trial%20version%20of%20Arcane%20Calculator.%0AThe%20full%20version%20may%20be%20purchased%20in%20person%20near%0Athe%20galactic%20center%20of%20the%20Milky%20Way%20galaxy.%0AAvailable%20whil 

 

네이버 파파고

번역을 부탁해 파파고

papago.naver.com

먼저 a를 입력해 Astral 마나를 구하는 가 싶었다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a를 입력하니, SOL 이란 행성이 가장 가까운 행성이라고,

어디로 가고 싶냐 묻는 질문이 나왔다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

코드를 보니 a를 입력받으면 estimate_burn() 함수가 출력된다고 한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

코드를 보니, star_db_trial라는 리스트에서 값을 가져오는 거 같아서 어떤 리스튼지 봤다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

많은 행성 들이다. 숫자가 붙어 있었다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

난 Ross 154를 선택할 거다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

그냥 그 숫자에 2 제곱, 3 제곱 한 값을 보여줬다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

음.. b를 한번 봐야 했다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

정식판 사용이라니!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

c를 입력받을 때 출력되는 함수를 봤다.

if문 check_key함수를 봐야겠다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Key_full_template_trial의 글자 수와 내가 입력한 글자 수가 같아야 else문으로 넘어가는 걸 확인했다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Key_full_template_trial라는 변수는 위 3개의 변수를 합친 녀석이었다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

글자의 길이는 32였다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

하지만 if문을 무시하고 else문으로 와도 for문에서 항상 False가 나올 수밖에 없었다.

Key변수와 Key_part_static1_trial변수의 길이는 다르기 때문이다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

그럼 if문으로 넘어왔을 땐 어떤 행동을 하는지 봤다.

username_trial변수에 해쉬 sha256을 통해 헥사 값으로 내보는 모양새였다.

 

그리고 이 값은 dynamic part라고 한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

출력된 값을 보면 0d208392가 나왔다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

나온 값을 xxxx... 된 곳에 넣고 입력하면 py파일 생성을 한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

처음, 정식판을 사용하라는 녀석이 만들어진 것이다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

정식판을 사용하라는 구문이 없는 것이 출력됐다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

13번 문제 풀었다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

찾는거 솔직히

멋대로 코드 수정해 Flag

을 찾아 내도 됐잖아?

728x90
Comments