뭉근 : 느긋하게 타는 불

본래 메모리 포렌식 관련 도서로 괜찮은 Malware Analyst's Cookbook and DVD가 있었습니다. 이 도서는 국내에 에이콘 출판사가 악성코드 분석가의 비법서로도 출시가 되었었지요. 도서 자체의 목적이 악성코드 분석에 맞춰져 있었지만 메모리 포렌식에 대한 내용이 상당히 많았고 그 원리 또한 잘 설명이 되어 있었습니다. 하지만 주제가 상이하다 보니 메모리 포렌식 전문 도서로 볼 수는 없었지요.

   

이번에 Volaitlity 프로젝트 사이트에 들어가니 떡 하니 메모리 포렌식 도서가 새로 나왔더군요.

   

메모리 포렌식의 예술! 도서 소개를 보니 맥, 리눅스, 윈도우를 총망라하여 내용을 정리했으며 700 페이지 분량에 달하네요. 아마존 뿐만 아니라 직수입 원서로 국내 도서 사이트에서도 판매 등록되어 있네요.

아무튼 주문할려고 봤더니 2014년 7월 출간 예정이네요. 아마존에서는 미리 주문 받는 것으로 되어 있고요. 7월 전에 주문해놔야겠네요.

   

'생활' 카테고리의 다른 글

'배려'의 명언  (0) 2014.11.24
Quiet - 내향적인 사람들을 위한 또는 이해하기 위한 도서  (0) 2014.09.15
다음팟 로컬 채팅무시 프로그램  (1) 2014.02.15
나니아 연대기  (0) 2013.02.12
이세돌의 은퇴 이유  (0) 2013.02.12

윈도우 8이 새로이 출시되면서 윈도우 8의 커널을 분석해야 되는 분들이 있을거라 생각한다. 따라서 이번 포스트에서는 Vmware로 윈도우 8을 동작 중인 가상 머신에 Windbg를 사용하여 리모트 커널 디버깅을 설정하는 방법을 설명한다.

   

소개

윈도우 8이 공개되고 이에 맞는 WDK 8이 공개되었으며 이 WDK 8에 윈도우 8을 디버깅하기 위한 새 버전의 WinDbg 또한 포함되어 있다. 구버전의 WinDbg를 사용할 경우 디버깅 연결은 되지만 윈도우 8 디버깅 방법을 모르기 때문에 명령어 실행 단계에서 에러가 발생한다. 따라서 새 버전(Windbg:6.3.9600.*)의 WinDbg를 설치해야 하며, 나머지 부분은 윈도우 7 때와과 동일하다.

   

WinDbg 설치

WinDbg의 새 버전은 MSDN 공식 사이트에서 다운로드 할 수 있다. 이 사이트는 WinDbg를 새로 설치하기 위해 두 가지 방법을 제공하는데 첫번째로 WDK 8.1을 설치하여 그 중에 포함되어 있는 Windbg를 사용하는 방법과 Standalone형으로 나온 WinDbg를 사용하는 방법이 있다. 전자의 경우 아래 그림에 나와있듯이 Visual Studio 2013이 미리 설치되어 있어야 한다.

   

   

후자인 Standalone 형의 경우 설치만 하면 된다.

   

   

WinDbg를 설치 후 실행하여 반드시 버전을 확인한다.

  • Windbg:6.3.9600.*

   

이전에 설치했던 WinDbg의 경우 버전 호환성을 위해 그대로 남아있는 것 같으므로

반드시 설치 폴더에 들어가서 실행해 보아야 한다.

WDK 8.1 설치 경로는 다음과 같다.

   

  • C:\Program Files (x86)\Windows Kits\8.1\bin\x86
  • C:\Program Files (x86)\Windows Kits\8.1\bin\x64

   

Vmware 세팅

가상 머신을 리모트 디버깅하기 위해 윈도우 7에서 했던 방식과 달라진 점은 없지만 한번 더 짚고 넘어가기로 한다.

윈도우 8을 설치한 가상 머신에서 아래 작업을 순서대로 수행한다.

   

  • 실행(Ctrl +D) - msconfig 실행
  • 부팅 탭에서 고급 옵션 선택
  • 디버그 모드 체크

   

   

위 작업은 윈도우 8.1에서 디버깅을 가능하게 한 것이고 외부에서 디버깅을 위해 접근하려면 COM1 포트를 사용해야 한다는 설정해주는 것이다.

(* 이 작업은 bcdedit을 이용하여 디버깅용 부팅 옵션을 따로 만들 수도 있다.)

   

본래 COM1, COM2 포트 등은 컴퓨터의 본체에 다른 컴퓨터와 연결하기 위하여 존재하는 것이지만 가상 머신의 경우 실제 포트가 존재하지 않으므로 이름있는 파이프를 활용하여 가상머신을 실행 중인 호스트 PC와 연결해준다.

   

  • 윈도우 8 가상 머신 종료
  • Vmware 가상 머신 옵션
  • Hardware 탭에서 Add 버튼 클릭
  • Serial Port를 추가

 

   

뒤에서도 한번 더 말하겠지만 호스트 PC에 프린터가 잡혀있다면 Vmware가 이를 인식하여 가상 머신과 연동하기 위해 COM1 포트를 프린터 포트로 사용한다. 따라서 부팅 옵션에서 COM1 포트를 사용할 것이지 COM2 포트를 사용할 것인지 잘 정해야 한다.

   

  • Next 후 Output to named pipe 선택

   

   

  • 파이프의 이름을 정한다. 여기서는 com_8_64로 하였다.

   

   

