전체 글

· TOOR
별 함수는 없다. 사용자 함수는 get_int, main 밖에 없다. main 0x00000000004011ab :endbr64 0x00000000004011af :push rbp 0x00000000004011b0 :mov rbp,rsp 0x00000000004011b3 :sub rsp,0x20 0x00000000004011b7 :movabs rax,0x6820656c706d6953 0x00000000004011c1 :movabs rdx,0x6520796172646e61 0x00000000004011cb :mov QWORD PTR [rbp-0x20],rax 0x00000000004011cf :mov QWORD PTR [rbp-0x18],rdx 0x00000000004011d3 :mov WORD PTR [..
· TOOR
Stack Frame # include void A(int arg1, int arg2){ B(arg1, arg2); } void B(int arg3, int arg4){ printf("%d, %d", arg3, arg4); } void main(){ int a = 1; int b = 2; A(a, b); } 코드는 Calling Convention 에서 사용한 코드를 가져왔다. 컴파일 하고 info stack 으로 스택프레임을 확인 해보면 아래와 같이 나온다. 사진은 Calling Convention 에서 x86 으로 실행했던거라 주소가 x64랑 다르지만 스택 프레임은 같기 때문에 그냥 썼다. 함수 프롤로그 & 에필로그 이 스택프레임을 만들고 제거하는 것은 함수 프롤로그, 에필로그이다. 이게 스택프레임을..
· TOOR
함수 호출 규약에는 stdcall, cdecl, fastcall, thiscall, vectorcall, system v 등 다양하게 있지만 본 글에서는 리눅스 gcc 가 사용하는 함수 호출 규약에 대해서만 다루도록 하겠다. Intro Caller 와 Callee Caller 는 호출자로 함수를 호출하는 함수이다. Callee 는 반대로 호출 당하는 피호출자이다. 이걸 먼저 설명하는 이유는 함수 호출규약에 따라서 인자를 어떻게 정리하는지, 어떤 함수가 정리하는지가 다르기 때문이다. 실습 코드는 다음과 같이 작성했다. # include void A(int arg1, int arg2){ B(arg1, arg2); } void B(int arg3, int arg4){ printf("%d, %d", arg3, ..
· TOOR
Why Memory Structure 프로그램이 실행되기 위해서는 먼저 프로그램이 메모리에 로드 되어야 한다. 또한 프로그램에서 사용될 변수를 저장할 메모리도 필요하다. 기본적으로 메모리에 로드되는 메모리의 구조는 다음과 같다. Code 영역 코드 영역은 실행할 프로그램 코드가 저장되는 공간으로 text 영역이라고도 부른다. cpu 는 코드영역에 저장된 명령어를 하나씩 가져가서 패치한다. Data 영역 데이터 영역은 프로그램의 전역 변수와 정적 변수가 저장되는 영역이다. 프로그램의 시작과 함께 할당되며 프로그램이 종료되면 소멸한다. Stack 영역 높은 주소에서 낮은 주소로 자라는 LIFO 구조의 영역이다. 지역 변수나, 함수 내에서 필요한 인자, 스택 프레임 등이 저장된다. push 명령어로 데이터를 ..
· Misc
교환 이미지 파일 형식 (Exif: Exchangeable Image File format) 디지털 카메라에서 이용되는 이미지 파일 포멧으로 JPEG, TIFF 6.0 과 RIFF, WAV 파일 포멧 에서 이용되며 사진에 대한 정보를 포함하는 메타 데이터를 추가한다. exif 는 JPEG 2000, PNG 나 GIF 파일에서는 지원하지 않는다. Intro 교환 이미지 파일 형식은 일본 전자 산업 진흥협회에 의해 개발 되었다. 현재 교환 이미지 파일 형식을 정비하는 산업체나 표준화 기주가 존재하지 않지만 디지털 카메라에서 전 세계적으로 사용 되고있다. EXIF 메타 데이터는 다음 정보를 포함한다. 날짜와 시간 정보 카메라 설정 저작권 정보에 대한 설명 Exif? 이미지, 사운드 파일에 대한 메타데이터를 지..
History of fuzz test 1988년 Wisconsin 대학교의 - Barton Miller 교수는 전화 접속 시스템을 사용하여 UNIX 시스템에 접속하려 했지만 뇌우로 인한 피드백으로 프로그램이 계속 다운되었다. 외부의 noise가 프로그램에 영향을 준다는 것은 밀러에게 영감을 주었고 그들은 UNIX 프로그램이 예기치 않은 임의의 입력에 의해 ping될 때 crash 를 일으킨다는 것을 발견했다. Miller 는 Fuzzing for Software Security Testing and Quality Assurance 의 저자 중 한명이다. What is fuzzing? 프로그램이 가지고 있는 잠재적인 취약점을 식별하는데 사용되는 소프트웨어 테스트 기법 fuzzing을 통해 프로그램에 들어가..
· Misc/tools
screen 은 독립적으로 동작하는 가상 터미널을 만들어주는 리눅스 tool 이다. https://dreamlog.tistory.com/470 [Linux] screen 사용법 build 중 서버와 연결이 끊어지거나 컴퓨터를 끄고 퇴근해야 한다면? 1. screen 개념 putty와 같은 ssh 도구로 서버에 접속한 일반적인 사용 예. 서버에 screen 사용하여 접속한 예 두 그림의 차이는 서버 dreamlog.tistory.com 해당 글이 정리가 잘 되어 있어 기록해 둔다.
· Misc/tools
apt update && apt install -y netcat apt-get install software-properties-common apt update && apt install vim git gcc ssh curl ninja-build wget gdb sudo zsh python3 python3-dev python3-pip libffi-dev build-essential libssl-dev libc6-i386 libc6-dbg gcc-multilib make -y dpkg --add-architecture i386 apt update apt install libc6:i386 -y python3 -m pip install --upgrade pip pip3 install unicorn pip3 i..
lmxx
lmxx