둘둘리둘둘리둘둘리둘둘리둘둘리둘

메모리 브레이크 포인트, 동작방식 본문

Windows/Reversing

메모리 브레이크 포인트, 동작방식

dool2ly 2015. 12. 3. 11:16

@메모리 브레이크 포인트(Memory Breakpoints)


  메모리 브레이크 포인트는 실제로 전혀 브레이크포인트가 아니다.  메모리 브레이크 포인트를 설정할때 디버거는 메모리의 영역(또는 page)의 권한을 변경한다.  메모리 페이지(Memory page)는 OS에서 처리하는 메모리의 가장 작은 단위이다. 메모리 페이지가 할당되면 할당된 메모리 페이지는 특정 접근권한이 세트된다. 


메모리 페이지 권한(Memory page permissions)


  - Page execution

실행가능권한, 만약 프로세스가 페이지에 읽거나 쓰려고하면 Access violation을 발생시킨다.


  - Page read

프로세스가 페이지에서 읽어오기만 가능하게한다.  읽거나 실행시키려하면 Access violation.


  - Page write

프로세스가 해당 페이지에 쓰는것(write)을 허용한다.


 - Guard page

어떤 접근이든 one-time exception이 발생한다.  그 후 페이지는 원래의 상태로 돌아간다.


대개의 OS는 위의 권한들을 결합할 수 있다.  예를 들면 메모리에 읽기/쓰기 권한을 가진 페이지가 있을 수 있고, 읽기/실행 권한을 가진 다른 페이지가 있을 수 있다.  또한 OS마다 특정페이지 영역 에 대한 메모리 현재 권한 질의 그리고 그것을 원하는대로 변경하게 해주는 고유 함수들이 있다.


가드 페이지(Guard page)타입은 스텍에서부터 힙을 을 분리하는것 또는 메모리에 일부가 예상 경계 이상으로 자라지 않도록 확실하게 하는것에 꽤 유용하다.  또한 메모리의 특정섹션을 건드릴 경우 프로세스를 중단하려 할때에도 꽤 유용하게 쓰인다.


예를들어 우리가 네트워크에 연결된 서버 어플리케이션을 리버싱할때, 우리는 패킷을 받기 전 패킷의 페이로드가 저장되는 메모리 공간에 메모리 브레이크 포인트를 걸 수 있다.  이것은 메모리 페이지에 어떠한 접근을 하여 CPU가 중지되고, Guard page debugging exception을 발생하여 어플리케이션이 받은 파켓의 내용을 언제 어떻게 사용하는지 알아낼 수 있게된다.  우리는 메모리 안의 버퍼에 접근한 instruction을 조사하고 이것이 패킷의 내용으로 무엇을 하는지 알 수 있게 된다.


메모리 브레이크 포인트 기술 또한 실행코드에 어떠한 변경 없어, 소프트 브레이크포인트(soft breakpoints)가 가진 데이터 변경 문제를 피해 작동한다.  






출처 : Gray Hat Python - Python Programming for Hackers and Reverse Engineers (Author - Justin Seitz)


Comments