1. 스택프레임 ESP (스택 포인터)가 아닌 EBP (베이스 포인터) 레지스터를 사용하여 스택 내의 로컬 변수, 파라미터, 복귀 주소에 접근하는 기법 ESP의 레지스터의 값은 프로그램 안에서 수시로 변경 ESP값을 기준으로 하면 스택에 저장된 변수, 파라미터에 접근을 하기 어려움이 있음 ESP 값을 EBP에 저장하고 이를 함수 내에서 유지해 아무리 ESP 값이 바뀌어도 EBP를 기준으로 해당 함수의 변수, 파라미터, 복귀 주소에 접근 가능 2. 스택 프레임의 구조 PUSH EBP ; 함수 시작 (EBP 값을 저장) MOV EBP, ESP ; 현재 ESP 값을 EBP에 저장 (함수 본체) ; EBP의 값은 변하지않음 -> 로컬 변수와 파라미터 엑세스 가능 MOV ESP, EBP ; ESP 값 복구 POP..
1. PE 구조 개요 Portable Executable : 윈도우 운영체제에서 사용되는 실행 파일, DLL, object 코드, FON 폰트 파일 등을 위한 파일 형식 윈도우 로더가 실행 가능한 코드를 관리하는데 필요한 정보를 캡슐화한 구조체 1) pe 파일 종류 실행 계열 : EXE, SCR 라이브러리 계열 : DLL, OCX, CPL, DRV 드라이버 계열 : SYS, VXD 오브젝트 파일 계열 : OBJ 2. PE 파일 구조 전체적인 PE 파일 구조 1) 전반적인 구조 다양한 정보들이 PE Header에 구조체 형식으로 저장 위 그림처럼 Dos Header ~ Section Header를 PE Header 그 이후를 PE Body 또는 Section이라 부름 파일에서는 offset, 메모리에서는 ..
1. 어셈블리어란 무엇인가 어셈블리어(assembly language)는 기계어와 일대일 대응이 되는 컴퓨터 프로그래밍의 저급 언어 프로그래밍 언어의 하나로 기계어의 한 단계 위의 언어이며, 기계어와 단 둘 뿐인 저급 언어 기계어는 실제로 컴퓨터의 CPU가 읽어서 실행할 수 있는 0과 1로 이루어진 명령어의 조합 / 이러한 명령어에 대해 사람이 알아보기 쉬운 니모닉 기호를 정해 좀 더 쉽게 컴퓨터의 행동을 제어할 수 있도록 한 것이 어셈블리어 언어 기계어는 컴퓨터의 관점에서만 바로 읽을 수 있으며, 이를 인간이 볼 수 있도록 보완한 언어가 어셈블리어 기계어는 CPU가 채택한 ISA에 따라 다르기 때문에, 어셈블리어의 명령어 역시 통일된 규격이 없음 문법 아키텍처에 따라서도 다르며, 어셈블러 종류에 따라서..
1. 레지스터의 이해 1) 레지스터 CPU가 요청을 처리하는 데 필요한 데이터를 일시적으로 저장하는 기억장치 명령을 처리하기 위한 주소와 명령의 종류를 저장할 수 있는 기억 공간 RAM 보다 빨라야 해서 CPU와 직접 연결되어 있으며 연산 속도가 매우 빠름 (수십~ 수백 배) 특정 주소를 가리키거나 값을 읽어올 수 있어야 함 2) 데이터의 단위 각 레지스터 공간을 파악하고 분석하기 위해 데이터를 해석해야함 레지스터 뿐만아니라 어셈블리어로 시스템 내부적 구성을 확인할 때에도 필요 (1) 비트 컴퓨터 시스템이 데이터를 연산하거나 표현할 수 있는 제일 작은 기본 단위 0과 1 두 가지로 표현 ( 2진수 ) (2) 바이트 8개의 비트를 모아 하나의 바이트 (10진수로는 0~255 / 16진수로는 0~0xFF까지..
1) 문제 정보 로봇만 이용할 수 있는 도박장이에요. 로봇임을 인증하고 경기에서 이겨 플래그를 구매하세요! 소스코드 #!/usr/bin/env python3 import random import signal import sys MENU_GAMBLE = 1 MENU_VERIFY = 2 MENU_FLAG = 3 MENU_LEAVE = 4 money = 500 verified = False def show_menu(): print('=======================================') print('1. go to gamble') print('2. verify you\\'re a robot') print('3. buy flag') print('4. leave') def get_randn()..
baby-sqlite writeup 1) 문제 확인 sql injection을 통해 flag 획득 로그인 페이지를 통해 sql injection 확인 해당 파이썬 코드에서는 필터링을 통해 sql injection을 방어하고 있음 하지만 쿼리문에 직접 sql 문을 삽입하기에 필터링을 우회하여 flag 획득 가능 2) 문제 풀이 Burp suite를 이용하여 uid와 upw의 입력 값을 확인해본다 쿼리문에 level을 이용하여 필터링 우회 uid=test&upw=test&level=1//union//values(char(97)||char(100)||char(109)||char(105)||char(110)) → 공백대신 /**/ +대신 ||를 이용하여 문자열 admin 접근 3) 정답