전체 글 22

Stack STL

C++ STL에 구현되어 있는 stack ADT를 사용하는 방법을 알아보자.사용 방법선언stack variable_name;메소드stack S;S.push(10);S.push(11);...S.size() // return size of stackS.empty() // if stack is empty, return true (else false)S.pop() // delete top data at stackS.top() // just return top of stackS는 스택 변수, int 형 이라고 가정한다.S.push(data)S.size()S.empty()S.pop()S.top()주의할 점: pop과 top은 stack이 비어 있을 때 사용하면 런타임 에러!주의할 점2: pop은 삭제만 하고 값을 ..

시작해요 언리얼 2022 무작정 따라하기 - 3주차

KEYWORDS:블루프린트, 액터 움직이기, 뷰포트 창, 이벤트 그래프 창, 이벤트 그래프, 이동 그래프, 딜레이, 인스턴스 편집, 노드, 변수 승격, Set Actor Location, Get Actor Location, Arrow, Float 트랙, 루프블루프린트 클래스 생성하기여러개의 스태틱 매시(액터)들이 합쳐져서 하나의 역할을 하는 경우가 있다.매번 합치는 작업을 하기는 번거로운데, 하나의 역할로 합쳐서 만들어 놓을 수가 있다.점프맵의 골 지점(도착하면 클리어)을 만드는 예시로 알아보자.골 지점은 4개의 액터들로 구성된다. 그림을 보면 알 수 있다.평평한 바닥(하늘색)하트화살표트리거 볼륨(투명 사각형)이 4개를 묶어 하나의 블루프린트 클래스로 만들어 놓으면, 매번 도착지점을 만들 때 저 4개를 ..

RTL and ROP

RTL(Return To Library)NX로 인해 셸코드를 사용할 수 없어졌다.그래서 아직 실행 권한이 있는코드 영역코드가 참조하는 라이브러리의 코드 영역을 이용하여 NX를 우회하여 공격하는 기법이 등장했다.위 두 영역에 공격자가 필요한 코드가 존재하면 -> 그 코드를 가져다가 사용.여기서 라이브러리를 사용하는 공격이 바로 "Return To Library(RTL)" 이다.이 기법에서 필요한 것들을 적어보면,해당 코드의 메모리 주소해당 코드의 호출 주소(PLT 주소 등)ret으로 끝나는 어셈블리 코드 조각.구하는 방법:ROPgadget 명령어 사용(정규 표현식으로 필터링 할 수 있음) 참고:system 함수로 rip가 이동할 때, 스택은 반드시 0x10단위로 정렬되어 있어야 한다는 것입니다. 이는 sy..

Hacking/Pwnable 2024.07.14

원하는 주소로 return 시키기

