CodeEngn

CodeEngn.com Basic RCE L04

レ(゚∀゚;)ヘ=З=З=З 2023. 12. 21. 12:16
728x90

1) 디버거 프로그램을 탐지하는 함수의 이름을 알아내는 문제

2) 실행 시 정상 문자열이 반복해서 출력

3) 올리디버거를 통해 실행 시 디버깅 당함 문자열 출력
4) 디버거를 감지하는 함수가 있다고 예상

5) 함수들 확인 - IsDebuggerPresent 함수

더보기

IsDebuggerPresent() 함수

 : 해당 프로세스가 디버깅을 당하고 있는지의 여부를 PEB구조체의 디버깅 상태값을 확인한다고 한다. 만약 디버깅을 당하면 리턴 값이 1이고 아닐 경우에는 리턴 값이 0이 된다. 

6) 우회 없이 실행 - PEB에서 BeingDebugged byte값을 리턴받는 EAX가 00000001로 변경되는 것을 확인
7) IsDebuggerPresent() 함수 우회 방법
- IsDebuggerPresent API함수에 break를 걸고 리턴값인 EAX를 0으로 변경
- IsDebuggerPresent API함수 자체를 mov eax, 0으로 변경
- PEB.BeingDebugged 값 자체를 0으로 변경
이 중 첫 번째 방법으로 우회 진행

8) 우회하기 위해 CMP하는 부분에 Breakpoint

9) EAX값을 00000000으로 설정해서 디버깅을 당하지 않는 것으로 인식해 통과할 수 있도록 변경

10) EAX값을 설정해주고 나서 실행 시 정상 문자열이 뜨는 것 확인
11) 한 번 할 때마다 EAX값이 00000001로 다시 변경되어서 매번 실행할 때마다 다시 EAX값을 0으로 설정해줘야함
12) 해당 과정을 통해 IsDebuggerPresent()함수가 디버거 프로그램을 탐지하는 함수라는 것을 확정

'CodeEngn' 카테고리의 다른 글

CodeEngn.com Basic RCE L09  (0) 2023.12.22
CodeEngn.com Basic RCE L08  (0) 2023.12.22
CodeEngn.com Basic RCE L06  (0) 2023.12.21
CodeEngn.com Basic RCE L05  (0) 2023.12.21
CodeEngn.com Basic RCE L02  (0) 2023.12.21