Try Attack/Reverse Engineering[basic]

BreakPoint

D4tai1 2018. 12. 28.

1. 브레이크포인트

▶ 브레이크포인트에는 하드웨어 브레이크포인트와 소프트웨어 브레이크포인트가 있다.


1) 소프트웨어 브레이크포인트

 [1] 정의

  ▶ 실행동작에 브레이크포인트를 설정하는 것을 말한다.

  ▶ 기계어 'CC'로 표현하며 명령어는 'int 3'으로 표현한다.

  ▶ 브레이크포인트를 설정한 명령어의 앞 1바이트가 'CC'로 대체된다.

  ▶ 순차적으로 실행하다가 명령어 앞의 바이트가 'CC'로 되어있으면 인터럽트를 발생시킨다.

  ▶ 이 때 운영체제는 실행에 대한 제어권을 인터럽트 핸들러에 넘긴다.

  ▶ 인터럽트 핸들러는 인터럽트를 설정할 때 같이 등록한 인터럽트 서브루틴을 호출한다.

  ▶ 보통 올리디버거나 이뮤니티디버거에서는 F2로 브레이크포인트를 설정할 수 있다.

  ▶ 우리가 흔히 알고 사용하는 브레이크포인트가 소프트웨어 브레이크포인트이다.


2) 하드웨어 브레이크포인트

 [1] 정의

  ▶ 소프트웨어 브레이크포인트와 달리 명령어가 변경되는 것이 아니다.

  ▶ 프로세서에서 디버거를 위해 제공하는 특별한 레지스터가 있다.

  ▶ 이것이 디버거 레지스터(DR0 ~ DR7)이다.

  ▶ 이 중에서 DR0~DR3가 하드웨어 브레이크포인트에 사용된다.

  ▶ 디버거 레지스터에 브레이크포인트를 설정할 주소를 입력한다.

  ▶ 실제로 하드웨어 브레이크포인트를 걸어놓으면 그 주소가 호출되서 사용될 때 브레이크포인트가 걸린다.


3) 시연

  ▶ 시연은 lenatutorial20으로 진행하려고 한다.



  ▶ 사전에 확인한 내용은 이 프로그램은 ezip으로 패킹되었다.


 [1] 시작

  ▶ 시작 후 점프해서 보이는 이곳은 함수의 프롤로그로 보인다.

  ▶ 이 부분을 브레이크포인트로 잡은 이유는 함수의 프롤로그이기 때문이다.

  ▶ Packing되어있다는 것은 어디선가 메모리 내에 Unpacking할 것이라는 것이 내포되어 있다.

  ▶ 그렇다면 함수가 시작되었고 Unpacking할 것이고 어디선가 함수가 종료될 것이다.

  ▶ Unpacking 후 OEP로 점프할 것 같다.

  ▶ 패커를 잘 모르기 때문에 직접 풀어보면서 OEP를 찾아야 새로 덤프를 생성할 수 있다.

  ▶ 에필로그에서 다시 스택을 정리할 것이다..

  ▶ 그렇다면 우리는 스택포인터에 하드웨어 브레이크포인트를 걸어보면 좋을 듯 싶다.

  ▶ 함수 종료 시점에서 멈출 것이고 jmp문을 살펴보면 OEP로 예상되는 것을 찾을 수 있기 때문이다.


 [2] 스택포인터의 위치

  ▶ 현재 스택포인터의 위치는 0x0019FF80이다.


 [3] 이동

  ▶ 메모리덤프에서 [Ctrl+G]를 누른다.


 [4] 이동위치 확인

  ▶ 스택포인터의 위치를 적고 그 곳으로 이동한다.


 [5] 하드웨어 브레이크포인트

  ▶ 0x19FF80에서 [우클릭 - 브레이크포인트 - 하드웨어]를 선택한다.


 [6] 하드웨어 브레이크포인트 설정

  ▶ 한 바이트를 해도 좋지만 주소이기 때문에 4바이트를 Access할 경우로 선택해도 좋다.


 [7] 실행

  ▶ F9를 누르면 다음 브레이크포인트까지 실행된다.

  ▶ [JMP EAX]가 보인다.

  ▶ 이 때 EAX의 내용을 확인해보니 0x4271B0이다.


 [8] 이동

  ▶ [Ctrl+G]를 누르고 EAX에 있는 0x4271B0를 적고 이동한다.


 [9] OEP확인

  ▶ 실제로 여기부분이 OEP로 확인된다.


 [10] 덤프생성

  ▶ OllyDumpEx 플러그인을 설치 후 실행한다.


 [11] OEP 작성

  ▶ EP 새로 작성 후 Dump를 눌러서 생성한다.

'Try Attack > Reverse Engineering[basic]' 카테고리의 다른 글

[codegate_2017] angrybird  (0) 2019.04.08
[csaw CTF 2015] wyvern  (0) 2019.04.08
Packing/Unpacking  (0) 2018.12.19
Code Caving  (0) 2018.12.18
[crackme5] abex' 5th crackme 풀이 및 복원  (0) 2018.11.16

댓글