Basic RCE L04

hoon·2023년 5월 22일
0

CodeEngn

목록 보기
4/21

문제

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

프로그램을 실행하면 다음과 같이 정상이라는 문자열이 일정 초마다 나온다.

WinDbg를 사용해서 해당 프로그램을 디버깅을 하면 다음과 같은 화면이 나온다.

IDA 분석


IsDebuggerPresent() 라는 함수를 한 눈에 확인할 수 있으며 0x3E8 = 1000ms = 1s 를 기다리고 문자열을 출력하는 프로그램임을 알 수 있다.

WinDbg 에서 확인

lm 명령어를 통해 로드된 모듈을 확인할 수 있고 IsDebuggerPresent가 보이는 것을 알 수 있다.

https://learn.microsoft.com/ko-kr/windows/win32/api/debugapi/nf-debugapi-isdebuggerpresent 를 보면 IsDebuggerPresent함수에 대해서 알 수 있다.

IsDebuggerPresent 동작 원리

IsDebuggerPresent에 breakpoint를 걸고 해당 함수를 따라가면 다음과 같다.

32비트 윈도우의 유저 모드 기준으로 FS 레지스터는 TEB(Thread Environment Block) 또는 TIB(Thread Information Block)이라고 불리는 구조체를 가리키는데 FS:[30] 은 TEB의 0x30에 있는 것, PEB을 가리킨다.

코드 동작을 보면 eax에 PEB주소를 넣고 eax+2부분을 가리키니 PEB+2를 가리킨다고 보면 된다.
해당 부분은 BeingDebugged라는 값이고 이 부분이 1로 설정되어 있으니 디버깅 중이라고 판단하는 것이다. 디버깅 중이 아니라면 해당 값은 0이 된다.

0개의 댓글