3-2/정보보호론

Buffer Overflow - 기본적인 어셈블리어(mov, sub, and)(2)

개발자 덕구🐾 2021. 10. 18. 23:21
728x90

 

 

예시를 통해 기본적인 어셈블리어를 설명하겠습니다.

 

 

1) mov 

 

mov eax,0x31

위 코드와 같은 상황의 mov는 

0x31을 eax라는 변수에 넣으라는 의미입니다.

 

즉 0x31은 source이고, eax는 destination을 의미합니다!

우측 값이 좌측 변수에 저장되는것입니다.

 

 

이 명령어 후에는 eax라는 변수에 0x31이 저장되어있습니다.

 

 

[0x는 16진수라는 것을 알려줍니다]

[eax는 레지스터로 값은 저장하는 변수입니다]

 

2) sub 

 

sub eax,0x11

 

위 코드와 같은 상황의 sub는

0x11을 eax라는 변수의 값에서 뺀 값을 다시 eax에 넣으라는 의미입니다.

 

즉 앞선 mov를 통해서 eax에는 0x31이 들어있는 상황이라고 가정하면

eax - 0x11 = 0x31 - 0x11  = 0x21 

 

결과값인 0x21이 다시 eax에 들어가는 것입니다. 

 

3) and

and eax, 0xfffffff0

 

위 코드는 eax와 0xfffffff0을 and 연산한 후 다시 eax에 넣으라는 의미입니다.

 

먼저 and연산은 둘 다 1인 경우에만 1입니다.

 

 

현재 eax에 0x31이 있다고 가정해보겠습니다.

그렇다면 0x31과 0xfffffff0 을 and 연산은 어떻게 해야할까요?

 

 

문제

=> 1bit 씩 생각해서 진행하면 됩니다. 

 

 

앞서 0x는 16진수인 hexa를 의미한다고 말씀 드렸습니다.

hexa 2 글자는 1byte를 의미합니다. 

1byte == 8bit 이므로 hexa 한 글자는 4bit를 의미하는 것을 쉽게 예상할 수 있습니다.

 

 

<16진수> f 와 0의 and 연산

 

<16진수> 1 와 0의 and 연산
<16진수> 3 와 f의 and 연산

 

이렇게 3개의 연산을 보시면 이해가 가실겁니다!

 

위 연산을 통해 문제를 보면 0과 f는 0이 되고, 3과 f는 3이되고 ,1과 0임을 알 수 있으므로

 

 

 

이렇게 연산이 됩니다 

 

and eax, 0xfffffff0의 결과는 eax와 0xfffffff0 의 and연산의 값인 0x30이  eax에 저장되는 것입니다. 

 

 

 

 

 

 

이렇게 어셈블리어 mov, and, sub를  알아봤습니다.

사실 별로 어려울것도 없는 내용입니다ㅎㅎ

 

 

다음은 call 과 ret에 대해서 알아보고 본격적으로 buffer 오버플로우에 대해서 포스팅하겠습니다. 

 

 

 

 

 

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

반응형

'3-2 > 정보보호론' 카테고리의 다른 글

Buffer Overflow - 기본적인 어셈블리어(push, pop)(1)  (0) 2021.09.07