abex's 2nd crackme 파일은 Visual Baisc으로 제작되어 있다.
추후 CTF에서 VB로 제작된 파일을 분석할 수도 있으니 미리 정리해놓는다.
* VB 전용 엔진
- VB 파일은 MSVBVM60.dll (Microsoft Visual Basic Virtual Machine 6.0)이라는 전용 엔진을 사용한다. (The Thunder Runtime Engine)이라고도 불린단다.
abex's 2nd crackme 파일을 리버싱할 때 EP 코드 전에 해당 엔진을 호출하는 것을 볼 수 있다.
- 메시지 박스를 출력하고 싶을 때 VB 소스코드에서 MsgBox() 함수를 사용한다.. VB 컴파일러는 실제로 MSVBVM60.dll!rtcMsgBox() 함수를 호출하고, 이 함수 내부에서 Win32 API인 user32.dll!MessageBoxW() 함수를 호출한다. (VB 소스코드에서 직접 Win32 API를 호출할 수도 있다)
* N code와 P code
- VB는 컴파일 옵션에 따라 N code와 P code로 컴파일이 가능하다.
- N code는 Native code로서 일반적인 디버거에서 해석 가능한 IA-32 Instruction을 사용하는 컴파일 옵션이다.
- P code는 Python처럼 인터프리터 언어 개념으로 컴파일 하는 옵션이다. 따라서 이 P code를 정확히 해석하기 위해서는 VB 엔진을 분석하여 에뮬레이터를 구현해야 한다.
* Event Handler에 존재하는 사용자 코드
- VB 프로그램은 Windows 운영체제의 Event Driven 방식으로 동작하기 때문에 C 언어처럼 main 함수에 사용자코드가 들어가는 것이 아니라 각 event Handler에 사용자 코드가 존재한다.
- 따라서 Check 버튼, 혹은 Ok 버튼 등 Event가 설정되어 있을 만한 곳에 우리가 분석하기 위한 코드가 존재한다.
* undocumented 구조체
- VB에서 사용되는 각종 정보들(Dialog, Form, Function 등)은 내부적으로 구조체 형식으로 파일에 저장된다.
- 하지만 Microsoft에서 이러한 구조체 정보를 정식으로 공개하지 않았기 때문에 VB 파일의 디버깅에 어려움이 존재한다고 한다.
출처) 리버싱 핵심원리
'Hacking > Reversing' 카테고리의 다른 글
Ollydbg 창 설명 및 기초 (0) | 2019.02.10 |
---|---|
3월 5일자 (0) | 2018.03.05 |
immunity debugger가 바로 꺼질 때 해결 (2) | 2016.01.03 |