Information security

[Code Engn] 4. Basic RCE L04

Hackster 2023. 5. 16. 10:16

 

[Code Engn] 4. Basic RCE L04

 

 

문제

이 프로그램은 디버거 프로그램을 탐지하는 기능을 갖고 있다. 디버거를 탐지하는 함수의 이름은 무엇인가?

답 : ‘IsDebuggerPresent’

 

문제 풀이

Step 1. 실행 파일 다운로드 및 실행하여 확인해보기

 

Step 2. 디버거 프로그램을 사용하여 실행했더니 ‘디버깅 당함’이라는 문자열이 출력됨

  • F8로 하나씩 실행해보다보니 특정 호출 부분에서 걸리면서 ‘디버깅 당함’이라는 문자열이 출력됨을 확인하였음 → 문자열 참조를 확인하여 해당 부분의 엔트리 포인트를 확인한다.
  • F2로 BreakPoint를 걸고 [프로그램 다시시작]을 눌러서 다시 실행해본다.
  • 다시 실행하여 BreakPoint 걸린 부분까지 온 것을 확인할 수 있다.

 

💡
1. test eax, eax → and 연산과 비슷하여 둘 다 참이면 ==1 참을 출력한다.

얼핏보면 같은 레지스터끼리 AND연산하면 EAX값이 나올텐데 왜 하는걸까라는 생각을 할 수 있다. 하지만 바로 위에 쓰인 TEST명령어는 단지 EAX의 값이 0이냐 아니냐를 판단하기 위해서다.

2. and eax, eax 와 다른점은? and 연산은 2번째 eax의 값을 1번째 eax와 비교 후 저장까지 진행한다.

test 연산비교 후 저장하지 않고 그냥 버린다.

 

Step 3. 함수 목록 확인 및 ‘IsDebuggerPresent’ 함수 확인하여 PEB 구조체의 디버깅 상태 값을 확인하여 디버깅을 당하고 있다면 1을, 아닐 경우에는 0을 리턴하는 함수이다.

-> 따라서 리턴값을 0으로 수정하면 ‘정상’ 문자열을 확인할 수 있다.