반응형

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
블로그 이미지

rootable

,