본문 바로가기
System

쉘코드-널바이트 제거

by k0o9 2020. 7. 18.

이 글은 윈도우 시스템 해킹가이드 버그헌팅과 익스플로잇을 보고 정리한 글입니다.

 

이전에는 간단하게 쉘코드를 제작하는 방법을 알아봣는데요. 만약 기계어로 만든 쉘코드에 0이 들어가는 값이 있게되면 어떤 문제가 생길까요? c언어에서 문자열의 끝은 \0으로 인식을 하게 되죠. 만약 쉘코드 중간에 0값이 들어가게 된다면 문자열의 끝으로 인식을 받고 올바른 쉘코드의 역할을 수행하지 못하게 됩니다. 따라서 이번에는 이 널바이트를 제거하는 방법을 다루도록 하겠습니다. 

앞전에 사용한 쉘코드의 일부입니다 저기서 맨 밑을 보면 FF 00 으로 00의 값을 옮기는 부분이 잇죠. 만약 C언어의 문자열 복사 함수에 이 쉘코드를 올렸다면 저 널바이트로 인해 사용을 하지 못하게 됩니다.  따라서 저 00을 없애줘야겟죠? 없애는 방법은 간단합니다. 실제 메모리에 0을 넣는게 아니라 레지스터를 이용하면 됩니다.

위와같이 xor ebx,ebx 명령어로 ebx를 0으로 초기화한후 원래 0을 넣엇던 ebp-1 에다가 ebx값을 넣어주면 끝입니다. 

물론 위와같은 방법을 제외하고도 널바이트를 넣지않는 명령어라던가, 크기가 작은 레지스터를 사용하셔도 됩니다.