Reversing/리버싱_핵심원리

8장 abex` crackme #2(미완)

dcho 2019. 8. 14. 03:08
SMALL
우선 프로그램을 실행 시켜 보았다.

보아 하니 이름과 시리얼에 맞는것을 입력해야 되는 문제인 것 같다. 

먼저 사전 지식으로써 이 파일은 Visual Basic으로 제작되었다고 한다. 

Visual Basic?

윈도우용 응용 프로그램을 개발할 수 있는 프로그래밍 언어이다.
비주얼 언어는 화면 디자인을 위해 많은 줄의 코드를 작성하지 않고 미리 만들어진 도구를 이용하여 그림 그리듯이 디자인할 수 있는 언어를 말한다.

디버깅을 시작하기 전에 Visual Basic 파일의 특징을 살펴보는 것이 좋겠다.

VB 전용 엔진

VB 파일은  MSVBVM60.dll (Microsoft Visual Basic Virtual Machine 6.0)이 라는 VB 전용 엔진을 사용한다(The Thunder Runtime Engine이라는 이름으로도 불리고있다). 
VB 엔진의 사용 예를 들어보면 메세지 박스를 출력하고 싶을 때 VB 소스코드에서 MsgBox() 함수를 사용한다. VB 컴파일러는 실제로 MSVBVM60.dll!rtcMsgBox() 함수가 호출되도록 만들고, 이 함수 내부에서 Win32 API인 user32.dll!MessageBoxW() 함수를 호출해주는 방식으로 동작한다.(VB 소스코드에서 user32.dll!MessageBoxW() 함수를 직접 호출하는 것도 가능)

N(Native) code, P(Pseudo) code

VB 파일은 컴파일 옵션에 따라 N code 와 P code로 컴파일이 가능하다. 
  • N code는 Native code로서 일반적인 실행 파일처럼 어셈블리를 통해 해석할 수 있는 방식이다. 물론 VB의 경우 MSVBV60.dll 같은 VB 엔진에 의해서 실행되기 때문에 바로 스텁을 지나 Main()으로 가는 일반적인 실행 파일과는 차이점이 존재한다. 
  • P code는 인터프리터(Interpreter)언어 개념으로서 VB 엔진으로 가상 머신을 구현하여 자체적으로 해석 가능한 명령어(바이트 코드)를 사용하는 것이다. 따라서 VB의 P code를 정확히 해석하려면 VB 엔진을 분석하여 에뮬레이터를구현하여야 한다.

※P code와 유사한 형태로 Java(Java Virtual Machine), Python(Python 전용 엔진)등이 있다. P code를 사용했을 때의 장점은 이식성이 좋다진다는 점(플랫폼별로 엔진을 제작/배포 하면 다른 플랫폼에서 기존의 사용자 코드를 거의 수정 없이 그대로 사용 가능)

Event Handler

VB는 주로 GUI 프로그래밍을 할 때 사용되며, IDE 인터페이스 자체도 GUI 프로그래밍에 최적화되어 있다. 즉 VB 프로그램은 Windows 운영체제의 Event Driven 방식으로 동작하기 때문에 main()혹은 WinMain()에 사용자 코드(우리가 디버깅을 원하는 코드)가 존재하는 것이 아니라, 각 event handler에 사용자 코드가 존재한다. 

undocumented 구조체

VB에서 사용되는 각종 정보들(Dialog, Control, Form, Module, Function 등)은 내부적으로 구조체 형식으로 파일에 저장된다. 
MS사 에서는 이러한 구조체 정보를 정식으로 공개하지 않았기 때문에 VB파일의 디버깅에 어려움이 있다.

간접호출

4010A0 주소는 IAT영역이며, MSVBVM60.ThunRTMain()함수의 실제 주소가 있다. (VB엔진의 메인함수 : ThunRTMain())

분석!!!

먼저 디버거를 통해 텍스트 스트링을 검색해 보았다. 위와 같이 정상적인 값을 넣었을때를 찾아가 main을 확인했다.


분석을 통해 얻은 지식은

Name을 받아 암호화 알고리즘을 다음과 같이 진행한뒤 시리얼 값을 구한다.

  1. 주어진 Name 문자열을 앞에서부터 한 문자씩 읽기(총 4회)
  2. 문자를 숫자(ACII코드)로 변환
  3. 변환된 숫자에 64를 더함
  4. 숫자를 다시 문자로 변환
  5. 변환된 문자를 연결시킴




'Reversing > 리버싱_핵심원리' 카테고리의 다른 글

10장 함수 호출 규약  (0) 2019.08.14
9장 Process Explorer - 최고의 작업 관리자  (0) 2019.08.14
7장 스택 프레임  (0) 2019.08.07
6장 abex' crackme #1 분석  (0) 2019.07.25
5장 스택  (0) 2019.07.25