
이번 문제도 레지스터를 등록하는 문제이다.
• 정적 분석

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로 수정한다.

정상적으로 등록이 되면서 라이선스 등록하는 버튼도 사라진다.
'모의해킹 > 리버싱' 카테고리의 다른 글
인라인 패치를 할 때 고려해야 하는 것들 : 레나 챌린지(Level 15) (0) | 2023.09.25 |
---|---|
올리디버거를 사용한 인라인 패치 : 레나 챌린지 (Level 14) (0) | 2023.09.25 |
난독화의 시작 (델파이 프로그램) : 레나 챌린지 (Level 12) (0) | 2023.09.23 |
파라미터로 라이센스 루틴 추적 : 레나 챌린지 (Level 11) (0) | 2023.09.20 |
비주얼베이직(VB) GUI 디컴파일 분석 : 레나 챌린지 (Level 10) (0) | 2023.09.17 |