본문 바로가기
카테고리 없음

해킹 공격의 예술 _1

by 맑은청이 2020. 4. 17.
728x90
반응형

0x100 ~ 0x252

해킹에 대한 정의와 해커가 무엇을 의미하는지가 적혀져있다. 

 

'해커는 시스템의 규칙을 직관적이지 않은 방법으로 사용하는 사람, 상상할 수 없는 방법을 문제를 해결하는 사람이다. '

 

여러가지 프로그래밍 기본 개념이 있다. 그전에 코드를 작성해본 사람이라면 별 주의하지 않고 넘어가도 된다.(if, for,while 등에 루프문이 나온다), 가상코드 (Pseudo-code) 에 대한 개념이 나온다. 

 

컴퓨터 언어는 '명령어 - 어셈블리어 - 기계어' , 왼쪽부터 인간이 이해하기 쉬운 단계다. 기계어는 컴퓨터가 이해하는 언어이다. 리버싱 엔지니어링 하시는 분들이 분석하는 게 어셈블리어다. 

 

실습은 CD 로 하라고 하지만 내 노트북에는 CD를 넣을 수 없고 우리집엔 큰 컴퓨터가 없기 때문에 VMware 에 Ubuntu 로 진행한다. 

 

'프로그래밍의 큰 그림을 이해하려면 C코드는 컴파일된다는 사실을 깨달아야한다. 코드는 컴파일 돼서 실행 가능한 바이너리 파일이 될 때까지는 아무것도 할 수 없다. 바이너리 a.out(gcc 컴파일 후 생기는 파일) 의 명령은 기계어로 쓰여져 있다.'

 

이 a.out 바이너리 파일을 살펴보기 위해 objdump가 있다. 

 

 

objdump -D a.out | grep -A20 main.: 

을 치면 바이너리 파일을 살펴볼 수 있다. 

 

 

 

여기서 16진법에 대한 기본 지식을 보겠다.

 

1 bytes = 8bit

즉 1bytes 는 256(2^8) 가지 값을 가질 수 있고 있는 2개의 16진수로 표현할 수 있어 16진수를 사용하는 것이 편하다.

 

하지만 이런 16진수 바이트 표기로 무슨 일이 일어나는지 알기 쉽지 않다. 그렇기 때문에 어셈블리 언어로 보여준다.(물론 이 또한 나에겐 쉽지 않다)

 

어셈블리 언어에서 또 중요한 것이 '레지스터' 다. GDB로 레지스터의 상태를 알 수 있다. 

 

 

728x90
반응형