문제 : 비주얼베이직에서 스트링 비교함수 이름은?

 

실행파일을 실행해 본다.

여기에 Regcode 부분에 문자열을 아무거나 입력해본다.

이렇게 출력된다.

 

아마 프로그램에 내장된 어떤 문자열과 사용자가 입력한 문자열을 비교해서 인증하는 방식으로 추측할 수 있다.

 

이 프로그램을 STUD_PE로 열어보자.

우선, EP(Entry Point)는 ImageBase + EntryPoint(rva) = 00401168임을 알 수 있다.

UPX 패킹은 되어있지 않고,

MSVBVM50.dll 을 사용하는 것으로 보아 Visual Basic 프로그램임을 알 수 있다.

 

이제 Olly-Dbg로 열어보자.

STUD_PE에서 본 것처럼 EP는 00401168이다.

 

보통 VB 프로그램은 진짜 main 부분이 나오기 전에 쓸모없는 코드(프로그램이 필요로 하는 라이브러리 로딩 등)가 앞에 존재한다고 알고있다.

 

그러므로 우리는 문자열 비교함수의 이름을 알기위해 해당 함수를 찾아보아야 한다.

 

디버거의 Code 부분에서 우클릭 > Search for > All intermodular calls 로 들어가면

프로그램이 사용하는 함수들의 이름을 목록으로 볼 수 있다.

이 프로그램이 사용하는 전체 함수 이름이다.

 

이 목록은 Address 정렬되어있는 상태이므로, 위에서부터 차례대로 실행된다고 볼 수 있다.

 

아래로 한줄한줄 찾다보면 눈에띄는 함수가 하나 보이는데

 

MSVBVM50.__vbaStrCmp

이다.

 

왠지 이 부분에서 문자열(Str, string) 비교(Cmp, Compare)가 이루어 질 것 같다.

 

해당 함수 이름을 더블클릭하면 위치로 이동할 수 있다.

이런 화면을 볼 수 있음.

함수가 위치한 주소는 0040114A이다.

 

이제 위에서 사용자가 입력한 문자열을 입력받고, 프로그램에 적혀있는 정답 문자열을 입력받고

이 두개를 파라미터로 사용하여 0040114A로 넘겨 vbaStrCmp 함수를 실행할 것이다.

 

이 위치에서 스크롤을 올려보면

이렇게 나와있다.

우리는 0040114A 함수를 호출해주는 004028C2에 BP를 걸고 프로그램을 돌려 볼 필요가 있다.

 

BP를 걸고 F9로 프로그램을 실행시켜 보면

프로그램이 실행되고,

이 프로그램에서 Regcode에 아무 문자열이나 입력한 후에 Registreieren을 클릭하자.

난 asdasdads를 입력했다.

 

그러면 우리가 BP를 걸었던 위치까지 프로그램이 실행된다.

 

디버깅을 할때, 혹은 어셈블리를 할때 함수를 실행할려면?

 

그 함수에 들어가는 인자값을 받아야 한다.(물론 필요없는 함수도 있지만 vbaStrCmp같은 함수는 필요함.)

 

그 함수는 보통 Stack에 들어간다.

지금 함수가 실행되기 직전의 Stack을 살펴보면(우측 하단)

맨 위에 어떤 문자열이 있고, 그 다음 줄에 내가 입력한 asdasdads 문자열이 들어가 있다.

 

바로, vbaStrCmp 함수가 함수 실행에 필요한 문자열을 인자로 저장한 과정이다.

 

여기서 우리는 2G83G35Hs2 문자열과 사용자가 입력한 문자열 두개를 비교한다는 것을 알 수 있다.

 

그럼 예상 정답을 알았으니, 디버거를 끄고 프로그램을 일반적인 상태로 실행해보자.

Regcode 부분에 예상 정답을 입력한다.

 

만약 2G83G35Hs2 문자열이 정답이라면?

1. vbaStrCmp 함수가 문자열 비교함수의 이름이 맞음.

2. 위의 함수의 비교 대상이 되는 문자열(비밀번호)은 2G83G35Hs2 이다.

 

이 두개를 알 수 있다.

Registrieren 버튼을 클릭하니, 오류 메시지 대신 정답 메시지가 출력된다.

 

궁금해서 추가로 해본 것은, RCE L02처럼 Hex Editor에서 위의 문자열을 찾아낼 수 있는가였다.

해당 프로그램을 Hex Editor로 열어보면

이렇게 문자열을 찾을 수 있다.

2번 문제와 마찬가지로 정답 시 출력하는 문자열 근처에서 찾을 수 있었다.

(Danke, das Passwort ist richtig!)

 

그리고 위처럼 Hex Editor 에서도 vbaStrCmp 함수의 존재를 찾을 수 있었다.

'보안 & 모의해킹 > CodeEngn' 카테고리의 다른 글

[CodeEngn] Basic RCE L04 풀이  (0) 2019.07.01
[CodeEngn] Basic RCE L02 풀이  (0) 2019.07.01
[CodeEngn] Basic RCE L01 풀이  (0) 2019.07.01
Posted by NDC :