Finish를 하면 새로운 포트가 추가되는데 앞서 말했듯이 Printer가 잡혀있다면 Serial Port 2로 생성이 된다. 물론 Printer가 잡혀있지 않다면 Serial Port 1으로 생성이되며, 이후 Windbg를 실행하여 리모트 커널 디버깅을 진행하면 된다. Serial Port 2일 경우 이를 해결하기 위한 방법으로 두 가지가 있는데 첫번째는 Printer 하드웨어를 제거하고 다시 시리얼 포트를 추가하는 방법이며 두번째는 부팅 옵션의 디버깅용 포트를 변경하는 방법이 있다.

   

   

여기선 가상 머신에서 프린터를 사용할 때를 대비하여 부팅 옵션의 디버깅용 포트를 변경하기로 한다.

   

  • 다시 윈도우 8 가상머신을 키고 부팅 옵션에서 COM2 로 설정해준다.

   

   

* 프린터가 Serial Port 1을 사용하고 있다는 내용은 이 블로그를 통해 알게 되었다.

   

이후 가상 머신을 다시 재부팅한다.

   

Windbg 커널 디버거 연결

앞에서 Vmware의 가상 머신이 리모트 디버깅을 받아들 일 수 있도록 하는 설정을 마쳤다. 이제 남은 일은 Windbg를 실행하여 리모트 커널 디버거를 가상 머신과 연결하는 것이다.

   

  • File - Kernel Debug - Com 탭 에서 아래와 같이 설정해준다.

   

   

포트는 아까 이름있는 파이프의 이름을 설정한 걸 사용하면 된다.(\\.\pipe\com_8_64)

   

*다른 블로그에서 볼 수 있는 단축 아이콘의 실행 인자 정보를 변경하여 실행하는 것이 위와 같은 과정이다.

   

OK를 누르면 아래와 같이 창이 뜨는데

   

   

계속 멈춰 있으면 한번 Ctrl + Break 를 눌러보면 연결이 된다.

(이 문제는 윈도우7 디버깅할 때도 있었는데 무슨 문제인가 싶다.)

   

이후 심볼 설정을 해주면 되는데

Windbg 메뉴에서 File - Symbol File Path에 아래와 같이 입력한다.

SRV*d:\websymbol*http://msdl.microsoft.com/download/symbols;

   

   

"d:\websymbol"은 심볼을 넣을 폴더 경로로 디버깅하다가 필요한 심볼 정보가 있으면 마이크로소프트사에서 제공하는 디버깅 데이터 서버를 통해 다운받을 폴더이다. 반드시 사용 전에 폴더를 미리 만들어주어야 한다. Reload 체크 박스를 설정하면 OK를 누르자마자 심볼 정보를 다시 리로드하는 것을 볼 수 있다.

간혹 가다가 한번씩 심볼 정보가 일치하지 않을 때가 있는데 이 때는 심볼 정보를 다시 리로드하는 명령어 .reload를 실행주면 된다.

   

   

이상 Window8 Remote Kernel Debugging on Vmware using WinDbg 글을 마친다.

'디버깅' 카테고리의 다른 글

MS 심볼 구성에 관하여  (0) 2014.12.17
Windows 10 _KPCR and _KPRCB  (0) 2014.11.14
8바이트 변수 초기화 문제  (0) 2014.11.14
Windbg에서 KDBG 찾기  (0) 2014.06.19
_DRIVER_OBJECT.DriverSection 정보  (0) 2013.10.05

MFC만 하다보니까 WinAPI는 너무 약한거 같다...

기본이 되는 힘을 익혀야되는데

아래 함수는 프로세스 자신 뿐만 아니라

타프로세스의 윈도우 핸들을 받을 경우 그에 속하는 모든 자식 윈도우 핸들을 출력해주는 함수이다. 

void ChildWindows(HWND parentHwnd) {
    HWND childHwnd;
    childHwnd = GetWindow(parentHwnd, GW_CHILD);
    
    while(childHwnd) {
        printf("%#08x\n", childHwnd);
        ChildWindows(childHwnd);
        childHwnd = GetNextWindow(childHwnd, GW_HWNDNEXT);
    }

    return;
}

 

'프로그래밍' 카테고리의 다른 글

드라이버 개발 삽질 #1  (0) 2015.03.12
ofstream 한글 출력 문제  (0) 2014.10.22
ifstream 64  (0) 2014.09.25
CPP 벡터 반복문 중 원소 지우기  (0) 2014.09.22
가상 함수 테스트  (0) 2014.07.05

다음팟 로컬 채팅 무시 프로그램입니다.

다음팟은 기본적으로 채팅 무시 기능을 제공하나 채팅 무시 리스트를 휘발성으로 가지고 있기 때문에

다음팟 매번 실행 시, 일x충이나 언행이 안좋은 사람들을

다시 채팅 무시에 등록해야 되는 귀찮음이 있었습니다.

이에 귀찮아서 로컬 PC에 채팅 무시 리스트 파일을 만들어 지속적으로

채팅 무시를 할 수 있는 간단한 프로그램을 만들었습니다.

다운로드 :

PotPlayerChatIgnore_v01.zip

 

*윈도우 7 32비트, 64비트에서 동작 확인하였습니다. 다른 버전은 동작할 지 잘 모르겠습니다.

- 사용법

압축을 풀면 아래와 같이 PotChatIg.dll과 PotPlayerChatIn\gnore.exe가 나옵니다.

 

다음팟을 실행 시키신 후 PotPlayerChatIgnore.exe를 실행합니다.

(다음팟이 실행되어 있어야만 동작합니다.)

실행시키면 아래와 같이 동작하고 채팅 무시 기능 등록이 성공했다는 메시지가 뜹니다.

