[컴][파이썬] PyDbg 로 snapshot 잡기, snapshot 사용하기

파이디버거, 스냅샷,

 

PyDbg 를 한창 배우고 있다.

오늘은 snapshot / restore 에 대해서 공부해 보자. 아래 link 에서 학습한 내용을 정리한 것이다.

 

 

snapshot

snapshot 은 말 그대로 일정시점의 모습을 잡아내는 것이다. 프로그램이 실행되고 있는 한 특정 순간의 상태를 저장해 놨다가 다시 그 모습으로 복원(restore) 시키는 것이다.

간단히 생각하면, 노트북에서 ‘절전모드’ 등으로 들어가기 위해 현재 메모리의 내용을 저장해 놓는 것과 같은 원리라고 하겠다.

 

여기서 사용한 코드는 아래 blog 의 logic 을 사용했으며, 내가 보기 좋게 정리했다.

 

 

test

test 환경

  • OS : Windows 7
  • Python version : 2.7
  • PyDbg module

 

test 방법

a.cpp 를 compile 해서 a.exe 를 만들자.(참고로 나는 MinGW 의 gcc 를 이용했다.)

그리고 snapshot.py 의 main() 에서 exe_path 를 수정해 주자.

다음 snapshot.py 를 실행한다.

a.exe 는 ‘1 test’ / ‘2 test’ / ‘3 test’ 를 출력하고 sleep() 에 들어간다. 그리고 다시 ‘4 test’ / ‘5 test’ / ‘6 test’ 을 출력하고 sleep() 에 들어간다. 그리고 sleep() 이 끝나면 프로그램을 종료한다.

여기서 우리는 snap 을 test 하기 위해서 아래처럼 “3 test” 가 출력된 후에 snap 을 입력할 것이다. 그리고 나서 4,5,6 이 출력되고 나서 다시 restore 를 입력 해 줄 것이다.

그럼 아래처럼 결과가 나온다. 1,2,3 이 끝난 지점으로 다시 돌아갔기 때문에 4,5,6 이 2번 찍히는 결과가 나온 것이다.

e:\>snapshot.py
1 test
2 test
3 test
Enter: 'snap','restore' or 'quit' : snap
[*] Suspending all threads.
[*] obtaining snapshot.
[*] Resuming operation.
Enter: 'snap','restore' or 'quit' : 4 test
5 test
6 test
restore
[*] Suspending all threads.
[*] restoring snapshot
[*] resuming operation.
Enter: 'snap','restore' or 'quit' : 4 test
5 test
6 test
quit
[*] Exiting the snapshotter.

 

 

 

snapshot.py 작동원리

  • snapshot.py 는 2개의 thread 를 만들게 된다.
  • 1번째 thread 는 debugger(dbg) 를 만들고, debugger 와 관련된 일(여기서는 snap, restore) 을 하게 된다.
  • 2번째 thread 는 입력을 받는다. 입력이 들어오면 입력에 따라 알맞은 동작을 1번째 thread (debugger) 가 하도록 한다.
  • input thread 가 debugger thread 를 control 하기 위해 debugger 는 self.dbg 에 저장된다.

댓글 없음:

댓글 쓰기