2015년 7월 9일 목요일

4.Advanced Debigging

고급 안티 디버깅(Advanced Anti-Debugging)

고급 안티 디버깅 기법

  • 안티 디버깅은 우회가 모두 가능하다! 하지만 오랜 시간이 소요되며, 리버서를 지치게 만든다.

가비지 코드(Gabage Code)

  • 의미 없는 코드를 대량으로 추가하는 기법
  • jmp문을 통해 한줄로 쓸 수 있는 내용인데, jmp문 앞에 쓰레기 값들을 넣어서 많은 시간을 소요하게 된다.

Breaking Code Alignment

  • OPcode에 있는 Instruction과 다른 해석을 이용한 기법

암호화(Encryption) / 복호화(Decruption)

  • 프로그램의 코드와 데이터를 숨기기 위해 패커/프로텍터에서 자주 사용되는 기법
  • Encoding : 정상적인 코드를 암호화 시키는 행위
  • Decoging : 암호화된 코드를 복호화 시키는 행위

간단한 디코딩 코드의 경우

  • loop안에 xor을 통해 복호화 과정을 갖는다.

복잡한 디코딩 코드의 경우

  • 가비지 코드와 핵심코드(xor 복호화 루틴)를 섞는 방식

특수한 경우 - 코드 재조합

  • 코드를 변경 시키는 기법으로, 사용자가 만약 디코딩되는 코드 위치에 software BP(0xcc)를 설치했을 때 실행 에러를 발생시킨다.

Stolen Bytes(Remove OEP)

  • 원본 코드의 일부(주로 OEP 코드)를 패커/프로텍터가 생성한 메모리 영역으로 옮겨 실행시키는 기법
  • 장점 : 프로세스 메모리를 정상적으로 덤프시켰을 때 OEP 코드의 일부분이 제거되었기 때문에 덤프된 파일은 정상적으로 실행되지 않는다.(Anti Dump기법)
  • 장점 : Stolen Bytes가 적용된 파일을 다른 패커/프로텍터로 다시 압축했을 때 리버서에게 혼란을 줄 수 있다.(언팩 후 눈에 익숙한 OEP코드를 보여줌으로 계속 진행 해야하는지 혼란을 줌)
  • ‘Remote OEP’옵션으로 ‘Protect’시키면 OEP근처로 갈 수 있다.

API 리다이렉션(Redirection)

  • 디버깅할 때 코드에 흐름을 빨리 파악하는 방법 중 좋은 방법은 Win32 API에 bp를 걸어서 확인하는 것이다.

Debug Blocker(Self Debugging)

  • 자기 자신을 디버깅 모드로 실행시키는 기법
  • 장점
    1. 디버깅 방지 : 실제 원본 코드를 실행하는 자식 프로세스는 이미 디버깅 중이므로 원칙적으로 다른 디버거를 이용해서 Attach할 수 없다.
    2. 자식)(Debuggee)프로세스를 제어(Control)할 수 있다. : 디버거 - 디버기 관계에서 디버거는 막강한 권한을 가지고 있다. 즉, 디버기 프로세스의 예외를 처리하고 실행 흐름을 제어하는 등의 작업을 수행할 수 있다.

댓글 없음:

댓글 쓰기