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