이후 방송시청 도중 채팅 무시하고 싶은 유저가 생길 경우, 채팅 무시하기 기능을 그대로 사용하시면 됩니다.

* 실제로 적용되는지 궁금하시면 채팅무시를 한번 풀어보세요 ^^. 로컬에 저장되어 있어서 채팅무시를 풀어도 해당 유저의 대화 내용은 보이지 않습니다.

이후 다음팟 실행시 등록한 유저의 채팅 내용은 보이지 않습니다.

* 로컬 채팅 무시 유저 목록 파일은 다음과 같은 위치에 있습니다.

%USERPROFILE%\AppData\Local\Daum\PotPlayer\ignores.dat

채팅 무시를 초기화하실려면 해당 파일을 수정 및 삭제하시기 바랍니다.

 

- 바이러스 검사 결과

다음팟 프로세스에 패치하는 형태로 동작하기 때문에 한군데서 not malcious로 나왔네요.

 

DLL 또한 바이러스 정보 없습니다.

'생활' 카테고리의 다른 글

'배려'의 명언  (0) 2014.11.24
Quiet - 내향적인 사람들을 위한 또는 이해하기 위한 도서  (0) 2014.09.15
메모리 포렌식 도서 출간 예정  (0) 2014.04.11
나니아 연대기  (0) 2013.02.12
이세돌의 은퇴 이유  (0) 2013.02.12

RTL 기법

기술문서2014. 1. 28. 20:08

 RTL 기법 자료 공유합니다.

RTL_redhat9_2_fedora5.pdf

 

'기술문서' 카테고리의 다른 글

IRP 후킹  (0) 2014.01.28

IRP 후킹

기술문서2014. 1. 28. 20:07

IRP 후킹 문서 공유합니다.

IRPHooking.pdf

 

 

'기술문서' 카테고리의 다른 글

RTL 기법  (0) 2014.01.28

윈도우 커널에서 드라이버에 대한 정보를 관리하는 오브젝트가 있는데 이를 드라이버 오브젝트(_DRIVER_OBJECT)라고 한다. 이 오브젝트란 것이 프로그래밍상의 오브젝트가 아니라 말 그대로 '드라이버 객체'를 의미한다. 프로그래밍상으로 보면 구조체라고 보면 된다. 아래는 _DRIVER_OBJECT 구조체 정의이다.

   

kd> dt _DRIVER_OBJECT

nt!_DRIVER_OBJECT

+0x000 Type : Int2B

+0x002 Size : Int2B

+0x004 DeviceObject : Ptr32 _DEVICE_OBJECT

+0x008 Flags : Uint4B

+0x00c DriverStart : Ptr32 Void

+0x010 DriverSize : Uint4B

+0x014 DriverSection : Ptr32 Void

+0x018 DriverExtension : Ptr32 _DRIVER_EXTENSION

+0x01c DriverName : _UNICODE_STRING

+0x024 HardwareDatabase : Ptr32 _UNICODE_STRING

+0x028 FastIoDispatch : Ptr32 _FAST_IO_DISPATCH

+0x02c DriverInit : Ptr32 long

+0x030 DriverStartIo : Ptr32 void

+0x034 DriverUnload : Ptr32 void

+0x038 MajorFunction : [28] Ptr32 long

   

(Windows 7 SP0 x86 from Windbg)

   

이 중에 DriverSection이 Void형 포인터란 것을 알 수 있다. 즉 이 부분을 커널 디버깅하는 유저들에게 알려주지 않겠다는 뜻인데, 리버서들은 아래와 같이 이 영역이 사용된다는 것을 알아내었다. ㅡㅡa

   

typedef struct _KLDR_DATA_TABLE_ENTRY {

    /*+0x000*/ LIST_ENTRY InLoadOrderLinks;

    /*+0x008*/ PVOID ExceptionTable;

    /*+0x00c*/ ULONG ExceptionTableSize;

    // ULONG padding on IA64

    /*+0x010*/ PVOID GpValue;

    /*+0x014*/ PNON_PAGED_DEBUG_INFO NonPagedDebugInfo;

    /*+0x018*/ PVOID DllBase;

    /*+0x01c*/ PVOID EntryPoint;

    /*+0x020*/ ULONG SizeOfImage;

    /*+0x024*/ UNICODE_STRING FullDllName;

    /*+0x02c*/ UNICODE_STRING BaseDllName;

    /*+0x034*/ ULONG Flags;

    /*+0x038*/ USHORT LoadCount;

    /*+0x03c*/ USHORT __Unused5;

    /*+0x03e*/ PVOID SectionPointer;

    /*+0x040*/ ULONG CheckSum;

    // ULONG padding on IA64

    /*+0x044*/ PVOID LoadedImports;

    /*+0x048*/ PVOID PatchInformation;

} KLDR_DATA_TABLE_ENTRY, *PKLDR_DATA_TABLE_ENTRY;

   

출처: <http://www.kernelmode.info/forum/viewtopic.php?f=10&t=1206>

   

뭐 사실 위 구조체에서 명확히 얻을 수 있는 정보는 드라이버 오브젝트(_DRVIER_OBJECT)와 커널 모듈 엔트리(_LDR_DATA_TABLE_ENTRY)의 base(MZ~) 주소를 비교하여 서로 얻을 수 있지만 위처럼 문서화되지 않은 구조체를 사용하여 편하게 구할 수도 있다.

   

한번 실제로 이런지 살펴봐야겠다.

   

kd> !drvobj \Driver\rspndr

Driver object (867f2628) is for:

\Driver\rspndr

