프로그램을 실행하면 위와 같이 뜬다.
Ok 1/3 버튼을 누르면 “Mal Cracker!!!” 문자열이 채워지고 “By Jhonjhon_123” 이라는 문자열이 띄워진다.
VB 기초 지식
EP 코드 부분이다.
Visual Basic으로 만들어진 프로그램이다.
VB 파일은 MSBVM60.dll(Microsoft Visual Basic Virtual Machine 6.0) 이라는 VB 전용 엔진을 사용한다.
그리고 VB는 주로 GUI 프로그래밍을 할 때 사용되고, VB 프로그램은 Windows 운영체제의 Evet Driven 방식으로 동작하므로 Main() 혹은 WinMain()에 사용자 코드(디버깅을 원하는 코드)가 없고 각 이벤트 핸들러에 사용자 코드가 있다.
즉, crackme 11번에서는 OK 1/3 버튼 Handler에 사용자 코드가 있을 것이다.
위의 3개의 주소 부분은 VB 파일의 Startup 코드이다.
Entry Point에서 VB 엔진의 메인 함수인 ThunRTMain을 호출하는데 직접 MSVBVM60.dll!ThunRTMain()으로 가는 것이 아니라 JMP 명령을 통해 간접 호출한다.
또한 push 4017B4는 RT_MainStruct의 주소이고, 이는 ThunRTMain() 함수의 파라미터이다.
참고로 ThunRTMain() 함수 내부는 MSVBVM60.dll 모듈의 주소 영역이므로 VB 엔진이기 때문에 딱히 분석하지 않아도 된다.
분석
문자열 찾기 기능을 이용하면 위와 같이 문자열들이 뜬다.
이전에 봤던 “Mal Cracker!!!” 문자열과 “By Jhonjhon_123” 문자열이 있다.
“Mal Cracker!!!” 문자열 부분으로 간다.
Mal Cracker!!! 문자열을 4026CA 주소에 있는 call 명령을 통해 입력 부분에 입력해준다.
그리고 __vbaVarDup 함수를 호출하여 “Jhonjhon_123” 문자열과 “By Jhonjhon_123” 문자열을 띄운다.
아마 이 부분은 틀린 Serial 값을 입력했을 때 처리되는 부분이다.
다시 문자열 찾기 기능에서 뭔가 다른 문구가 있다.
¡¡¡Bien!!!이라는 문구가 있는데 이 부분으로 이동한다.
위의 사진을 보면 vbaVarDup 함수로 ¡¡¡Bien!!! 문구를 띄우는 부분이다.
그렇다면 이 문구는 성공했을 때 띄워지는 부분으로 예상이 된다.
그렇다면 입력한 값과 지정된 Serial 값을 비교하는 부분을 찾아야 하는데 이 부분은 ¡¡¡Bien!!!을 띄우는 부분에서 스크롤을 위로 조금 올리면 나온다.
풀이
위의 사진을 보면 vbaStrCmp 라는 함수가 있다.
이 함수의 인자로 eax와 ecx가 스택에 넣어지는데 eax와 ecx 레지스터 중 하나는 입력한 Serial 값이고, 다른 하나는 지정된 Serial 값이다.
vbaStrCmp 함수에 F2 키로 BP를 설정한다.
Ctrl + F2 키를 눌러 재실행 한 후 F9 키로 실행한 뒤 “slay”를 입력한다.
그럼 위와 같이 vbaStrCmp 함수의 인자로 입력한 값 “slay”와 677345 값이 넘어간다.
프로그램에 677345를 입력하고 Ok 1/3을 누르면 위와 같이 뜬다.
Serial 값 생성 알고리즘
vbaStrCat 함수를 여러번 호출하여 Serial 값을 완성시킨다.
'전쟁 > crackme' 카테고리의 다른 글
Crackme #13 (0) | 2022.06.24 |
---|---|
Crackme #12 (0) | 2022.06.24 |
Crackme #10 (0) | 2022.06.23 |
Crackme #9 (0) | 2022.06.23 |
Crackme # 8(Crack me by hackereh@!) (0) | 2022.06.23 |