picoCTF 2018 be-quick-or-be-dead-1 - Points: 200
문제
풀어 보았다.
링크가 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는 무슨 뜻 이었습니까? 제목이 함께 있을 뿐?
Reference
이 문제에 관하여(picoCTF 2018 be-quick-or-be-dead-1 - Points: 200), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/samohan/items/b3b284dc0bd5a90203c4
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
링크가 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는 무슨 뜻 이었습니까? 제목이 함께 있을 뿐?
Reference
이 문제에 관하여(picoCTF 2018 be-quick-or-be-dead-1 - Points: 200), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/samohan/items/b3b284dc0bd5a90203c4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)