| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- PHP 개발환경
- 리눅스
- 프로그래머스
- OSI 7계층
- 네트워크
- 나머지구하기
- 아파치
- web
- 리버싱
- 웹해킹
- webhacking
- 파이썬
- 짝수는싫어요
- XAMPP
- 피자나눠먹기2
- php
- phpreg
- 중앙값구하기
- dreamhack
- 리눅스마스터2급
- 피자나눠먹기1
- reversing
- 문제풀이
- XSS
- 웹
- 드림핵
- 피자나눠먹기3
- XAMPP설치
- sql_injection
- 리눅스마스터
- Today
- Total
목록전체 글 (53)
이것저것
문제 설명이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어진다.해당 바이너리를 분석하여 correct를 출력하는 입력값을 알아내야 한다.획득한 입력값은 DH{} 포맷에 넣어서 인증한다.예시) 입력값이 Apple_Banana일 경우 flag는 DH{Apple_Banana}이다.메인 함수 분석먼저 IDA로 바이너리를 열어 메인 함수의 어셈블리 코드와 의사 코드를 확인했다.메인 함수에서는 사용자에게 문자열을 입력받은 뒤 검증 함수를 호출한다. 검증 함수의 반환값에 따라 Correct 또는 Wrong을 출력하는 구조이다.따라서 입력값을 검증하는 함수를 분석하면 정답을 찾을 수 있다.검증 함수 분석검증 함수의 의사 코드를 확인했다...
문제 설명이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다.해당 바이너리를 분석하여 correct를 출력하는 입력값을 찾으세요!획득한 입력값은 DH{} 포맷에 넣어서 인증해주세요.예시) 입력 값이 Apple_Banana일 경우 flag는 DH{Apple_Banana}프로그램 실행먼저 제공된 EXE 파일을 CMD로 끌어와 실행하였다.프로그램이 실행되자 Input :이라는 문구와 함께 문자열을 입력받는 화면이 나타났다. 정답을 알지 못했기 때문에 임의로 apple을 입력해 보았다.예상대로 Wrong이 출력되었다. 이를 통해 프로그램이 입력값을 받아 내부적으로 정답 여부를 검사한다는 것을 확인할 수 있었다.따라서 정답 문자..
문제 설명이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다.해당 바이너리를 분석하여 correct를 출력하는 입력값을 알아내세요.획득한 입력값은 DH{} 포맷에 넣어서 인증해주세요.예시) 입력 값이 Apple_Banana일 경우 flag는 DH{Apple_Banana}프로그램 실행먼저 제공된 EXE 파일을 CMD로 끌어와 실행하였다.프로그램이 실행되자 Input :이라는 문구와 함께 문자열을 입력받는 화면이 나타났다. 정답을 알지 못했기 때문에 임의로 apple을 입력해 보았다.예상대로 Wrong이 출력되었다. 이를 통해 프로그램이 입력값을 받아 내부적으로 정답 여부를 검사한다는 것을 확인할 수 있었다.따라서 정답 문..
문제 설명이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다.해당 바이너리를 분석하여 correct를 출력하는 입력값을 알아내세요.획득한 입력값은 DH{} 포맷에 넣어서 인증해주세요.예시) 입력 값이 Apple_Banana일 경우 flag는 DH{Apple_Banana}프로그램 실행먼저 제공된 EXE 파일을 CMD로 끌어와 실행하였다.프로그램이 실행되자 Input :이라는 문구와 함께 문자열을 입력받는 화면이 나타났다. 정답을 알지 못했기 때문에 임의로 apple을 입력해 보았다. 예상대로 Wrong이 출력되었다. 이를 통해 프로그램이 입력값을 받아 내부적으로 정답 여부를 검사한다는 것을 확인할 수 있었다.따라서 정답 ..
문제 설명이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출력하는 입력값을 찾으세요! 획득한 입력값은 DH{} 포맷에 넣어서 인증해주세요. 예시) 입력 값이 Apple_Banana일 경우 flag는 DH{Apple_Banana}exe 파일 실행먼저 제공된 exe 파일을 명령 프롬프트로 실행하였다.프로그램을 실행하자 Input : 이라는 문구와 함께 문자열을 입력받는 것을 확인할 수 있었다. 임의의 문자열인 apple을 입력하자 Wrong이 출력되었다.IDA를 이용한 바이너리 분석정답 문자열을 찾기 위해 IDA를 실행하고 문제에서 제공된 EXE 파일을 불러왔다.파일을 분석하자..
1. 스택이란?스택(Stack)은 데이터를 임시로 저장하기 위해 사용하는 메모리 영역이다.함수가 호출될 때 함수의 반환 주소, 저장해야 하는 레지스터, 지역 변수 등의 정보를 관리하는 데 사용된다.스택은 일반적으로 높은 주소에서 낮은 주소 방향으로 성장한다.높은 주소┌─────────────────┐│ ││ Stack ││ │├─────────────────┤│ ││ ↓ ││ 낮은 주소 │└─────────────────┘스택의 현재 위치를 가리키는 레지스터가 RSP다.RSP → 현재 스택 위치2. 스택 프레임이란?함수가 실행되면 해당 함수가 사용할 공간이 스택에 만..
1. 함수 호출 규약이란?프로그램에서 함수가 호출될 때는 단순히 call 명령어만 실행되는 것이 아니다.함수에 전달할 값을 어디에 넣을지, 반환값은 어디에 저장할지, 함수 실행이 끝난 뒤 스택을 누가 정리할지 등에 대한 규칙이 필요하다.이러한 함수 호출에 대한 약속을 호출 규약(Calling Convention)이라고 한다.리버싱에서는 호출 규약을 알고 있어야 다음과 같은 코드를 보고 함수의 인자와 반환값을 추측할 수 있다.함수 호출 ↓인자 전달 ↓함수 실행 ↓반환값 전달 ↓호출 이후 정리2. cdeclcdecl은 전통적인 32비트 x86 환경에서 많이 사용되는 호출 규약이다.함수의 인자는 일반적으로 오른쪽 인자부터 스택에 넣는다.예를 들어 다음과 같은 함수가 있다.int add(int a..
1. x86 레지스터 구조레지스터는 CPU 내부에서 데이터를 임시로 저장하거나 주소와 실행 위치 등을 관리하는 매우 빠른 저장 공간이다.x86 계열에서는 CPU의 발전에 따라 레지스터가 16비트, 32비트, 64비트로 확장되었다. 대표적으로 AX → EAX → RAX와 같은 관계를 가진다.RAX└── EAX └── AX ├── AH └── AL64비트 환경에서 자주 사용하는 레지스터는 다음과 같다.레지스터주요 역할RAX계산 결과, 함수 반환값RBX일반적인 데이터 저장RCX데이터 저장, 함수 인자RDX데이터 저장, 함수 인자RSI데이터 및 함수 인자RDI데이터 및 함수 인자RSP현재 스택의 위치RBP스택 프레임의 기준점RIP다음에 실행할 명령어의 위치특히 리버싱에서는 RSP,..
