우선 문제는 다음과 같다.

문제 파일을 실행하면 다음과 같은 화면이 나온다.

확인을 누르면 아래와 같이 프로그램이 켜진다.

아무 값이나 입력 하고 Registrie..라는 버튼을 누르면 다음과 같이 오류창이 뜬다.

문제에서 비주얼베이직에서 스트링 비교함수 이름이 뭐냐고 물어봤으니 아마도 저 등록코드 값을 사용자가 입력한 값과 비교하는 구문을 찾으면 될것 같다.
x32dbg로 열어서 OEP로 가보자.

위와 같이 ThunRTMain이라는 함수를 호출 하는 구문이 있다.
아마 저 함수를 호출하면 프로그램이 실행이 되는 것 같다.
하지만 저 코드를 디버깅 해보면 외부함수를 호출하는 구문이 많아서 디버깅하기가 힘들다.
나는 여기서 이 화면에 나온 문자열을 검색해서 코드를 찾아갔다.

아무 값이나 입력했을때 오류창에 떴던 글자를 찾았다.

그러면 이 구문으로 넘어오게 되는 분기문을 찾아보면 된다.
코드를 잘 보면 00402A2F지점에 vbaStrcmp라는 함수가 보인다. C언어의 strcmp와 이름이 비슷한걸로 봐서 문자열을 비교하는 함수일 것으로 예상된다. 해당 구문에 bp를 걸고 디버깅을 해보면

ebp-58주소에 내가 막 입력한 글자가 보이고 2G83G35Hs2라는 문자가 보인다. 각각의 값을 매개변수로 push한후 vbaStrCmp를 호출한다.
vbaStrCmp이후 EAX의 값을 확인하면 값은 1이다.
c언어에서 strcmp의 반환값을 생각해보면 값이 같을때가 0이므로 값이 서로 다르다는 의미를 반환한것 같다.
이 후 구문을 살펴보면

우리가 봤던 에러 문장이 보이고 마지막줄에 보면 rtcMsgBox함수를 이용해 우리가 본 메시지 박스를 띄운다.
여기까지 봤을때 바로 예상되는 부분은 2G83G35Hs2 이 값이 regcode일 것이고 비주얼 베이직에서 문자열 비교함수의 이름은 vbaStrCmp일것이다. 그리고 이 코드를 위로 쭉 올려보면 비슷한 형식의 코드가 또 존재한다.

여기서도 2G83G35Hs2값과 내가 입력한 값을 비교후 아래 rtcMsgBox를 호출하는 구문이 있다.
대신 중간에는 아까와는 다른 문장이 보인다. 아마도 여기가 성공 구문을 띄우는 메시지 박스 호출 구문인것 같다.
그래서 아무튼 2G83G35Hs2 를 입력후 버튼을 누르면 성공적으로 뜬다.

그럼 이 문제의 정답은 vbaStrCmp이고 인증코드는 2G83G35Hs2 인걸 알 수 있다.
이 문제는 비주얼 베이직으로 작성된 프로그램을 디버깅하는 방법과 원하는 로직을 찾기 위해 문자열 참조를 이용하는 스킬을 배우는 목적인것 같다.