Reversing/Reversing2017. 7. 3. 03:53

Lena’s Reversing for Newbies


항상 그랬던 것처럼 먼저 프로그램을 실행해보자.


쓸데없는 잡담들 다 갖다 치우고 올바른 Registration Code를 찾으라고 한다. 확인을 눌러봤다.


Registration Code를 입력하는 창인 것 같다. Register Me! 버튼을 입력하면 맞는지 아닌지 확인해줄 것이고, Nag? 버튼은 모르겠으니 일단 눌러봤다.


아까 처음에 봤던 창이다. Regcode에 아무거나 넣고 Register me!를 눌러봤다.


틀렸다 한다. 이제 할 것도 없고 폼 창에서는 SmartCheck를 사용해서 Registration을 얻어보라고 하는데, 그건 나중에 하기로 하고 일단 OllyDbg에 올려보자.


여기까지 와서 Search for All Intermodular Calls 명령을 사용해 MsgBox를 만들어내는 함수를 호출하는 곳을 찾아보자.


이렇게 하나하나 찾을수도 있겠지만 Sort by 기능을 활용하면 한눈에 쉽게 볼 수 있다.


저 네 개 모두에 BreakPoint를 걸어준다. 우클릭으로 Set breakpoint on every call to rtcMsgBox라는 옵션을 선택하면 저기 4개의 주소에 모두 BP가 걸린다. 이후 F9로 실행시키고 Nag? 버튼을 눌러보면 다음 그림처럼 Break가 걸린다.

그럼 저기가 바로 메시지 박스를 출력하기 위해 함수를 호출하는 부분인 것을 알 수 있으니 저 CALL 부분을 어떻게 수정해주면 되겠다. 그런데 아무리 생각해도 CALL 5바이트 명령만큼으로 MsgBox 함수의 리턴인 EAXESP까지 동시에 처리해줄 방법이 없었다. EAX에는 확인 버튼을 눌렀을 때처럼 1이 들어가면서 스택 포인터까지 정리하려면 8바이트가 필요하기 때문이다.

그렇다면 그냥 Event Handler Nag? 버튼을 눌렀을 때 호출되는 함수 자체를 호출되자마자 리턴 시켜버리면 되지 않을까? 하는 생각에 위로 올려서 함수의 시작부를 찾아봤다.

함수 시작부를 찾을 수 있었다(PUSH EBP; MOV EBP, ESP;). VB는 일반적으로 Stdcall 방식을 사용하므로 피호출 함수가 스택을 정리해야 한다. 그렇다면 전달되는 파라미터에 따라서 RETN @ 형식으로 ESP를 함수 호출 이전으로 초기화 해줘야 한다. 이 함수의 파라미터의 개수를 찾아보자.

파라미터 개수를 찾기 위해서 함수의 시작부인 PUSH EBP BP를 걸고 Nag? 버튼을 다시 클릭한 후 스택을 확인한다.

7401E5A9의 주소로 돌아가는 것을 알 수 있다. MSVBVM50.dll 모듈 영역이다.

바로 위의 명령을 보면 CALL EAX 명령을 실행한 후 아래 명령으로 돌아오도록 되어있다. CALL EAX 명령BP를 걸고 Ctrl+F2로 다시 실행해보자.

EAX의 값은 402649이다. 저 주소로 가보자.

402C17 주소로 점프하는 것을 알 수 있다. , 위에 MSVBVM50.dll에서 CALL EAX 명령에 의해 호출된 것은 402C17에 있는 함수, 그러니까 우리가 파라미터의 개수를 찾으려는 함수임을 알 수 있다. 이는 CALL EAX 명령이 실행되는 전후의 스택 주소를 확인하면 402C17의 파라미터의 개수를 알 수 있다는 뜻이다. 한 번 확인해보자.

4만큼 차이 나는 것을 확인했다. , 4바이트 만큼 정리해줘야 한다는 뜻이므로 코드를 수정하러 가자.


다음과 같이 코드를 수정해준다. 실행해보면 이제 쓸데없는 소리하는 메시지 박스가 나오지 않는 것을 확인할 수 있다.

, 그럼 이제 Registration Code를 찾아보자. 먼저 아까 틀리면 나왔던 메시지 박스의 내용을 바탕으로 Search for All Strings에서 해당되는 부분을 찾았다.

더블클릭으로 찾아 들어가준다.


‘I’mlena151’이라는 문자열을 상단에서 찾을 수 있다. 저 문자열 바로 아래에 호출되는 함수는 StrCmp, 즉 문자열 비교 함수다. 이는 즉 저 문자열과 사용자가 입력한 문자열을 비교하는 것으로 유추할 수 있다. 바로 넣어서 확인해보았다.



'Reversing > Reversing' 카테고리의 다른 글

Calling Convention (함수 호출 규약)  (0) 2017.07.02
Abex’ Crackme #2  (0) 2017.06.30
Stack Frame  (0) 2017.06.27
Abex' Crackme #1  (0) 2017.06.27
OllyDbg Commands & Assembly Basic & etc  (0) 2017.06.27
Posted by BinZIP