반응형

리버싱 62

[UMDCTF] Easy Money - 리버싱 / Strings

제목처럼 쉬운 리버싱 문제 money 라는 이름의 바이너리 파일이 주어진다. 칼리 리눅스에서 file 명령어를 통해 해당 바이너리의 정보를 확인해보면 ELF 파일임을 알 수 있다. ELF 파일은 리눅스에서 실행 가능한 EXE 파일같은거라고 생각하면 된다. 프로그램은 아주 간단하다. 내 이름을 물어보고 입력을 받는다. hello 라고 입력해봤더니 Hello hello 라고 내가 입력한 값을 그대로 에코 해준 뒤 프로그램이 종료된다. 프로그램을 조금 더 자세히 보기위해 strings 명령어를 사용해봤다. strings 명령어를 사용하면 바이너리에서 문자열을 찾아서 출력해준다. 중간에 보니 아까는 보지 못했던 문장들과 밑에 뭔가 인코딩된 값이 길게 쓰여있는걸 확인할 수 있었다. 조금 내리다가 Hello fri..

CTF/리버싱 2022.05.02

[DCTF] Seek - 리버싱 / C / fseek

C언어 리버싱 문제이다. 문제 파일로 seek.c 과 flag.txt 파일 두개가 주어진다. flag.txt 파일을 메모장으로 열어보면 아무것도 써있지 않다. 파일이 잘못됐나 싶어서 다시한번 봤더니 크기도 0바이트인게 진짜 아무것도 안써있는게 맞았다. 다음으로 seek.c 파일을 열어보았다. 열어보면 752줄로 파일이 꽤 길다. 내용을 살펴보면 flag.txt 파일을 읽어서 fp 변수에 우선 저장한다. 그다음부터 약 700줄 가량은 fseek 라는 함수가 실행되고 있다. fseek 함수를 찾아봤더니 파일의 읽기/쓰기 위치 변경함수라고 한다. int fseek(FILE *stream, long offset, int origin) 이게 기본 문법이다. 매개 변수를 세개를 받는데 첫번째는 파일을 지정해주고(F..

CTF/리버싱 2022.04.19

[Space Heroes CTF] Cape Kennedy - 리버싱 / Python

쉬움 난이도로 분류되었던 리버싱 문제 하지만 쉽지않았다.. 의외의 복병으로 아주 머리아프게 했던 문제였다. 문제 설명을 보면 이 프로그램의 유효한 입력값을 찾으라고 한다. 그리고 괄호 안에 이건 테마가 있는 CTF니 정답은 랜덤이 아니다 라고 써 놓은것이 보인다. 처음에 이 괄호안에 있는 문장을 대수롭지 않게 생각했는데 아주 중요한 문구였다. 문제파일로 주어진 moon.py를 다운받아서 열어본다. import sys def main(): if len(sys.argv) != 2: print("Invalid args") return password = sys.argv[1] builder = 0 for c in password: builder += ord(c) if builder == 713 and len(p..

CTF/리버싱 2022.04.10

[AUCTF] Cracker Barrel - 리버싱 / IDA

간단한 리버싱 문제이다. crack_barrel 이라는 바이너리 파일이 하나 주어진다. 미국에 있는 음식점 체인 이름이라고 하던데 문제와 무슨 연관이 있는지 잘 모르겠다. 해당 바이너리 파일은 리눅스에서 실행가능한 elf 파일이다. 리눅스의 exe 라고 생각하면 된다. 프로그램을 실행시켜 보면 Give me a key! 하면서 키값을 요구한다. abcd를 입력해봤는데 아니라고 하면서 프로그램이 종료된다. 디스어셈블러인 IDA 프로그램을 이용해서 해당 바이너리 파일을 열어봤다. 함수목록을 보면 main, check, check_1, check_2, check_3, print_flag 가 있는것을 볼 수 있다. 추측컨데 check 함수들을 모두 통과해야 print_flag 가 실행될 듯 하다. 가장먼저 ma..

CTF/리버싱 2022.04.02

[RiftCTF] Reversing 0x0002 - 리버싱 / IDA

아주조금 복잡한 리버싱 문제 대회가 끝나고 풀어서 캡쳐가 원활하지 않다. chall2.elf 파일이 주어진다. elf파일은 Executable and Linkable 의 약자로 보통 리눅스에서 실행되는 파일이다. 리눅스의 exe 파일이라고 생각하면 된다. 이런식으로 실행이 가능하다. ./chall.elf 라고 입력하면 실행이 된다. 프로그램을 실행하면 passwd > 라는 창이 나오면서 비밀번호를 입력하라고 한다. 이 문제의 의도는 이 비밀번호를 알아내는 것이다. IDA 라는 디스어셈블러를 이용해 해당 파일을 열어본다. main 함수를 보면 비밀번호가 맞으면 "Correct Password..." 틀리면 "Wrong Password..." 을 프린트한다는것을 알 수 있다. 해당 그래프가 있는 화면에서 F..

CTF/리버싱 2022.03.30

[angstromCTF] Inputter - 리버싱 / argument

리버싱 문제인 Inputter 이 문제 역시 대회가 끝나고 풀어서 캡쳐를 제대로 못했다ㅜ 이전에 풀이했던 Revving Up, Taking Off 문제와 동일한 유형(조금 심화한)이다. Revving Up : https://hackingstudypad.tistory.com/33 Taking Off : https://hackingstudypad.tistory.com/34 이번 문제도 역시나 리눅스에서 실행가능한 바이너리 파일(inputter)가 주어진다. 이 문제는 앞의 문제와 다르게 소스코드도 같이 주어진다. main 함수를 살펴보면 안에 조건문(if) 세개가 있고, 조건문을 다 통과해야 마지막에 print_flag() 함수가 실행되어 플래그를 얻을 수 있다는걸 알 수 있다. 첫번째 조건문부터 살펴보자 ..

CTF/리버싱 2022.03.21

[angstromCTF] Taking Off - 리버싱 / IDA

Taking Off 세번째 리버싱 문제이다. 이 문제부터는 조금씩 머리를 써야한다. 물론 그렇게 어렵진 않다. taking_off 라는 바이너리 파일이 하나 주어진다. 역시나 확장자는 없고 elf 라는 파일형태로 리눅스에서 실행가능한 프로그램이다. (리눅스에서 쓰는 exe파일 같은거라 생각하면된다.) 리눅스에서 해당 바이너리 파일을 실행해보면 맨 마지막 줄에 Make sure you have the correct amount of command line arguments 라고하면서 argument 의 갯수를 맞춰보라고 한다. 지난번 revving_up 문제에서는 argument가 "banana" 하나였다. (참고 : https://hackingstudypad.tistory.com/33 ) 이번문제에서는 ..

CTF/리버싱 2022.03.15

[angstromCTF] Revving Up - 리버싱 / argument

아주아주 쉬운 리버싱 문제 사실 리버싱 문제인지도 잘 모를만큼 쉽다.. 352명이나 푼 걸보면 얼마나 쉬운 문제인지 감이 올것이다. 문제 설명을 보면 clam이라는 사람이 사이버보안학교에서 첫번째 리버싱 강의에서 만든 프로그램이라고 한다. 이 프로그램에서 플래그를 얻어내면 되는 문제이다. 문제파일이 하나 주어진다. revving_up 이라는 파일인데 확장자는 따로 보이지 않는다. 대부분 해킹대회에서 주어지는 이런 바이너리파일의 경우 리눅스 환경에서 실행할 수 있는 것이다. 리눅스 쉘에서 프로그램이 있는 경로로 이동한 뒤, ./revving_up 이라고 치면 프로그램이 실행된다. 실행시키면 문구가 몇가지 나오는데 Cougratulations on running the binary! Now there are..

CTF/리버싱 2022.03.14

[angstromCTF] Windows of Opportunity - 리버싱 / IDA

Windows of Opportunity 문제 이 대회에서 나온 첫번째 리버싱 문제이다. 리버싱이란 reverse engineering 의 약자로 역공학 이라는 뜻이다. 모든 프로그램은 개발자가 소스코드를 짜고, 그것을 컴파일해서 완성을하게 되는데 리버싱의 경우 완성된 프로그램의 동작을 분석하여 소스코드가 '어떻게 구성되었을것이다' 라는것을 추측하는 작업을 말한다. 문제설명을 보면 무슨 superior operating system 으로 만들어진 프로그램을 분석하라고 한다. 그게 바로 이 프로그램이다. 윈도우에서 돌아가는 exe 파일이다. 실행을 시켜보면 cmd 창이 하나 뜨면서 이 프로그램에서 플래그를 얻을 수 있냐? 라고 물어본다. 보통 이런 리버싱 문제들을 디스어셈블러를 이용해서 열어보면서 시작한다..

CTF/리버싱 2022.03.13

[zer0ptsCTF] easy strcmp - 포너블 / ltrace

chall 이라는 이름의 바이너리 파일이 하나 주어진다. 해당 파일은 리눅스에서 실행 가능한 elf 파일이다. 리눅스 환경으로 옮겨서 chmod 777 등의 방법으로 실행권한을 부여한 뒤 ./chall 이런식으로 실행시키면 된다. 실행시켜봤더니 ./chall 라고 사용법이 나온다. a를 입력해 봤더니 Wrong! 이라고 나오는걸 보아 완전한 플래그를 맞게 입력해야 되는듯 하다. 해당 파일을 IDA로 열어보면 위와같은 부분을 발견할 수 있다. strcmp 함수를 이용해서 "zer0pts{****CENSORED****}" 값과 입력값을 비교한 뒤 모든 글자가 맞으면 Correct! 틀리면 Wrong! 을 출력한다. 이 문제는 ltrace라는 도구를 이용하면 쉽게 풀 수 있다. 위키백과에는 ltrace가 이렇..

CTF/포너블 2022.03.05
반응형