-
[Lenas Reversing for Newbies] 10Wargame/Lenas Reversing 2021. 2. 8. 22:51
Lenas Reversing 10에서는 아래와 같은 세 가지 프로그램을 패치하는 실습을 진행한다. 모두 VB로 작성된 프로그램이다.
- Tut.ReverseMe1.exe
- ReverseMe2.exe(문제가 툴에 의존하는 경향이 있고 가치를 잘 모르겠다)- CConvert.exe
1. Tut.ReverseMe1.exe
(1) 프로그램 실행
프로그램 실행1 프로그램을 실행하면 위와 같이 Nag Screen이라는 메시지 박스가 나타난다. 확인 버튼을 눌러보자.
프로그램 실행2 Regcode를 입력하라는 윈도우가 나타난다. Nag? 버튼을 누르면 프로그램 실행 1과 같은 창이 나타나고 임의의 Regcode를 입력한 후 Register me! 버튼을 누르면 다음과 같이 "Wrong registration code!"라는 문자열이 나타난다.
프로그램 실행3 프로그램을 패치하여 Nag를 지우고 올바른 Regcode를 찾아보자.
(2) Debugging
이전의 리버싱 핵심원리에서도 다뤘던 문제다. 이번에는 VB로 작성되었다는 점에 착안해서 VB decompiler lite를 이용해보자. (lite는 disassemble 기능만 지원된다.) VB decompiler lite로 프로그램을 열어보자.
VB 1 위와 같이 Nag? 버튼을 누르면 가운데에 해당 버튼에 대한 정보가 나타나고, 우측에 Solution explorer에는 버튼을 눌렀을 때 발생하는 이벤트에 대한 정보가 나타나 있다. Nag? 버튼은 Command? 버튼이므로 우측 화살표가 가리키는 부분을 더블 클릭해보자.
VB 2 위와 같이 Command2를 클릭했을 때 호출되는 함수에 대한 정보가 나타난다. OllyDbg로 파일을 열고 00402C17에 BP를 설정하고 F9을 눌러 프로그램을 실행해보자.
디버깅 1 위와 같이 BP에 적중한다. 해당 부분을 retn으로 코드를 수정하고 다시 F9을 눌러보자. 함수가 호출되자마자 retn 하므로 Nag 창이 나타나지 않는 것을 확인할 수 있다. 이제 다시 VB decompiler 창을 살펴보자.
VB 3 Regcode를 입력하고 Register me! 버튼을 클릭하면 올바른 코드인지 내부적으로 처리를 하는 이벤트가 발생할 것이다. 버튼을 클릭했을 때 호출되는 함수의 시작 주소는 위 창에서와 같이 402814이므로 OllyDbg에 해당 부분에 BP를 설정하고 임의의 Regcode를 입력한 후, Register me! 버튼을 눌러보자.
디버깅 2 BP에 적중한다. F8을 눌러가며 디버깅을 진행하다 보면 다음과 같은 코드를 확인할 수 있다.
디버깅 3 Regcode로 보이는 값("I'mlena151")이 보이고 그 밑에 올바른 Regcode를 입력했을 때 나올 법한 문자열 "Yep ! You succeeded registering !"이 보인다. 그리고 체크 표시한 부분에서는 임의의 Regcode를 입력했기 때문에 해당 부분을 점프하는 것이 보인다. "I'mlena151"을 다시 입력하고 Register me! 버튼을 눌러보자.
Register 성공 위와 같이 올바른 Regcode 였음을 확인할 수 있다.
2. CConvert.exe
(1) 프로그램 실행
프로그램 실행 1 실행하자마자 Unregistered Version임을 알린다. 확인 버튼을 눌러보자.
프로그램 실행 2 그냥 다양한 진법 변환 계산기다. About 버튼을 눌러 정보를 살펴보자.
프로그램 실행 3 Crack Me if You Can! 크랙 연습을 목적으로 제작된 프로그램인 듯하다. Register 버튼을 눌러보자.
프로그램 실행 4 올바른 User Name과 Registration Code를 입력한 후 Validate 버튼을 누르면 등록된 상태로 변하는 것 같다. 임의의 값을 입력해보자.
프로그램 실행 5 역시 등록되지 않는다. Validate 버튼이 눌렀을 때 어떤 함수가 호출될지를 생각하면서 디버깅을 진행하면 될 듯하다.
(2) Debugging
VB decompiler로 해당 프로그램을 열어보자.
VB 1 함수의 주소는 409C70이다. OllyDbg로 프로그램을 열고 해당 지점에 BP를 설정한 후, 임의의 값을 입력하고 Validate 버튼을 눌러보자.
디버깅 1 BP에 적중했다. 같은지 비교하는 VB API() 혹은 특이한 문자열 값에 주목하면서 한 줄씩 디버깅을 진행해나가다 보면, 아래와 같은 코드를 발견할 수 있다.
디버깅 2 "Nice Work! ..." 문자열 위의 점프 명령어에서 특정 조건을 만족하여 점프를 하게 된다. 위의 코드들을 살펴보면 __vbaVarTstEq 등의 API가 호출되는 것으로 보아 비교를 하는 것 같지만 딱히 특별한 문자열이 보이지 않아 정확한 키 값은 찾지 못하겠다. JE 명령어를 JNE로 바꾸어 주어 점프하지 않도록 패치해보자.
패치 성공 위와 같이 정상적으로 등록되었다는 메시지 박스가 나타나는 것을 확인할 수 있다.
3. Comment
VB 작성된 프로그램의 디버깅을 VB decompiler를 이용하여 보다 손쉽게 접근할 수 있는 예제였다.
반응형'Wargame > Lenas Reversing' 카테고리의 다른 글
[Lenas Reversing for Newbies] 12 (0) 2021.02.18 [Lenas Reversing for Newbies] 11 (0) 2021.02.09 [Lenas Reversing for Newbies] 09 (0) 2021.02.02 [Lenas Reversing for Newbies] 08 (0) 2021.02.02 [Lenas Reversing for Newbies] 07 (0) 2021.02.01