[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가 적용되지 않은 고정된 바이너리의 주소를 찾아서 점프해야 한다.
'Programming' 카테고리의 다른 글
[C/C++] extern "C"와 네임 맹글링 (5) | 2019.03.29 |
---|---|
Python + selenium을 이용한 네이버 메일 크롤러 (3) | 2018.09.07 |
[Python] PyV8을 이용한 Javascript 분석 (3) | 2018.04.27 |
[Python] 멀티프로세싱 환경에서의 logging doRollOver() Error 32 해결법 (0) | 2018.04.09 |
[Python] 데코레이터(Decorator)의 이해 (0) | 2018.03.11 |