※ 본 포스팅은 <파이썬 해킹 입문 - 공격의 언어 파이썬을 이용한 해킹 연습> (조성문 정영훈 저) 를 기반으로 작성되었습니다.
지난번에는 Win32 API를 ctypes를 통해서 알아보았다. 이번에는 디버거 모듈인 pydbg를 활용하려 한다. 먼저 디버거의 개념에 대해서 말해보자.
디버거의 개념
보통 디버거를 이용한 해킹에서는 콜백 함수에 원하는 해킹 코드를 입력해 둔다. 대표적으로 API 후킹 (API Hooking) 기법이 있다. API 후킹은 프로그램에서 데이터를 저장하는 함수를 호출할 때 메모리에 있는 값을 변경하면, 파일에 저장되는 데이터를 원하는 방향으로 조작하는 해킹 기법이다.
참고로, 중단점을 원하는 위치에 설정하면, 명령 코드의 처음 2byte가 'CC'로 바뀐다. 디버거는 내부적으로 관리하는 중단점 목록(리스트)에 원본 명령 코드를 저장한다. 이 덕에 원래의 처리 과정으로 돌아가는 데 문제가 없다.
④ 콜백 함수 등록
중단점이 설정된 명령 코드를 실행하면 디버그 이벤트(Debug Event)가 발생한다. 운영체제는 이 때 인터럽트를 발생시키고, 인터럽트 서브루틴, 즉 프로그래머가 설정한 콜백 함수를 수행하기 시작한다.
⑤ 디버그 이벤트 대기
Win32 API를 사용해서 디버그 이벤트가 발생하는 것을 그대로 기다린다. 콜백 함수 호출을 기다리는 것이다.
⑥ 디버그 이벤트 발생
디버깅 대상인 프로세스가 실행 도중에 중단점을 만나게 되면 인터럽트가 발생한다.
⑦ 콜백 함수 실행
인터럽트가 발생하면 ④에서 등록한 콜백 함수, 인터럽트 서브루틴이 실행된다. 콜백 함수에 심겨진 해킹 코드가 프로그래머가 원하는 동작을 수행한다.
⑧ 프로세스 복귀
콜백 함수가 종료되면 정상적인 프로세스 흐름이 계속 진행된다.
pydbg 모듈 설치
설치할 때 갑자기 할아버지 얼굴이 나와도 놀라지 말자 (...) 위 링크에서 첨부파일을 다운받아 PaiMei를 설치한 후, 약간의 추가 작업이 필요하다. 이는 Python 2.7.x 버전과의 호환성을 위해서이다. C:\Python27\Lib\ctypes\__init__.py 파일을 수정한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | ###################################################################### # This file should be kept compatible with Python 2.3, see PEP 291. # ###################################################################### """create and manipulate C data types in Python""" import os as _os, sys as _sys __version__ = "1.1.0" from _ctypes import Union, Structure, Array from _ctypes import _Pointer from _ctypes import CFuncPtr as _CFuncPtr from _ctypes import __version__ as _ctypes_version from _ctypes import RTLD_LOCAL, RTLD_GLOBAL from _ctypes import ArgumentError from _ctypes import Structure as _ctypesStructure # Add for Paimei. from struct import calcsize as _calcsize class Structure (_ctypesStructure): pass # Add for Paimei. if __version__ != _ctypes_version: raise Exception("Version number mismatch", __version__, _ctypes_version) | cs |
17행과 19행에 있는 코드를 추가했으면 이제 Python 2.7.x 버전용으로 리빌드된 pydasm.pyd 파일을 내려받는다. 그 후 C:\Python27\Lib\site-packages\pydbg 폴더에 복사한다. 기존에 pydasm.pyd 파일이 있다면 덮어씌워도 좋다.
아래 코드가 오류 메시지 없이 제대로 실행된다면 pydbg가 정상적으로 설치된 것이다.
1 2 | import pydbg print "Hello, pydbg!" | cs |
'System > Cybersecurity' 카테고리의 다른 글
셸코드(Shellcode) 만들기 (0) | 2019.04.01 |
---|---|
pydbg 모듈을 활용한 API 후킹 - (2) 메모장에 저장되는 텍스트 변조 (0) | 2019.03.28 |
애플리케이션 해킹 개요 - Windows 애플리케이션의 기본 개념 (0) | 2019.03.23 |
Python에서 Win32 API 활용하기 - ctypes 모듈 (0) | 2019.03.19 |
레지스터의 종류 - 범용 레지스터, 세그먼트 레지스터, 플래그 레지스터 (0) | 2019.03.09 |