ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • immuity IsDebuggerPresent 우회
    Python 2015. 1. 21. 00:12

    kernel32.dll의IsDebuggerPresent함수는 제일 대표적인 안티디버깅 함수이다.


    안티디버깅은 디버깅을 방해하는 기술인데, 엄청나게 많은함수들이 존재한다.


    IsDebuggerPresent함수는 1과 0으로 나눠 1이면 디버거가 실행중, 0이면 디버거가 없는것으로 판단한다.


    디스어셈블한 코드는 아래와같다


    MOV EAX,DWORD PTR FS:[18]

    MOV EAX,DWORD PTR DS:[EAX+30]

    MOVZX EAX,BYTE PTR DS:[EAX+2]

    RETN


    하나하나 설명하자면 FS 레지스터로부터 0x18에 위치해있는 TIB의 주소를 로드한다.

    그리고 EAX에서 0x30위치에있는 PEB의 주소를 로드한다.

    그다음 PEB의 오프셋 0x2위치에있는 BeingDebugged의 값을 EAX에 할당하는데

    여기서 1과 0을 구분한다.


    이뮤니티에선 이것을 이용해 간단하게 우회가능하다.


    imm = Debugger()

    imm.writeMemory( imm.getPEBaddress() + 0x2, "\x00")


    간단하다, 메모리에 값을쓰되, PEB의 주소에서 0x2위치 즉, BeingDebugged값이 할당되는곳에 \x00, 0을 넣어준다.


    이로서 IsDebuggerPresent함수는 디버깅중이 아니라고 판단한다.

    'Python' 카테고리의 다른 글

    API Hooking (WriteFile)  (0) 2015.01.21
    Python KeyLogger  (0) 2015.01.21
    findinstruction  (0) 2015.01.20
    Immunity Debugger PyCommand  (0) 2015.01.20
    snapshot 결과  (0) 2015.01.20

    댓글

Designed by Tistory.