본문 바로가기

카테고리 없음

2024.9.20 리버싱 공부(나뭇잎 책)

고급 안티 디버깅 기법

 

가비지 코드

-의미 없는 코드를 대량으로 추가시켜서 디버깅을 힘들게 만드는 기법

가비지 코드 중간 중간에 진짜 의미 있는 코드를 섞어버리거나 다른 안티디버깅 기법을 혼합해서 사용하면 디버깅이 힘들어짐.

 

Breaking Code Alignment

A368과같은 디스어셈블리 코드의 가독성을 떨어뜨리는 기법

 

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

코드와 데이터를 숨기는 기법 주로 XOR을 씀 XOR을 두번하면 원래 데이터가 나오기때문

데이터나 코드를 암호화시키고 사용 전에는 복호화해서 사용.

주로 코드나 데이터 범위로 암호화 복호화 하지만 특수하게 실시간으로 코드를 재조합 하는 경우도 있음.

1줄 실행하고 다음줄에선 그 다음줄 복호화 -> 복호화된 코드 실행 -> 그 다음줄에 또 복호화루틴 -> 코드 실행

 

Stolen Bytes(Remove OEP)

원본 코드 일부를 패커/프로텍터가 생선한 메모리 영역으로 옮겨서 실행하는 기법

OEP 코드의 일부분이 제거되었기때문에 덤프된 파일이 정상적으로 실행되지않음.

 

API 리다이렉션

디버깅할때 Win32 API에 BP를 설치해서 하는 경우가 많은데 이를 막는 기법

API호출 코드를 다른 주소로 바꿔버림

그 주소에는 API와 동일한 내용을 복사해놨기때문에 실행은 똑같은데 Win API BP에는 멈추지않음.

더 특수하게 하면 API리다이렉션에 가비지코드와 breaking code alignment를 섞고 한참 뒤에 API기능을 실행하면 디버깅 하는 사람이 괴로워함.

 

 

Debug Blocker(Self Debugging)

자기 자신을 디버깅 모드로 실행시키는 기법

-디버깅 방지(디버깅 중인 프로세스는 다른 디버거로 attach 못함)

-디버거 프로세스가 디버기 프로세스를 제어할 수 있음( 예외 처리 및 실행 흐름 제어를 디버거가 함)

이러한 특성으로 디버기의 어떤 예외가 발생하면 디버거가 어떻게 처리한다는 규칙을 알아야해서 상당히 디버깅이 곤란해짐