분류 전체보기 117

[Dreamhack] ReturnAddressOverwrite

개요 수준 유지를 하고자 요즘 드림핵을 다시 시작했다. 기본적으로 바이너리 파일과 소스코드를 준다. 바이너리 파일을 보기 전에 소스코드부터 보자. // Name: rao.c // Compile: gcc -o rao rao.c -fno-stack-protector -no-pie #include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } void get_shell() { char *cmd = "/bin/sh"; char *args[] = {cmd, NULL}; execve(cmd, args, NULL); } int main() { char buf[0x28]; init(); printf("Input: "); scanf..

Write-up/Wargame 2024.03.22

[pwnable.kr] fd

[Pwnable.kr] fd 문제 ssh로 pwnable.kr 서버 포트 2222로 접속하라고 한다. 해주자 분석 병적으로 ls를 쳤더니 flag파일이 있었다. 그러나 저 파일은 권한이 440으로 guest로 진입한 내 계정으로는 볼 수 없는 파일이다. fd를 실행해보면 이렇게 리눅스 파일의 입출력에 대해 공부하라고 나온다. 아쉬운대로 fd.c파일을 보자 vim으로 보면 한눈에 확 들어온다. 1 #include 2 #include 3 #include 4 char buf[32]; 5 int main(int argc, char* argv[], char* envp[]){ 6 if(argc 23562 여기서는 프로그램 실행시 인자를 받을때 문자열 형태로 받으니 이를 숫자로 변환해주려고 하는 것이다. 다음은 re..

Write-up/Wargame 2023.11.12

[Dreamhack wargame] rev-basic-4

[Dreamhack] rev-basic-4 문제 분석 프로그램 실행 프로그램을 받아서 실행했더니, 역시나 바로 종료된다. ida pro ida pro를 이용해서 파일을 보자. 나는 프로그램을 실행했을 때, 나타나는 문자열을 검색해서 해당 부분의 코드들을 볼 것이다. 처음에는 start 함수가 나온다. [shift + f12]를 사용해서 문자열 검색을 해보자. "Correct"이 보인다. 더블클릭해서 들어가서, 해당 문자열을 참조하는 코드를 보기 위해 [x]키를 눌러 들어간다. 코드분석: sub_140001130() __int64 sub_140001130() { char v1; // [rsp+20h] [rbp-118h] memset(&v1, 0, 0x100ui64); sub_1400011C0("Input ..

Write-up/Wargame 2023.11.12

[Dreamhack wargame] rev-basic-3

문제 분석 프로그램 실행 프로그램을 받아서 실행했더니, 바로 종료된다. ida pro ida pro를 이용해서 파일을 보자. 나는 프로그램을 실행했을 때, 나타나는 문자열을 검색해서 해당 부분의 코드들을 볼 것이다. [shift + f12]를 사용해서 문자열 검색을 해보자. "Input:"이 보인다. 더블클릭해서 들어가보자. 여기서 Input: 부분을 누르고, 해당 문자열을 참조하는 코드를 보고 싶으므로 [x]키를 눌러보자 들어간다. [f5]을 누르면 어셈블리어가 C언어로 보기 쉽게 바뀐다. 코드분석: sub_140001120() __int64 sub_140001120() { char v1; // [rsp+20h] [rbp-118h] memset(&v1, 0, 0x100ui64); sub_1400011B..

Write-up/Wargame 2023.09.04

[AI] 특성공학과 규제

개요 이전에서는 하나의 특성을 사용하여 선형 회귀 모델을 훈련시켰다. 1개의 특성을 사용했을 때 선형회귀모델이 학습하는 것은 직선이다. 2개의 특성을 사용하면 평면을 학습한다. 여러 개의 특성을 사용한 선형회귀를 다중회귀라 부른다. 특성이 많으면 많을 수록 복잡한 모델이 된다. 그러나 3차원 공간을 뛰어넘는 3개의 특성을 가진 상태, 그 이상을 그릴 수 없다. 그래서 있는 특성을 이용해서 새로운 특성을 만드는데, 이렇게 기존의 특성을 이용해서 새로운 특성을 뽑아내는 작업을 특성공학이라고 한다. 특성공학 데이터준비 이전과 달리 농어의 특성이 길이, 높이, 두께 3개로 늘어났다. pandas를 이용해서 농어 데이터를 인터넷에서 내려받아 데이터프레임에 저장하겠다. 그 이후에 넘파이배열로 전환시켜주자 panda..

STUDY 2022.11.06

[AI] 선형회귀

개요 이전 k-최근접 이웃 회귀에서는 가장 가까운 k개의 이웃 샘플을 찾고 이 샘플들의 타깃값을 평균으로 하여 예측으로 삼는다. 실습 import numpy as np perch_length = np.array( [8.4, 13.7, 15.0, 16.2, 17.4, 18.0, 18.7, 19.0, 19.6, 20.0, 21.0, 21.0, 21.0, 21.3, 22.0, 22.0, 22.0, 22.0, 22.0, 22.5, 22.5, 22.7, 23.0, 23.5, 24.0, 24.0, 24.6, 25.0, 25.6, 26.5, 27.3, 27.5, 27.5, 27.5, 28.0, 28.7, 30.0, 32.8, 34.5, 35.0, 36.5, 36.0, 37.0, 37.0, 39.0, 39.0, 39...

STUDY 2022.11.06

[AI] k-최근접 이웃 회귀

k-최근접 이웃 회귀 란 k-최근접 이웃 회귀는 똑같이 예측하려는 샘플에 가장 가까운 샘플 k개를 선택한다. 이웃한 샘플의 타깃은 k-최근접 이웃 분류 알고리즘과는 달리 어떤 클래스(도미인지 빙어인지) 그런 것이 아닌 임의의 수치이다. 그런 다음 이웃 샘플의 수치들의 평균을 구하면 그 평균이 샘플 x의 예측타깃값이 된다. 아래 실습은 농어의 길이와 무게 데이터가 있는데 농어의 길이만 있어도 무게를 잘 예측할 수 있다고 생각했으므로, 농어의 길이가 특성이고, 무게가 타깃이 될 것이다. import numpy as np perch_length = np.array( [8.4, 13.7, 15.0, 16.2, 17.4, 18.0, 18.7, 19.0, 19.6, 20.0, 21.0, 21.0, 21.0, 21...

STUDY 2022.11.06

함수 호출 규약

개요 Dreamhack 함수 호출 규약에 대해서 공부한 것을 정리한 포스트이다. 함수 호출 규약이란? 함수 호출 규약은 함수의 호출 및 반환에 대한 약속 한 함수에서 다른 함수를 호출할 때, 프로그램의 실행 흐름은 다른 함수로 이동하고, 호출한 함수가 반환하면, 다시 원래의 함수로 돌아와서 기존의 실행 흐름을 이어나간다. 그러므로 함수를 호출할 때는 반환된 이후를 위해 호출자(Caller)의 상태(Stack frame) 및 반환 주소(Return Address)를 저장해야 한다. 또한, 호출자는 피호출자(Callee)가 요구하는 인자를 전달해줘야 하며, 피호출자의 실행이 종료될 때는 반환 값을 전달받아야 한다. x86(32bit) Architecture 특징 레지스터를 통해 피호출자의 인자를 전달하기에는..

STUDY/Pwnable 2022.10.21