분류 전체보기(324)
-
pwndbg로 C 소스파일 분석하기 - Ubuntu Linux
- 사전 준비 #include int test(int num){ if (num == (100%260)){ return 1; } return 0; } void win(int a, int b, int c, int d, int e){ printf("good\n"); } void lose(){ printf("bad\n"); } int main(){ int num; int res; printf("Enter Num : "); scanf("%d", &num); res = test(num); if (res == 1){ win(1,2,3,4,5); } else if (res == 0){ lose(); } return 0; } 우선은 vim을 사용하여 위와 같은 내용의 소스파일을 만들고 ESC -> :wq로 저장을 해줍니..
2021.05.26 -
X64 레지스터에 대하여
- X64란? Intel, AMD의 64bit CPU가 사용하는 ISA를 뜻합니다. X86 ISA의 상위 호환이라 보면 됩니다. X64의 다른 이름은 아래와 같이 3가지가 있습니다. X86-64 AMD64 Intel64 - X64 레지스터의 크기 구조 여기서 dword(32)라고 써져있는 부분까지는 위에서 말한 X86 레지스터입니다. qword(64)까지가 우리가 주로 보고 있는 X64 레지스터입니다. X64 레지스터는 여러가지로 나눠집니다. 범용 레지스터 (범용으로 쓰이는 레지스터) 인덱스 레지스터 (주소와 관련된 레지스터) 포인터 레지스터 (특정한 위치를 가리키는 레지스터) 이 세 가지의 레지스터는 아래에서 자세하게 설명하겠습니다. 설명은 괄호 안과 뒤에 추가적으로 적어놓겠습니다. - 범용 레지스터,..
2021.05.21 -
pwndbg 명령어 정리 - Ubuntu Linux
r : 실행하기 CTRL + c : 실행 중단 q : 종료 c : continue reload : pwndbg reload ni, si : 한 줄씩 코드 진행, 함수 내부 까지 b *[주소값] : break point help all에 관해서는 추가적으로 쓰지 않겠습니다.
2021.05.17 -
실행파일이 만들어지는 과정 - Ubuntu Linux
- 리눅스란 무엇일까? 리눅스는 윈도우와 같은 OS의 한 종류입니다. 차이점이 있다면 윈도우는 사용자 친화적인 OS이고, 리눅스는 컴퓨터 친화적인 OS입니다. 윈도우는 굉장히 간편한 UI와 사용법이 특징이기에 사용자 친화적인 OS라 하는 것이고, 리눅스는 UI가 복잡하며, 거의 모든 것을 명령어로 해결해야한다고 봐도 무방합니다. 또한, 리눅스는 어셈블리 언어로 되어있기 때문에 윈도우보다 더욱 세부적인 내용을 다룰 수 있습니다. - 리눅스와 윈도우에서의 C 소스코드 컴파일 컴파일러나 환경, 앱 종류에 따라 달라지겠지만 윈도우의 Dev C++을 기준으로 설명하겠습니다. 우리가 소스코드를 작성하고 실행을 하려면 컴파일이라는 과정을 거쳐야 합니다. 그리고 컴파일을 하기 위해선 컴파일러가 필요합니다. 또한, 컴파..
2021.05.16 -
포인터(Pointer)에 대하여
- 포인터의 정의 포인터란 주소 값을 저장하는 변수를 뜻합니다. - 주소 값이란? 그럼 주소 값이란 무엇일까요? 주소 값의 정의는 데이터가 저장된 메모리의 시작하는 주소를 의미합니다. 이렇게만 말하면 감이 잘 오지 않을 겁니다. 아래에 나와있는 그림이랑 같이 설명을 덧붙혀보겠습니다. int형 변수 a를 선언하고, 여기에 11을 대입한다고 하면 비어있던 메모리의 구조는 그림과 같이 바뀔 것입니다. 그럼 여기서 주소 값은 무엇일까요? 바로 0x01입니다. int형 자료는 메모리에서 4byte만큼의 공간을 차지합니다. 현재 a가 차지하고 있는 메모리는 0x01~0x04까지인데, 여기서 시작 주소는 가장 처음에 나오는 주소를 뜻하는 것이니 0x01이 되는 것입니다. - 포인터에서 쓰이는 연산자 포인터에서 쓰이는..
2021.05.12 -
file-download-1 풀이
항상 하던대로 웹사이트 접속 + 문제 파일 다운로드 웹페이지 메인화면에는 파일이 아무것도 없는게 정상입니다. 문제를 풀고 나서 이 게시글을 작성하는거라 제가 만들었었던 게시글이 메인 화면에 보이는거죠. 우선 코드를 먼저 보겠습니다. 코드에는 index, upload_memo, read_memo 이렇게 세 가지 함수가 들어있습니다. index는 보니 별다른 내용이 없는 것 같습니다. 중요하게 봐야할 부분은 upload_memo와 read_memo입니다. upload_memo에서 if filename.find('..') != -1: 이라는 부분이 있습니다. 파일 이름, 그러니까 우리가 업로드 할 게시글의 제목에 ..이 포함 되어 있는지 확인하는 if문입니다. 여기서 궁금증이 하나 들 것입니다. "다른 것도 ..
2021.05.09