본문 바로가기

리버스엔지니어링/크랙미 풀이

CodeEngn Basic RCE L03 문제 풀이

 

코드엔진 Basic RCE L03 시작하겠습니다.

 

 

문제를 보면 비주얼베이직에서 스트링 비교함수의 이름을 물어보고 있습니다.

저는 비주얼베이직을 못하므로 다른 사람들의 블로그에서 스트링 비교함수의 이름을 찾아봤습니다.

 

바로 함수명 ㅁ 라고 합니다.

그럼 문제 끝!!!!.. 입니다만 언제나 말하듯이 문제 푸는것이 다가 아니라 리버싱 실력을 늘리기 위해서 프로그램을 분석해 보겠습니다.

 

 

프로그램을 실행해보면 이 두 창이 차례대로 나오는데요 맨 처음메시지의 이름이 Nag라고 되있는 걸로 봐서는 Nag(귀찮게하는)메시지입니다.

두번째 메시지창에는 입력창이 뜨는데요 그냥 아무것이나 집어넣으면 

라면서 패스워드가 틀렸다고 합니다.

문제에서 나오는 비주얼베이직에서 스트링비교함수를 물어보는 이유가 바로 여기서 내가 입력한 부분과 원래 패스워드를 비교하는 함수가 바로 vbaStrCmp라고 알려주는 것입니다.

그럼 바로 올리디버거로 분석을 해보겠습니다.

 

 

실제로 맨처음부분이 이렇게 짧고 어떠한 도움될만한 것도 없습니다.

바로 0040116D 주소에 있는 call <jmp.&MSVBVM50.#100>에서 부르는 함수에 모든것이 있다고 생각되는 데요 그런데 직접 들어가서 하나하나 보는것은 문자열비교함수를 알고있는 현재 상태에서는    귀찮고... 시간낭비라고 생각합니다.

그러므로 저희는 바로 문자열비교함수로 넘어가도록 하겠습니다.

 

올리디버거는 매우 유용하게도 프로그램이 사용하는 함수들을 바로 검색할수 있게 하는데요 바로 그 창이 이 All intermodular calls에 있습니다.

실제로 들어가보면

이렇게 많은 함수들이 뜨는데요 저희들이 찾는 함수는 vbaStrCmp함수이므로 이 함수들이 사용되는 곳에 브레이크포인트(F2)를 걸고 바로 그곳으로 넘어가겠습니다.

프로그램을 브레이크포인트, 프로그램종료부분에서만 걸리게 실행하는 방법은 F9키를 눌러서 이용합니다.

 

넘어가면 이런 곳에서 멈추는데요 vbaStrCmp 자체가 어떠한 두개의 문자열을 서로 비교하는 것이기 때문에 저는 바로 위에 두 줄에서 그 두개의 문자열을 알려주기 때문에 vbaStrCmp함수와 그 위의 두줄이 중요하다고 생각되서 사진을 이렇게 짤랐습니다.

이 세 줄을 분석하면요

004028BA push dword ptr ss:[ebp-58]                         //ebp-58부분의 dword크기를 push

004028BD push A2DC1DEA.00401DDC                          //2G83G35Hs2를 push

004028C2 call <jmp.&MSVBVM50._vbaStrCmp>            //이 두개를 비교

이렇게 나옵니다.

그럼 ebp-58과 2G83G35Hs2가 각각 어떤것인지 알아보기 위해 004028BA주소에다가 브레이크포인트를 걸고 프로그램을 다시 시작해주세요.

올리디버거에서 다시 분석하는 방법은 Ctrl+F2키 또는 좌측상단에 있는 되돌리기 표시버튼을 누르시면 됩니다.

이번에는 코드안에 자신이 알아볼수 있는 특이한 문자를 써넣으셔야 하는데요 저는 제 닉네임인 indosm을 코드로 써보았습니다.

 

코드를 입력하시면 저와 같이 004028BA주소에서 멈추실 텐데요 맨 밑에 써있는 글을 보시면 바로 stack에 UNICODE형태의 Indosm이 저장되있다고 써있습니다.

그럼 이제 이 004028BA부터 004028C2의 세 줄을 분석할수 있는데요 바로 그 뜻은

004028BA : 자신이 입력한 코드(A)를 스택에 push하고

004028BD : 패스워드(2G83G35Hs2)를 스택에 push한다음

004028C2 : A와 2G83G35Hs2를 비교한다음 같으면 성공표시, 틀리면 실패표시가 뜨도록 값을 리턴합니다.

 

그럼 실제로 코드에다가 패스워드를 입력하면 이렇게 성공표시가 뜨면서 크랙을 성공했습니다.!!

 

※참고로 이 패스워드는 절대로 코드엔진 문제의 답은 아닙니다.

※문제를 정확히 보시면 비주얼스튜디오에서 쓰이는 문자열비교함수의 이름을 물어보고 있습니다.