리버싱/리버싱 핵심 원리

[리버싱 핵심 원리] Visual Basic 파일 특징

초코맛동산 2024. 11. 22. 19:08

 

1. Visual Basic 파일

Microsoft의 설명을 참조해보면, Visual Basic은 Microsoft에서 개발한 프로그래밍 언어로, 간편하게 .NET 앱을 만들 수 있습니다. 기사를 보면 .NET으로 만들어진 악성코드와 관련된 이야기를 뺴 놓을 수 없습니다. 그렇다면 .NET은 무엇일까요? 

 

.NET은 Microsoft 에서 출시한 윈도우 프로그램 개발 및 실행 환경입니다. 크로스 플랫폼을 지원하여 다양한 OS에서 실행이 가능하고, 패키징, 난독화 도구가 많아 공격자가 많이 사용한다고 합니다. 

 

간단하게 이런 배경 지식을 깔고 가면 쉽게 Visual Basic 파일이 무엇인지 유추할 수 있습니다. 말 그대로 Visual Basic 언어로 만들어진 파일이겠죠.

 

 

2. VB 전용 엔진

리버싱을 할 때 해당 파일이 어떤 플랫폼에서 제작되었는가는 중요한 정보입니다. VB 파일은 .vb로 확장자 표시가 되어 있지만, .vb 파일이 컴파일되면 .exe 파일로 볼 수 있겠죠. vb로 제작된 crackme2 파일을 HxD에 넣어 확인해보도록 하겠습니다. 

 

시그니처는 아래와 같이 Excutable File인 4D 5A입니다. 

 

 

하지만, 사용된 dll을 확인해보면 MSVBVM60.dll이 사용된 것을 확인해볼 수 있습니다. 

 

VB 파일은 위의 사진과 같이 MSVBVM60(Microsoft Visual Basic Virtual Machine 6.0) 전용 엔진을 사용합니다. 그래서 해당 dll로부터 여러 함수를 사용할 때마다 호출하고, 함수 내부에서는 여러 API로 메시지 박스, 알림 등을 사용할 수 있게 됩니다. 

 

 

3. N(Native) code, P(Pseudo) code

Visual Basic 파일의 컴파일 옵셥으로는 N code와 P code가 존재합니다. 

 

N(Native) code는 일반적인 디버거에서의 해석이 가능한 IA-32 Instrnction 를 사용합니다. 즉, 언어가 바로 기계어로 변환이 되지만 P(Pseudo) code는 VB 엔진으로 가상 머신을 구현하여 자체적으로 해석할 수 있도록 명령어(바이트 코드)를 시용합니다. 

 

따라서 N code 컴파일보다 P code 컴파일 했을 때 더 복잡하다는 것을 알 수 있습니다. 

 

 

4. Event Handler

VB는 GUI 프로그래밍에 특화되어 있습니다. GUI는 사용자의 이벤트에 따라 기능이 발현, 변경됨으로, VB 프로그램은 특정 이벤트에 반응해 동작이 변경되는 Event Driven 방식으로 동작합니다.  

 

이로 인한 중요한 특징은 main() 혹은 WinMain()에 시용자 코드가 존재하는 것이 아니라, 각 event handler에 사용자 코드 가 존재한다는 것입니다. 

 

C 코드와 비교를 해볼 때 C 코드의 특성은 프로시저 중심으로, 시작점으로 main() 을 정의하고 순차적으로 코드가 실행됩니다. 

 

또한, VB에서 사용되는 정보들(Dialog, Control, Form, Module, Function 등)은 내부적으로 구조체 형식으로 파일에 저장되고, 이는 공개되지 않아 디버깅에 어려움이 있다고 합니다. 

 

 

 

출처


리버스 핵심 원리 - 이승원