틀린 부분이 있다면 언제든지 댓글 남겨주세요!
Debugger software BP의 원리
- Debugger: 디버깅 하는 프로그램
- Debugging: 프로그램 개발의 마지막 단계에서 프로그램의 오류를 발견하고 원인을 찾는 과정
Debugger의 Break Point에는 3가지가 있다.
Software BP, Hardware BP, Memory BP
Software Break Point는 CPU 실행을 중단하며, 제한없이 사용할 수 있다.
다만 코드를 변경하게 되므로 코드를 변경하면 안되는 경우 Hardware Break Point를 사용해야 한다. (최대 4개)
Debugger가 Debugging중 반드시 처리해야 하는 예외 중에 exception_breakpoint가 있다.
Software BreakPoint(BP)는 어셈블리어로 INT3(0xCC)인데 debugging 중 이 명령어를 만나면 실행이 중지되고 debugger에게 exception_breakpoint 예외 이벤트가 전송된다.
이 원리를 이용하여 debugger 사용시 BP를 걸고 그 부분까지 실행시키는 기능을 사용할 수 있다.
사용자가 BP를 설정하면 debugger는 현재 주소의 OPCODE의 1바이트와 주소를 BP리스트에 저장하고 그 주소의 OPCODE를 INT3(0xCC)로 변경한다.
그러면 그 주소에서 exception_breakpoint 예외가 발생되어 그 주소에 도착하면 멈추게 된다.
또한 플래그 레지스터 중 TF 레지스터의 값이 1이 된다.
TF(Trap Flag)레지스터는 한 번에 하나의 연산만 수행하고, 디버거에서 중단점을 설정한 곳에서는 1로 설정되는 역할을 한다.
다시 진행될 때 debugger는 현재의 EIP값이 BP리스트에 존재하면 이전에 저장해두었던 원래 OPCODE로 되돌린다.
직접 debugging중 BP를 걸어 확인해본다.
debugger에서 helloworld.exe파일을 열어 401536 주소에 BP를 걸었다.
ProcessExplorer 프로그램에서 해당 파일을 덤프뜬다.
BP걸기 전 해당 주소의 값은 C7 44 24 04 10 40 40 00 이다.
또한 플래그 레지스터 중 TF값이 0이다.
BP를 걸고 다시 해당 부분을 보면 C7 >> CC 로 OPCODE의 1바이트 값이 변경된 것을 확인할 수 있다.
또한 플래그 레지스터 중 TF의 값이 1이다.
* 여기서 덤프뜨고 나서 파일 주소 찾는거 어떻게 하는지 아시는 분 댓글 부탁드립니다 ㅠㅠ
즉 debugger에서 BP를 걸었을 때 다음과 같은 두가지 동작을 통해 중단점 역할을 수행한다.
1. 현재 주소의 OPCODE의 1바이트와 주소를 BP리스트에 저장하고 그 주소의 OPCODE를 INT3(0xCC)로 변경
2. TF 레지스터의 값을 1로 변경
'Security > Reversing' 카테고리의 다른 글
[CodeEngn] Challenges Basic RCE L17, L18, L19 (0) | 2021.10.14 |
---|---|
KeyLogger 분석 (0) | 2021.09.27 |
relocation과 .reloc섹션 (0) | 2021.08.28 |
[CodeEngn] Challenges Basic RCE L13, L14, L15, L16 (0) | 2021.08.22 |
[CodeEngn] Challenges Basic RCE L10, L11, L12 (0) | 2021.08.15 |
댓글