본문 바로가기

Programming/Python

Pyhook

Pyhook


이번에는 PyHook에 대해서 알아보도록 하겠습니다.

먼저 후킹에 대해서 알아야 하는데, Hook은 갈고리를 뜻합니다. 갈고리의 역할은 무언가 낚아채는데 이용하죠. 컴퓨터 공학에서는 Hooking이라는 말을 사용하는데 컴퓨터가 어떤 일을 처리하는 과정 중에 낚아채는 것을 의미합니다.

ImmunityDBG에서는 여러가지 Hook이 존재합니다. BPHook, LogHook, PreBpHook, LoadDLLHook 등등이 존재합니다.




위 소스코드를 보죠.


먼저 AllExceptHook은 프로그램이 예외가 발생하게 되면 잡아줍니다.

regs는 CPU 레지스터 정보를 갖고 잇습니다.


10줄에 보면 log에 해당 레지스터를 남기고 있습니다.


echo-server-strcpy를 ImmunityDBG로 실행합니다. 그리고 위 소스코드를 실행 후 Ubuntu에서 익스플로잇 기초에서 작성한 exploit.py를 실행시킵니다.


그러면 해당 프로그램은 에러가 발생하게 되는데, 에러가 발생했으므로 AllExceptHook에 의해서 잡히게 되며 해당 레지스터 값들이 log에 남게 됩니다.





위 로그는 echo-server-strcpy를 ImmunityDBG에서 실행 후 demo.py를 실행 시켰고, Ubuntu에서 exploit.py를 실행시킨 후 로그 입니다.

위 로그 기록은 딕셔너리 형태로 저장된다는 것을 알아두세요.





소스코드를 좀 더 추가합니다.


9줄에서 regs에 담긴 딕셔너리의 키 값 EIP와 ESP를 각각 eip와  esp에 넣고 있습니다.

12줄 log에서는 EIP와 ESP만 출력을 하도록 했고, 13줄에서는 esp가 갖고 잇는 문자를 읽어오도록 했습니다.

15줄에서는 esp가 갖고 있는 문자의 길이와 문자를 출력하도록 하고 있습니다.




위 로그기록을 보면 EIP와 ESP가 로그로 남아있고 버퍼를 채워준 길이와 문자가 남아있는 것을 알 수 있습니다.


'Programming > Python' 카테고리의 다른 글

Pydasm을 이용한 디스어셈블링  (0) 2016.03.15
PE 분석  (0) 2016.03.15
Assemble, Disassemble, Search  (0) 2016.03.14
Immunity DBG 기초  (0) 2016.03.14
Exploit 기초  (0) 2016.03.14