실 전! 강 의 실 개발자를 위한 실전 64비트! 64비트 윈도우 커널 탐구 2 AMD64 명령어 대부분의 AMD64 명령어(Instructions) 역시 x86 명령어들과 같다 고 보면 된다. 다음의 예제 코드를 보면서 얼마나 비슷한지 느껴보자. mov [rbp-0x

Size: px
Start display at page:

Download "실 전! 강 의 실 개발자를 위한 실전 64비트! 64비트 윈도우 커널 탐구 2 AMD64 명령어 대부분의 AMD64 명령어(Instructions) 역시 x86 명령어들과 같다 고 보면 된다. 다음의 예제 코드를 보면서 얼마나 비슷한지 느껴보자. mov [rbp-0x"

Transcription

1 실 전! 강 의 실 개발자를 위한 실전 64비트! 64비트 윈도우 커널 탐구 2 연 + 재 + 순 + 서 1회 비트 시대를 향한 첫걸음, 커널모드 드라이버 포팅 2회 비트 윈도우 커널분석 AMD64 3회 64비트 윈도우 커널분석 IA64 연 + 재 + 가 + 이 + 드 운영체제 64비트 윈도우 XP, 64비트 윈도우 2003 개발도구 윈도우 DDK 최신판 기반지식 윈도우 커널모드 드라이버 개발 응용분야 응용 프로그램 및 드라이버 64비트 포팅 김성현 shkim@ahnlab.com 안철수연구소에서 V3, SpyZero 개발에 참여하고 있는 커널모드 드라 이버 개발자이다. 우리나라에서도 평생 소트프웨어 엔지니어로 살아가 면서 식구들을 먹여 살릴 수 있는 날이 올 수 있다는 꿈을 안고 그 길을 닦아나가고 있다. 올해의 목표로 Code Complete 2nd Edition Windows Internals 4th Edition 읽기, 몸무게 10kg 증량하기, 당구 250 만들기, 외 국식당에서 영어로 원하는 거 주문하기 등을 가지고 있다. 개발자를 위한 실전 64비트! 64비트 윈도우 커널 탐구 2 64비트 윈도우 커널분석 AMD64 최근 판매되는 대부분의 PC에서는 64비트 CPU 장착 이라는 문구를 볼 수 있다. PC를 새로 구입하는 사람들은 당연히 최신 기술이라고 선전하는 64비트 CPU를 선택할 테니 64비트 컴퓨팅의 시대가 본격적으로 시작됐다고 해도 과언이 아니다. 일반 데스크탑 PC의 64비트 시대를 열어가는 CPU가 바로 AMD64 계열(인텔 EM64T 포함) CPU들이니 개발자들에게도 AMD64는 무시할 수 없는 개발 영역이 되었다. 어쩌면 지금은 이미 모든 기술을 파악하고 있어야 할 상황인지도 모르지만, 아직 준비가 되지 않았다면 이번 기사를 통해 준비운동을 해보자. 이번 호에서는 64비트 윈도우 x64 에디션의 커널에 대해 살펴보려고 한다. 이번에 다루게 될 내용은 AMD64용 NT 커널에서 서비스 디스크립터 테이블(Service Descriptor Table)의 동작방식 분석과 CPU에서 가상 메모리 주소가 물리 메모리 주소로 변환되는 과정인 가상 주소 변 환(Virtual Address Translation)에 대한 것이다. 우선 AMD64 CPU에 대해 이해하는 시간이 필요할 것 같다. 이번에 다룰 내용은 주로 디버거를 이용해서 디스어셈블된 코드를 보며 설명할 계획이므로 AMD64의 레지스터나 명령어에 대한 내용 을 기본적으로 알고 있어야 한다. x86에서 디스어셈블된 코드를 보는데 익숙하다면 크게 어려운 점 은 없을 것이다. 하지만 x86과의 차이점이 조금은 존재하므로 어떤 것들을 알고 있어야 하는지 먼저 정리하고 넘어가자. AMD64 레지스터 셋 AMD64는 x86을 64비트로 확장한 것이라고 설명했다. 레지스터 셋을 확인해보면 이것이 무슨 뜻 인지 확실히 이해할 수 있다. <그림 1>은 AMD64 Architecture Programmer s Manual 에나와 있는 AMD64 레지스터 셋이다. 대부분의 레지스터들이 과거의 32비트에서 64비트로 확장되면서 이름만 약간 바뀌었고 몇 개의 레지스터만 추가됐다. General-Purpose Registers(범용 레지스터)를 보면 EAX 레지스터가 RAX 레지스터로 확장된 것을 볼 수 있다. RAX에는 64비트 데이터를 저장할 수 있으며 하위 32비트는 여전히 EAX로 접근할 수 있다. RBX부터 RSP까지 모두 마찬가지로 확장됐다. 그 밑으로 R8부터 R15까지 64비트 범용 레지스터가 추가된 것을 확인할 수 있다. 대부분의 범용 레지스터 용도는 과 거와 거의 동일하다. RAX, RIP라는 용어가 나와도 생소해하지 말고 EAX, EIP와 같은 개념으로 이해하면 될 것이다. 마 이 크 로 소 프 트 웨 어 2

2 실 전! 강 의 실 개발자를 위한 실전 64비트! 64비트 윈도우 커널 탐구 2 AMD64 명령어 대부분의 AMD64 명령어(Instructions) 역시 x86 명령어들과 같다 고 보면 된다. 다음의 예제 코드를 보면서 얼마나 비슷한지 느껴보자. mov [rbp-0x80],rcx mov rdi,[rdi+0x18] movzx ecx,byte ptr [rax+rdi] sub rsp,rcx and rsp,0xfffffffffffffff0 mov rdi,rsp mov rsi,[rbp+0x100] add rsi,0x28 test byte ptr [rbp+0xf0],0x1 이 코드 샘플에서 보여주고 있는 명령어들은 mov, movzx, sub, and, add, test이다. 모두 x86 명령어에서 익히 보아왔던 것들이고 그 의미도 x86에서와 같다. Operand들이 약간 어색하게 보일 수 있 는데 앞에서 AMD64 레지스터 셋을 이해했다면 어렵지 않게 익숙해 질 수 있다. rbp, rcx, rdi, rax, rsp, rsi, 모두 ebp, ecx, edi, eax, esp, esi와 같은 개념인데 크기만 64비트라고 생각하면 된다. 이제 코 드들이 자연스럽게 보이는가? 세 번째 라인에서와 같이 ecx가 직접 보이는 경우도 있다. 이 역시 rcx 레지스터(64비트)를 ecx 영역(32비 트)만 사용하는 것이라고 해석하면 된다. 참고로 같은 명령어인데 AMD64에서 의미가 약간 달라지는 명령어에 대해 간단하게 살펴보 자. 다음 코드는 32비트에서의 코드이다. ff bf0 jmp dword ptr [MyDrv!_imp_MyFunction] 디스어셈블리 코드 앞에 숫자들은 메모리 상에 존재하는 실제 코드 들로 opcode와 operand를 보여주고 있다. jmp dword ptr (ff25xxxxxxxx)은 32비트에서 절대주소 점프 명령으로 xxxxxxxx에 절대 주소 0xf09b2400이 들어 있다. 하지만 64비트에서는 상대 주소 점프로 해석되어 xxxxxxxx에는 상대 주소가 들어간다. 다음은 64비 트에서의 코드이다. <표 1> Encoding for RIP-Relative Addressing ModRM and SIB Meaning in Legacy and Meaning in Additional 64-bit Encodings Compatibility Modes 64-bit Mode Implications ModRM Byte: Disp32 RIP + Disp32 Zero-based (normal) mod=00 displacement addressing r/m = 101 (none) must use SIB form <그림 1> AMD64 레지스터 셋 General-Purpose Registers(GPRs) 64-Bit Media and Floating-Point Registers RAX MMX0/FPR0 RBX MMX1/FPR1 RCX MMX2/FPR2 RDX MMX3/FPR3 RBP MMX4/FPR4 RSI MMX5/FPR5 RDI MMX6/FPR6 RSP MMX7/FPR7 R8 R9 R10 Flags Register R11 0 EFLAGS RFLAGS R12 0 R13 Instruction Pointer R14 EIP RIP R Legacy x86 registers, supported in all modes Register extensions, supported in 64-bit mode 128-Bit Media Registers Application-programming register also include the 128-bit media control-and-status register and the x87 tag-word, control-word, and status-word registers ff jmp qword ptr [MyDrv!_imp_MyFunction] 필자도 처음에는 이것을 dword만 qword로 확장된 절대 주 소 점프 명령으로 생각했다. 하지만 이 코드는 32비트에서와 다르게 동작하고 있었다. jmp qword ptr (ff25xxxxxxxx)을 자 세히 보면 이상한 점을 발견할 수 있는데 절대 주소 값을 담는 xxxxxxxx 부분이 여 전히 32비트라는 점이다. 또 하나는 실제 XMM0 xxxxxxxx에 담겨있는 값인 0x 는 XMM1 절대 주소 값으로 보기에는 터무니없이 작 XMM2 다는 점이다. 이 의문을 풀기 위해 한참을 XMM3 XMM4 헤매던 결과 AMD64 매뉴얼에서 <표 1>과 XMM5 같은 내용을 찾을 수 있었다. XMM6 XMM7 <표 1>에서 왼쪽 맨 위에 ModRM과 SIB XMM8 가 나오는데 이것들은 명령어 코드들 중에 XMM9 XMM10 서 특정한 위치에 들어 있는 값들이다. XMM11 ff25xxxx xxxx에서 ff는 jmp opcode이고 XMM12 25가 ModRM에 해당하여 이것이 jmp 명 XMM13 XMM14 령의 종류를 결정한다. <표 1>에 의하면 XMM15 ff25xxxxxxxx 명령어 코드는 32비트 하위 호환 모드(Legacy and Compatibility Modes)에서 xxxxxxxx(disp32)로 점프하 는 절대 점프로 해석된다. 하지만 64비트

3 64비트 윈도우 커널분석 AMD64 (64bit Mode)에서는 ff는 같은 jmp opcode이지만 25(ModRM)의 의 <그림 2> Win32 API부터 커널 API까지의 흐름도 미가 RIP + Disp32로 현재 RIP + xxxxxxxx(disp32)로 해석된다. 다시 말하면 현재 실행중인 주소 + 32비트 범위의 값 으로 계산되 어 점프할 주소가 결정되는 상대 점프라는 뜻이다. 이렇게 동작하는 방식을 RIP-Relative Addressing이라고 하는데 어떤 opcode든지 ModRM에 의해 RIP-Relative Addressing이 가능하다. 이와 같이 어떤 경우에는 32비트 모드와 64비트 모드에서 동작이 달라지는 부분이 있을 수도 있다는 사실을 늘 염두에 두고 있어야 한 다. 하지만 대부분 그렇지 않은 코드이므로 너무 걱정하지 않아도 된 다(ModRM, SIB 등에 익숙하지 않은 독자들도 있을텐데, 이 내용을 이해하려면 CPU 매뉴얼에서 명령어(instruction) 구조에 해당하는 부분을 보기 바란다). SDT Application CreateFile() Kernel32.dll NtCreateFile() Ntdll.dll System Call User Mode Kernel Mode System Call Handler ZwCreateFile() Driver NtCreateFile() NT Kernel API NT 커널 서비스 테이블 NT 커널 모드 드라이버를 개발해 봤다면 NT 커널이 제공하는 서비 스 디스크립터 테이블(Service Descriptor Table, 이하 서비스 테이 블)을 들어본 적이 있을 것이다. 이를 간단히 설명하면 NT 커널이 응 용 프로그램 개발을 위해 제공하는 API들의 포인터를 담고 있는 테이 블이라고 할 수 있다. AMD64에서 NT 커널 서비스 테이블을 분석하 기 전에 32비트에서의 개념을 먼저 정리할 필요가 있다. 우리가 흔히 사용하는 CreateFile() API를 통해 서비스 테이블이 사용되는 예를 보면 <그림 2>와 같다. 어떤 응용 프로그램이 kernel32.dll에 존재하는 CreateFile() Win32 API를 호출하면 ntdll.dll이 제공하는 API인 NtCreateFile() 이 호출된다. ntdll.dll의 NtCreateFile()은 syscall로 커널 모드로 진 입하여 실제 NT 커널의 NtCreateFile()을 호출하게 하는 유저 모드 랩퍼 함수이다. 이것을 통해 커널 모드로 진입하면 System Call Handler는 서비스 테이블(SDT)에 등록된 실제 NtCreateFile() 커 널 함수의 포인터를 찾아서 이것을 직접 호출해 주게 된다. 커널 모드 드라이버에서도 실제 NtCreateFile()을 호출하려면 비슷한 과정을 거치게 되는데 커널 모드에서는 ZwCreateFile() API가 랩퍼 함수의 역할을 하고 있다. 서비스 테이블에는 NtCreateFile()뿐 아니라 수많은 NT 커널 API 의 포인터들이 들어 있다. 이것을 확인하기 위해 이제부터 WinDBG 를 이용해 NT 커널의 서비스 테이블을 살펴보자. NT 커널에서 익스 포트된 KeServiceDescriptorTable을 참조하면 서비스 테이블을 볼 수있다. KeServiceDescriptorTable의 내용을 파악하기 위해 구조체로 표 현하면 다음과 같다. struct ServiceDescriptorTable { PVOID ServiceTableBase; PVOID ServiceCounterTable; ULONG NumberOfServices; PVOID ParamTableBase; } 첫 번째 필드인 ServiceTableBase에는 서비스 테이블의 시작 주소 가 들어 있다. 이 주소부터 4바이트 단위로 NT 커널 서비스 API들의 주소가 들어가 있다. 두 번째 필드는 커널 서비스 API가 호출된 회수 를 기록하는 테이블인데 디버그 버전에서만 사용되고 릴리즈 버전에 서는 항상 0이므로 설명을 생략한다. 세 번째 필드인 NumberOfSer vices에는 SDT에 등록되어 있는 NT 커널 서비스 API의 개수가 적혀 있다. 앞에서 보면 0x11c개의 API가 등록되어 있음을 알 수 있다. ParamTableBase에는 파라미터 테이블의 시작 주소가 들어 있다. 파라미터 테이블이란 각 API마다 전달되는 파라미터가 몇 바이트인 지 기록된 테이블이다. 이 주소부터 1바이트 단위로 전달되는 파라미 터의 바이트 수가 기록되어 있다. 예를 들어 ServiceTableBase [3]에 있는 API에 해당하는 파라미터의 수는 ParamTableBase[3]에서 확 인할 수 있다. 첫 번째 필드인 ServiceTableBase에 해당하는 포인터 0x804e68b0은 nt!kiservicetable을 가리킨다. kd> dd keservicedescriptortable e68b c e kd> dd 804e68b0 804e68b f c3b e11e6 804e68c e2 마 이 크 로 소 프 트 웨 어 265

4 실 전! 강 의 실 개발자를 위한 실전 64비트! 64비트 윈도우 커널 탐구 2 804e68d feb3 80f7cb e68e0 807ae d b e916 4바이트 단위로 함수 포인터들이 기록되어 있는 것을볼수있다. 첫 번째 함수와 두 번째 함수를 보면 다음과 같다. kd> u 80590f12 nt!ntacceptconnectport: 80590f12 689c push 0x9c 80590f f80 push 0x804f f1c e8623ff5ff call nt!_seh_prolog (804e4e83) kd> u 8057c3b1 nt!ntaccesscheck: 8057c3b1 8bff mov edi,edi 8057c3b3 55 push ebp 8057c3b4 8bec mov ebp,esp [ WinDBG 웹심볼 설정 -.symfix 명령어 ] 웹심볼(WebSymbol)이란 마이크로소프트에서 웹으로 제공하는 OS 구성 파일들 에 대한 심볼 파일을 말한다. 본문 설명에서 kd> u 80590f12 명령어를 사용했을 때 nt!ntacceptconnectport 같은 내부 함수 이름이 정확히 나오는 이유는 WinDBG Symbol File Path에 웹심볼을 설정해놨기 때문이다. 웹심볼이 설정되지 않았다면 다음과 같은 형태로 나왔을 것이다. kd> u 80590f12 nt!rtlfindunicodeprefix+0xb54: 80590f12 689c push 0x9c 80590f f80 push 0x804f f1c e8623ff5ff call nt!cisqrt+0x2d7 (804e4e83) 요즘은 WinDBG 사용자도 많아졌고 웹심볼에 대해서도 많이 알고 있어서 대부 분의 사용자들이 이미 Symbol File Path에 다음과 같이 웹심볼을 설정하고 사용하 고있을것이다. SRV*C:\OsSymbols* 하지만 심볼패스를 설정할 때마다 이와 같이 긴 포맷의 문자열을 외워서 입력하거 나 Copy & Paste하는 경우가 많은 것 같다. 앞으로는 그럴 필요 없이 WinDBG에 서 제공하는.symifx 명령어를 이용해보자. 간단하게 다운로드할 패스만 지정하여 다음과 같이 입력하면 웹심볼이 설정된다. kd>.symfix C:\OsSymbols kd>.sympath Symbol search path is: SRV*C:\OsSymbols* symbols 서비스 테이블에서 NtAcceptConnectPort()는 ServiceTableBase [0], 즉 Index 0이고 NtAccessCheck()은 ServiceTableBase[1], Index 1이다. 그렇다면 거꾸로 우리가 어떤 커널 API의 인덱스를 알 고 싶다면 어떻게 해야 할까? 앞에서 본 것처럼 ServiceTableBase에 서 함수 포인터를 일일이 쳐보면서 찾는 방법도 있지만 더 좋은 간단 한 방법이 있다. System Call Handler가 서비스 테이블에서 어떤 NT 커널 API의 함수 포인터를 참조할 수 있는 이유는 System Call Handler를 호출하는 쪽에서 API의 인덱스를 넘기기 때문이다. 그러 므로 System Call Handler를 호출하는 Zw 함수를 들여다보면 이 인 덱스를 찾을 수 있다. 예를 들어 NtOpenKey()의 인덱스를 찾고 싶다 면 ZwOpenKey()의 코드를 들여다보면 된다. kd> u ZwOpenKey nt!zwopenkey: 804e5bce b mov eax,0x77 804e5bd3 8d lea edx,[esp+0x4] 804e5bd7 9c pushfd 804e5bd8 6a08 push 0x8 804e5bda e8f29bffff call nt!kisystemservice (804df7d1) 804e5bdf c20c00 ret 0xc KiSystemService를 호출하기 전에 상수를 사용하는 것을 찾으면 되는데 바로 첫 번째 라인에서 eax에 0x77을 넣는 것이 보인다. 따라 서 서비스 테이블에서 NtOpenKey()의 함수 포인터는 다음과 같이 ServiceTableBase[0x77]에서 확인할 수 있다. kd> dd 804e68b0 + (77*4) 804e6a8c 80573cbc 8057ddc d b0da 804e6a9c 80578c bbe 80580b3a 805e6ceb 804e6aac 8058a1d ef f e51 804e6abc b 805a0e11 805e6f26 805a110c kd> u 80573cbc nt!ntopenkey: 80573cbc push 0x cc1 6830a14e80 push 0x804ea cc6 e8b811f7ff call nt!_seh_prolog (804e4e83) 80573ccb 33f6 xor esi,esi 80573ccd 33db xor ebx,ebx 네 번째 필드인 ParamTableBase에 해당하는 포인터 e4은 nt!kiargumenttable을 가리킨다. kd> db e e c 2c 40 2c c c.,,@,@D f c c 08 0c

5 64비트 윈도우 커널분석 AMD c 14 0c 2c 10 0c-0c 1c , c c $$ kd> u fffff800`00a082f1 fffff800`00a082f1 8bc4??? 첫 번째 함수 NtAcceptConnectPort()의 파라미터는 0x18바이트 이다. 보통 하나의 파라미터는 4바이트를 차지하므로 6개의 파라미터 를 가진 함수임을 알 수 있다. 두 번째 함수 NtAccessCheck()는 0x20바이트이므로 8개의 파라미터를 가진 함수임을 알 수 있다. 나머 지도 마찬가지로 이 테이블에 의해 파라미터의 수를 파악할 수 있다. 그런데 이 테이블에 기록되는 내용들이 AMD64에서는 약간 다르게 설명되므로 잘 기억해두기 바란다. AMD64 서비스 테이블 분석 이제 본격적으로 AMD64에서 서비스 테이블에 대해 살펴보자. 분석 에 사용된 OS는 윈도우 XP x64 에디션 베타이다. 32비트에서와 같 은 개념으로 KeServiceDescriptorTable을 참조하면서 시작한다. kd> dq KeServiceDescriptorTable fffff800` fffff800`008eebd0 fffffadf`f fffff800` ` fffff800`008ef514 서비스 테이블에 등록되어 있는 함수 포인터들이 잘못 기록되어 있 는 것일까? 이상한 생각이 들어서 마지막 1을 0으로 생각하고 살펴봤 더니 모두 정확히 커널 서비스 함수의 시작 주소를 보여주고 있었다. 즉 다음과 같은 형태로 서비스 테이블이 구성되어 있다고 생각해야 한다는 것이다. kd> dq fffff800`008eebd0 fffff800`008eebd0 fffff800`00a082f0 fffff800`00a76110 fffff800`008eebe0 fffff800`00a7d350 fffff800`00a76180 fffff800`008eebf0 fffff800`00a7d3f0 fffff800`00a76200 fffff800`008eec00 fffff800`00a7d4b0 fffff800`00a7d570 fffff800`008eec10 fffff800`00ab24a0 fffff800`00ab3ad0 fffff800`008eec20 fffff800`00ab3ad0 fffff800`00a6ead0 fffff800`008eec30 fffff800`00a6e520 fffff800`00a4b220 fffff800`008eec40 fffff800`00a4b1b0 fffff800`00ab2b00 <리스트 1> 서비스 테이블의 함수 포인터를 호출하는 커널 코드 01: fffff800`008eafde 4c8b17 mov r10,[rdi] 이번에는 dd 명령어가 아니라 dq 명령어를 사용했다. dq는 Quadword values(8바이트)를 디스플레이(display)하라는 명령이다. AMD64는 64비트 CPU이므로 포인터들이 64비트(8바이트)로 저장 된다. 따라서 dq로 보아야 제대로 된 형태로 데이터를 볼 수 있다. 보 이는 바와 같이 WinDBG에서 64비트 값을 표현하는 방식은 32비트 이다. 다음으로 ServiceTableBase인 fffff800`008eebd0를 살펴보자. kd> dq fffff800`008eebd0 fffff800`008eebd0 fffff800`00a082f1 fffff800`00a76111 fffff800`008eebe0 fffff800`00a7d351 fffff800`00a76181 fffff800`008eebf0 fffff800`00a7d3f1 fffff800`00a76201 fffff800`008eec00 fffff800`00a7d4b1 fffff800`00a7d571 fffff800`008eec10 fffff800`00ab24a0 fffff800`00ab3ad0 fffff800`008eec20 fffff800`00ab3ad0 fffff800`00a6ead1 fffff800`008eec30 fffff800`00a6e521 fffff800`00a4b220 fffff800`008eec40 fffff800`00a4b1b0 fffff800`00ab2b00 32비트에서와 마찬가지로 64비트 함수 포인터들이 나열되어 있는 것을 볼 수 있다. 그런데 포인터들을 보면 마지막이 모두 0 또는 1로 끝난다. 어떤 함수들인지 파악하기 위해서 함수들을 하나씩 들여다보 면 0으로 끝나는 함수 포인터들은 아무런 문제가 없는데 1로 끝나는 함수들은 다음과 같이 함수의 내용이 제대로 보이지 않는다. 02: fffff800`008eafe1 4d8b14c2 mov r10,[r10+rax*8] 03: fffff800`008eafe5 490fbaf200 btr r10,0x0 04: fffff800`008eafea 7347 jnb nt!kidispatchinterrupt+0x1e (fffff eb033) 05: fffff800`008eafec 48894d80 mov [rbp-0x80],rcx 06: fffff800`008eaff0 488b7f18 mov rdi,[rdi+0x18] 07: fffff800`008eaff4 0fb60c38 movzx ecx,byte ptr [rax+rdi] 08: fffff800`008eaff8 482be1 sub rsp,rcx 09: fffff800`008eaffb 4883e4f0 and rsp,0xfffffffffffffff0 10: fffff800`008eafff 488bfc mov rdi,rsp 11: fffff800`008eb bb mov rsi,[rbp+0x100] 12: fffff800`008eb c628 add rsi,0x28 13: fffff800`008eb00d f685f test byte ptr [rbp+0xf0],0x1 14: fffff800`008eb f jz nt!kidispatchinterrupt+0x1e55 (fffff eb025) 15: fffff800`008eb b352b cmp rsi,[nt!mmuserprobeaddress (fffff )] 16: fffff800`008eb01d 480f cmovnb rsi,[nt!mmuserprobeaddress (fffff )] 17: fffff800`008eb025 c1e903 shr ecx,0x3 18: fffff800`008eb028 f348a5 rep movsq 19: fffff800`008eb02b 4883ec20 sub rsp,0x20 20: fffff800`008eb02f 488b4d80 mov rcx,[rbp-0x80] 21: fffff800`008eb033 41ffd2 call r10 마 이 크 로 소 프 트 웨 어 267

6 실 전! 강 의 실 개발자를 위한 실전 64비트! 64비트 윈도우 커널 탐구 2 이와 같이 함수 포인터들이 들어있어야 정상일 것 같은데, 함수 포 인터에 1을 더하여 함수 포인터가 함수의 시작 위치를 정확히 가리키 지 못하게 만든 이유는 무엇일까? 또 왜 어떤 것들은 그런 처리를 하 지 않고 정확히 함수의 시작 주소를 나타내는 것일까? 필자가 처음 이것을 분석할 때는 무척이나 당황스러웠던 나머지 서비스 테이블 후 킹을 막기 위한 보안 수단이라는 억측까지 했었다. 하지만 이것이 억 측이라는 사실을 알기까지는 얼마 걸리지 않았다. 이 상황을 정확히 이해하기 위해서 서비스 테이블을 사용하는 코드를 분석하기로 한 것 이다. ntdll.dll에서 syscall을 호출하거나 커널에서 Zw 계열 함수를 호출 했을 때 진입하는 nt!kidispatchinterrupt + 0x1e0e 근처의 코드를 보면 서비스 테이블의 함수 포인터들이 어떻게 호출되는지 알 수 있 다(정확히 KiDisapatchInterrupt 함수 내부의 코드인지는 심볼이 없 어서 확실치 않다. OS가 베타버전이라 웹심볼에 심볼이 존재하지 않 았다). <리스트 1>은 함수 포인터의 비밀을 푸는데 핵심이 되는 주요 한 코드 부분만 뽑은 것이다. 이제 AMD64 어셈블리 코드가 본격적으로 나오기 시작했는데 한 눈에 분석이 가능한 독자들이 있을지 모르겠다. x86 어셈블리에 익숙 하다면 레지스터 이름들 때문에 약간은 어색하겠지만 대충 어떤 동작 을 하고 있는지 한눈에 파악할 수도 있을 것이다. 하지만 어셈블리를 분석하려면 눈을 부릅떠야 하는 필자와 같은 처지의 독자들을 위해서 한 라인씩 다시 보면서 자세하게 설명하기로 한다. 01: fffff800`008eafde 4c8b17 mov r10,[rdi] 이 시점에 rdi는 KeServiceDescriptorTable 주소를 가지고 있다. 따라서 [rdi]는 첫 번째 멤버필드인 ServiceTableBase이다. 02: fffff800`008eafe1 4d8b14c2 mov r10,[r10+rax*8] 이 시점에 rax는 서비스 테이블 인덱스이다. 테이블의 위치를 계산해서 함수 포인터를 r10에 저장한다. 03: fffff800`008eafe5 490fbaf200 btr r10,0x0 함수 포인터의 첫 번째 비트를 체크하고 클리어한다. xxxxxxxx`xxxxxxx1 형식의 함수 주소는 여기서 xxxxxxxx`xxxxxxx0 형식으로 바뀐다. 04: fffff800`008eafea 7347 jnb nt!kidispatchinterrupt+0x1e (fffff eb033) 마지막 비트가 0이었던 것들은 바로 r10의 함수 포인터를 콜하는 주소(21라인)로 점프! 05: fffff800`008eafec 48894d80 mov [rbp-0x80],rcx 함수 내에서 rcx 레지스터를 사용하기 위해 rcx에 존재하는 함수의 첫 번째 파라미터를 로컬스 택에 저장(rcx가 첫 번째 파라미터인 이유는 뒤의 AMD64 FASTCALL에서 설명한다). 06: fffff800`008eaff0 488b7f18 mov rdi,[rdi+0x18] KeServiceDescriptorTable의네번째멤버ParamTableBase 참조 07: fffff800`008eaff4 0fb60c38 movzx ecx,byte ptr [rax+rdi] ParamTableBase[rax] 로 파라미터 크기 구하기 08: fffff800`008eaff8 482be1 sub rsp,rcx 파라미터 크기만큼 rsp 감소하고 09: fffff800`008eaffb 4883e4f0 and rsp,0xfffffffffffffff0 16바이트 단위 절삭 10: fffff800`008eafff 488bfc mov rdi,rsp 현재 스택포인터(rsp)를 rdi (destination)로 설정한 후 11: fffff800`008eb bb mov rsi,[rbp+0x100] rsi(source)는 전달된 파라미터(호출 당시 스택포인터로 추정)에서 가져오고 12: fffff800`008eb c628 add rsi,0x28 리턴 Address 8바이트, 상위 함수에서 사용하는 4개의 파라미터 저장공간 32바이트 스킵(역시 뒤의 AMD64 FASTCALL에서 설명한다) 13: fffff800`008eb00d f685f test byte ptr [rbp+0xf0],0x1 14: fffff800`008eb f jz nt!kidispatchinterrupt+0x1e55 (fffff eb025) 15: fffff800`008eb b352b cmp rsi,[nt!mmuserprobeaddress (fffff )] 16: fffff800`008eb01d 480f cmovnb rsi,[nt!mmuserprobeaddress (fffff )] 메모리 유효성 검사로 추정 17: fffff800`008eb025 c1e903 shr ecx,0x3 파라미터 사이즈를 8로 나누어 개수로 환산 18: fffff800`008eb028 f348a5 rep movsq rsi에서 rdi로 ecx 카운트만큼 복사. 즉 하위 함수를 호출하기 위해 파라미터를 스택에 저장 19: fffff800`008eb02b 4883ec20 sub rsp,0x20 레지스터로 전달하는 4개의 레지스터 파라미터를 저장할 스택공간 예약(뒤의 AMD64 FASTCALL에 서 설명한다) 20: fffff800`008eb02f 488b4d80 mov rcx,[rbp-0x80] 첫 번째 파라미터 복원 21: fffff800`008eb033 41ffd2 call r10 함수 포인터 호출 이 비밀을 푸는데 핵심은 마지막이 0으로 끝나는 함수 포인터는 그 대로 호출하고 1로 끝나는 함수 포인터는 1을 0으로 만들고 추가적인 작업을 한 후에 함수 포인터를 호출한다는 데에 있다. 추가적인 작업 은 파라미터 테이블을 참조해서 몇 개의 파라미터를 사용해야 하는지 확인하고 복사하는 작업이다. 이러한 작업이 왜 필요한 걸까? AMD64 함수호출규약 FASTCALL AMD64 컴파일러는 기본적으로 FASTCALL 함수호출규약(Calling Convention)을 사용한다. x86에서 FASTCALL은 함수의 첫 번째, 두 번째 파라미터는 ecx, edx 레지스터를 통해 전달하고 나머지는 스 택을 이용해서 전달하는 것이었다. 이와 비슷하게 AMD64에서는 앞 의 네 개의 파라미터를 레지스터 rcx, rdx, r8, r9로 전달하고 나머지 는 스택을 통해서 전달하는 것이 되었다. 이제 감이 좀 잡히는가? 필자는 DDK 도움말을 뒤져가면서 일일이 서비스 테이블에 있는 함수 포인터에 해당하는 커널 서비스 함수의 함수원형(프로토타입)을 살펴보았다. 여기서 확인된 사실은 함수 포 인터의 첫 번째 비트가 0으로 되어 있는 함수들은 파라미터가 4개 이 하라는 것이었다. 반면에 함수 포인터의 첫 번째 비트가 1로 되어 있 는 함수들은 파라미터가 5개 이상이었다

7 64비트 윈도우 커널분석 AMD64 파라미터가 4개 이하인 것들은 4개의 파라미터가 rcx, rdx, r8, r9 레지스터로 전달되기 때문에 KeServiceDescriptorTable.Param TableBase[Index]의 내용이 모두 0이다. 함수를 호출할 때 스택으로 전달되는 파라미터가 없기 때문이다. 32비트에서는 파라미터 테이블 에 0이 들어 있으면 파라미터가 없는 함수를 의미했지만 AMD64에서 는 0이 들어 있으면 파라미터가 4개 이하인 함수라는 뜻이 된다. <리 스트 1>에서 함수 포인터의 첫 번째 비트가 0으로 확인되면 곧바로 21라인의 call r10으로 점프한 이유는 함수의 파라미터는 이미 rcx, rdx, r8, r9에 들어 있고 추가로 파라미터 테이블을 참조할 필요가 없 는 함수라고 판단했기 때문이다. 이제 파라미터가 5개 이상인 것들에 대해 생각해보자. 4개의 파라미 터는 레지스터로 전달되지만 추가의 파라미터는 스택을 이용해야 하 기 때문에 KeServiceDescriptorTable.ParamTableBase[Index]에서 4개를 초과하는 파라미터의 크기를 참조해야 한다. 이것은 32비트에 서 파라미터 테이블에 있던 값들과 의미가 다르다. 32비트에서는 (함 수 파라미터 개수 4)에 대한 값이 들어 있었지만 AMD64의 경우에 는 ((함수 파라미터 개수 - 4) 8)에 대한 값이 들어 있는 것이다. 예를 들어 파라미터 테이블을 참조한 값이 8이었다면 8은 파라미터 하나를 스택에 저장할 수 있는 크기이므로 그 함수의 파라미터 수는 레지스터를 통해 전달되는 4개의 파라미터와 스택을 통해 전달되는 한 개를 더해서 5개라는 것을 알 수 있게 된다. <리스트 1>에서 함수 포인터의 첫 번째 비트가 1로 확인되면 파라미터 테이블을 참조해서 몇 개의 파라미터를 추가로 사용해야 하는지 확인하고 복사하는 작업 을 하는데, 이것을 명확히 이해하려면 스택프레임이 어떻게 구성되는 지를 이해해야 한다. <그림 3>에서 어떤 함수가 호출되었을 때 스택 영역의 구성을 보이 고 있다. 그냥 보면 x86에서의 스택 구성과 크게 다르지 않아 보인다. 하지만 반드시 알고 있어야 할 차이점은 FASTCALL임에도 불구하 고 첫 번째 파라미터부터 네 번째 파라미터까지의 스택영역(레지스터 파라미터 영역)이 존재한다는 것이다. 이 영역은 호출되는 함수에 의 해 사용되는 경우도 있고 그렇지 않는 경우도 있지만 함수를 호출할 때 대부분 이와 같이 구성된다. 스택프레임을 이해하고 다시 <리스트 1>을 보면 6~18라인에서 파라미터가 5개 이상인 경우에 복사해주는 과정을 수행하고 있음을 알 수 있다. 이중에서 6~10라인이 다섯 번 째 파라미터부터 N번째 파라미터까지의 스택 파라미터 영역 을 확 보해 주는 과정이다. <그림 3>에서 B 함수를 현재 함수로 가정하면 다섯 번째 파라미 터 부터 N번째 파라미터 까지의 자리에 C 함수의 파라미터들이 들 어갈 것이다. 11~12라인이 상위 함수의 스택 파라미터 영역 위치를 계산하는 과정이다. 12라인에서 설명했던 리턴 Address, 상위함수 <그림 3> AMD64의 스택프레임 구조 A 함수: B 함수 호출 B 함수가 사용하는 스택 영역 B 함수: C 함수 호출 C 함수 Return Address 지역변수 또는 특수용도 로 사용하는 스택 영역 N 번째 파라미터 다섯 번째 파라미터 네 번째 파라미터 세 번째 파라미터 두 번째 파라미터 첫 번째 파라미터 Return Address 지역변수 또는 C 함수 호출을 위한 스택 파라미터 영역 C 함수 호출을 위한 레지스터 파라미터 영역 에서 사용하는 4개의 파라미터 저장공간 스킵 이라는 의미는 상위 함 수의 Return Address 영역과 첫 번째부터 네 번째 파라미터 영역까 지를 스킵하고 그 위에 존재하는 5~N번째 파라미터를 참조하겠다는 뜻이다. 결국 18라인을 수행하게 되면 상위함수의 스택 파라미터 영 역 을 그대로 현재 함수의 스택 파라미터 영역 으로 복사하는 동작 을 수행하게 된다. 19라인에서는 레지스터 파라미터 영역 에 대해서 자리만 확보해주는 것을 보이고 있다. 이렇게 하고 나서 21라인을 수 행하면 호출되는 커널 서비스 함수는 모든 파라미터들을 정확히 전달 받아 동작하게 된다. 여기서 집중해서 봐야 할 부분은 파라미터가 4개 이하인 함수들과 파라미터가 5개 이상인 함수들의 처리 방법이 다르다는 것이다. FASTCALL의 특성 때문에 파라미터가 4개인 경우와 5개 이상인 경 우를 구분할 필요가 있었을 것으로 보인다. 하지만 이렇게 구분되는 함수들을 특별히(?) 표시하기 위한 방법으로 함수 포인터의 첫 번째 비트를 선택한 것은 솔직히 약간 어처구니가 없었다. 포인터의 일부 분을 특별한 목적을 위한 플래그로 사용하면서 포인터를 손상시키는 것은 사파의 무공에서나 볼 수 있는 일인데 정공만을 지향한다던 마 이크로소프트(이하 MS)에서 이런 일을 한 것이 필자에게는 얼른 납 득되지 않는 일이었다. 윈도우 서버 2003 SP1 x64 서비스 테이블 몇 달 전 필자가 윈도우 XP x64 에디션 베타를 가지고 앞의 내용을 분석하고 있을 무렵 어떤 기사를 보게 되었다. MS가 윈도우 서버 2003 SP1 x64 에디션에서는 서비스 테이블 후킹을 하지 못하도록 조 치를 한다는 내용이었다. 이제는 서비스 테이블 후킹이라는 기법이 마 이 크 로 소 프 트 웨 어 269

8 실 전! 강 의 실 개발자를 위한 실전 64비트! 64비트 윈도우 커널 탐구 2 각종 악성코드에서도 빈번하게 쓰이는 기술이 되었으니 당연한 조치 라고 생각만 했을 뿐 그 당시에는 필자도 아무런 생각이 없었다. 그 기사 한 줄이 몇 달 후에 필자를 상당히 당황스럽게 하리라고는 상상 도 하지 못했다. 최근에 이 글을 정리하면서 올해 정식 출시된 윈도우 XP x64 에디 <그림 4> x86 가상 주소 변환 10 32* Page Directory Directory Entry CR3(PDBR) *32 bits aligned onto a 4-KByte boundary. <그림 5> IA32의 PDE, PTE Linear Address Directory Table Offset Page Table Page-Table Entry PDE 1024 PTE = 2 20 Pages Page-Directory Entry (4-KByte Page Table) 0 4-KByte Page Physical Address Page-Table Base Address Avail G S P 0 A C P P U R W /S / P D T W Available for system programmer s use Global Page (Ignored) Page size (0 indicates 4 KBytes) Reserved (Set to 0) Accessed Cache disabled Write-through User/Supervisor Read/Write Present Page-Table Entry (4-KByte Page) Page Base Address Avail G A P DA P P U R C W /S / P T D T W Available for system programmer s use Global Page Page Table Attibute Index Dirty Accessed Cache disabled Write-through User/Supervisor Read/Write Present 션을 다시 분석해 보니 서비스 테이블의 내용이 앞서 필자가 설명한 내용과 완전히 달라진 것을 알게 되었다. 서비스 테이블의 기본 구조 에 무엇인가를 꼬아놓은 듯한 형태로 구성되어 있어서 일반적으로 알 려진 서비스 테이블에 대한 지식으로는 접근할 수 없는 상황이 되었 다. 아차 싶어서 윈도우 서버 2003 SP1 x64 에디션을 살펴보니 역시 같은 상황이었다. MS가 XP, 서버 2003 SP1 x64 에디션 정식 버전을 출시하면서 같은 개념을 적용한 것으로 보였다. 간단하게 분석을 시도해 봤는데 만만치 않은 작업이 되리라는 느낌 을 강하게 받았다. 해커, 크래커들을 막기 위한 방법일 테니 간단한 트 릭에 의해서 풀리지는 않을 것이다. 이 부분에 대한 비밀은 차후에 누 군가가 다시 풀어줘야 할 것 같다. 현재는 필자가 시간적인(또는 기술 적인) 한계에 의해서 이 부분을 진행할 계획을 가지고 있지는 않기 때 문이다. 이렇게 되면 사실 앞에서 필자가 설명했던 내용들은 쓸모없는 정보가 되었다고 볼 수도 있다. 하지만 AMD64 플랫폼에서 커널 코드 를 분석하고 연관된 지식을 얻을 수 있는 기회이기도 했으니 나름대로 의미를 부여해서 그렇게 헛된 작업을 아니었다고 결론 내리고 싶다. 가상 주소 변환 이제부터 다룰 내용은 프로그램에서 메모리를 사용할 때 가상 메모리 주소로부터 물리 메모리 주소로 변환되는 과정에 대한 것이다(다행히 도 이 부분은 XP x64 에디션 정식 버전에서도 동일하다). 32비트에서 는 4GB의 가상 메모리 주소를 사용했었다. 실제로 4GB가 되지 않는 물리 메모리를 가지고 4GB의 가상 메모리 사용을 가능하게 하려면 가상 주소 변환(virtual address translation)이라는 과정을 거쳐야 한다. 먼저 32비트의 가상 주소 변환에 대해서 간단히 알아보고 AMD64의 그것에 대해 알아보도록 하자. 정확히 설명하면 가상 주소를 선형 주소(linear address)로 변환하 는 세그멘테이션(segmentation)과 선형 주소를 물리 주소(physical address)로 변환하는 페이징(paging)을 나누어서 설명해야 한다. 하 지만 기사의 성격상 세그멘테이션은 생략하고 페이징에 대한 내용만 설명하도록 하고 용어도 인텔 매뉴얼의 선형주소 변환, AMD 매뉴얼 의 페이지 변환 등을 통칭하기 위해 이 기사에서는 가상 주소 변환으 로 정의하도록 하겠다. <그림 4>는 IA32 매뉴얼에서 참조한 그림이다. 기본적으로 CR3 레 지스터에 Page Directory Base를 가리키는 포인터가 존재한다. 이 포인터가 가리키는 Page Directory에는 Page Directory Entry(PDE)들이 나열되어 있는데 32비트 단위의 배열이라고 보면 된다. 이 PDE의 인덱스로 사용되는 것이 32비트 Linear Address에 서 상위 10비트이다. 10비트 인덱스를 가지므로 1024개의 PDE가 존 재함을 알 수 있다

9 64비트 윈도우 커널분석 AMD64 각각의 PDE에는 Page Table Base를 가리키는 포인터가 존재한 다. 이 포인터가 가리키는 Page Table에는 마찬가지로 Page Table Entry(PTE)들이 나열되어 있는데 역시 32비트 단위의 배열이다. 이 PTE의 인덱스로 사용되는 것이 32비트 Linear Address에서 중간 10비트이다. 이 역시 10비트이므로 하나의 Page Table에 1024개의 PTE가 존재함을 알 수 있다. 각각의 PTE에는 Physical Page의 주소가 들어 있고 이 Page 주소 에 Linear Address의 하위 12비트를 더하면 실제로 참조하려고 하는 곳의 물리 메모리 주소가 나온다. 12비트가 지시할 수 있는 범위는 4K이므로 x86에서 페이지 하나의 크기는 4KB이다. PDE와 PTE의 구조는 <그림 5>와 같다. <그림 5>에서 페이지 속성을 나타내는 각 비트들의 의미는 붙여놓 은 이름에 의해 대충 짐작할 수 있을 것이다. 여기서는 12비트부터 31 비트까지가 각 테이블의 Base Address를 나타낸다는 것만 눈여겨 보자. 이와 같은 4KB Page 방식 외에 4M-bytes Page, PAE 등 추가 적인 변형 동작이 있으나 역시 여기서는 설명을 생략하기로 한다. x86의 페이지 속성, 변형 동작들, 가상 주소 변환에 대한 더 자세한 내용은 참고자료를 통해 확인하기 바란다. AMD64 가상 주소 변환 64비트 주소를 나타내야 하는 AMD64에서 가상 주소 변환은 <그림 6>과 같이 동작한다. AMD64에서는 x86과 달리 4레벨로 페이지 테이블을 참조하도록 되어 있다. CR3 레지스터에는 Page-Map Level-4 Base를 가리키는 포인터가 존재한다. 이 포인터가 가리키는 Page-Map Level-4 Table 에는 Page-Map Level-4 Entry(PML4E)들이 나열되어 있는데 64비 트 단위의 배열이라고 보면 된다. 이 PML4E의 인덱스로 사용되는 것이 64비트 Virtual Address에서 39비트부터 47비트까지의 9비트 이다. 9비트 인덱스를 가지므로 512개의 PML4E가 존재함을 알 수 있다. 각각의 PML4E에는 Page-Directory Pointer Table을 가리키는 포인터가 존재한다. 이 포인터가 가리키는 테이블에는 마찬가지로 Page-Directory Pointer Entry(PDPE)들이 나열되어 있는데 역시 64비트 단위의 배열이라고 보면 된다. 이 PDPE의 인덱스로 사용되 는 것이 30비트부터 38비트까지의 9비트이다. 이 역시 9비트이므로 하나의 테이블에 512개의 PDPE가 존재함을 알 수 있다. 이후부터는 32비트에서 PDE부터 찾아가는 방법과 동일하게 처리 된다. 마지막 12비트가 Page Offset이므로 4KB Page를 가진다는 점 도 동일하다. 다른 점이라면 PDE, PTE가 64비트 크기를 가진다는 점과 인덱스로 9비트씩 사용하면서 테이블의 엔트리 수가 512개로 줄 <그림 6> AMD64 가상 주소 변환 Sign Extend Page-Map Level-4 Offset (PML4) 9 Page-Map Level-4 Table 52* PML4E Virtual Address Page- Directory- Pointer Offset Page- Directory- Page- 4 Kbyte Pointer Directory Page Physical Table Table Table Page 52* PDPE Page- Directory Offset *This is an architectural limit. A given processor implementation may support fewer bits Page-Map Level-4 CR3 Base Address 었다는 점이다. CR3, PML4E, PDPE, PDE와 PTE의 구조는 <그림 7> 과같다. <그림 7>에서 페이지 속성을 나타내는 0~11비트까지의 각 플래그 들에 대한 의미는 AMD64 매뉴얼에서 각자 확인하기 바란다. 여기서 는 12~51비트까지가 각 테이블의 Base Address를 나타낸다는 것만 알아두자. 가상 주소에서 물리 주소까지 앞의 내용을 알았으므로 가상 주소를 물리 주소로 쉽게 변환할 수 있 을 것 같다. 디버거로 수행해 보면 간단하게 확인해 볼 수 있다. 임의 로 선택한 가상메모리 주소 fffffadf`c806d892를 실제로 변환해보자. 이 주소는 사실 다음과 같이 Ntfs!LfsReleaseLch 함수의 주소이다 (이 함수는 Ntfs.sys의 내부 함수인데 우리가 이 함수 이름을 볼 수 있는 이유는 정식 버전 윈도우 XP x64 에디션의 심볼을 웹심볼 서버 에서 제공하기 때문이다). kd> u fffffadf`c806d892 Ntfs!LfsReleaseLch: fffffadf`c806d push rbx fffffadf`c806d ec20 sub rsp,0x20 fffffadf`c806d bd9 mov rbx,rcx fffffadf`c806d89a 488b4938 mov rcx,[rcx+0x38] fffffadf`c806d89e ff15647a0100 call qword ptr [Ntfs!_imp_ExIsResourceAcquiredShared Lite (fffffadfc )] fffffadf`c806d8a4 85c0 test eax,eax fffffadf`c806d8a jnz Ntfs!LfsReleaseLch+0x17 (fffffadfc806d8ae) fffffadf`c806d8a8 4883c420 add rsp,0x20 PDE Page-Table Offset 52* PTE Physical- Page Offset 52* Physical Address 마 이 크 로 소 프 트 웨 어 271

10 실 전! 강 의 실 개발자를 위한 실전 64비트! 64비트 윈도우 커널 탐구 2 먼저 CR3 레지스터를 참조해서 12비트~51비트까지의 값을 취한 다. 이 값은 PML4의 Base를 가리키는 메모리 주소이다. 하지만 이 값은 물리 주소이기 때문에 가상 주소와 혼동해서는 안 된다. CR3, PML4E, PDPE, PDE와 PTE의 12비트~51비트까지 Base Address라는 부분은 이와 같이 모두 물리 주소이다. 또한 4KB Page 단위로만 다루기 때문에 4K로 나눠진 값이 들어가 있다. CR3 레지스 터의 12비트~51비트에서 참조한 값은 0x142b7이다. 물리 주소이므 로 d 명령어를 사용할 때 /p 옵션을 줘야 하고 4K로 나눠진 값이므로 4K(0x1000)만큼 곱해줘야 정상적인 주소가 된다. kd> dq /p 142b `142b7000 1f000000`131ae ` `142b ` ` `142b ` ` `142b ` ` `142b ` ` `142b ` ` `142b ` ` `142b ` f600000` 여기가 Page-Map Level-4 Table Base이다. 이제 가상 주소를 5 단계로 쪼갠 인덱스들을 이용할 차례이다. 가상 주소의 구조대로 쪼 <그림 7> AMD64 의 CR3, PML4E, PDPE, PDE, PTE 31 Reserved, MBZ Page-Map Level-4 Table Base Address (This is an architectural limit. A given implementation may support fewer bits.) Page-Map Level-4 Table Base Address Reserved, MBZ PCD PWT Reserved, MBZ Control Register 3 (CR3)-Long Mode NX Available Page-Directory-Pointer Base Address (This is an architectural limit. A given implementation may support fewer bits.) Page-Directory-Pointer Base Address AVL MBZ IGN A PCD PWT U/S R/W P 4-Kbyte PML4E-Long Mode NX Available Page-Directory Base Address (This is an architectural limit. A given implementation may support fewer bits.) Page-Directory Base Address AVL MBZ IGN A PCD PWT U/S R/W P 4-Kbyte PDPE-Long Mode NX Available Page-Table Base Address (This is an architectural limit. A given implementation may support fewer bits.) Page-Table Base Address AVL IGN 0 IGN A PCD PWT U/S R/W P 4-Kbyte PDE-Long Mode NX Available Physical-Page Base Address (This is an architectural limit. A given implementation may support fewer bits.) Physical-Page Base Address AVL G PAT D A PCD PWT U/S R/W P 4-Kbyte PTE-Long Mode

11 64비트 윈도우 커널분석 AMD64 개보면 다음과 같이 나온다. 가상 주소: f f f f f a d f ` c d 진수표시: 인덱스: 1f5 17f 40 6d bit 9bit 9bit 9bit 12bit PML4E Index PDPE Index PDE Index PTE Index Page Offset PML4 인덱스는 0x1f5이므로 PML4E(PML4 Entry)는 다음과 같 이구할수있다. 이므로 PTE 구조로부터 121이라는 속성을 가지는 페이지의 물리 주소 18dd를 구하게 된 것이다. 이제 이 페이지 주소에 가상 주소의 마지막 12비트인 페이지 옵셋을 더하면 물리 주소를 정확하게 구하게 된다. kd> dq /p 18dd `018dd892 d98b4820`ec a6415ff`38498b `018dd8a `c b8b48`c35b20c `018dd8b2 eb900001`778015ff f`b60f41ed `018dd8c2 f8d34828`438b4800 cfb9e968` `018dd8d2 0a542484`8b45ffff e95c2444` `018dd8e2 0fff3883`ffff b70f00` `018dd8f2 e8b70f44`c8ff fd8141`09e5c `018dd902 ff90c384`0f `fd8141ff kd> dq /p 142b (1f5*8) `142b7fa ` `7ffe18 각 엔트리들이 8바이트의 크기를 가지므로 인덱스에 8바이트를 곱 해서 Base 주소에 더하면 8바이트짜리 PML4E를 볼 수 있다. PML4E 구조로부터 하위 0~11비트인 8은 속성을 나타낸다는 것 을 알 수 있고 12비트~51비트인 7400이 Page Directory Pointer Table Base를 나타낸다는 것을 알 수 있다. 따라서 PDPE는 다음과 같이 구할 수 있다. kd> dq /p (17f*8) `07400bf `0f3f ` `018dd892라는 물리 주소가 바로 가상 주소 fffffadf`c806 d892가 가리키는 실제 메모리 주소이다. 가상 주소 fffffadf`c806d892 를 디스플레이해 보면 그 내용이 정확히 일치하는 것을 확인할 수 있다. kd> dq fffffadf`c806d892 fffffadf`c806d892 d98b4820`ec a6415ff`38498b48 fffffadf`c806d8a `c b8b48`c35b20c4 fffffadf`c806d8b2 eb900001`778015ff f`b60f41ed fffffadf`c806d8c2 f8d34828`438b4800 cfb9e968` fffffadf`c806d8d2 0a542484`8b45ffff e95c2444` fffffadf`c806d8e2 0fff3883`ffff b70f00` fffffadf`c806d8f2 e8b70f44`c8ff fd8141`09e5c141 fffffadf`c806d902 ff90c384`0f `fd8141ff 역시 PDPE 구조에서 8은 속성이고 f3f1이 Page Directory Table Base임을 알 수 있다. 계속해서 PDE를 구해보면 kd> dq /p f3f (40*8) `0f3f `0f `0f4339 이므로 PDE 구조에서 9은 속성이고 f432가 Page Table Base인 것을 알 수 있다. 결국 PTE는 kd> dq /p f (6d*8) `0f `018dd `018de121 <표 2> AMD64 페이지 테이블 맵핑 주소 테이블 이름 가상 주소 Page-Map Level-4 Table Base FFFFF6FB7DBED000 Page-Directory-Pointer Table Base FFFFF6FB7DA00000 Page-Directory Table Base FFFFF6FB Page Table Base FFFFF 프로그램으로 가상 주소에서 물리 주소까지 앞에서 수행한 예를 프로그램으로 작성한다면 어떻게 해야 할까? 이 것을 하려면 CR3 레지스터를 참조하는 것부터 시작해야 하는데 64비 트 컴파일러에서는 인라인 어셈블리를 사용하지 못하니 CR3 레지스 터에 접근할 방법이 없다. 또 그 안에 있는 주소를 따라가야 하는데 이것은 물리 주소이므로 프로그램에서 직접 참조하기가 쉽지 않다. 그래서 윈도우 커널에서는 물리 주소에 존재하는 각 테이블에 대해서 가상 주소로 맵핑한 주소를 제공하고 있다. AMD64에서 페이지 테이 블 맵핑 주소는 <표 2>와 같다. WinDbg에서 다음과 같이 확인할 수 있고 Windows Internals 4th Edition 424페이지에서 x64 address space layout도 확인할 수 있다. kd>!pte VA FFFFF6FB7DBED000 PPE at FFFFF6FB7DA00000 PDE at FFFFF6FB PTE at FFFFF 마 이 크 로 소 프 트 웨 어 273

12 실 전! 강 의 실 개발자를 위한 실전 64비트! 64비트 윈도우 커널 탐구 2 <그림 8> 맵핑된 영역의 메모리 내용 kd> dq fffff6fb`7da (17f*8) FFFFF (PTE Base 맵핑) FFFFF6FB (PDE Base 맵핑) FFFFF6FB7DA00000 (PDPE Base 맵핑) FFFFF6FB7DBED000 (PML4E Base 맵핑) PTE_0 PTE_1 PTE_511 for PML4E_0, PDPE_0, PDE_0 PTE_0 PTE_1 PTE_511 for PML4E_0, PDPE_0, PDE_1 PTE_0 PTE_1 PTE_511 for PML4E_0, PDPE_0, PDE_2 PDE_0 PDE_1 PDE...PDE_511 for PML4E_0, PDPE_0 PDE_0 PDE_1 PDE...PDE_511 for PML4E_0, PDPE_1 PDE_0 PDE_1 PDE...PDE_511 for PML4E_0, PDPE_2 PDPE_0 PDPE_1...PDPE_511 for PML4E_0 PDPE_0 PDPE_1...PDPE_511 for PML4E_1 PDPE_0 PDPE_1...PDPE_511 for PML4E_2 PML4E_0 PML4_1...PML4E_511 불행히도 그렇지 않다. FFFFF6FB7DA00000는 시스템에 존재하 는 모든 PDPE가 나열되는 공간의 시작 주소이다. 좀 더 자세히 설명 하면 이 주소에는 첫 번째 PML4E가 가리키는 PDP Table이 존재한 다. PDP Table은 PDPE 512개를 가지고 있다. 이 테이블 뒤에는 두 번째 PML4E가 가리키는 PDP Table이 역시 PDPE 512개를 가지고 존재하고 있다. 이런 식으로 512개의 PDP Table 영역을 가지고 있는 것이다. 따라서 이곳에 존재하는 PDPE의 개수는 = 이다. PDPE를 구하기 위해서는 PML4 인덱스까지 이용해서 다음과 같이 계산해야 한다. 여기서 PXE는 PML4E와 같고 PPE는 PDPE와 같다. 첫 번째로 보이는 Page-Map Level-4 Table Base의 주소 0xFFFFF6FB7 DBED000은 앞에서 디버거로 확인했을 때 CR3 레지스터에서 구한 Page-Map Level-4 Table Base 0x142b7000이 맵핑된 주소이다. 디 버거로 이 가상 주소를 확인해보면 물리 주소 142b7000과 같은 내용 임을 확인할 수 있다. kd> dq FFFFF6FB7DBED000 fffff6fb`7dbed000 1f000000`131ae ` fffff6fb`7dbed ` ` fffff6fb`7dbed ` ` fffff6fb`7dbed ` ` fffff6fb`7dbed ` ` fffff6fb`7dbed ` ` fffff6fb`7dbed ` ` fffff6fb`7dbed ` f600000` 따라서 다음과 같이 가상 주소로 맵핑된 PML4E를 확인할 수 있다. kd> dq fffff6fb`7dbed000 + (1f5*8) fffff6fb`7dbedfa ` `7ffe18 물리 주소를 통해서 봤던 내용하고 동일한 내용임을 알 수 있다. 이 것을 통해서 PDPE를 구할 수 있을까? 이 내용은 물리 주소를 나타내 고 있으므로 프로그램 상에서 직접 참조할 수 없다. 따라서 이 내용을 가지고 PDPE를 구할 수는 없다. PDPE를 구하기 위해서는 커널에서 Page-Directory-Pointer Table Base를 맵핑해 놓은 가상 주소 FFFFF6FB7DA00000을 이용해야 한다. 이번에도 다음과 같이 PDPE를 구할 수 있을까? kd> dq fffff6fb`7da (1f5*200*8) + (17f*8) fffff6fb`7dbf5bf `0f3f ` 표현식은 모두 16진수 값이므로 0x200은 512를 의미한다. PDPE 하나의 크기가 8바이트이므로 512와 8을 곱해야 PML4 인덱스 하나 가 포함하는 크기인 4KB가 나온다. 앞의 예를 설명하면 PML4 인덱 스가 1f5이므로 1f5개의 PDP 테이블은 건너뛰고 나온 주소에 PDPE 인덱스인 17f를 적용하여 계산한 것이다. 계산 결과 앞과 같이 가상 메모리 주소의 내용이 물리 주소를 참조했을 때와 동일하게 보였다. PDE를 찾을 때는 한 단계가 더 들어간다. PTE를 찾을 때는 여기에 또 한 단계가 더 들어간다. 이해를 돕기 위해 <그림 8>로 설명한다. <그림 8>에서 Page-Directory Table Base 주소인 FFFFF6FB 을 보면 PDE들이 나열되어 있음을알수있다. 첫번째 PDE 512개는 첫 번째 PML4E, 첫 번째 PDPE에 의해 참조되는 것 들이다. 두 번째 PDE 512개는 첫 번째 PML4E, 두 번째 PDPE에 의 해서 참조되는 것들이다. 이렇게 PDE는 512개의 집합으로 PML4E, PDPE의 수만큼 존재하고 있다. 따라서 역시 PML4E 인덱스와 PDPE 인덱스를 포함하여 계산해야 올바른 PDE를 구할 수 있다. 그 림에서 확인할 수 있듯이 PTE 테이블도 PDE라는 단계가 하나 더 추 가된 PTE의 테이블임을 알 수 있다. 지금까지 설명은 복잡했지만 프로그램 상에서 가상 주소의 PTE를 구해서 물리 주소를 얻고 싶다면 앞에서 설명한 과정은 전혀 필요하 지 않다. 계산 과정에서 알 수 있듯이 PTE를 구하고 싶으면 직접 <표 2>의 Page Table Base로부터 PML4E 인덱스, PDP 인덱스, PDE 인덱스, PTE 인덱스로 계산하여 PTE의 주소를 구하면 된다. 프로그 램 코드로 예를 들면 다음과 같이 구현할 수 있다. #define AMD64_PTE_BASE 0xFFFFF

13 64비트 윈도우 커널분석 AMD64 #define SIZE_PTE 8 // bytes #define SIZE_9BIT 512 // 0x200 npxe_index = GetPXEIndex( pvirtualaddr ); // pvirtualaddr에서 39~47비트를 취한다. nppe_index = GetPPEIndex( pvirtualaddr ); // pvirtualaddr에서 30~38비트를 취한다. npde_index = GetPDEIndex( pvirtualaddr ); // pvirtualaddr에서 21~29비트를 취한다. npte_index = GetPTEIndex( pvirtualaddr ); // pvirtualaddr에서 12~20비트를 취한다. npage_offset = GetPageOffset( pvirtualaddr ); // pvirtualaddr에서 0~11비트를 취한다. ppte = (AMD64_PTE_BASE + (npxe_index * SIZE_PTE * SIZE_9BIT * SIZE_9BIT * SIZE_9BIT) + (nppe_index * SIZE_PTE * SIZE_9BIT * SIZE_9BIT) + (npde_index * SIZE_PTE * SIZE_9BIT) + (npte_index * SIZE_PTE)); pphysicalpage = GetPhysicalPage( ppte ); // PTE에서 페이지의 물리 주소를 구한다. pphysicaladdr = pphysicalpage + npage_offset; // 페이지 주소 + 페이지 옵셋 IA64를 분석해보자 무언가를 분석한다는 것은 늘 알지 못하는 것에 대한 두려움과 함께 시작하는 일인 것 같다. 이 기사의 분석 내용은 AMD64를 처음 접하 면서 64비트에 대한 막연한 부담감을 가지고 파악했던 작업이었는데 다행히도 32비트와 비슷한 점이 많아서 별 무리 없이 원하는 결과를 얻을 수 있었다. 필자는 이것이 바로 AMD64가 개발자나 사용자에게 제공하는 가장 큰 매력이라고 생각한다. 64비트라는 새롭고 강력한 세계를 제공하면서 동시에 빠른 적응성까지 제공하기 때문이다. 아직 AMD64에 대한 준비를 하지 못했지만 궁금해 하던 독자들이 있었다 면 이 기사가 조금이라도 도움이 되었기를 바라며, 다음 시간에는 IA64에 대해 알아보겠다. m a s o 1년 후에도 내용이 살아있는 잡지 정리 김세미 semsem@imaso.co.kr 참 + 고 + 자 + 료 윈도우 구조와 원리 그리고 Codes, 가남사 Undocumented Windows 2000 Secrets, Addison-Wesley Windows Internals 4th Edition, Microsoft Press IA-32 Intel Architecture Software Developer s Manual, INTEL AMD64 Architecture Programmer s Manual, AMD 마 이 크 로 소 프 트 웨 어 275

hlogin2

hlogin2 0x02. Stack Corruption off-limit Kernel Stack libc Heap BSS Data Code off-limit Kernel Kernel : OS Stack libc Heap BSS Data Code Stack : libc : Heap : BSS, Data : bss Code : off-limit Kernel Kernel : OS

More information

Deok9_Exploit Technique

Deok9_Exploit Technique Exploit Technique CodeEngn Co-Administrator!!! and Team Sur3x5F Member Nick : Deok9 E-mail : DDeok9@gmail.com HomePage : http://deok9.sur3x5f.org Twitter :@DDeok9 > 1. Shell Code 2. Security

More information

INTRO Basic architecture of modern computers Basic and most used assembly instructions on x86 Installing an assembly compiler and RE tools Practice co

INTRO Basic architecture of modern computers Basic and most used assembly instructions on x86 Installing an assembly compiler and RE tools Practice co Basic reverse engineering on x86 This is for those who want to learn about basic reverse engineering on x86 (Feel free to use this, email me if you need a keynote version.) v0.1 SeungJin Beist Lee beist@grayhash.com

More information

No Slide Title

No Slide Title Copyright, 2017 Multimedia Lab., UOS 시스템프로그래밍 (Assembly Code and Calling Convention) Seong Jong Choi chois@uos.ac.kr Multimedia Lab. Dept. of Electrical and Computer Eng. University of Seoul Seoul, Korea

More information

Microsoft PowerPoint - o8.pptx

Microsoft PowerPoint - o8.pptx 메모리보호 (Memory Protection) 메모리보호를위해 page table entry에 protection bit와 valid bit 추가 Protection bits read-write / read-only / executable-only 정의 page 단위의 memory protection 제공 Valid bit (or valid-invalid bit)

More information

IDA 5.x Manual 07.02.hwp

IDA 5.x Manual 07.02.hwp IDA 5.x Manual - Manual 01 - 영리를 목적으로 한 곳에서 배포금지 Last Update 2007. 02 이강석 / certlab@gmail.com 어셈블리어 개발자 그룹 :: 어셈러브 http://www.asmlove.co.kr - 1 - IDA Pro 는 Disassembler 프로그램입니다. 기계어로 되어있는 실행파일을 어셈블리언어

More information

64 비트윈도우커널분석 IA64 Operand들이약간생소해보이지만이것역시천천히살펴보면의미를대강추측할수있다. adds의경우 f( 상수 )+r0( 레지스터 ) 의결과를 ret0( 레지스터 ) 에대입하라는뜻으로이해할수있다. movl의경우 e `ffa00000( 상

64 비트윈도우커널분석 IA64 Operand들이약간생소해보이지만이것역시천천히살펴보면의미를대강추측할수있다. adds의경우 f( 상수 )+r0( 레지스터 ) 의결과를 ret0( 레지스터 ) 에대입하라는뜻으로이해할수있다. movl의경우 e `ffa00000( 상 실 전! 강 의 실 개발자를위한실전 64 비트! 64 비트윈도우커널탐구 3 연 + 재 + 순 + 서 1회 2005. 9 64비트시대를향한첫걸음, 커널모드드라이버포팅 2회 2005. 10 64비트윈도우커널분석 AMD64 3회 2005. 12 64비트윈도우커널분석 IA64 연 + 재 + 가 + 이 + 드운영체제 64비트윈도우 XP, 64비트윈도우 2003 개발도구

More information

Microsoft PowerPoint - a2.ppt [호환 모드]

Microsoft PowerPoint - a2.ppt [호환 모드] 마이크로컴퓨터의기본구조 2 장 x86 프로세서구조 ALU: 산술논리연산제어장치 (CU): 실행순서제어클럭 : 구성요소들의동작동기화 CPU + memory + I/O + bus 어셈블리언어 2 클럭 (Clock) CPU 와 Bus 동작은클럭에동기되어동작을한다. 메모리읽기사이클과대기상태 1 클럭사이클동안간단한동작을수행한다. 기계어명령어수행에적어도 1 클럭사이클이필요함

More information

2005년 6월 고1 전국연합학력평가

2005년 6월 고1 전국연합학력평가 제 1 교시 2015학년도 9월 모평 대비 EBS 리허설 2차 국어 영역(B형) 김철회의 1등급에 이르게 해 주는 [보기] 활용 문제 미니 모의고사(문학편) 1 유형편 [1]다음 글을 읽고 물음에 답하시오. 1. 를 참고하여 (가)를 이해할 때, 적절하지 않은 것은? (가) 머리는 이미 오래 전에 잘렸다 / 전깃줄에 닿지 않도록 올해는 팔다리까지 잘려

More information

Microsoft PowerPoint - windbg쉤무2(맋운톬로ífl—로엸엜Callingê·œìŁ½).pptx

Microsoft PowerPoint - windbg쉤무2(맋운톬로ífl—로엸엜Callingê·œìŁ½).pptx 본강의 PDF 는하제소프트다운로드자료실에서받아보실수있습니다 하제소프트 주식회사하제소프트 (www.hajesoft.co.kr) 강사이봉석 과정소개 윈도우응용프로그램, 윈도우서비스프로그램, 윈도우디바이스드라이버를개발하는개발자들로하여금고급디버깅기술을제공하는 윈도우디버거 (WinDBG) 사용방법을익히게하여, 고급시스템프로그래머를양성하는데있습니다 윈도우디버거 (WinDBG)

More information

<근대이전> ⑴ 문명의 형성과 고조선의 성립 역사 학습의 목적, 선사 문화의 발전에서 국가 형성까지를 다룬다. 역사가 현재 우리의 삶과 긴밀하게 연결되었음을 인식하고, 역사적 상상력을 바탕으 로 선사 시대의 삶을 유추해 본다. 세계 여러 지역에서 국가가 형성되고 문 명

<근대이전> ⑴ 문명의 형성과 고조선의 성립 역사 학습의 목적, 선사 문화의 발전에서 국가 형성까지를 다룬다. 역사가 현재 우리의 삶과 긴밀하게 연결되었음을 인식하고, 역사적 상상력을 바탕으 로 선사 시대의 삶을 유추해 본다. 세계 여러 지역에서 국가가 형성되고 문 명 2009년 개정 교육과정에 따른 교과 교육과정 적용을 위한 중학교 역사 교과서 집필 기준 ⑴ 문명의 형성과 고조선의 성립 역사 학습의 목적, 선사 문화의 발전에서 국가 형성까지를 다룬다. 역사가 현재 우리의 삶과 긴밀하게 연결되었음을 인식하고, 역사적 상상력을 바탕으 로 선사 시대의 삶을 유추해 본다. 세계 여러 지역에서 국가가 형성되고 문 명이

More information

Microsoft Word - Reverse Engineering Code with IDA Pro-2-1.doc

Microsoft Word - Reverse Engineering Code with IDA Pro-2-1.doc Reverse Engineering Code with IDA Pro By Dan Kaminsky, Justin Ferguson, Jason Larsen, Luis Miras, Walter Pearce 정리 : vangelis(securityproof@gmail.com) 이글은 Reverse Engineering Code with IDA Pro(2008년출판

More information

CKKeyPro 적용가이드

CKKeyPro 적용가이드 3.20 사이버테러악성코드분석보고서 라온시큐어보안기술연구팀 작성일 : 2013. 03 페이지 : 1/15 Introduction 2013년 3월 20일오후, MBC, KBS, YTN, 농협, 신한은행, 제주은행전산망장애가동시에발생하였다. 피해기관들의호스트약 500여대에오류메시지가화면에나타났으며악성코드에감염된호스트는사용할수없는상태가되었다. 현재까지정확한침투경로가밝혀지지않고있다.

More information

Microsoft PowerPoint - a6.ppt [호환 모드]

Microsoft PowerPoint - a6.ppt [호환 모드] 이장의내용 6 장조건부처리 부울과비교명령어 조건부점프 조건부루프명령어 조건부구조 컴퓨터정보통신 어셈블리언어 2 6.2 부울과비교명령어 부울명령어 Instructions ti 동작 AND dst, src OR dst, src XOR dst, src NOT dst dst dst AND src dst dst OR src dst dst XOR src dst NOT

More information

Microsoft PowerPoint - a8a.ppt [호환 모드]

Microsoft PowerPoint - a8a.ppt [호환 모드] 이장의내용 8 장고급프로시저 스택프레임 재귀 (Recursion) Invoke, Addr, Proc, Proto 디렉티브 다중모듈프로그램작성 2 8.2 스택프레임 Stack Frame ( 또는 activation record) procedure 의다음사항을저장한 영역 urn address passed parameter ( 스택매개변수 ) saved register

More information

제 9 도는 6제어항목의 세팅목표의 보기가 표시된 레이더 챠트(radar chart). 제 10 도는 제 6 도의 함수블럭(1C)에서 사용되는 각종 개성화 함수의 보기를 표시하는 테이블. 제 11a 도 제 11c 도까지는 각종 조건에 따라 제공되는 개성화함수의 변화의

제 9 도는 6제어항목의 세팅목표의 보기가 표시된 레이더 챠트(radar chart). 제 10 도는 제 6 도의 함수블럭(1C)에서 사용되는 각종 개성화 함수의 보기를 표시하는 테이블. 제 11a 도 제 11c 도까지는 각종 조건에 따라 제공되는 개성화함수의 변화의 (19) 대한민국특허청(KR) (12) 특허공보(B1) (51) Int. Cl. 5 B66B 1/18 (45) 공고일자 1993년09월28일 (11) 공고번호 특1993-0009339 (21) 출원번호 특1989-0002580 (65) 공개번호 특1989-0014358 (22) 출원일자 1989년03월02일 (43) 공개일자 1989년10월23일 (30) 우선권주장

More information

<C5F0B0E82D313132C8A328C0DBBEF7BFEB292E687770>

<C5F0B0E82D313132C8A328C0DBBEF7BFEB292E687770> 2012년 7월 17일 발행 통권 제112호 112 발행인:李圭衡/편집인:金尙勳/주간:金泰詢/발행처:社)退溪學釜山硏究院 (우614-743) 釜山市釜山鎭區田浦洞608-1 819-8587/F.817-4013 出處가 분명한 공직사회 인간이 가지는 인성은 그 특성이 다양하여 일률적으로 판단 한 하기는 쉽지 않다. 그러므로 어떤 관점과 측면에서 논하느냐에

More information

hlogin7

hlogin7 0x07. Return Oriented Programming ROP? , (DEP, ASLR). ROP (Return Oriented Programming) (excutable memory) rop. plt, got got overwrite RTL RTL Chain DEP, ASLR gadget Basic knowledge plt, got call function

More information

02.Create a shellcode that executes "/bin/sh" Excuse the ads! We need some help to keep our site up. List Create a shellcode that executes "/bin/sh" C

02.Create a shellcode that executes /bin/sh Excuse the ads! We need some help to keep our site up. List Create a shellcode that executes /bin/sh C 02.Create a shellcode that executes "/bin/sh" Excuse the ads! We need some help to keep our site up. List Create a shellcode that executes "/bin/sh" C language Assembly code Change permissions(seteuid())

More information

=

= written by vangelis(vangelis@wowhacker.org) 0 0000 8 1000 1 0001 9 1001 2 0010 10 1010 3 0011 11 1011 4 0100 12 1100 5 0101 13 1101 6 0110 14 1110 7 0111 15 1111 110112 + 100012 = 1011002 110 0000 0101

More information

MPLAB C18 C

MPLAB C18 C MPLAB C18 C MPLAB C18 MPLAB C18 C MPLAB C18 C #define START, c:\mcc18 errorlevel{0 1} char isascii(char ch); list[list_optioin,list_option] OK, Cancel , MPLAB IDE User s Guide MPLAB C18 C

More information

02(243-249) CSTV11-22.hwp

02(243-249) CSTV11-22.hwp 함수호출규약에 기반한 새로운 소프트웨어 워터마킹 기법 243 함수호출규약에 기반한 새로운 소프트웨어 워터마킹 기법 (A Novel Software Watermarking Scheme Based on Calling Convention) 전 철 정진만 김봉재 (Cheol Jeon) (Jinman Jung) (Bongjae Kim) 장준혁 조유근 홍지만 (Joonhyouk

More information

01.ROP(Return Oriented Programming)-x86 Excuse the ads! We need some help to keep our site up. List Return Oriented Programming(ROP) -x86 Gadgets - PO

01.ROP(Return Oriented Programming)-x86 Excuse the ads! We need some help to keep our site up. List Return Oriented Programming(ROP) -x86 Gadgets - PO 01.ROP(Return Oriented Programming)-x86 Excuse the ads! We need some help to keep our site up. List Return Oriented Programming(ROP) -x86 Gadgets - POP; POP; POP; RET PLT & GOT Debug Proof of concept Example

More information

The_IDA_Pro_Book

The_IDA_Pro_Book The IDA Pro Book Hacking Group OVERTIME force (forceteam01@gmail.com) GETTING STARTED WITH IDA IDA New : Go : IDA Previous : IDA File File -> Open Processor type : Loading Segment and Loading Offset x86

More information

제1절 조선시대 이전의 교육

제1절 조선시대 이전의 교육 제1절 우리 교육 약사 제2장 사천교육의 발자취 제1절 우리 교육 약사 1. 근대 이전의 교육 가. 고대의 교육 인류( 人 類 )가 이 지구상에 살면서부터 역사와 함께 교육( 敎 育 )은 어떠한 형태로든 지 존재하고 있었을 것이다. 우리 조상들이 언제부터 이곳에서 삶을 꾸려왔는지는 여 러 가지 유적과 유물로 나타나고 있다. 그 당시 우리조상들의 생활을 미루어

More information

歯20010629-001-1-조선일보.PDF

歯20010629-001-1-조선일보.PDF 6. 29 () 11:00 ( ) 20 0 1. 6. 29 11( ).(397-1941) 1. 2. 3. 4. 5. 1. 28, 60() (,, ) 30 619(, 6. 29) () 6 (,,,,, ),,, - 1 - < > (, ), () < > - 2 - 2.,,, 620,, - 3 - 3. ( ) 1,614,, 864 ( ) 1,6 14 864 () 734

More information

SSDT(System Service Descriptor Table) Hooking Written by 백구 Contack Me : 목차 가. 이문서의목적... 2 나. 유저모드와커널모드... 2 다. Windows API 흐름..

SSDT(System Service Descriptor Table) Hooking Written by 백구 Contack Me : 목차 가. 이문서의목적... 2 나. 유저모드와커널모드... 2 다. Windows API 흐름.. SSDT(System Service Descriptor Table) Hooking Written by 백구 Contack Me : whiteexplod@naver.com 목차 가. 이문서의목적... 2 나. 유저모드와커널모드... 2 다. Windows API 흐름... 2 1. User Level... 2 2-1. 소프트웨어인터럽트 0x2E에의한커널모드짂입방식...

More information

<B1E2BCFAB9AEBCAD28C0CCB5BFBCF6295F494454486F6F6B696E672E687770>

<B1E2BCFAB9AEBCAD28C0CCB5BFBCF6295F494454486F6F6B696E672E687770> IDT Hooking을 이용한 Simple KeyLogger 이동수 alonglog@is119.jnu.ac.kr 개 요 커널 Hooking에 관하여 공부하는 중에 IDT Hooking에 관하여 알게 되었다. 이전에 공부하 였던 SSDT Hooking과는 다른 요소가 많다. IDT Hooking을 공부하면서 컴퓨터의 인터럽트 과정을 이해할 수 있는 좋은 계기가

More information

Deok9_PE Structure

Deok9_PE Structure PE Structure CodeEngn Co-Administrator!!! and Team Sur3x5F Member Nick : Deok9 E-mail : DDeok9@gmail.com HomePage : http://deok9.sur3x5f.org Twitter :@DDeok9 1. PE > 1) PE? 2) PE 3) PE Utility

More information

[8051] 강의자료.PDF

[8051] 강의자료.PDF CY AC F0 RS1 RS0 OV - P 0xFF 0x80 0x7F 0x30 0x2F 0x20 0x1F 0x18 0x17 0x10 0x0F 0x08 0x07 0x00 0x0000 0x0FFF 0x1000 0xFFFF 0x0000 0xFFFF RAM SFR SMOD - - - GF1 GF0 PD IDL 31 19 18 9 12 13 14 15 1 2 3 4

More information

DE1-SoC Board

DE1-SoC Board 실습 1 개발환경 DE1-SoC Board Design Tools - Installation Download & Install Quartus Prime Lite Edition http://www.altera.com/ Quartus Prime (includes Nios II EDS) Nios II Embedded Design Suite (EDS) is automatically

More information

<4D F736F F D20B9D9C0CCB7B5B9D9C0CCB7AFBDBA5FBCF6C1A42E646F63>

<4D F736F F D20B9D9C0CCB7B5B9D9C0CCB7AFBDBA5FBCF6C1A42E646F63> Virut 바이러스공격 ASEC 분석 1 팀고흥환선임연구원 해마다접수되는악성코드의통계를보면대부분이인터넷웜또는트로이목마가대부분을차지하며, 파일에기생하는바이러스는그수가적어지는것이추세이다. 그도그럴것이최근의악성코드특징은개인의능력과시가아닌돈과연관되는악성코드작성이대부분이기때문이다. 그렇다면 Virut 바이러스가인터넷웜과트로이목마를제치고국내뿐만아니라해외에서도큰피해를입히고있는이유가무엇인지,

More information

Microsoft Word - HD-35 메뉴얼_0429_.doc

Microsoft Word - HD-35 메뉴얼_0429_.doc 자주 묻는 질문들...2 제품의 특장점...3 안전을 위한 주의사항...5 사용을 위한 주의사항...5 각 부분의 이름...6 HD-35 조립/분리하기...7 PC와 USB 케이블 연결하기...8 1. 윈도우 98/ME에서 설치과정...9 2. NTFS를 FAT32 포맷방식으로 바꾸기...11 설치 및 연결하기...14 1. 비디오 연결방법...14 2. 오디오

More information

Microsoft PowerPoint - a9.ppt [호환 모드]

Microsoft PowerPoint - a9.ppt [호환 모드] 9.1 이장의내용 9 장. 스트링과배열 스트링프리미티브명령어 2 차원배열 정수배열검색및정렬 컴퓨터정보통신 어셈블리언어 2 9.2 스트링프리미티브명령어 String Primitive Instructions 의동작 String Primitive Instructions Instructions 설명 동작 MOVS(B,W,D) Move string data M[EDI]

More information

3.20 테러 악성코드바이너리분석 손충호 (StolenByte) WOWHACKER Group 해당문서는 WOWHACKER Group 의문서이므로, 무단도용및수 정및변조는할수없습니다. 페이지 1 / 20

3.20 테러 악성코드바이너리분석 손충호 (StolenByte) WOWHACKER Group 해당문서는 WOWHACKER Group 의문서이므로, 무단도용및수 정및변조는할수없습니다. 페이지 1 / 20 3.20 테러 악성코드바이너리분석 손충호 (StolenByte) stolenbyte@wowhacker.org WOWHACKER Group 2013-03-20 해당문서는 WOWHACKER Group 의문서이므로, 무단도용및수 정및변조는할수없습니다. 페이지 1 / 20 전체적인공격프로세스 페이지 2 / 20 1. 바이너리가사용할 LoadLibrary 하여함수 Load

More information

untitled

untitled 9 hamks@dongguk.ac.kr : Source code Assembly language code x = a + b; ld a, %r1 ld b, %r2 add %r1, %r2, %r3 st %r3, x (Assembler) (bit pattern) (machine code) CPU security (code generator).. (Instruction

More information

bn2019_2

bn2019_2 arp -a Packet Logging/Editing Decode Buffer Capture Driver Logging: permanent storage of packets for offline analysis Decode: packets must be decoded to human readable form. Buffer: packets must temporarily

More information

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 - (Asynchronous Mode) - - - ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 - UART (Univ ers al As y nchronous Receiver / T rans mitter) 8250A 8250A { COM1(3F8H). - Line Control Register

More information

140307(00)(1~5).indd

140307(00)(1~5).indd 대한민국정부 제18218호 2014. 3. 7.(금) 부 령 보건복지부령제233호(영유아보육법 시행규칙 일부개정령) 6 고 시 미래창조과학부고시제2014-21호(학생인건비 통합관리지침 일부개정) 9 교육부고시제2014-70호(검 인정도서 가격 조정 명령을 위한 항목별 세부사항) 11 법무부고시제2014-66호(국적상실) 15 법무부고시제2014-67호(국적상실)

More information

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F > 10주차 문자 LCD 의인터페이스회로및구동함수 Next-Generation Networks Lab. 5. 16x2 CLCD 모듈 (HY-1602H-803) 그림 11-18 19 핀설명표 11-11 번호 분류 핀이름 레벨 (V) 기능 1 V SS or GND 0 GND 전원 2 V Power DD or V CC +5 CLCD 구동전원 3 V 0 - CLCD 명암조절

More information

PRO1_09E [읽기 전용]

PRO1_09E [읽기 전용] Siemens AG 1999 All rights reserved File: PRO1_09E1 Information and - ( ) 2 3 4 5 Monitor/Modify Variables" 6 7 8 9 10 11 CPU 12 Stop 13 (Forcing) 14 (1) 15 (2) 16 : 17 : Stop 18 : 19 : (Forcing) 20 :

More information

15강 판소리계 소설 심청전 다음 글을 읽고 물음에 답하시오. [1106월 평가원] 1)심청이 수궁에 머물 적에 옥황상제의 명이니 거행이 오죽 하랴. 2) 사해 용왕이 다 각기 시녀를 보내어 아침저녁으로 문 안하고, 번갈아 당번을 서서 문안하고 호위하며, 금수능라 비

15강 판소리계 소설 심청전 다음 글을 읽고 물음에 답하시오. [1106월 평가원] 1)심청이 수궁에 머물 적에 옥황상제의 명이니 거행이 오죽 하랴. 2) 사해 용왕이 다 각기 시녀를 보내어 아침저녁으로 문 안하고, 번갈아 당번을 서서 문안하고 호위하며, 금수능라 비 14강 역사영웅소설 15강 판소리계 소설 판소리계 소설 : , 등 일반적으로 판소리 사설의 영향을 받아 소설로 정착된 작품을 가리킨 판소리 : , , , , 등이 사설과 창이 전해지고 있 하층민의 예술로 시작하여 전계층을 아우르는 예술이 되었 상류층, 지배층이 향유층이 되면서 점차 작품의 주제가

More information

<B9E9B3E2C5CDBFEFB4F5B5EBBEEE20B0A1C1A4B8AE20B1E6C0BB20B0C8B4C2B4D92E687770>

<B9E9B3E2C5CDBFEFB4F5B5EBBEEE20B0A1C1A4B8AE20B1E6C0BB20B0C8B4C2B4D92E687770> 2011 어르신 생활문화전승프로그램 柯 亭 里 義 兵 마을 백년터울 더듬어 가정리 길을 걷는다 주관 춘천문화원 후원 한국문화원 연합회 문화체육관광부 -차 례- 제1장 구술 자료의 가치 1. 역사적 측면 2. 문화적 측면 3. 미래 삶의 터전 제2장 지명으로 전하는 생활문화전승 제3장 구술로 전하는 생활문화전승 1. 의암제를 준비하는 사람 류연창 2. 고흥 류

More information

01.The basics technic of Shellcode Excuse the ads! We need some help to keep our site up. List Shellcode The basics of shellcode(ubuntu-16.04) C ASM M

01.The basics technic of Shellcode Excuse the ads! We need some help to keep our site up. List Shellcode The basics of shellcode(ubuntu-16.04) C ASM M 01.The basics technic of Shellcode Excuse the ads! We need some help to keep our site up. List Shellcode The basics of shellcode(ubuntu-16.04) C ASM Machine code Assembly code Linux system call in assembly

More information

Microsoft PowerPoint - hy2-12.pptx

Microsoft PowerPoint - hy2-12.pptx 2.4 명령어세트 (instruction set) 명령어세트 CPU 가지원하는기계어명령어들의집합 명령어연산의종류 데이터전송 : 레지스터 / 메모리간에데이터이동 산술연산 : 덧셈, 뺄셈, 곱셈및나눗셈 논리연산 : 비트들간의 AND, OR, NOT 및 XOR 연산 입출력 (I/O) : CPU( 레지스터 ) 와외부장치들간의데이터이동 프로그램제어 : 분기, 서브루틴호출

More information

Flute-GR_BV199_DOS.indb

Flute-GR_BV199_DOS.indb 안전을 위한 주의사항 사용자의 안전을 지키고 재산상의 손해 등을 막기 위한 내용입니다. 반드시 읽고 올바르게 사용해 주세요. BV-199 사용설명서 차례 1 장. 컴퓨터 시작 차례 3 제품의 특장점 6 사용설명서를 읽기 전에 7 안전을 위한 주의사항 10 사용시 올바른 자세 20 제품의 구성물 23 기본 구성물 23 각 부분의 명칭 24 앞면 24 뒷면 25

More information

9

9 9 hamks@dongguk.ac.kr : Source code Assembly language code x = a + b; ld a, %r1 ld b, %r2 add %r1, %r2, %r3 st %r3, x (Assembler) (bit pattern) (machine code) CPU security (code generator).. (Instruction

More information

목차 1. 제품 소개... 4 1.1 특징... 4 1.2 개요... 4 1.3 Function table... 5 2. 기능 소개... 6 2.1 Copy... 6 2.2 Compare... 6 2.3 Copy & Compare... 6 2.4 Erase... 6 2

목차 1. 제품 소개... 4 1.1 특징... 4 1.2 개요... 4 1.3 Function table... 5 2. 기능 소개... 6 2.1 Copy... 6 2.2 Compare... 6 2.3 Copy & Compare... 6 2.4 Erase... 6 2 유영테크닉스( 주) 사용자 설명서 HDD014/034 IDE & SATA Hard Drive Duplicator 유 영 테 크 닉 스 ( 주) (032)670-7880 www.yooyoung-tech.com 목차 1. 제품 소개... 4 1.1 특징... 4 1.2 개요... 4 1.3 Function table... 5 2. 기능 소개... 6 2.1 Copy...

More information

Press Arbitration Commission 62

Press Arbitration Commission 62 제 2 부 언론관련판결 사례 제1장 명예훼손 사례 제2장 재산권 침해 사례 제3장 기타 인격권 침해 사례 제4장 형사 사례 제5장 헌법재판소 결정 사례 편집자 주 - 사건관계인의 인격권을 보호하기 위해 필요한 경우 사건관계인의 이름, 소속회사, 주 소, 차량번호 등을 비실명 익명처리하고 필요한 경우 최소한의 범위내에서 판결문의 일부를 수정 또는 삭제함을 알려드립니다.

More information

SRC PLUS 제어기 MANUAL

SRC PLUS 제어기 MANUAL ,,,, DE FIN E I N T R E A L L O C E N D SU B E N D S U B M O TIO

More information

T100MD+

T100MD+ User s Manual 100% ) ( x b a a + 1 RX+ TX+ DTR GND TX+ RX+ DTR GND RX+ TX+ DTR GND DSR RX+ TX+ DTR GND DSR [ DCE TYPE ] [ DCE TYPE ] RS232 Format Baud 1 T100MD+

More information

주지스님의 이 달의 법문 성철 큰스님 기념관 불사를 회향하면서 20여 년 전 성철 큰스님 사리탑을 건립하려고 중국 석굴답사 연구팀을 따라 중국 불교성지를 탐방하였습 니다. 대동의 운강석굴, 용문석굴, 공의석굴, 맥적산석 굴, 대족석굴, 티벳 라싸의 포탈라궁과 주변의 큰

주지스님의 이 달의 법문 성철 큰스님 기념관 불사를 회향하면서 20여 년 전 성철 큰스님 사리탑을 건립하려고 중국 석굴답사 연구팀을 따라 중국 불교성지를 탐방하였습 니다. 대동의 운강석굴, 용문석굴, 공의석굴, 맥적산석 굴, 대족석굴, 티벳 라싸의 포탈라궁과 주변의 큰 불교학과반(1년 과정) 기초교리반(6개월 과정) 매주 화요일 저녁 7시 매주 목요일 오후 2시 / 저녁 7시 5월 5일 5월 12일 5월 19일 5월 26일 어린이날 휴강 인도불교사 2 / 이거룡 교수님 인도불교사 3 / 이거룡 교수님 중국불교사 1 / 이덕진 교수님 5월 7일 5월 14일 5월 21일 5월 28일 백련암 예불의식 및 기도법 / 총무스님 성철

More information

내지4월최종

내지4월최종 내 가 만 난 7 0 년 대 죽은 언론의 사회 동아자유언론수호투쟁위원회 2008년 촛불집회가 한창일 때 정동익은 오래 전 자신이몸담았던 동아일 보사 앞에 서 있었다. 촛불을든시민들은 동아일보는 쓰레기다! 라며 야유 를 보냈다. 한때 국민들이 가장 사랑했던 신문 동아일보는 젊은 시절 그와동 료 기자들이 목숨을 걸고 외쳤던 자유 언론 이 아니었다. 그는 차마더바라

More information

Contents I. 칼라스 네트워크 플레이어란 1. Pc-Fi를 넘어서 발전한 차세대 음악 플레이어 ---------------- 4 2. 칼라스 네트워크 플레이어의 장점 3. 시스템 기본 구성 ------------------------ 6 -------------

Contents I. 칼라스 네트워크 플레이어란 1. Pc-Fi를 넘어서 발전한 차세대 음악 플레이어 ---------------- 4 2. 칼라스 네트워크 플레이어의 장점 3. 시스템 기본 구성 ------------------------ 6 ------------- [ CALLAS Network Player ] Owner s Manual ( 주 ) 금 잔 디 음 향 예.술.을.담.는.스.피.커.과.학 Contents I. 칼라스 네트워크 플레이어란 1. Pc-Fi를 넘어서 발전한 차세대 음악 플레이어 ---------------- 4 2. 칼라스 네트워크 플레이어의 장점 3. 시스템 기본 구성 ------------------------

More information

Microsoft Word - Heap_Spray.doc

Microsoft Word - Heap_Spray.doc Heap Spray 본문서는 최근 웹 브라우저를 이용한 공격에 사용되는 Heap Spray 기법에 대한 내용을 수록하였다. 관련 내용에 대하여 많은 도움이 되기 바란다. 문서 내용은 초보자도 쉽게 이해할 수 있도록 관련 내용에 대한 설명을 포함하였다. Hacking Group OVERTIME force< forceteam01@gmail.com > 2007.05.13

More information

320110.PDF

320110.PDF *.. 1. 2. < > 3. 4...,.,.?. * - 150 - (, ),,,.,,.,,. 2-4.. 50. ( ),,.. - 151 - ., : : :,,,......, - 152 - .. 1.,,,,.... ( ) ( ) ( ) ( ),,,,.,,, - 153 - ,,. (BC 1 ),,. (BC 37 ),,,,,, (BC 18 ),,,,.. (, ),.,,,,.,,.,,.

More information

목차 제 1 장 inexio Touch Driver소개... 3 1.1 소개 및 주요 기능... 3 1.2 제품사양... 4 제 2 장 설치 및 실행... 5 2.1 설치 시 주의사항... 5 2.2 설치 권고 사양... 5 2.3 프로그램 설치... 6 2.4 하드웨

목차 제 1 장 inexio Touch Driver소개... 3 1.1 소개 및 주요 기능... 3 1.2 제품사양... 4 제 2 장 설치 및 실행... 5 2.1 설치 시 주의사항... 5 2.2 설치 권고 사양... 5 2.3 프로그램 설치... 6 2.4 하드웨 최종 수정일: 2010.01.15 inexio 적외선 터치스크린 사용 설명서 [Notes] 본 매뉴얼의 정보는 예고 없이 변경될 수 있으며 사용된 이미지가 실제와 다를 수 있습니다. 1 목차 제 1 장 inexio Touch Driver소개... 3 1.1 소개 및 주요 기능... 3 1.2 제품사양... 4 제 2 장 설치 및 실행... 5 2.1 설치 시

More information

Microsoft Word - building the win32 shellcode 01.doc

Microsoft Word - building the win32 shellcode 01.doc Win32 Attack 1. Local Shellcode 작성방법 By 달고나 (Dalgona@wowhacker.org) Email: zinwon@gmail.com Abstract 이글은 MS Windows 환경에서 shellcode 를작성하는방법에대해서설명하고있다. Win32 는 *nix 환경과는사뭇다른 API 호출방식을사용하기때문에조금복잡하게둘러서 shellcode

More information

<313530393032203134B3E2C1B6BBE7BAD0BCAEBAB8B0EDBCAD2DBFCFBCBABABB28BEF6C0CDC3B5292E687770>

<313530393032203134B3E2C1B6BBE7BAD0BCAEBAB8B0EDBCAD2DBFCFBCBABABB28BEF6C0CDC3B5292E687770> iii 주요 결과 요약 총괄 현황 2014년도 총 투자액 17.6조원(ʼ13년도 16.9조원 대비 4.3% 증가) - 투자계획 17조 7,793억원(예산 15.9조원, 기금 1.9조원) 대비 미집행액(예산미배정, 불용 등) 1,398억원을 제외한 17조 6,395억원(99.2%) 집행 - 최근 5년간(ʼ10~ʼ14년) 국가연구개발사업의 투자액은 연평균 6.6%

More information

ODS-FM1

ODS-FM1 OPTICAL DISC ARCHIVE FILE MANAGER ODS-FM1 INSTALLATION GUIDE [Korean] 1st Edition (Revised 4) 상표 Microsoft, Windows 및 Internet Explorer는 미국 및 / 또는 다른 국가에서 Microsoft Corporation 의 등록 상표입 Intel 및 Intel Core

More information

2힉년미술

2힉년미술 제 회 Final Test 문항 수 배점 시간 개 00 점 분 다음 밑줄 친 부분의 금속 공예 가공 기법이 바르게 연결된 것은? 금, 은, 동, 알루미늄 등의 금속을 ᄀ불에 녹여 틀에 붓거나 금속판을 ᄂ구부리거나 망치로 ᄃ두들겨서 여러 가지 형태의 쓸모 있는 물건을 만들 수 있다. ᄀ ᄂ ᄃ ᄀ ᄂ ᄃ 조금 단금 주금 주금 판금 단금 단금 판금 주금 판금 단금

More information

디지털포렌식학회 논문양식

디지털포렌식학회 논문양식 Windows Transactional NTFS(TxF), Registry(TxR) 기능 연구 유 병 영, 방 제 완, 이 상 진 고려대학교 디지털포렌식연구센터 Analysis of Windows Transactional NTFS(TxF) and Transactional Registry(TxR) Byeongyeong Yoo, Jewan Bang, Sangjing

More information

조선왕조 능 원 묘 기본 사료집 -부록 : 능 원 묘의 현대적 명칭표기 기준안 차 례 서 장 : 조선왕실의 능 원 묘 제도 11 제 1부 능 원 묘 기본 사료 Ⅰ. 능호( 陵 號 ) 및 묘호( 廟 號 )를 결정한 유래 1. 건원릉( 健 元 陵 ) 21 2. 정릉( 貞 陵 ) 22 3. 헌릉( 獻 陵 )

More information

38--18--최우석.hwp

38--18--최우석.hwp 古 詩 源 < 顔 延 之 > 篇 譯 註 * 崔 宇 錫 1) 1. 序 文 2. 古 詩 源 < 顔 延 之 > 篇 譯 註 3. 結 語 1. 序 文 沈 德 潛 (1673-1769)의 字 는 確 士 이고 號 는 歸 愚 이다. 江 南 長 洲 (현재의 江 蘇 省 蘇 州 ) 사람으로 淸 代 聖 祖, 世 宗, 高 宗 삼대를 모두 거쳤다. 특히 시를 몹 시 좋아한

More information

E1-정답및풀이(1~24)ok

E1-정답및풀이(1~24)ok 초등 2 학년 1주 2 2주 7 3주 12 4주 17 부록` 국어 능력 인증 시험 22 1주 1. 느낌을 말해요 1 ⑴ ᄂ ⑵ ᄀ 1 8~13쪽 듣기 말하기/쓰기 1 ` 2 ` 3 참고 ` 4 5 5 5 ` 6 4 ` 7 참고 ` 8 일기 ` 9 5 10 1 11, 3 [1~3] 들려줄 내용 옛날 옛날, 깊은 산골짜기에 큰 호랑이 한 마리가 살고 있었습 이

More information

<C1B6BCB1B4EBBCBCBDC3B1E2342DC3D6C1BE2E687770>

<C1B6BCB1B4EBBCBCBDC3B1E2342DC3D6C1BE2E687770> 권2 동경잡기 東京雜記 동경잡기 173 권2 불우 佛宇 영묘사(靈妙寺) 부(府)의 서쪽 5리(里)에 있다. 당 나라 정관(貞觀) 6년(632) 에 신라의 선덕왕(善德王)이 창건하였다. 불전(佛殿)은 3층인데 체제가 특이하다. 속설에 절터는 본래 큰 연못이었는데, 두두리(豆豆里) 사람들이 하룻밤 만에 메 우고 드디어 이 불전을 세웠다. 고 전한다. 지금은

More information

0429bodo.hwp

0429bodo.hwp 친일인명사전 수록대상자 명단 친일인명사전편찬위원회 ㄱ ㄴ ㄷ ㄹ ㅁ ㅂ ㅅ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ 이 명단은 친일인명사전 수록대상자의 후손 또는 연고자로부터 이의신청을 받기 위해 작성 되었습니다. 이 인물정보를 무단 복사하여 유포하거나 인터넷을 통해 전 파하는일체의행위는법에저촉될수있습니다. 주요 훈포상 약어 1. 병합기념장 2. 대정대례기념장 3. 소화대례기념장

More information

교사용지도서_쓰기.hwp

교사용지도서_쓰기.hwp 1. 재미있는 글자 단원의 구성 의도 이 단원은 도비와 깨비가 길을 잃고 헤매다 글자 공부의 필요성을 느끼고 글자 공부를 하게 되는 것으로 시작된다. 자칫 지겨울 수 있는 쓰기 공부를 다양한 놀이 위주의 활동으로 구성하였고, 학습자 주변의 다양한 자료들을 활용함으로써 학습에 대한 흥미를 갖고 활동할 수 있게 하였다. 각 단계의 학습을 마칠 때마다 도깨비 연필을

More information

과 위 가 오는 경우에는 앞말 받침을 대표음으로 바꾼 [다가페]와 [흐귀 에]가 올바른 발음이 [안자서], [할튼], [업쓰므로], [절믐] 풀이 자음으로 끝나는 말인 앉- 과 핥-, 없-, 젊- 에 각각 모음으로 시작하는 형식형태소인 -아서, -은, -으므로, -음

과 위 가 오는 경우에는 앞말 받침을 대표음으로 바꾼 [다가페]와 [흐귀 에]가 올바른 발음이 [안자서], [할튼], [업쓰므로], [절믐] 풀이 자음으로 끝나는 말인 앉- 과 핥-, 없-, 젊- 에 각각 모음으로 시작하는 형식형태소인 -아서, -은, -으므로, -음 . 음운 [ㄱ] [국], [박], [부억], [안팍] 받침의 발음 [ㄷ] [곧], [믿], [낟], [빋], [옫], [갇따], [히읃] [ㅂ] [숩], [입], [무릅] [ㄴ],[ㄹ],[ㅁ],[ㅇ] [간], [말], [섬], [공] 찾아보기. 음절 끝소리 규칙 (p. 6) [ㄱ] [넉], [목], [삭] [ㄴ] [안따], [안꼬] [ㄹ] [외골], [할꼬]

More information

時 習 說 ) 5), 원호설( 元 昊 說 ) 6) 등이 있다. 7) 이 가운데 임제설에 동의하는바, 상세한 논의는 황패강의 논의로 미루나 그의 논의에 논거로서 빠져 있는 부분을 보강하여 임제설에 대한 변증( 辨 證 )을 덧붙이고자 한다. 우선, 다음의 인용문을 보도록

時 習 說 ) 5), 원호설( 元 昊 說 ) 6) 등이 있다. 7) 이 가운데 임제설에 동의하는바, 상세한 논의는 황패강의 논의로 미루나 그의 논의에 논거로서 빠져 있는 부분을 보강하여 임제설에 대한 변증( 辨 證 )을 덧붙이고자 한다. 우선, 다음의 인용문을 보도록 과 임제 신해진(전남대) 1. 머리말 세조의 왕위찬탈과 단종복위 과정에서의 사육신을 소재로 한 작품은 남효온( 南 孝 溫 )의 (1492년 직전?), 임제( 林 悌 )의 (1576?), 김수민( 金 壽 民 )의 (1757) 등이 있다. 1) 첫 작품은 집전( 集

More information

<32303132BDC3BAB8C1A4B1D4C6C75BC8A3BFDC303530395D2E687770>

<32303132BDC3BAB8C1A4B1D4C6C75BC8A3BFDC303530395D2E687770> 조 례 익산시 조례 제1220호 익산시 주민감사 청구에 관한 조례 일부개정조례 1 익산시 조례 제1221호 익산시 제안제도 운영조례 일부개정조례 3 익산시 조례 제1222호 익산시 시채에 관한 조례 폐지조례 12 익산시 조례 제1223호 익산시 시세 감면 조례 전부개정조례 13 익산시 조례 제1224호 익산시 행정기구설치조례 19 익산시 조례 제1225호 익산시

More information

cls46-06(심우영).hwp

cls46-06(심우영).hwp 蘇 州 원림의 景 名 연구 * 用 典 한 경명을 중심으로 1)심우영 ** 목 차 Ⅰ. 서론 Ⅱ. 기존의 경명 命 名 法 Ⅲ. 귀납적 결과에 따른 경명 분류 1. 신화전설 역사고사 2. 文 辭, 詩 句 Ⅳ. 결론 Ⅰ. 서론 景 名 이란 景 觀 題 名 (경관에 붙인 이름) 의 준말로, 볼만한 경치 지구와 경치 지 점 그리고 경치 지구 내 세워진 인공물에 붙여진

More information

민주장정-노동운동(분권).indd

민주장정-노동운동(분권).indd 민주장정 100년, 광주 전남지역 사회운동 연구 노동운동사 정 호 기 농민운동 1 목 차 제1장 연구 배경과 방법 07 1. 문제제기 2. 기존 연구의 검토 3. 연구 대상의 특성과 변화 4. 연구 자료와 연구 방법 07 10 12 16 제2장 이승만 정부 시대의 노동조합운동 19 1. 이승만 정부의 노동정책과 대한노총 1) 노동 관련 법률들의 제정과 광주

More information

<C0CEBCE2BABB2D33C2F7BCF6C1A420B1B9BFAAC3D1BCAD203130B1C72E687770>

<C0CEBCE2BABB2D33C2F7BCF6C1A420B1B9BFAAC3D1BCAD203130B1C72E687770> 해제 면양행견일기 沔 陽 行 遣 日 記 이 자료는 한말의 개화파 관료, 김윤식 金 允 植 (1835~1922)이 충청도 면천 沔 川 에 유배하면서 동학농민혁명 시기에 전문 傳 聞 한 것을 일일이 기록한 일기책 이다. 수록한 부분은 속음청사 續 陰 晴 史 의 권 7로 내제 內 題 가 면양행견일기 沔 陽 行 遣 日 記 로 되어 있는 부분 가운데 계사년 癸 巳 年

More information

6±Ç¸ñÂ÷

6±Ç¸ñÂ÷ 6 6 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 과천심상소학교 졸업증서(문헌번호 03-004) 일제강점기 과천초등학교의 유일한 한국인 교장이었던 맹준섭임을 알 수 있다.

More information

伐)이라고 하였는데, 라자(羅字)는 나자(那字)로 쓰기도 하고 야자(耶字)로 쓰기도 한다. 또 서벌(徐伐)이라고도 한다. 세속에서 경자(京字)를 새겨 서벌(徐伐)이라고 한다. 이 때문에 또 사라(斯羅)라고 하기도 하고, 또 사로(斯盧)라고 하기도 한다. 재위 기간은 6

伐)이라고 하였는데, 라자(羅字)는 나자(那字)로 쓰기도 하고 야자(耶字)로 쓰기도 한다. 또 서벌(徐伐)이라고도 한다. 세속에서 경자(京字)를 새겨 서벌(徐伐)이라고 한다. 이 때문에 또 사라(斯羅)라고 하기도 하고, 또 사로(斯盧)라고 하기도 한다. 재위 기간은 6 동경잡기東京雜記 권1 진한기辰韓紀 경상도는 본래 진한(辰韓)의 땅인데, 뒤에 신라(新羅)의 소유가 되었다. 여지승 람(輿地勝覽) 에 나온다. 진한은 마한(馬韓)의 동쪽에 있다. 스스로 말하기를, 망 명한 진(秦)나라 사람이 난리를 피하여 한(韓)으로 들어오니 한이 동쪽 경계를 분할 하여 주었으므로 성책(城栅)을 세웠다. 하였다. 그 언어가 진나라 사람과 비슷하다.

More information

<C3D6C1BE5FBBF5B1B9BEEEBBFDC8B0B0DCBFEFC8A32831333031323120C3D6C1BEBABB292E687770>

<C3D6C1BE5FBBF5B1B9BEEEBBFDC8B0B0DCBFEFC8A32831333031323120C3D6C1BEBABB292E687770> 우리 시의 향기 사랑하는 일과 닭고기를 씹는 일 최승자, 유 준 서울예술대학교 문예창작과 강사/문학평론가 한 숟갈의 밥, 한 방울의 눈물로 무엇을 채울 것인가, 밥을 눈물에 말아먹는다 한들. 그대가 아무리 나를 사랑한다 해도 혹은 내가 아무리 그대를 사랑한다 해도 나는 오늘의 닭고기를 씹어야 하고 나는 오늘의 눈물을 삼켜야 한다.

More information

초등국어에서 관용표현 지도 방안 연구

초등국어에서 관용표현 지도 방안 연구 80 < 관용 표현 인지도> 남 여 70 60 50 40 30 20 10 0 1 2 3 4 5 6 70 < 관용 표현 사용 정도> 남 여 60 50 40 30 20 10 0 4학년 가끔쓴다 써본적있다 전혀안쓴다 5학년 가끔쓴다 써본적있다 전혀안쓴다 6학년 가끔쓴다 써본적있다 전혀안쓴다 70 < 속담 인지도> 남 여 60 50 40 30 20 10 0 1 2

More information

177

177 176 177 178 179 180 181 182 183 184 185 186 187 188 (2) 양주조씨 사마방목에는 서천의 양주조씨가 1789년부터 1891년까지 5명이 합격하였다. 한산에서도 1777년부터 1864년까지 5명이 등재되었고, 비인에서도 1735년부터 1801년까지 4명이 올라있다. 서천지역 일대에 넓게 세거지를 마련하고 있었 던 것으로

More information

제주어 교육자료(중등)-작업.hwp

제주어 교육자료(중등)-작업.hwp 여는말 풀꽃, 제주어 제주어는 제주인의 향기입니다. 제주인의 삶의 손끝에서 피어나는 삶의 향기이고, 꿈의 내음입니다. 그분들이 어루만졌던 삶이 거칠었던 까닭에 더욱 향기롭고, 그 꿈이 애틋했기에 더욱 은은합니다. 제주어는 제주가 피워낸 풀잎입니다. 제주의 거친 땅에 뿌리를 내리고 싹을 틔우고, 비바람 맞고 자랐기에 더욱 질박합니다. 사철 싱그러운 들풀과 들꽃향기가

More information

¸é¸ñ¼Ò½ÄÁö 63È£_³»Áö ÃÖÁ¾

¸é¸ñ¼Ò½ÄÁö 63È£_³»Áö ÃÖÁ¾ 정보나눔 섭이와 함께하는 여행 임강섭 복지과 과장 여름이다. 휴가철이다. 다 들 어디론가 떠날 준비에 마음 이 들떠 있는 시기가 아닌가 싶다. 여행 매니아까지는 아니 지만, 나름 여행을 즐기는 사 람으로서 가족들과 신나는 휴 가를 보낼 계획에 살짝 들떠 있는 나에게 혼자만 신나지 말 고 같이 좀 신났으면 좋겠다며 가족들과 같이 가면 좋은 여행 눈이 시리도록

More information

01Report_210-4.hwp

01Report_210-4.hwp 연구보고서 210-4 해방 후 한국여성의 정치참여 현황과 향후 과제 한국여성개발원 목 차 Ⅰ 서 론 Ⅱ 국회 및 지방의회에서의 여성참여 Ⅲ 정당조직내 여성참여 및 정당의 여성정책 Ⅳ 여성유권자의 투표율 및 투표행태 Ⅴ 여성단체의 여성정치참여 확대를 위한 운동 Ⅵ 여성의 정치참여 확대를 위한 향후 과제 참고문헌 부 록 표 목 차 Ⅰ 서 론 . 서론 1.

More information

<C3D1BCB15FC0CCC8C45FBFECB8AE5FB1B3C0B0C0C75FB9E6C7E228323031362D352D32315FC5E4292E687770>

<C3D1BCB15FC0CCC8C45FBFECB8AE5FB1B3C0B0C0C75FB9E6C7E228323031362D352D32315FC5E4292E687770> 총선 이후 우리 교육의 방향 당 체제에서 우리 교육의 전망과 교육행정가들의 역할 박 호 근 서울시의회 의원 교육위원회 위원 서론 년 월 일 제 대 국회의원 선거가 치러졌다 선거는 바로 민의 의 반영이기 때문에 총선결과를 살펴보고 왜 이러한 결과가 나왔는가를 분석해 본 후 년 월 일을 기점으로 제 대 국회의원들의 임기가 시 작되는 상황에서 우리 교육이 어떻게

More information

목 차 營 下 面 5 前 所 面 71 後 所 面 153 三 木 面 263 龍 流 面 285 都 已 上 條 367 同 治 六 年 (1867) 正 月 日 永 宗 防 營 今 丁 卯 式 帳 籍 범례 1. 훼손 등의 이유로 판독이 불가능한 글자는 로 표기함. 단, 비정 이 가능한 경우는 ( ) 안에 표기함. 2. 원본에서 누락된 글자는 [ ] 안에 표기함. 단, 누락된

More information

639..-1

639..-1 제639호 [주간] 2014년 12월 15일(월요일) http://gurotoday.com http://cafe.daum.net/gorotoday 문의 02-830-0905 대입 준비에 지친 수험생 여러분 힘내세요 신도림테크노마트서 수험생과 학부모 600명 대상 대입설명회 구로아트밸리서는 수험생 1,000명 초대 해피 콘서트 열려 구로구가 대입 준비로 지친

More information

교육 과 학기 술부 고 시 제 20 11-36 1호 초 중등교육법 제23조 제2항에 의거하여 초 중등학교 교육과정을 다음과 같이 고시합니다. 2011년 8월 9일 교육과학기술부장관 1. 초 중등학교 교육과정 총론은 별책 1 과 같습니다. 2. 초등학교 교육과정은 별책

교육 과 학기 술부 고 시 제 20 11-36 1호 초 중등교육법 제23조 제2항에 의거하여 초 중등학교 교육과정을 다음과 같이 고시합니다. 2011년 8월 9일 교육과학기술부장관 1. 초 중등학교 교육과정 총론은 별책 1 과 같습니다. 2. 초등학교 교육과정은 별책 교육과학기술부 고시 제 2011 361호 [별책 3] 중학교 교육과정 교육 과 학기 술부 고 시 제 20 11-36 1호 초 중등교육법 제23조 제2항에 의거하여 초 중등학교 교육과정을 다음과 같이 고시합니다. 2011년 8월 9일 교육과학기술부장관 1. 초 중등학교 교육과정 총론은 별책 1 과 같습니다. 2. 초등학교 교육과정은 별책 2 와 같습니다. 3.

More information

시험지 출제 양식

시험지 출제 양식 2013학년도 제2학기 제1차 세계사 지필평가 계 부장 교감 교장 2013년 8월 30일 2, 3교시 제 3학년 인문 (2, 3, 4, 5)반 출제교사 : 백종원 이 시험 문제의 저작권은 풍암고등학교에 있습니다. 저 작권법에 의해 보호받는 저작물이므로 전재와 복제는 금지 되며, 이를 어길 시 저작권법에 의거 처벌될 수 있습니다. 3. 전근대 시기 (가)~(라)

More information

우리나라의 전통문화에는 무엇이 있는지 알아봅시다. 우리나라의 전통문화를 체험합시다. 우리나라의 전통문화를 소중히 여기는 마음을 가집시다. 5. 우리 옷 한복의 특징 자료 3 참고 남자와 여자가 입는 한복의 종류 가 달랐다는 것을 알려 준다. 85쪽 문제 8, 9 자료

우리나라의 전통문화에는 무엇이 있는지 알아봅시다. 우리나라의 전통문화를 체험합시다. 우리나라의 전통문화를 소중히 여기는 마음을 가집시다. 5. 우리 옷 한복의 특징 자료 3 참고 남자와 여자가 입는 한복의 종류 가 달랐다는 것을 알려 준다. 85쪽 문제 8, 9 자료 통합 우리나라 ⑵ 조상님들이 살던 집에 대 해 아는 어린이 있나요? 저요. 온돌로 난방과 취사를 같이 했어요! 네, 맞아요. 그리고 조상님들은 기와집과 초가집에서 살았어요. 주무르거나 말아서 만들 수 있는 전통 그릇도 우리의 전통문화예요. 그리고 우리 옷인 한복은 참 아름 답죠? 여자는 저고리와 치마, 남자는 바지와 조끼를 입어요. 명절에 한복을 입고 절을

More information

상품 전단지

상품 전단지 2013 2013 추석맞이 추석맞이 지역우수상품 안내 안내 지역우수상품 지역 우수상품을 안내하여 드리오니 명절 및 행사용 선물로 많이 활용하여 주시기 바랍니다. 지역우수상품을 구입하시면 지역경제가 살아납니다. 즐거운 한가위 보내시고, 복 많이 받으세요! - 경기동부상공회의소 임직원 일동 - 지역우수상품을 구입하시면 지역경제가 살아납니다.

More information

::: 해당사항이 없을 경우 무 표시하시기 바랍니다. 검토항목 검 토 여 부 ( 표시) 시 민 : 유 ( ) 무 시 민 참 여 고 려 사 항 이 해 당 사 자 : 유 ( ) 무 전 문 가 : 유 ( ) 무 옴 브 즈 만 : 유 ( ) 무 법 령 규 정 : 교통 환경 재

::: 해당사항이 없을 경우 무 표시하시기 바랍니다. 검토항목 검 토 여 부 ( 표시) 시 민 : 유 ( ) 무 시 민 참 여 고 려 사 항 이 해 당 사 자 : 유 ( ) 무 전 문 가 : 유 ( ) 무 옴 브 즈 만 : 유 ( ) 무 법 령 규 정 : 교통 환경 재 시 민 문서번호 어르신복지과-1198 주무관 재가복지팀장 어르신복지과장 복지정책관 복지건강실장 결재일자 2013.1.18. 공개여부 방침번호 대시민공개 협 조 2013년 재가노인지원센터 운영 지원 계획 2013. 01. 복지건강실 (어르신복지과) ::: 해당사항이 없을 경우 무 표시하시기 바랍니다. 검토항목 검 토 여 부 ( 표시) 시 민 : 유 ( ) 무

More information

2

2 1 2 3 4 5 6 또한 같은 탈북자가 소유하고 있던 이라고 할수 있는 또 한장의 사진도 테루꼬양이라고 보고있다. 二宮喜一 (니노미야 요시가즈). 1938 년 1 월 15 일생. 신장 156~7 센치. 체중 52 키로. 몸은 여윈형이고 얼굴은 긴형. 1962 년 9 월경 도꾜도 시나가와구에서 실종. 당시 24 세. 직업 회사원. 밤에는 전문학교에

More information

화이련(華以戀) 141001.hwp

화이련(華以戀) 141001.hwp 年 花 下 理 芳 盟 段 流 無 限 情 惜 別 沈 頭 兒 膝 夜 深 雲 約 三 십년을 꽃 아래서 아름다운 맹세 지키니 한 가닥 풍류는 끝없는 정이어라. 그대의 무릎에 누워 애틋하게 이별하니 밤은 깊어 구름과 빗속에서 삼생을 기약하네. * 들어가는 글 파르라니 머리를 깎은 아이가 시린 손을 호호 불며 불 옆에 앉아 있다. 얼음장 같은 날씨에 허연 입김이 연기처럼

More information

ÆòÈ�´©¸® 94È£ ³»Áö_ÃÖÁ¾

ÆòÈ�´©¸® 94È£ ³»Áö_ÃÖÁ¾ 사람 안간힘을 다해 행복해지고 싶었던 사람, 허세욱을 그리다 - 허세욱 평전 작가 송기역 - 서울 평통사 노동분회원 허세욱. 효순이 미선이의 억울한 죽음에 대 해 미국은 사죄하라는 투쟁의 현장에 서 그 분을 처음 만났다. 평택 대추리 의 넓은 들판을 두 소녀의 목숨을 앗 아간 미군들에게 또 빼앗길 순 없다며 만들어 온 현수막을 대추초교에 같이 걸었다. 2007년

More information

歯1##01.PDF

歯1##01.PDF 1.? 1.?,..,.,. 19 1.,,..,. 20 1.?.,.,,...,.,..,. 21 1,.,.,. ( ),. 10 1? 2.5%. 1 40. 22 1.? 40 1 (40 2.5% 1 ). 10 40 4., 4..,... 1997 ( ) 12. 4.6% (26.6%), (19.8%), (11.8%) 23 1. (?).. < >..,..!!! 24 2.

More information

<5BC1F8C7E0C1DF2D31B1C75D2DBCF6C1A4BABB2E687770>

<5BC1F8C7E0C1DF2D31B1C75D2DBCF6C1A4BABB2E687770> 제3편 정 치 제3편 정치 제1장 의회 제1절 의회 기구 제2절 의회기구 및 직원 현황 자치행정전문위원회 자치행정전문위원 산업건설위원회 산업건설전문위원 제1장 의회 321 제3절 의회 현황 1. 제1대 고창군의회 제1대 고창군의회 의원 현황 직 위 성 명 생년월일 주 소 비 고 322 제3편 정치 2. 제2대 고창군의회 제2대 고창군의회 의원 현황 직 위

More information

120229(00)(1~3).indd

120229(00)(1~3).indd 법 률 국회에서 의결된 공직선거법 일부개정법률을 이에 공포한다. 대 통 령 이 명 박 2012년 2월 29일 국 무 총 리 김 황 식 국 무 위 원 행정안전부 맹 형 규 장 관 (중앙선거관리위원회 소관) 법률 제11374호 공직선거법 일부개정법률 공직선거법 일부를 다음과 같이 개정한다. 제21조제1항에 단서를 다음과 같이 신설한다. 다만,세종특별자치시의 지역구국회의원

More information

FMX M JPG 15MB 320x240 30fps, 160Kbps 11MB View operation,, seek seek Random Access Average Read Sequential Read 12 FMX () 2

FMX M JPG 15MB 320x240 30fps, 160Kbps 11MB View operation,, seek seek Random Access Average Read Sequential Read 12 FMX () 2 FMX FMX 20062 () wwwexellencom sales@exellencom () 1 FMX 1 11 5M JPG 15MB 320x240 30fps, 160Kbps 11MB View operation,, seek seek Random Access Average Read Sequential Read 12 FMX () 2 FMX FMX D E (one

More information