Driver Extension List: (id , addr)

   

Device Object list:

867f3be8

kd> dt _DRIVER_OBJECT 867f2628

nt!_DRIVER_OBJECT

+0x000 Type : 0n4

+0x002 Size : 0n168

+0x004 DeviceObject : 0x867f3be8 _DEVICE_OBJECT

+0x008 Flags : 0x12

+0x00c DriverStart : 0x8923b000 Void

+0x010 DriverSize : 0x13000

+0x014 DriverSection : 0x867f2848 Void // -> _KLDR_DATA_TABLE_ENTRY

+0x018 DriverExtension : 0x867f26d0 _DRIVER_EXTENSION

+0x01c DriverName : _UNICODE_STRING "\Driver\rspndr"

+0x024 HardwareDatabase : 0x82fa9250 _UNICODE_STRING "\REGISTRY\MACHINE\HARDWARE\DESCRIPTION\SYSTEM"

+0x028 FastIoDispatch : (null)

+0x02c DriverInit : 0x8924a450 long +ffffffff8924a450

+0x030 DriverStartIo : (null)

+0x034 DriverUnload : 0x89248422 void +ffffffff89248422

+0x038 MajorFunction : [28] 0x82cf2da3 long nt!IopInvalidDeviceRequest+0

   

kd> dc 0x867f2848

