Break Point(브레이크 포인트)란?
프로그램을 실행하는 도중에 유저가 필요한 시점에서 프로그램을 일시정지 시키는 역할.
디버깅 기법 중 하나.
소프트웨어 브레이크 포인트
명령을 실행하는 CPU를 일시 중지, 한 바이트 명령어를 사용해 디버깅 대상 프로세스의 실행을 중지
보통 어플리케이션을 디버깅할 때 사용되는 브레이크 포인트, 일반적
코드 : 0xCC, INT 3
동작방법
1. 현재 주소의 opcode를 뽑아서 브레이크 포인터 테이블에 저장
2. opcode를 0xCC로 교체
3. 명령어 실행
4. 원래의 opcode로 돌려놓음
종류
- 일회성 브레이크 포인트 : 브레이크 포인트 리스트에 정보가 들어가고 브레이크가 수행되고 나면 리스트에서 정보가 제거된다.
- 지속적 브레이크 포인트 : 리스트에 정보가 계속 유지된다.
단점 : 메모리상의 실행 바이너리의 바이트를 변경하기 때문에 CRC값이 변경됨 (악성코드 분석이 어려움)
※ CRC(Cyclic Redundancy Code) : 순환 중복 검사. 오류가 있는지 확인하기 위한 체크값을 결정하는 방식.
하드웨어 브레이크 포인트
CPU 레벨에서 디버그 레지스트를 사용하여 브레이크 포인트를 설정
설정할 브레이크 포인트 갯수가 적을 때, 디버깅 할 소프트웨어의 코드가 변경되면 안될 때 사용
코드 : INT 1, single step instruction(각 명령을 하나씩만 실행, 정밀 분석 가능)
종류
- DR0 ~ DR3 : 브레이크 포인트 주소 저장
- DR4 ~ DR5 : Reserved DR
- DR6 : 브레이크 포인트에 의해 발생된 정보(디버깅 이벤트의 종류) 저장하는 디버깅 상태 레지스트
- DR7 : 하드웨어 브레이크 포인트 스위치 역할, 서로 다른 브레이크 포인트의 조건 또한 저장
단점 : 갯수가 부족(DR0 ~ DR3), 데이터 크기가 4바이트까지만 저장 가능(큰 메모리 영역에 접근 어려움)
메모리 브레이크 포인트
정확히는 브레이크 포인트는 아니고, 하나의 분석 방법
실행되는 어떤 코드도 변경하지 않으며 특정 메모리를 주시하거나 분리할 수 있다는 장점을 가짐
운영체제에서는 메모리를 할당하면 해당 메모리에 대해 기본적으로 쓰기, 읽기, 실행 권한을 부여, 추가적으로 보호 권한이 있는데 해당 페이지에 접근이 일어날 경우 Exception을 발생시켜 접근으로부터 보호하는 권한임
큰 메모리 영역에 접근한 후 분석을 하기 위해 사용
보호 권한을 이용해서 특정 메모리를 주시하여 접근 확인을 통해 프로세스를 중지하거나 메모리 영역의 필요 이상의 할당을 확인하는데 유용
동작 방법
1. 특정 메모리에 메모리 브레이크 포인트를 설정
2. 특정 메모리의 권한이 변경되어 보호 권한이 설정됨
3. 메모리에 대한 접근이 발생했을 경우 CPU에서 보호 페이지 디버그 예외처리를 발생시킴
4. 해당 디버그를 통해 메모리 분석
단점 : 디버거가 항상 그 프로세스의 메모리에 대한 접근을 필요로 하기 때문에 디버거의 처리속도가 늦어지게 됨
'Study > Reversing' 카테고리의 다른 글
[리버싱] API에 대해 알아보자 (0) | 2017.08.24 |
---|---|
[리버싱] hello world 문자열 패치 (0) | 2017.08.24 |
[리버싱] 리틀 엔디언&빅 엔디언 (0) | 2017.08.23 |
[리버싱] 레지스터에 대해 알아보자 (0) | 2017.08.23 |
[리버싱] 어셈블리어 명령어 (0) | 2017.08.22 |
댓글