리버싱/CodeEngn

basic RCE 04

육키티 2025. 1. 26. 05:11

내부 스터디 준비하면서 풀어야 하는 문제 

이걸 풀기 위해서는 먼저 안티 디버깅을 알아야 한다. 

여기서 쓰인 안티 디버깅이 뭔지부터 파악해보자 

 

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

 

디버거에서 실행해봤더니 아니나 다를까 이렇게 문자열이 출력된다. 

ida로 열었더니 이부분이 딱 보인다. 저 함수는 대표적인 안티 디버깅 방법 중 하나이다. 

 

구글링에서 찾은 해당 함수 그대로 인용하자면.. https://iforint.tistory.com/52

가장 간단한 디버거 탐지 윈도우 API 함수이다. 

이 함수는 PEB 구조에서 IsDebugged 필드를 찾아 디버그가 동작 중인지 판단하여 동작 중이 아니라면 0, 동작 중이라면 0이 아닌 값을 반환한다. 

그럼 PEB란? -> process environment block이다. 프로세스 관련 환경 정보들을 담고 있다(운체에서 배운다) 

fs 레지스터가 이 PEB를 가리킬 수 있다. FS:[0x30]가 PEB 시작 위치(참고로 offset 0은 TEB 시작 위치이다) 

수많은(은아닌가) 환경 정보들 중에 IsDebugged가 있는데 해당 함수는 이 필드를 검사한다. 

 

우회하는 방법은 

일단 bp 걸어주고 

f8 누르면 반환값이 0이 아닌 값일 텐데 

space 바를 눌러서 0으로 바꿔주면 

이렇게 뜬다!