디버거 : CheatEngine , x64dbg
분석환경 : Window 10

해당 프로그램은 디버깅을 탐지하는 안티 디버깅 코드가 있다.
안티 디버깅이란 디버깅을 방지하고 분석하는것을 방해하기 위한 기술이라 볼 수 있다.
해당 프로그램을 그냥 실행해보면

정상이라는 문자가 출력되지만
해당 프로그램을 디버거로 붙여보면

디버깅 당함 이라는 문구가 출력된다.
어딘가 코드에서 디버깅을 감지하는 안티 디버깅 코드가 있을거로 추정된다.
문자열을 추적하여 해당 주소를 우선 찾아준다.

KERNELBASE.IsDebuggerPresent() 라는 함수가 보인다.
해당 함수를 구글에서 검색해보면

역시나 디버깅 동작을 감지하는 함수이고 반환값은 디버깅중일시 0이 아니라고 나와있다.

breakpoint(중단점)을 걸어 반환 값을 확인해보면 1이라는 값이 담기는걸 확인 할수 있다.
후에 test eax,eax 코드로 eax 값이 0인지 확인후 분기가 진행된다.
이제 해결할수 있는 방법이 대략 3가지로 나눠진다.
1. IsDebuggerPresent() 함수 프롤로그를 ret으로 패치하여 아무것도 동작하지 않도록 한다.
2. IsDebuggerPresent() 반환값을 0으로 바꿔준다.
3. 분기문을 무조건 성공문으로 갈 수 있도록 패치해준다.

이로 안티 디버깅 코드 우회를 성공했다.
'Reversing > CTF' 카테고리의 다른 글
| CodeEngn Basic RCE 06 문제 풀이 (0) | 2022.05.07 |
|---|---|
| CodeEngn Basic RCE 05 문제 풀이 (0) | 2022.05.07 |
| CodeEngn Basic RCE 03 문제 풀이 (0) | 2022.05.07 |
| CodeEngn Basic RCE 02 문제 풀이 (0) | 2022.05.07 |
| CodeEngn Basic RCE 01 문제 풀이 (0) | 2022.05.07 |