본문 바로가기
[보안 Archive] ~2017/파이썬 해킹 프로그래밍

04장 - PyDbg 순수 파이썬 윈도우 디버거

by Joy L. 2015. 1. 26.
반응형

<04장 - PyDbg 순수 파이썬 윈도우 디버거>



4.1 ㅡ 브레이크 포인트 확장


PyDbg를 이용하면 사용자 정의 콜백 함수를 구현함으로써 이벤트 핸들러를 쉽게 확장시킬 수 있다. 콜백 함수에 디버그 이벤트가 발생했을 때 수행될 로직을 구현해 넣으면 된다.


호출된 콜백 함수가 리컨을 하면 제어권은 디버거에게 넘어가고, 디버거는 디버깅 대상 프로세스가 계속 실행되게 한다.


소프트 브레이크 포인트를 성정하는 PyDbg 함수의 프로토타입 :

address :  소프트 브레이크 포인트를 설정할 주소

description : 브레이크 포인트에 교유한 이름을 부여할때 사용 (선택적으로 사용한다)

restore : 발생한 브레이크 포인트를 초리한 이후에 자동으로 해당 브레이크 포인트를 해제할 것인지에 대한 여부

handler : 브레이크포인트가 발생했을때 호출할 함수를 지정



사용자 정의 콜백 함수 구현 :


다음 코드들을 작성하자


>>printf_loop.py


>>printf_random.py


이 두 스크립트를 실행하면, counter의 값이 4라서, 4번째 루프까지는 printf_loop.py가 정상적으로 실행된다. 하지만, 5번째 루프부터는 난수를 출력한다.




4.2 - 접근 위반 핸들러


PyDbg를 이용하면 접근 위반 핸들러를 쉽게 설치할 수 있으며, 예외와 관련된 모든 정보를 쉽게 얻을 수 있는 유틸리티 함수들을 사용할 수 있다.


버퍼오버플로우를 발생시키는 테스트 프로그램을 작성해 보자.


>>buffer_overflow.py


그리고 핸들러 스크립트 파일도 만들자


>>access_violation_handler.py


이제..

1. buffer_overflow.py 를 실행시킨다. (buffer_overflow.py는 실행을 ㅁ머추고 키를 누를때까지 대기하고 있을꺼다.)

2. access_violation_handler.py를 실행시키고 buffer_overflow.py의 PID를 입력한다. (여기서 디버거가 buffer_overflow.py에 붙는다)

3. buffer_overflow.py를 계속 실행되게 만든다.


이때 출력 내용을 통해 알 수 있는 것들 : 

1. 접근 위반 예외를 발생 시킨 명령, 그 명령에 속한 모듈

2. 모든 레지스터의 컨텍스트 정보

3. 예외를 발생시킨 명령어 주위에 있는 명령어들을 디스어셈블 한거

4. 예외가 발생했을때 등록되는 SEH핸들러 리스트




4.3 - 프로세스 스냅샷


PyDbg에서 프로세스 스냅샷을 이용하면, 프로세스를 일시 중지시켜 메모리 내용을 얻을 수 있고, 다시 그 프로세스가 실행되게 만들 수 있다.


프로세스 스냅샷 얻기위한 방법 :

1.스레드 리스트를 구하고 각 스레드의 CPU 컨텍스트 정보를 구한다

2. 스냅샷을 복원하고자 할 때 어떤 정보를 복원할 것인지에 따라 저장한 정보를 판단하고 필요한 정보를 저장한다.

3. 프로세스 스냅샷을 위한 정보를 구하기 전에 샐항중인 모든 프로세스를 일시 중지 시킨다. 일시 정지를 위해 suspend_all_threads() 사용, 다시 실행되기 위해선 resume_all_threads() 를 이용!]

4. 스레드를 다 일시 정지 시킨 후, process_snapshot() 을 호출. 이렇게 프로세스 스냅샷을 만든 다음에는 모든 스레드를 다시 실행되게 만든다.

5. 나중에 스냅샷이 만들어진 시점으로 복원하고 싶으면 모든 스레드를 일시정지 시키고 process_restore()를 호출하고 모든 스레드를 재실행시킨다.


사용자가 키를 누르면 스냅샷을 만들고 다시 키를 누르면 스냅샷을 만든 시점으로 복원하는 테스트 프로그램:

>>snapshot.py







반응형

'[보안 Archive] ~2017 > 파이썬 해킹 프로그래밍' 카테고리의 다른 글

05 - Immunity Debugger  (0) 2015.01.26
파해프 3.1 - 디버기  (0) 2015.01.19

댓글