picoCTF 2018 be-quick-or-be-dead-1 - Points: 200

5199 단어 picoCTFCTF

문제





풀어 보았다.



링크가 2개 있기 때문에 우선은 this쪽에서.
youtube로 연결되었습니다.
htps //w w. 요츠베. 이 m/와 tch? v = Ct1vk9 · M9c



아이언 메이든의 노래입니다.
노래 이름과 문제의 제목은 동일하지만 더 이상 잘 모르겠습니다.

또 다른 링크는 파일 다운로드였습니다.
확장자가 없었기 때문에 Bz에서 열어 보겠습니다.



ELF (Linux 실행 파일)군요.
일단 문자열 검색등에서 picoCTF를 찾아 보았습니다만, 없었습니다.

우선 우분투에서 움직여 보겠습니다.


Calculating key...

라는 문자가 나온 후 1 초 정도 멈추고,
You need a faster machine.

라고 말해 버립니다.
여기서 시간이라도 잦아요?

인수가 필요한지 시도해 봅시다.



인수라든지 헬프라든지 아무것도 일어나지 않네요.

IDA에서 살펴보겠습니다.



main입니다.
print_flag에 뭔가있을 것 같아 보겠습니다.



decrypt_flag를 살펴 보겠습니다.



조금 길기 때문에 전부 올려지지 않습니다만, 루프하면서 xor로 복호하고 있는 것 같습니다.
그래서 여기에서는 출력의 제어는 실시하고 있지 않는 것 같습니다.
여기 함수에 오기 전에 제어가 되어 있다고 생각합니다.

main에서 호출되는 print_flag 앞에 호출되는 get_key를 살펴 보겠습니다.



「Calculating key...」라고 하는 문자열과 「Done calculating key」를 출력하고 있습니다.
방금 실행했을 때 첫 번째는 나왔지만 두 번째는 나오지 않았습니다.
즉 그 사이에서 뭔가 제어가 행해지고 있어 처리가 종료해 버렸다고 생각합니다.

사이에 calculate_key를 살펴 보겠습니다.



루프하고 있을 뿐?
어떻게 종료 처리를하고 있습니까?

main에서 호출되는 get_key 앞의 set_timer를 살펴 보겠습니다.



alarm_handler가 등록되어 있고 그 직전에 1이 설정되어 있습니다.
alarm_handler의 내용을 살펴 보겠습니다.



You need a faster machine. Bye bye.
가 쓰여 있기 때문에, 1초가 지나면 시그널이 보내져 종료하는 것 같습니다.

여기를 100초라든지 늘려보고 싶어졌습니다.
유료판이 있으면 이대로 디버깅할 수 있습니다만. . .

gdb 사용합니다.
set_timer를 표시합니다.



그리고 1을 설정하는 0x40074a와 직후의 0x400751에 브레이크 포인트를 세트합니다.
그리고 실행.



직전과 직후에 rbp보다 조금 전을 확인해 보면 0xff가 0x01이 되어 있는 곳이 있습니다.
여기에 1초가 들어간 것 같기 때문에 이 값을 10으로 바꾸어 보겠습니다.



Enter 여러 번 누르면 조금씩 내용을 볼 수 있으므로 이것으로 0x7fffffffdd84를 바꾸면 좋은 것을 알았습니다.



이제 10으로 변경.



0x0a로 바뀐 것을 확인할 수 있었습니다.
이제 계속하십시오.



했어!
그런데 youtube는 무슨 뜻 이었습니까? 제목이 함께 있을 뿐?

좋은 웹페이지 즐겨찾기