본문 바로가기

전체 글231

4장-3 프로세스 스냅샷 pydbg는 프로세스 스냅샷이라는 엄청난 기능을 보유하고있다고 한다.프로세스 스냅샷프로세스를 일시 중지시켜 메모리 내용을 얻을 수 있다.다시 그 프로세스를 실행할 수 있다. 프로세스 스냅샷 얻기대상 프로세스의 어떤 특정 시점에서의 정확한 상태 정보를 얻는 것ㄴ 먼저 모든 스레드 리스트를 구하고 각 스레드의 CPU 컨텍스트 정보를 구해야 한다.또 모든 프로세스 메모리 페이지와 내용을 구해야 한다.어떤 정보를 복원할 것인지에 따라 저장할 정보를 판단하고 필요한 정보를 저장한다. 프로세스 스냅샷을 위한 정보를 구하기 전에 실행중인 모든 스레드를 일시 중지시켜야 한다.그래야만 스냅샷 정보를 추출하는 동안에 데이터와 생태 정보가 변경되지 않기 때문이다.pydbg에서 모든 스레드를 일시 정지시키려면 suspend_.. 2015. 1. 24.
4장-2 접근 위반 핸들러 접근 위반은 접근할 권한이 없는 메모리에 접근하려고 하거나 허용되지 않는 특별한 방법으로 메모리에 접근하려고 할 때 프로세스 내부에서 발생한다. 프로그램적인 결함에 의해 접근 위반이 발생하는 경우는 버퍼오버플로우, NULL 포인터를 부적절하게 사용하는 경우 등 매우 다양하다.c함수인 strcpy()를 이용해 버퍼 오버플로우를 발생시키는 프로그램을 만들어 보자.access_violation_handler.pybuffer_overflow.py를 실행시키고 PID를 확인한다.access_violation_handler.py를 실행시키고 buffer_overflow.py의 PID를 입력한다. 2015. 1. 24.
4장-1 브레이크포인트 확장 브레이크포인트 확장PyDbg를 이용하면 사용자 정의 콜백 함수를 구현함으로써 기본적인 이벤트 핸들러를 쉽게 확장시킬 수 있다.소프트 브레이크포인트를 설정하는 PyDbg 함수의 프로토타입------------------------------------------------------------bp_set(address, description="" , restore=True, handler = None)------------------------------------------------------------address 파라미터는 소프트 브레이크포인트를 설정할 주소를 나타낸다.description 파라미터는 각 브레이크포인트에 고유한 이름을 부여할때 사용한다.(선택적)restore 파라미터는 발생한 브레이.. 2015. 1. 21.
3장-4 브레이크포인트-3 (메모리브레이크포인트) 이 구문들을 기존의 my_debugger.py에 추가한다면 메모리 브레이크는 구현이 완료된다.printf함수에 대한 메모리 브레이크포인트를 설정한다면 "Guard Page Access Detected" 라는 문구를 볼 수 있을 것이다.먼저 브레이크포인트를 설정할 메모리 영역의 베이스 주소와 페이지 크기를 구한다. 그리고 해당 메로리 영역 페이지의 접근 권한을 변경해 보호 페이지로 설정한다.페이지의 크기를 제대로 계산하려면 먼저 운영체제에 디폴트 페이지 크기를 질의해봐야 한다. 이를 위해서는 GetSystemInfo() 함수를 이용해 SYSTEM_INFO 구조체 정보를 구하면 된다.SYSTEM_INFO 구조체의 dwPageSize 가 시스템의 페이지 크기 값을 나타낸다. 2015. 1. 17.
3장-4 브레이크포인트-2 (하드브레이크포인트) 결과창하드웨어 브레이크포인트는 CPU 디버그 레지스터의 특정 비트 값을 이용한다.먼저 프로세스 내의 모든 스레드 리스트를 구하고 각 스레드의 CPU 컨텍스트 레코드를 구한다.구한 스레드의 모든 컨텍스트 레코드의 디버그 레지스터중 하나에 원하는 브레이크포인트 주소를 설정한다.DR7 레지스터의 비트를 설정함으로써 브레이크포인트의 종류와 길이, 설정한 브레이크포인트를 활성화 시킨다. 2015. 1. 17.
3장-4 브레이크포인트-1 (소프트브레이크포인트) 브레이크포인트소프트 브레이크 포인트프로세스의 메모리를 읽고 쓸 수 있어야 한다. 이를 위해 ReadProcessMemory() 함수와 WriteProcessMemory()함수를 이용한다.두 함수의 프로토타입. 순서대로------------------------------------------------------BOOL WINAPI ReadProcessMemory(HANDLE hProcess,LPCVOID lpBaseAddress,LPVOID lqBuffer,SIZE_T nSize,SIZE_T* lpNumberOfBytesRead); BOOL WINAPID WriteProcessMemory(HANDLE hProcess,LPCVOID lpBaseAddress,LPCVOID lpBuffer,SIZE_T nS.. 2015. 1. 16.
728x90