리버싱/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으로 바꿔주면
이렇게 뜬다!