[3주] 04장 - 접근 위반 핸들러
접근 위반은 접근할 권한이 없는 메모리에 접근하려고 하거나 허용되지 않은 방법으로 메모리에 접근하려고 할 때
프로세스 내부에서 발생한다.
PyDbg로 예외와 관련된 정보를 얻을 수 있는 함수들을 사용할 수 있다.
strcpy()함수를 이용해 버퍼오버플로우를 발생시키는 프로그램의 접근 위반을 처리하는 PyDbg 스크립트를 짜보자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #buffer_overflow.py from ctypes import * msvcrt = cdll.msvcrt raw_input("Once the debugger is attached, press any key.") buffer = c_char_p("AAAAA") overflow = "A" * 100 msvcrt.strcpy(buffer, overflow) | cs |
이제 접근위반을 처리하는 스크립트를 짠다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #access_violation_handler.py from pydbg import * from pydbg.defines import * # Utility libraries included with pydbg import utils def check_accessv(dbg): if dbg.dbg.u.Exception.dwFirstChance: return DBG_EXCEPTION_NOT_HANDLED crash_bin = utils.crash_binning.crash_binning() crash_bin.record_crash(dbg) print crash_bin.crash_synopsis() dbg.terminate_process() return DBG_EXCEPTION_NOT_HANDLED pid = raw_input("Enter the Process ID : ") dbg = pydbg() dbg.attach(int(pid)) dbg.set_callback(EXCEPTION_ACCESS_VIOLATION, check_accessv) dbg.run() | cs |
1. buffer_overflow.py 실행
2. PID 확인
3. access_violation_handler.py 실행하고 PID 입력
4. buffer_overflow.py 프로세스가 계속 실행할 수 있도록 엔터키를 누름
결과
1. 접근위반예외를 발생시킨 명령과 그 명령이 속한 모듈을 알려줌
2. 모든 레지스터의 컨텍스트 정보를 보여줌
3. 예외를 발생시킨 명령어 주위에 잇는 명령을 디스어셈블해 보여줌
4. 예외가 발생했을 때 등록되는 SEH(structured exception handling) 핸들러 리스트를 보여줌
'Study > 파이썬 해킹 프로그래밍' 카테고리의 다른 글
[3주] 04장 - 종합 (0) | 2015.01.26 |
---|---|
[3주] 04장 - 프로세스 스냅샷 (0) | 2015.01.26 |
[3주] 04장 - 브레이크포인트 확장 (0) | 2015.01.26 |
[2주] 03장 - 윈도우 디버거 개발 (5) (0) | 2015.01.19 |
[2주] 03장 - 윈도우 디버거 개발 (4) (0) | 2015.01.19 |