ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • API Hooking (WriteFile)
    Python 2015. 1. 21. 06:13

    이번에는 notepad,즉 메모장에 WriteFile이라는 API함수를 후킹하는 소스에대해 설명할것이다.


    원리는 WriteFile에 브레이크포인트를 걸어 메모리값을 자신이 원하는 값으로 변경하는것이다.




    WINAPI인 WriteFile함수를 구현해놓는다.


    그리고 pydbg를 선언해놓고, 이따가 메모리값을 변조 시킬 repPattern과 오리지널 패턴을 각각 hate와 love로 저장해둔다.



    메모장에 존재하는 api를 후킹할것이기때문에 프로세스이름은 당연히 메모장으로 한다.




    디버그 이벤트가 발생할때 호출할 콜백 함수를 선언한다.


    이 함수에 후킹 코드가 들어가있기때문에 매우중요하다.


    replace를하되 orgPattern,repPattern에 무시하자.


    아까 변수에 문자열을 넣었었는데 


    각각 love 와 hate이다. 즉 love를 입력하면 후킹을통해 hate로 바꿔버린다.


    그리고나서 pydbg의 기능인 write_process_memory를 통해서 메모리에 값을 써버린다.

    그리고 후킹이 제대로 된것을 확인하기위해 pydbg의 read_process_memory를 이용해 메모리를 읽어들인다.





    윈도우즈 운영체제에서 실행되는 모든 프로세스 ID리스트를 얻는다.

    dbg.enumerate_processes(), kernel32CreateToolhelp32Snapshot에대해서 설명했었었다.

    동일한 역할을 한다.


    그리고나서 dbg.attach(pid)를통해 프로세스를 다룰수있는(메모리쓰기,읽기 등)핸들을 얻어 클래스내부에 저장시킨다. 이 핸들만이 모든것을 제어한다.


    이제 핸들을 사용해서 hookAddress에 프로세스의 메모리값을 조사한후 저장한다.


    kernel32.dll에 있는 WriteFile의 메모리값을 조사한다.






    hooks.add를 통해 hookAddress에 훅을 설치한다, 즉 WriteFile에 중단점을 설치한다.

    그리고 콜백함수를 등록하되 콜백함수는 replaceString이 된다.


    훅이설치되면 replaceString함수가 호출되어 메모리값을 변조시키는 원리이다.


    브레이크포인트가 어디서 잡혔는지 메모리값을 출력해주는 구문이 존재하고, 비정상적으로 프로그램이 돌아갈시에 에러코드가 전부이다.

    'Python' 카테고리의 다른 글

    Python MessageBox  (0) 2015.01.21
    notepad WriteFile 후킹결과  (0) 2015.01.21
    Python KeyLogger  (0) 2015.01.21
    immuity IsDebuggerPresent 우회  (0) 2015.01.21
    findinstruction  (0) 2015.01.20

    댓글

Designed by Tistory.