Return Address Overwrite(이하 RAO) 기법이다.내가 어떤 주소로 rip를 이동 시키고 싶고, 그 주소의 hex값을 알았을 경우, BOF 등으로ret 주소를 덮어써서 해당 주소로 가도록 유도하는 것이다.기본 문제인 드림핵의 basic_exploitation_000 을 예시로 적용해보자.(https://dreamhack.io/wargame/challenges/2)파일을 받아보면 C파일과 그것으로 컴파일한 실행파일이 있다.코드는 이러하다.#include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1);}void initialize() { setvbuf(stdin, NULL, _IONB..

Hacking/Pwnable 2024.07.12

List STL

C++의 STL에 당연하게도 linked list가 구현되어 있다.이 list는 doubly linked list로, 이중 연결 리스트이다.사용 방법선언int main(void) { list L = {1, 2}; // 1->2 list::iterator t = L.begin(); // t는 head 가리킴 auto t = L.begin(); // over C++ 11 ver.}기본적인 선언이다. 다만 헤드를 가리키는 변수를 만들 때,C++ 11 이상에서는 다음과 같은 형식이 가능하다.auto t = L.begin();메소드L은 list 변수라 가정한다.L.push_back(val)L.push_front(val)L.insert(addr, val) // addr 앞에 삽입한다L.erase(a..

실수 자료형의 주의점

IEEE-754 formatsign -> 부호exponent -> 지수(과학적 표기법)fraction -> 유효숫자이렇게 저장됨으로써 생기는 문제점들을 기억해야 한다.1. 실수의 저장/연산 과정에서 반드시 오차가 생긴다.다음 예시를 보자.if(0.1+0.1+0.1 == 0.3) printf("true\n");else printf("false\n");결과는 놀랍게도 false가 출력된다.0.1과 0.3은 둘 다 무한소수이고 0.1+0.1+0.1 을 하면서 오차가 커지게 되어 둘이 다르다고 나오게 된다.하지만 오차 범위는 알 수 있고. (float은 $10^{-6}$, double은 $10^{-15}$)double의 오차 허용 범위가 훨씬 크기에, 실수 자료형은 double을 쓴다.(메모리가 모자랄 경우에는..

시작해요 언리얼 2022 무작정 따라하기 - 2주차

KEYWORDS:모델링 모드, 모델링, 큐브 그리드, 큐브 그리드 툴, 스태틱 매시 저장, 피벗 설정, 캐릭터 시작 위치 설정, 대각 큐브 그리드 증감, 머티리얼 설정, 블로킹 볼룸, 간단한 점프맵 레벨 새로 만들고 나서새로 게임 레벨을 만들었을 때 해야할 일들.게임 모드 확인하기아웃라이너 최상단의 레벨 우클릭 > 월드 세팅 > 게임모드 오버라이드프로젝트 세팅 확인하기이 프로젝트를 열었을 때 해당 레벨이 노출되도록 변경. 모델링 모드모델링 모드 - 선택 모드(기본) 이동shift + 1, shift + 5로 옮겨 다닐 수 있다.SkySphere 꺼놓기(권장)아웃라이너에서 하늘 영역 액터를 비저빌리티 해제 해놓는다.모델링을 할 때 자꾸 하늘이 클릭되는 번거로움을 방지하기 위함이다.큐브 그리드 생성하기모델링..

시작해요 언리얼 2022 무작정 따라하기 - 1주차

KEYWORDS:언리얼 작업 환경, 뷰포트, 아웃라이너, 액터, 레벨, 단축키, 스냅, 툴바, 콘텐츠 브라우저, 뷰포트 모드, 2D 뷰포트, 트랜스폼, 폴더 구조, 계층 구조, 게임 모드, 레벨 저장, 에셋, 프로젝트 세팅viewport : level이라는 게임 공간을 제작하기 위해 보여지는 화면Level?흔히 게임할 때 스테이지라 부르는 것을 개발할 때는 레벨이라고 한다.  outliner : 액터들을 볼 수 있는 화면언리얼에서의 level은 "액터"라는 단위 물체들로 구성되어 있음.아웃라이너에서 그런 요소들을 볼 수 있다.아웃라이너 최상단 : 현재 레벨타입 : 해당 액터가 어떤 역할을 하는지 표지단축키, 툴바단축키 개인 설정: 편집 - 에디터 개인설정 에서 변경해당 액터 확대 : 액터 마우스 좌클릭 ..

tldr please summarise

misc 분류의 문제이다. 파일을 받아보면 docx 파일 하나가 있다.HxD에 넣어보고..Zip파일로 바꿔서 보고..? 이상한 점을 못찾겠다.다시 문제를 읽고 생각해 보았다.find the flag in this document...라고 했는데...내용에 이상한게 있나??... 쭉 보다가이상하게 오타감지 밑줄이 있는 부분을 봤다.? 뭐지 저기하고 글씨 색깔을 바꿔보니...!!! 뭐가 있다.크기를 키워보자.프롬프트에 뭐 명령어를 친거같은데.. 일단 주소가 있으니 주소로 가보자.!!!!! 보아하니 base64로 인코딩 된 문자열인 거 같다.바로 디코딩 해보자.딱 봐도 flag인 부분이 있다. DUCTF{chatgpt_I_n33d_2_3scap3}DUCTF{chatgpt_I_n33d_2_3scap3}그게 정답..