본문 바로가기

분류 전체보기

[ESPC2] 0x06 NOP SLED ( 놉 썰매 ) 보호되어 있는 글입니다. 더보기
[Cube_OS] 0x03 보호되어 있는 글입니다. 더보기
[Cube_OS] 0x02 Study 보호되어 있는 글입니다. 더보기
[Cube_OS] 0x01 보호되어 있는 글입니다. 더보기
[ESPC2] 0x05 BOF 보호되어 있는 글입니다. 더보기
[ESPC2] 0x04 Return Address 보호되어 있는 글입니다. 더보기
[펌글] GOT / PLT GOT와 PLT = GOT = Global Offset Table(전역 오프셋 테이블)로써, 실행 후, libc.so내 실제 함수 주소가 담기는 저장소이다. = PLT = 일종의 실제 호출 코드를 담고 있는 Procedure Linkage Table(프로시져 링키지 테이블)로써 이 내용 참조를 통해 _dl_runtime_resolve가 수행되고, 실제 시스템 라이브러리 호출이 이루어지게 된다. (매 번이 아닌, 한 번만 수행되고 나면, 그 다음부터는 GOT에 기록된 내용만 참조하여 수행) 이를 실제 시스템 라이브러리 주소를 호출하기 위해 필요한 정보 테이블이라 보면 될꺼 같다. (_dl_runtime_resolve의 인자 값도 여기서 들어감) [출처 : x82 님 홈피 ] 더보기
[펌글] CPU Register(레지스터) 32bit 레지스터 : 컴퓨터의 중앙 처리 장치(CPU) 내에 있는 소규모의 데이터 기억 장치입니다. 연산 처리 장치와 레지스터간은 CPU 내부 버스(bus)가 연결해줍니다. 예전엔 ax, bx, cx, dx 이라고 불렸던 레지스터들이 있었습니다. 이는 16bit에 알맞게 설계된 구조를 가진 레지스터들로 32bit CPU가 등장한 후로는 Extend라는 접두어를 붙여 eax, ebx, ecx, edx 라고 불립니다. = EAX = Extend Accumulator, 즉 누산기 레지스터라고 불립니다. 거의 모든 산술 연산에 사용되며(주로 곱셈이나 나눗셈 연산), 함수의 반환값이 들어가기도 합니다. 참고로 Win32 API Function들은 모두 API Function의 반환값을 EAX에 저장한 후 반환합니다. = .. 더보기
[펌글] gdb 를 통한 디버깅 따라하기 & gdb 매뉴얼 GDB 매뉴얼은 링크로 확인해주세요 ^_^ 참고서적 : 유닉스 리눅스 프로그래밍 필수 유틸리티 : vi, make, gcc, gdb, cvs, rpm 1. 우선 컴파일 시에 디버깅 정보를 담아야 한다. gcc -g -o [프로그램명] [소스파일명] 디버깅 옵션인 -g 으로 컴파일하며, 최적화 옵션인 -O 은 주지 않도록 한다. 2. 실행방법 gdb [프로그램명] gdb [프로그램명] [core파일명] gdb [프로그램명] [실행중인프로세스pid] 3. 종료방법 q Ctrl + d 4. 소스 찾아가기 (list) l : main 함수를 기점으로 소스의 내용이 출력된다 l 10 : 10 행 주변의 소스가 출력되는데 10 - 5 행부터 10 + 5행까지 총 10행이 출려된다. l func : func 함수의 .. 더보기
[System Security] push ebp / mov ebp,esp 0x08048420 :push ebp 0x08048421 :mov ebp,esp => passwd.test 를 DeskTop 에서 gdb 로 읽어들인 결과 상위 두 줄에도 역시 push ebp 를 확인할 수 있다. 이전에 ebp, esp 가 뭐냐고 물어 보신다면 여기로 가셔서 해당 용어를 한 번 읽어보고 오시면 좋을 것 같습니다. 클릭이 귀찮은 분들을 위해 ebp, esp 만 간략하게 이야기 하자면 EBP (Extended Base Pointer) - 현재 스택에 가장 바닥을 가리키는 포인터 (함수 내에서 스택상에 저장된 값을 참조할 때 기준) - 새로운 함수가 호출될 때마다 EBP 레지스터 값이 지금까지 사용했던 스택 꼭대기의 위에 위치하게 되고 새로운 Stack이 시작 - 따라서 EBP는 새로운 함수.. 더보기