본문 바로가기

모의해킹/리버싱

안티디버깅 Exception과 중요한 API 정보 확인 : 레나 챌린지(Level13)

728x90

이번 문제도 레지스터를 등록하는 문제이다.

 

• 정적 분석

visual C++ 6.0에서 컴파일된 프로그램이다.

 

• 분석 시작

현재 프로그램은 안티디버깅 옵션이 걸려있어 올리디버그에서 실행을 시키면 Exception에 걸려서 실행이 안된다.

그렇기 때문에 올리디버그 옵션에서 예외처리를 설정해줘야 한다.

 

레지스터 등록 실패 메시지가 실행된 상태에서 메인 스레드의 Call Stack,에 가면 호출되어진 것이 스택에 쌓인 걸 볼 수 있다.

 

스택을 확인해 보자.

해당 위치에서 MessageBoxA를 호출했다는 걸 확인

브레이크 포인트를 걸어 레지스터 실패 메시지가 출력이 되게 다시 실행한다.

그다음 스택을 보면 004174B1으로 반환을 한다.

004174B1으로 이동을 하면 004174 AC에서 MessageBoxA가 호출이 되는 걸 확인할 수 있다.

위 주소를 살펴보면 "XoftSpy", "Invalid code" 메시지가 보인다(레지스터 실패 메시지) 

 

분기점 근처를 보니 00417495 주소에서는 Linsence check 하는 부분에서 확인 후 분기점을 통과할지 안 할지 결정한다.

 

Linsence check 하는 부분에 들어가 하나씩 실행(반환이 되는 부분을 찾아야 한다)을 시키다 보면 XOR AL, AL 은 초기화 시키기 때문에 EAX가 결국 0이 반환이 된다. 그렇기 때문에 EAX가 1이 되도록 수정을 해준다. mov AL, 1로 수정 

 

라이선스가 정상적으로 등록이 되었다는 메시지를 볼 수 있다.

 

정상적으로 라이센스가 등록이 된 줄 알았는데,,, 안되었다.. 또 다른 루틴이 있는 거 같다.

 

문자열 검색을 통해 위치로 이동을 해준다.

분기점과 검사를 하는 위치를 찾을 수 있다.

 

호출하는 위치에 들어가 보면 BL ->  AL을 EAX에다가 최종적으로 변환하고 리넡해주는곳을 볼 수 있다.

 

BL을 보니 EAX에 0이 들어가 있다. 그렇기 때문에 0 이 아닌 1로 수정을 해줘야 한다.

mov AL, 1로 수정한다.

 

정상적으로 등록이 되면서 라이선스 등록하는 버튼도 사라진다.