[GS (Stack Canary/Cookie) 해제법]


 프로젝트 속성 -> C/C++ -> 코드 생성 -> 보안 검사 -> 보안 검사 사용 안 함(/GS-) 으로 변경.

함수 프롤로그 이후 스택에 버퍼 할당 전에 랜덤한 값을 Push해 두고, 함수 에필로그 직전에 검사하여 변조되었는지 체크하는 보호 기법. 보통 윈도우에서는 GS 또는 Stack Cookie라고 불리고 리눅스에서는 Stack Canary라고 불리지만 그거나 그거나이므로 넘어가자.



[DEP(NX) 해제법]


 프로젝트 속성 -> 링커 -> 고급 -> DEP(데이터 실행 방지) -> 아니요(/NXCOMPAT:NO) 로 변경.

각 페이지마다 Read/Write/Execute 권한 플래그를 설정하여 Write/Execute 권한을 동시에 주지 않는 보호 기법. 간단하면서도 강력한 기법.


[ASLR 해제법]


 프로젝트 속성 -> 링커 -> 고급 -> 임의 기준 주소 -> 아니요(/DYNAMICBASE:NO) 로 변경.

매핑된 바이너리 및 DLL 주소, 버전에 따라서는 힙, 스택, PEB, TEB까지 프로그램 실행 시마다 랜덤하게 변환해버리는 보호 기법. 높은 버전에서는 메모리 릭을 통해서 주소를 찾거나 고정된 DLL 주소를 찾지 않으면 주소값을 사용할 수 없기 때문에 골치아픈 보호 기법이다.



[SafeSEH 해제법]


 프로젝트 속성 -> 링커 -> 명령줄 -> 추가 옵션(D) -> /SAFESEH:NO 추가 작성.

SEH가 가리키는 주소가 스택이거나, MS Library이지만 핸들러로 등록된 주소가 아닐 경우, 혹은 SafeSEH가 적용된 모듈의 주소일 경우 탐지하여 실행되지 않게 하는 보호 기법. 이 보호 기법을 우회하고 SEH Overwrite를 하기 위해서는 SafeSEH가 적용되지 않은 고정된 바이너리의 주소를 찾아서 점프해야 한다.

블로그 이미지

__미니__

E-mail : skyclad0x7b7@gmail.com 나와 계약해서 슈퍼 하-카가 되어 주지 않을래?

댓글을 달아 주세요