867f2848 86416198 867ecd28 ffffffff ffffffff .aA.(.~.........

867f2858 00000000 00000000 8923b000 8924a450 ..........#.P.$.

867f2868 00013000 004e004e 8a46fc00 00140014 .0..N.N...F.....

867f2878 867f28a4 49104000 00000001 00000000 .(...@.I........

867f2888 00017a94 00000000 00000000 8a47aa38 .z..........8.G.

867f2898 00000000 00013000 4a5bc8f0 00730072 .....0....[Jr.s.

867f28a8 006e0070 00720064 0073002e 00730079 p.n.d.r...s.y.s.

867f28b8 ffff0000 7fffffff 04030010 69536d4d ............MmSi

   

아 근데 이거 비교해보니까.. 그냥 _LDR_DATA_TABLE_ENTRY를 가리키는거 같다. --a

   

kd> dt _LDR_DATA_TABLE_ENTRY 0x867f2848

nt!_LDR_DATA_TABLE_ENTRY

+0x000 InLoadOrderLinks : _LIST_ENTRY [ 0x86416198 - 0x867ecd28 ]

+0x008 InMemoryOrderLinks : _LIST_ENTRY [ 0xffffffff - 0xffffffff ]

+0x010 InInitializationOrderLinks : _LIST_ENTRY [ 0x0 - 0x0 ]

+0x018 DllBase : 0x8923b000 Void

+0x01c EntryPoint : 0x8924a450 Void

+0x020 SizeOfImage : 0x13000

+0x024 FullDllName : _UNICODE_STRING "\SystemRoot\system32\DRIVERS\rspndr.sys"

+0x02c BaseDllName : _UNICODE_STRING "rspndr.sys"

+0x034 Flags : 0x49104000

+0x038 LoadCount : 1

+0x03a TlsIndex : 0

+0x03c HashLinks : _LIST_ENTRY [ 0x0 - 0x17a94 ]

+0x03c SectionPointer : (null)

+0x040 CheckSum : 0x17a94

+0x044 TimeDateStamp : 0

+0x044 LoadedImports : (null)

+0x048 EntryPointActivationContext : (null)

+0x04c PatchInformation : 0x8a47aa38 Void

+0x050 ForwarderLinks : _LIST_ENTRY [ 0x0 - 0x13000 ] // 여기 아래부터 필드 사용 안함

+0x058 ServiceTagLinks : _LIST_ENTRY [ 0x4a5bc8f0 - 0x730072 ]

+0x060 StaticLinks : _LIST_ENTRY [ 0x6e0070 - 0x720064 ]

+0x068 ContextInformation : 0x0073002e Void

+0x06c OriginalBase : 0x730079

+0x070 LoadTime : _LARGE_INTEGER 0x7fffffff`ffff0000

   

LoadedImports 구조체와 완전 유사하다. PatchInformation 쯤 부터 오프셋 차이가 나는데 위 리버싱이 잘못된 걸까 싶기도 하다.

   

ForwarderLinks 부터는 필드 값이 정상적이지 않아서 사용하지 않는 걸로 판단하였었는데, 뭐 다른걸로 사용될 수도?

   

실제로 모듈의 풀 헤더(_POOL_HEADER)를 살펴보면

아래와 같이 _POOL_HEADER의 크기(0x08) + _LDR_DATA_TABLE_ENTRY(0x78)의 크기로 구성된 것을 알 수 있다.

   

kd> dt _POOL_HEADER 0x867f2848-8

nt!_POOL_HEADER

+0x000 PreviousSize : 0y000000110 (0x6)

+0x000 PoolIndex : 0y0000000 (0)

+0x002 BlockSize : 0y000010000 (0x10) // 0x10 * 0x08(x86 pool alignment) = 0x80

+0x002 PoolType : 0y0000010 (0x2)

+0x000 Ulong1 : 0x4100006

+0x004 PoolTag : 0x644c6d4d

+0x004 AllocatorBackTraceIndex : 0x6d4d

+0x006 PoolTagHash : 0x644c

   

   

바이너리도 살펴보면

   

kd> dc 0x867f2848 L24

867f2848 86416198 867ecd28 ffffffff ffffffff .aA.(.~.........

867f2858 00000000 00000000 8923b000 8924a450 ..........#.P.$.

867f2868 00013000 004e004e 8a46fc00 00140014 .0..N.N...F.....

867f2878 867f28a4 49104000 00000001 00000000 .(...@.I........

867f2888 00017a94 00000000 00000000 8a47aa38 .z..........8.G.

867f2898 00000000 00013000 4a5bc8f0 00730072 .....0....[Jr.s.

867f28a8 006e0070 00720064 0073002e 00730079 p.n.d.r...s.y.s.

867f28b8 ffff0000 7fffffff 04030010 69536d4d ............MmSi // 아래부터 blocksize를 벗어남

867f28c8 00000000 829028f0 00000001 867f28d4 .....(.......(..

   

실제로 MmSi 시그너처가 있는 것으로 보아 다른 영역으로 사용되는 것을 추측할 수 있다.


결론을 내리자면 _DRIVER_OBJECT.DriverSection은 _LDR_DATA_TABLE_ENTRY(또는 _KLDR_DATA_TABLE_ENTRY)를 가리킨다. 정도?

항상 커널 분석은 미궁이다. --a

'디버깅' 카테고리의 다른 글

MS 심볼 구성에 관하여  (0) 2014.12.17
Windows 10 _KPCR and _KPRCB  (0) 2014.11.14
8바이트 변수 초기화 문제  (0) 2014.11.14
Windbg에서 KDBG 찾기  (0) 2014.06.19
Window8 Remote Kernel Debugging on Vmware using WinDbg  (0) 2014.04.11

나니아 연대기

생활2013. 2. 12. 21:41

3달전쯤에 구입한 꿈꾸는 책들의 도시와 나니아 연대기.

  꿈꾸는 책들의 도시는 고등학교 야자시간 때 재밌게 읽었던 기억으로 인해 통합본을 사게 되었고 나니아 연대기는 내가 환상문학을 좋아하니 세계 3대 판타지는 꼭 읽어야 겠다는 생각으로 샀다. 또한 어렸을 때 봤던 EBS에서 방영한 나니아 연대기가 아직도 눈에서 선한 것도 그 이유 중에 하나라 하겠다.

  아래는 내가 전체 7장에 해당하는 각 장들에 대해 읽고 느낀 점을 틈틈히 적어 놓은 내용이다.

1 - 마법사의 조카

  환상문학에 대해 관심을 갖게 되면서 알게된 세계 3 판타지 소설인 반지의 제왕, 나니아 연대기, 어스시 전기 어스시 전기를 첫번째로 읽었고, 두번째로 드디어 나니아 연대기를 읽기 시작하였다

  어스시 전기가 20대를 위한 자아성찰 환상문학으로 느껴졌다면, 나니아 연대기의 1부를 읽고 마친 느낌은 10 초반의 어린이를 위한 동화같은 소설이라는 것이었다. (물론 아직 읽지는 않았지만) 1부는 앞으로 전개될 이야기들의 초석에 해당하는 내용이었는데, 나니아가 어떻게 아무것도 없는 상태에서 건국이 되는지에 대한 이야기였다

  런던에 사는 폴리와 디고리는 마법사인 삼촌의 계략으로 다른 세상으로 가는 시험의 대상이 된다. 다른 세상으로 폴리와 디고리는 놀랍게도 작은 숲에 도착하게 된다. 숲에는 많은 웅덩이들이 있었고 하나 하나의 웅덩이는 다른 세상으로 통하는 문이었다. 그들은 호기심으로 다른 세상으로 떠나게 되는데, 세계가 망하기 직전인 세상으로 도착하게 된다. 그곳에서 영원의 잠에 들어있던 여왕이자, 포악한 마녀, 세상의 마지막 존재인 레이디스를 깨우게 된다. 놀랍게도 세상은 마녀 자신이 멸망시킨 세상이었다. 폴리와 디고리는 도망치려다 마녀를 런던으로 끌어들이고, 우리가 사는 세계를 지배하려던 마녀를 다시 세상의 중간 지역인 숲으로 데려오게 된다. 다시 마녀를 마녀의 세상으로 데리고 가지만 웅덩이를 착각하여 다른 웅덩이로 빠진다

  놀랍게도 다른 웅덩이의 세상은 이제 만들어지기 시작한 세상이었는데, 아슬란이라는 사자가 노래를 불러 바위, , 계곡을 창조하며 마침내 동물들과 지성을 가진 특별한 신들, 지성을 가진 존재들을 만들어 낸다. 과정에서 마녀는 사자의 힘에 두려움을 먹고 도망치고, 폴리와 디고리는 아슬란이 나니아를 건국하는 과정을 지켜보게 된다. 또한 아슬란은 나니아를 마녀로부터 지키기 위해 디고리에게 머나먼 곳에서 특별한 힘을 가진 사과를 얻어오게 되고, 유혹에도 임무를 마친 디고리는 자신의 어머니를 치유할 약인 특별한 사과를 얻게 되고, 집으로 돌아오게 된다.

  후에 어머니에게 드리고 남은 사과의 속을 뒤뜰에 심게 되고, 나무는 나중에 앞으로 다른 아이들의 여행의 시초가 장롱으로 만들어 진다. 1권의 끝은 이렇게 끝이 난다. 소설을 작가는 CS 루이스로 유명한 기독학자이다. 틈틈히 기독경과 관련된 많은 말들이 나오는데 아담, 이브 등이 그렇고, 세계 창조의 방식도 비슷하며, 세계 창조에서 걸린 시간이 7시간인 것도 7일과 비슷하지 않나 싶다.

 

2 - 사자와 마녀와 옷장

  2부의 시작은 교수가 디고리의 저택에 피터, 수잔, 에드먼드, 루시라는 아이가 전쟁 공습을 피해 피란 오면서 시작된다. 명의 아이는 어린아이답게 호기심이 넘쳤으며, 디고리의 저택을 탐험하기로 한다. 그러다 수잔이 옷장 속에 숨으면서 나니아라는 나라를 알게 되고, 다음번에는 에드먼드가, 그다음에 피터와 수잔도 함께 알게 된다.

  이때 나니아는 수백 년간 자신을 여왕으로 치켜세운 마녀 레이디스가 지배하고 있었고, 자신의 말을 안들을 경우 석상으로 만들어 자신이 원하는 대로 통치를 하고 있었다. 에드먼드는 마녀의 꼬임에 넘어가 형제들을 배신하게 되지만, 돌아온 세상의 왕이자 사자인 아슬란의 희생으로 다시 돌아오게 된다. 결국, 명의 아이들은 아슬란의 도움으로 마녀를 죽이고 평화로운 시대를 여는 왕과 여왕이 되고 이야기는 끝나게 된다.

  이번에도 나니아 연대기가 어린이를 위한 이야기라고 생각되는 점으로는 순진하고 세상의 꾀임에 쉽게 넘어갈 있던 아이들이 성장하는 내용을 담고 있기 때문이다. 이는 에드먼드의 배신과 형제들 간에 화해를 통해 있다. 또한, 이야기의 끝에 아이들이 결국 훌륭한 왕과 여왕으로 수십 년간 나니아를 통치했다는 것은 아이들이 미래를 생각하게 해주며, 마침내 다시 옷장을 나와 세상에 다시 돌아왔다는 것은 자신이 꾸는 꿈이 현실로 이뤄질 있다는 생각을 하게 만든다.

  개인적으로 마음에 드는 부분은 아슬란이 에드먼드 대신에 죽지만 태초 이전의 마법 - 결백한 이가 다른 이를 대신해 죽을 다시 살아난다는 점이었다. 자기희생이라는 개념을 어떻게 이보다 멋있게 표현할 있을까? 오직 환상문학에서만 가능한 표현이었다.

  아쉬운 점으로는 마녀를 결국엔 죽였다는 점이다. 자체가 기독교적 관점이기 때문에 악은 없애야 한다는 생각으로 마녀를 죽이지만, 책에서 나왔던 대로 아직은 인간이 아닌 존재를 인간으로 회개시킬 있었다면 좋은 방향으로 이야기를 이끌어 나갈 있지 않았을까 싶다.

  앞으로 5부가 남았는데, 작가는 어떻게 앞으로 이야기를 이끌어 나갈지 궁금해진다.

 

3 - 말과 소년

  이야기는 2부의 주인공들인 자매가 케어 페러벨 성에서 나니아를 통치하고 있을 , 나니아에서 멀리 떨이진 칼로르멘이라는 나라에서 시작된다. 자신을 노예로 여기는 양부 아래서 자라난 샤스타는 우연히 말하는 브레를 만나 같이 칼로르멘을 떠나 나니아로 떠나기로 한다. 나니아로 가기 위해 반드시 황제가 사는 타슈반이라는 도시를 지나야 했다. 타슈반으로 가던 샤스타는 아라비스와 또다른 말하는 휜을 만나 같이 나니아로 향하게 된다. 타슈반에서 샤스타는 자신과 닮은 아첼랜드의 왕자 코린을 만나게 되고, 아라비스는 황제의 아들 라바다슈가 수잔 여왕을 납치하기 위해 아첼랜드를 것을 우연히 엿듣게 된다. 둘은 갖은 고생 끝에 아첼랜드에 사실을 알리고 결국 라바다슈의 계획을 막게 된다. 과정에서 샤스타는 아첼랜드의 왕자이며, 어릴 때부터 아슬란이 자신을 도와주었다는 사실을 알게 된다.

  아첼랜드로 가는 도중 아슬란은 사자의 모습으로 나타나 아라비스에게 상처를 주는데, 이는 바로 아라비스가 자신의 집안에서 도망치면서 남은 노예가 받은 벌의 고통을 자신이 느끼게 하기 위함이었다. 부분에서 자신의 행동에 대해 책임지는 아라비스의 의연한 자세가 대단했다. 또한 군마였던 브레는 사자로부터 자신의 목숨만을 위해 일행을 버리고 도망칠 정도로 겁이 많았었는데, 용기를 얻는 과정이 단순히 아슬란으로부터 언질을 받는 것으로 끝나 아쉬웠던 점이 있다.

  3부는 전체적인 스토리에서 다지 중요한 내용은 아닌 - 읽어보진 않았지만 - 같다. 어린 소년이 자신의 삶에 대한 극적인 변화를 스스로의 노력을 통해 얻어내는 이야기가 주된 내용이었다. 앞으로 읽을 4 케스피언 왕자는 나니아 연대기 영화로 제작되었는데 부분을 빨리 읽고 싶다.

 

4 - 캐스피언 왕자

  아이들이 자신들의 세계로 돌아간 , 나니아의 황금 시대는 점점 막을 내리게 된다. 아이들과는 다른 방식 - 차원과 차원의 틈으로 들어온 해적들의 후손인 텔마르 사람들이 나니아를 정복하게 된다. 이후 나니아는 캐스피언 왕가가 다스리는 텔마르 사람들의 나라가 되었으며, 본래 주인이었던 말하는 동물들은 땅에서 쫓겨나 숨어지내게 된다.

  시간이 흘러 캐스피언 9세의 아들 캐스피언 10세는 나니아에 대해 알게되며, 이를 다시 일으키고 싶어한다. , 왕인 미라즈가 자신의 아버지를 죽인 것을 캐스피언 왕자는 미라즈로부터 도망치다 나니아의 주민들인 말하는 동물들을 만나게 되며, 자신이 나니아를 다시 일으키고 싶다는 입장을 표명하고 동물들은 이에 찬성하여 전쟁을 위해 모이게 된다.

  전쟁은 시작되었지만, 캐스피언 왕자의 군대는 계속 패하게 되고, 결국 마지막 수단이자 수잔이 남긴 마법의 뿔나팔을 불어 아슬란과 나니아의 왕이었던 아이들을 부르게 된다. 4부는 아이들이 갑작스럽게 우리의 세계로부터 나니아로 이동되면서 시작되고 아이들은 사태가 이렇게 이야기를 듣게 된다.

  아이들은 캐스피언 왕자에게로 찾아가면서 서로 믿지 못하는 시련을 만나게 되지만 결국 이겨내고 캐스피언 왕자를 만나 왕자에게 진정한 나니아의 왕을 물려주고 다시 원래 세계로 돌아오게 된다.

  책을 읽다가 문득 생각이 " 하필 나니아의 주인은 인간이여야 하는가?"였다. 모든 말하는 동물들은 나니아의 왕을 아담의 아들, 인간이어야 한다고 생각했으며, 아슬란도 지배자를 인간으로 삼고 있다. 책의 저자가 기독적 관점에서 썼지만, 관점을 벗어나 이성적으로 생각해보면 모든 동물들을 서로 조화롭게 살게 만들수 있는 존재는 바로 인간밖에 없다는 점이다. 또한 인간들의 수가 많아지면 텔마르 사람들처럼 동물들을 가볍게 여기게 된다는 것이다. 부분은 7부까지 읽고 한번 생각해볼 문제라 생각한다.

 

5 - 새벽 출정호의 항해

  이번엔 속이 매우 좁고 남들 괴롭히기 좋아하는 유스터스라는 아이와 루시, 애드먼드의 여행 이야기다. 나니아 연대기의 예고편을 한번 봤다면 어느 벽에 걸려있던 바다에서 항해하는 배가 그러져있던 그림이 갑자기 물을 쏟아내며 방을 물바다로 만들고 아이들이 그림속으로 들어가는 것을 보았을 것이다. 바로   아이들이 추억의 나니아로 들어가게 되는 상황이었다.

  나니아에 도착한 이들은 4부에 나왔던 캐스피언왕이 이끄는 새벽 출정호에 올라타게 되고, 캐스피언왕이 자신의 아버지의 친구들을 찾아 잊혀진 나니아의 땅인 동쪽 끝으로 여행 중인 것을 알게되고 자연스럽게 같이 항해하게 된다.

  새벽 출정호는 처음 제도에 도착하여 땅이 나니아의 땅임을 다시 선포한다. 이후 폭풍우를 뚫고 도착한 섬에서 유스터스는 용으로 변하게 되는데, 일로 인하여 그는 자신이 다른 사람들과 친하게 지내고 싶을 뿐이라고 다시 생각하게 되었고 이를 아스란이 나타나 유스터스를 다시 원래의 모습으로 돌려준다. 다시 여행을 떠나 물에 빠지면 모든 것이 황금으로 변하는 '죽음의 '에서도 탈출하고 마법에 걸려 보이지 않게 쿵쿵이들을 다시 보이게 만들어 주었으며, 잠자면서 꾸는 모든 꿈이 이루어지는 '어둠의 '에서도 탈출한다. 과정에서 아버지의 가신들의 죽음을 알아내고, 저주를 풀게 된다.

  세계의 끝이 시작하는 곳에 도착한 캐스피언들은 해마를 타고 다니는 어인들을 지나 세계의 끝에 도착한다.  세계의 끝에서, 용감한 작은 생쥐 리치피프는 아슬란의 나라로 떠나게 되고, 작은 여행가는 다시 원래 세계로 돌아오게 되며, 캐스피언 왕자 일행은 안전하게 나니아로 돌아가게 된다.

  1부에서나 5부에서나 아이들을 위험에서 보호하는 존재는 아슬란이다. 아슬란은 마치 기독경에 나오는 하느님처럼 고난과 역경을 겪게 하며 결국은 아이들이 세상을 바라볼 있게 한다. 또한 이들을 따스히 안아주는데 이는 나니아에서 아슬란이 어머니격인 존재임을 나타낸다고 있다. 그러니까 아슬란은 높은 산을 오를 도와주는 셰르파같은 존재가 아닌가 싶다.

  앞으로 6, 7부가 남았는데 이상 아이들의 범주에 속할 없는 수잔, 루시, 애드먼드, 피터 남매의 나이아 여행기를 들을 없어 안타깝다. 다음 이야기는 살짝 엿보았는데, 이번 장에서 용기를 얻은 유스터스와 그의 동생의 이야기였다. 물론 나니아의 이야기라면 궁금해서 당연히 것이다.

 

 

6 - 은의자

  유스터스가 다시 돌아왔다. 새벽 출정호를 탔던 유스터스는 학교에 돌아와 바뀐 자신을 돌아보며 지내게 된다. 하지만 유스터스와 그의 친구 질을 괴롭히는 애들을 피해, 다시 아슬란의 이름으로 나니아로 돌아가게 된다. 이야기는 바로 유스터스와 질이 캐스피언 10세의 아들 릴리언을 마녀로부터 구출하는 내용이다.

  환상문학이라는 문학이 좋은 것이 일상생활에서는 느낄 없는 새로운 무언가를 자신의 상상을 통해 느낄 있다는 것이다. 물론 환상문학을 통하지 않고도 느낄 있지만, 자신의 상상력을 최대치로 끌어주게 안내해 주는 존재가 바로 환상문학이다. 그리고 이번 편에서는 부분이 나니아 연대기 시리즈 중에서 가장 좋았다고 본다. 세계의 , 지하세계, 그리고 밑에 있는 세계의 밑바닥, 거인들의 나라, 세계의 천장으로 생각되는 아슬란의 거처와 세계의 밑바닥에서 사는 존재들(이들은 천장이 없으면 불안해 하기 때문에 하늘이 보이는 곳을 두려워한다). 다른 이야기들보다 짧은 글이었지만 그만큼 가장 긴박감이 넘쳤던 이야기이다.

  앞으로 7부가 남았는데, 이야기는 나니아의 종말에 관한 이야기라니 이제 정말 끝이 왔구나 라는 것을 새삼 느끼게 된다. 빨리 읽어봐야겠다.

 

7부 - 마지막 전투

  나니아가 드디어 멸망에 처한다. 딱히 말할 것도 없다. 나니아는 사라지고 새로운 진정한 나니아로 바뀌게 된다. 특히 이 진정한 나니아로 바뀌는 부분에서 아이들이 죽어서 나니아로 오게된 것이 드러난다. 즉, 루이스가 표현하고 싶었던 점은 아이들이 꿈꾸는 세상이 천국이라는 것이다.

  마지막이라 서둘러 이야기를 끝낸 점이 있는 것 같은데, 예를 들어 아이들이 자신들이 죽은 것을 알고도 아무렇지 않아했던 점(사실 죽은 것인지는 모르겠다. 열차사고가 났고, 아이들은 다시 원래의 세계로 돌아가지 않았으니)이다. 특히 수잔의 이야기가 무척 궁금했다. 수잔은 아이들이 고생할 때, 현실의 삶을 즐기고 있었으니. (7부를 읽기 전에 영화를 보았지만 수잔의 비중이 왜 영화에선 이렇게 크게 나왔을까 생각해본다. 아무래도 극 역할 중 제일 예뻐서 그런가?...)

 

 

---------------------------------------------------------------------------------------

 

  책이 어렵지 않고 분량도 많지 않았지만 3개월이나 이 책을 읽었다는 데에 별 변명은 없다. 하지만 1부를 읽고 적었듯이 이 책을 읽음으로써 나니아의 아이들을 통해 다시 어렸을 때 꿈꾸던 순수했던 마음으로 돌아오는 것을 느낄 수 있었서 좋았다.

  또 원작을 읽고 영화를 보니 새롭고, 내가 상상하던 것과는 많이 다른 나니아의 모습에 다시 한번 새로웠다. 이야기가 원작을 따라가지는 않지만, 뭐 상업영화니 그 정도는 이해해 줘야겠다. 실제로 소설은 아이들의 성장에 치중하고 있다. 영화에선 전혀 알려주지 않는다.

 

  이제 반지의 제왕만 읽으면 세계 3대 판타지를 다 읽게 된다. 그런데 난 왜 제일 유명한 반지의 제왕부터 읽지 않았나 싶다.

 

  이만 글을 마친다.

 

by munggeun

조금씩 그동한 한국에서 비정상적이었던 정신 상태가 사회적으로 드러나고 있다.

그 일례가 바로 이세돌의 은퇴 이유다.

학부모들의 자식 사랑... 자식이 구체적으로 자신이 원하는 모습으로 되길 바라는 학부모들.

이세돌이 30살이 되서 은퇴를 결정한 이유는, 아마도 그동안 부모님의 은혜로 버티고 있었다는 생각이 든다.

읽은 기사에 다음과 같은 괜찮은 말이 적어져 있었다.

  대한민국의 학부모들은 다음 세 가지를 배워야 한다. 첫째, 내 자녀는 특출하지 않지만, 그것은 열등하다는 뜻이 아니라 정상적이란 뜻이다. 둘째, 내 자녀가 어떤 성취를 이루기를 바란다면 결과를 급하게 재촉할 것이 아니라 자녀가 그 분야에 흥미와 즐거움을 느낄 만큼 충분한 여유를 두고 기다려야 한다. 설사 성취가 미약하다 하더라도, 자녀가 즐거움을 느꼈다면, 그것만으로도 충분한 보상이 아니겠는가? 셋째, 내 자녀의 성공을 위한 방법을 가장 잘 아는 사람은 내가 아니라 그 분야의 교육자다. 자녀를 이런 저런 교육기관에 보내는 것은 생업에 종사하느라 가르칠 시간이 없어서 맡기는 것이 아니라, 그곳에 교육 전문가가 있기 때문이다. 이 세 가지를 명심하고 시간과 여유를 찾고, 학부모가 자녀에게 너무 집착하는 대신 자신의 삶을 충실히 살면서 자녀를 기다려 준다면 대한민국의 교육문제는 대부분 해결될 것이다.

  왜 나의 아이는 특출나야 하는가? 어떻게 생각하면 특출나다는 것은 정상의 범주에 속하지 아니한 것이다. 부모님의 사회와 지금 사회가 엘리트 위주이지만 세상은 조금씩 변하고있다. 화합과 소통, 그리고 자아. 현대 사회의 대부분의 베스트 셀러가 이에 초점을 맞추고 있다는 것을 볼 때, 다음 세대에서는 분명히 우리 사회가 좀 더 나은 방향으로 변할 것으로 생각된다.

by munggeun

참조 :

http://www.mediatoday.co.kr/news/articleView.html?idxno=107614