ìê° ê¸°ë° í¤ ìì± ë°©ìì ì´ì©í ìí° ëë²ê¹ ê¸°ë² - SERSC
ìê° ê¸°ë° í¤ ìì± ë°©ìì ì´ì©í ìí° ëë²ê¹ ê¸°ë² - SERSC
ìê° ê¸°ë° í¤ ìì± ë°©ìì ì´ì©í ìí° ëë²ê¹ ê¸°ë² - SERSC
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
시간 기반 키 생성 방식을 이용한 안티 디버깅 기법<br />
2.1.3 시간 기반 탐지<br />
지시된 명령의 실행 시간과 정상적인 실행 시간과 비교하는 기술이다. 디버거 안에서 프로그램<br />
이 실행되거나 단일 스태핑이 일어날 때, 명령의 실행 사이의 지연시간이 커지게 된다. 그 실행 시<br />
간 사이의 차가 임계점 범위 내에 있는지 검사한다.<br />
2.2 코드 암호화 기법<br />
일반 적인 암호화 방식은 프로그램 전체를 암호화 하여 저장하고 복호화 루틴은 프로그램의 엔<br />
트리 포인트처럼 암호화된 바디와 셋에 보통 추가되어진다. 암호화된 프로그램은 한 비트를 변조<br />
하면 한 비트 이상이 변하게 되므로 정적분석을 통한 취약점을 찾기 어렵다. 하지만 복호화 할 때<br />
코드 전체가 동시에 복호화 되어서 공격자는 디버거를 통해 복호화 되는 순간 기억장치 영역을 내<br />
용만 가져오면 된다. 요구 시(On-demand) 암호화 방식은 프로그램 실행 시 프로그램 전체가 노출<br />
되는 것을 막기 위해서 고안되었다. 일반적인 암호화 방법과 다르게 프로세스 실행 시 필요만 부<br />
분만 복호화 하해서 실행한 후 다시 암호화 된다[10].<br />
요구 시(On-demand) 복호화 방식을 이용한 자가 변조 코드 암호화 기법[5]은 b영역을 암호화<br />
하기 위해서 b의 영역이 아닌 a영역을 해시함수를 통해 키 값을 생성해서 그 키 값으로 암호화 하<br />
는 방식이다. 코드 영역 b를 암호화 할 때 영역 b가 아닌 다른 영역 a에서 해시함수를 통해 키를<br />
생성해서 암호화해서 저장한다. a부분이 변조되면 해시 값이 변하게 되어 무결성이 보장되고 암호<br />
화된 영역은 기밀성이 보장 된다.<br />
[그림 1] 자가 변조 코드 암호화 기법<br />
[Fig. 1] Tamper resistant code encryption<br />
[그림 1]은 자가 변조 코드 암호화 기법의 실행 과정이다. 암호화된 영역 를 복호화 하<br />
기 위해 다른 영역인 a영역의 해시함수 값을 이용해 복호화 키 를 구한다. 복호화 키 <br />
294