목록분류 전체보기 (40)
nemo의 이야기
함수 프롤로그(prologue) - 이전 사용되던 ebp를 보전(저장) : saved ebp - 함수에서 사용하는 메모리를 할당 : esp ex)push ebp => 새로운 기준 mov ebp, esp sub esp, 4 => 4byte 공간 확보 함수 에필로그(epilogue) - 할당된 메모리를 정리(회수) : esp 포이터를 높은 쪽으로 옮긴다. - 저장해놨던 ebp를 복구 - 이전 명령어로 복귀 ex)leave -> mov esp, ebp => 정리 pop ebpret -> pop eip => 다음 실행할 명령어 주소 함수를 이용한 어셈블리 프로그램 예제를 만들어 보자 C언어void myprint(){ printf("call myprint");} int main(){myprint();} main:..
취약점을 분석하려면 메모리에 대한 이해가 필요하다. 그래서 프로세스가 실행되어 메모리에 올라갔을 경우 메모리를 분석해보자. 프로세스에 실행하는데 필요한 메모리가 3M이여도 실질적으로 4G가 사용된다. 이는 실제 메모리 + 가상 메모리로 모든 프로세스는 자신만의 가상 주소 공간을 가지고 있다. 다른 프로세스에 의해 소유된 메모리는 숨겨져 있으며, 접근이 불가능하다. 예를 들어 A 프로세스가 0x12345678 주소에 어떠한 값을 저장하고, B프로세스가 0x12345678을 사용하면 전혀 다른 값이 사용되고 이 주소들은 완전히 독립되어 있다. 리눅스에서 메모리를 확인하고 싶으면 다음 명령어를 수행 #> ps -ef | grep test2 # test2는 실행파일 이름이다. #> cd /proc/ #> cd ..
목적) 어셈블리 언어를 배우는 목적은 CPU에서 명령을 내리기 위해 고유의 명령어 세트가 마련되어 있는데 이 명령어 세트를 기계어라고 한다. 이 기계어는 숫자들의 규칙조합으로 프로그래밍하기 어렵다. 그래서 이 기계어를 좀더 이해하기 쉬운 기호 코드로 나태낸것이 어셈빌리어이다. 취약점 분석하기 위해 꼭 필요하다. 구성) 세그먼트(segment)는 프로그램에 정의된 특정 영역으로, 코드, 데이터, 그리고 스택(stack)으로 알려져있는 것을 포함한다. .data(.bss, heep, ...) - 전역변수(초기화, 비초기화) - 힙 메모리(동적 메모리/malloc, ...) label 크기 상수 아스키코드 NULL msg db 'test', 10, 01 - label - 크기 db => d : prefix b..
프로그램 : VMware Workstation 운영체제 : Red Hat Linux 6.2 실행 환경을 구축하기 위해 Assembler를 설치해야되는데 GAS, NASM, MASM 등.. 이 있는데 이 중에서 NASM을 사용한다. NASM( Netwire Assembler ) 설치 과정 #> wget http://www.nasm.us/pub/nasm/releasebuilds/0.99.05/nasm-0.99.05-xdoc.tar.gz #> tar xvfz nasm-0.99.05-xdoc.tar.gz #> ./configure && make install #> cd nasm-0.99.05 #> cp nasm /usr/bin/ program : 실행 가능한 파일, 저장장치 process : 실행중인 파일, 메..