실습 환경 : Red Hat 6.2 버전 ( 메모리 보안기법이 적용이 되어있지 않은 환경)
리눅스를 위한 부트 로더가 grub가 아닌 LILO이기 때문에 직접 운영 체제를 입력해 줘야 한다. linux-up을 입력해주자.
# ID - root, PW - 1234 ( root 계정으로 실습을 진행해야 한다. )
NASM 다운로드 방법
#> wget http://www.nasm.us/pub/nasm/releasebuilds/0.99.05/nasm-0.99.05.tar.gz --> wget으로 다운로드 받음.
#> tar xvfz nasm-0.99.05-xdoc.tar.gz
#> cd nasm-0.99.05
#> ./configure
#> make
#> make install
#> cp nasm /usr/bin
C 컴파일
- windows : visual studio, eclips, ... ---> Compiler 가 아닌 IDE
- IDE: 개발환경( 컴파일러 + 편집기 + 디버거 + ...)
- 컴파일러: GCC, 편집기: VI, 디버거: GDB
실습에 사용할 컴파일러 및 디버거
C 컴파일러 : GCC ( GNU C Compiler )
어셈블러 : GAS ( GNU Assembler) : AT&T 문법을 지원
NASM( Netwired Assembler ) : INTEL 문법을 지원 IA32 // 이것만 설치
디버거 : GDB( GNU DeBugger )바이너리 분석 도구
[ 컴파일러 과정 살펴보기 ]
1). hello.c 파일 만들기
2). gcc -v 옵션을 통해 컴파일 과정의 자세한 내용보기 + gcc -save-temps 를 통해서 임시파일을 지우지 않고 내용보기 .
[ 컴파일 과정 분석 ]
1). 전처리 과정: cpp (hello.i 확인) --> #define MAX가 치환됨을 확인
/usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/cpp -lang-c -v -undef -D__GNUC__=2 -D__GNUC_MINOR__=91 -D__ELF__ -Dunix -Di386 -D__i386__ -Dlinux -D__ELF__ -D__unix__ -D__i386__ -D__i386__ -D__linux__ -D__unix -D__i386 -D__linux -Asystem(posix) -Asystem(unix) -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ -D__tune_i386__ hello.c hello.i
2). 컴파일 과정: cc1 (hello.s 어셈블리 언어 확인)
/usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/cc1 hello.i -quiet -dumpbase hello.c -version -o hello.s
3). 어셈블리 과정 : as(목적파일 확인) : 여기부터 바이너리 형태로 되어있으며, 링킹과정을 거쳐야만 실행파일까지 도달할 수 있다. 여기서 사용한 printf는 c 표준 라이브러리 함수이기 때문에 링킹을 해야 완전한 실행파일이 하나 완성되는 것이다.
as -V -Qy -o hello.o hello.s
4). 링킹 과정 : ld, collect2 --> 실행에 필요한 여러가지 라이브러리
/usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/collect2 -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o hello /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/crtbegin.o -L/usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66 -L/usr/i386-redhat-linux/lib hello.o -lgcc -lc -lgcc /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/crtend.o /usr/lib/crtn.o
software engineering( 소프트웨어 공학 )
- 소프트웨어를 만드는 전체 과정
- 기획 -> 설계 -> 구현 -> 배포 -> 유지보수
## 리버싱(리버스 엔지니어링) 배포 ->구현
'System Hacking' 카테고리의 다른 글
3일차] 각 메모리 공간의 데이터 표현 + 레지스터 (0) | 2018.05.11 |
---|---|
2일차] 어셈블리 확인하기 (0) | 2018.05.10 |
14~15일차]PAM개념 (1) | 2018.04.30 |
8~10일차] IPTABLES (0) | 2018.04.19 |
4일차~5일차] 보안가이드[서비스 관리] (0) | 2018.04.13 |