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
|
|
- 애란 삼
- 6 years ago
- Views:
Transcription
1 DLL injection Written by Darawk 편역 : poc@securityproof.net * 이글은 Codebreakers Journal Vol.1, No.1, 2007 에서발표된것이며, 오역이나 오타가있을수있으니원문을참고시기바랍니다.
2 이문서에서, 나는프로세스에 dll을삽입하는알려진 ( 적어도내가아는한에서 ) 방법들모두를다룰것이다. Dll injection은 game hacking, function hooking, code patching, keygenning, unpacking 등에서굉장히유용하게사용될수있다. 이기술에대해서웹상에여러문서들이있지만, 나는아직기술을세부적으로기술하면서각각에대해장점과단점을설명한완벽한튜토리얼은보지못했다 ( 물론내가알고있는것보다더많은것이 있을수있다 ). 이것들이이문서에서당신들에게알려주고자하는것들이다. 적당한 credit 이주어지고알림없이수정만하지않는다면, 이문서의이용은자유다. The CreateRemoteThread method 이기술을난많이사용해왔지만, 최근에들어많은사람들이이것을본적이없거나사용하는방법을모른다는것을알게되었다. 하지만, 이것에대해서난 credit을가질수는없다. 이것을 codeproject의기사에서얻었기때문이다. 어쨌든이것은많은사람들이사용하는법을알아야만하는휼륭한기술이다. 이기술은간단하고우아하다. Windows API에는CreateRemoteThread() 라는함수가있다. 이것을이용해우리는다른프로세스에서쓰레드를시작할수있다. 여기서, 난당신이쓰레드의동작에관해알고, CreateThread같은함수를사용할수있다고가정하겠다. 이방법의주요단점은 windows NT이상에서만사용할수있다는것이다. 크래쉬를막기위해당신은시스템이 NT 기반인지다음함수를사용해시스템이 NT 기반인지알아보아야한다.( 이점을지적해준 CatID 에게감사한다 ): bool IsWindowsNT()
3 // check current version of Windows DWORD version = GetVersion(); // parse return DWORD majorversion = (DWORD)(LOBYTE(LOWORD(version))); DWORD minorversion = (DWORD)(HIBYTE(LOWORD(version))); return (version < 0x ); CreateRemoteThread 의 MSDN 정의는다음과같다.: HANDLE CreateRemoteThread( HANDLE hprocess, LPSECURITY_ATTRIBUTES lpthreadattributes, SIZE_T dwstacksize, LPTHREAD_START_ROUTINE lpstartaddress, LPVOID lpparameter, DWORD dwcreationflags, LPDWORD lpthreadid ); 이것은본질적으로 hprocess인자 1 를갖는 CreateThread이므로우린새로운스레드가어떤프로세스내에서만들어지는지구분할수있다. 이제우린우리가접촉한프로세스의내부함수에서스레드를시작하길원한다. 그러나 dll을삽입하기위해선조금다른어떤것을해야만한다. 1 hprocess: 스레드가생성될타깃프로세스. 스레드생성에성공하기위해서는이핸들에대해적당한권한이있어야한다.
4 BOOL InjectDLL(DWORD ProcessID) HANDLE Proc; char buf[50]=0; LPVOID RemoteString, LoadLibAddy; if(!processid) return false; Proc = OpenProcess(CREATE_THREAD_ACCESS, FALSE, ProcessID); if(!proc) sprintf(buf, "OpenProcess() failed: %d", GetLastError()); MessageBox(NULL, buf, "Loader", NULL); return false; LoadLibAddy = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA"); RemoteString = (LPVOID)VirtualAllocEx(Proc, NULL, strlen(dll_name), MEM_RESERVE MEM_COMMIT, PAGE_READWRITE); WriteProcessMemory(Proc, (LPVOID)RemoteString, DLL_NAME,strlen(DLL_NAME), NULL); CreateRemoteThread(Proc, NULL, NULL, (LPTHREAD_START_ROUTINE)LoadLibAddy, (LPVOID)RemoteString, NULL, NULL);
5 CloseHandle(Proc); return true; 이코드는 LoadLibrary() 의 lpstaraddress와함께 CreateRemoteThread() 를호출한다. 그래서리모트프로세스에서새로운스레드를시작하고 LoadLibrary() 를실행한다. 운좋게도, 이함수는단하나의인자 ( 로드할 dll의이름 ) 만을갖는다. 우리는 CreateRemoteThread() 의인자값필드에서이것을건네줄수있다. 그러나작은문제가있다. 이스레드가우리의주소공간에서실행되는지않을것이기에, 우리의주소공간에있는문자열 (dll의이름같은 ) 을참조할수없다. 그래서 CreateRemoteThread() 를호출하기전에우리는 VirtualAllocEx() 를이용하여다른프로세스에공간을할당하고거기에우리의문자열을써야만한다. 마지막으로, CreateRemoteThread() 의하나의인자값필드에서리모트프로세스내부에 문자열로의포인터를건네줄수있다. 자보라... 우리의 dll 은이제로드되었고리모트프로세스안에서부드럽게돌아가고있다. 이것이 dll 을로드할필요가있을때마다사용하는로더프로그램이다. The SetWindowsHookEx method SetWindowsHookEx 기법은앞의것보다좀더침입적이고삽입된프로세스에서우리가원치않는문제를일으킨다. 그러나사용하기쉽고그것만의장점이있다.( 한번에시스템의모든프로세스의삽입할수있는것같은 ). SetWindowsHookEx() 함수는주어진스레드에대해당신이윈도우메시지를 hook 할수있도록설계되었다. 이것은당신이프로세스주소공간에 dll을삽입하는것을필요로한다. 그래서 SetWindowsHookEx() 는우리를
6 위해그것모두를다룬다. Dll 은 hook 을위해그것이만든함수를가져야만하며, 그렇지 않으면 crash 할것이다. HHOOK SetWindowsHookEx( int idhook, HOOKPROC lpfn, HINSTANCE hmod, DWORD dwthreadid ); idhook은우리가 hook하기원하는메시지의 ID이다. 많은것들이있다. 그러나우린가능한침입적이지않고 AV 소프트웨어 (SetWindowsHookEx는 ring3 키로거들의주요소이다 ) 에서경고가가능한나지않도록하는것을사용할것이다. WH_CBT는충분히해가없는것으로보인다. Quote: WH_CBT 컴퓨터기반교육 (CBT) 어플리케이션에유용한공고를받는 hook 프로시저를 설치하라. 자세한정보는 CBTProc hook 프로시저를보라. --MSDN 그래서우린우리의 dll 에플라시보 (placebo) 2 CBT hook proc 를만들어야 hook 이 호출되었을때, 우린그것을적절하게다룰수있다. 2 가짜의의미로해석될듯.
7 LRESULT CALLBACK CBTProc(int ncode, WPARAM wparam, LPARAM lparam) return CallNextHookEx(0, ncode, wparam, lparam); ; 우리가하고있는것은이메시지를위해존재하는 hook들의사슬에서다음훅을호출하는것이다. SetWindowsHookEx() 로돌아가서우린다음인자인 lpfn을볼수있다. Lpfn은 long pointer to function 이다. 그것은우리의 CBT hook proc함수로의포인터이다. 그래서이것을얻기위해우린그주소를하드코딩하던지우선 dll을로딩해야한다. 어떤것을하드코드하는것은좋지않은생각이므로우린함수의주소를얻기위해 LoadLibrary() 와 GetProcAddress() 를사용하여 dll을로드할것이다. HMODULE hdll; unsigned long cbtprocaddr; hdll = LoadLibrary("injected.dll"); cbtprocaddr = GetProcAddress(hDll, "CBTProc"); 이제우리는우리의함수주소를 cbtprocaddr 안에갖게되었다. 우리의 dll 을다루는 SetWindowsHookEx() 의세번째파라미터는 CBTProc 의주소를얻는과정에서이미 얻었다 (hdll 은 LoadLibrary 에의해리턴된우리의 dll 에대한핸들이다 ). 이제 SetWindowsHookEx() 함수에서 dwthreadid 파라미터하나만남았다. 만약당신이 당신의 dll 을시스템의모든프로세스에삽입 ( 전역함수 hook, 키로거, 트로얀, 루트킷등에
8 유용 ) 하길원한다면간단하게이파라미터에 0을넣을수있다. 만약당신이특정프로세스를타깃으로하길원한다면, 당신은그것의스레드중하나의 ID를얻어야만한다. 이것을하기위해많은방법이있고나는 Appendix B에서내가생각할수있는만큼나열해볼것이다. 그래서그것을우리의작은함수안에함께넣을것이다 : BOOL InjectDll(char *dllname) HMODULE hdll; unsigned long cbtprocaddr; hdll = LoadLibrary(dllName); cbtprocaddr = GetProcAddress(hDll, "CBTProc"); SetWindowsHookEx(WH_CBT, cbtprocaddr, hdll, GetTargetThreadIdFromWindow("targetApp")); return TRUE; The code cave method 프로세스가우리의 Dll 을로드하도록강제하기위해 windows API 함수를공략하는대신에, 이번에우리는타깃어플리케이션내부에조그만청크메모리를할당하고우리의 Dll 을
9 로드하는작은스텁 (stub) 3 를삽입할것이다. 이접근방법의장점은윈도우의어떤 버전에서든지동작할수있고, 언급된방법들중가장탐지되기어렵다. 우리의 스텁 (stub) 는이렇다. declspec(naked) loaddll(void) _asm // Placeholder for the return address push 0xDEADBEEF // Save the flags and registers pushfd pushad // Placeholder for the string address and LoadLibrary push 0xDEADBEEF mov eax, 0xDEADBEEF // Call LoadLibrary with the string parameter call eax // Restore the registers and flags popad popfd // Return control to the hijacked thread 3 stub: 상위프로그램이호출했을때완벽한기능을임시로흉내내는가짜모듈
10 ret 0xDEADBEEF 는우리가미리알수없는주소를표시하기위해두었고, 실행중에 수정해야한다. 자, 이제이작업을하기위해우리가해야할것들을나열해보자 : - 스텁 (stub) 를위한공간할당 - dll 의이름을위한공간할당 - 타깃의메인스레드를중지한다. - 실행되어질다음명령의주소를얻는다 ( 다음단계를위해필요하다 ) - 스텁 (stub) 내에돌아가기위한적당한주소로패치한다. - dll 이름의주소를패치한다 - LoadLibrary 의주소를패치한다. - 우리의스텁의시작주소에타깃의스레드에서실행되어질다음명령의주소를설정한다. - 타깃스레드를다시시작한다. 타깃내에공간을할당하기위해, 우리는 VirtualAllocEx() 를사용할것이다. 우리는이것을위해 VM_OPERATION권한으로프로세스핸들을여는것이필요하다. 우리의 dll이름문자열을위해우리는단지읽기와쓰기권한만필요하다. 그러나스텁을위해서는우리는읽기, 쓰기, 실행권한이필요하다. 그러면우린우리의 dll이름문자열을쓸것이고, 삽입된스텁으로부터그것을참조할수있다.
11 void *dllstring, *stub; unsigned long wowid; HANDLE hprocess //See Appendix A for //this function wowid = GetTargetProcessIdFromProcname(PROC_NAME); hprocess = OpenProcess((PROCESS_VM_WRITE PROCESS_VM_OPERATION), false, wowid); dllstring = VirtualAllocEx(hProcess, NULL, (strlen(dll_name) + 1), MEM_COMMIT, PAGE_READWRITE); stub = VirtualAllocEx(hProcess, NULL, stublen, MEM_COMMIT, PAGE_EXECUTE_READWRITE); WriteProcessMemory(hProcess, dllstring, DLL_NAME, strlen(dll_name), NULL); 우리의다음일들을위하여, 우린타깃스레드중하나에대한핸들이필요할것이다. 우린스레드의 ID를얻기위해 Appendix B의함수들을사용할수있고, 그런후핸들을얻기위한 OpenThread API를사용할수있다. 우린컨텍스트 (context) 를얻고설정할수있어야하고, 또한스레드를중지하거나재시작할수있어야한다. unsigned long threadid; HANDLE hthread;
12 threadid = GetTargetThreadIdFromProcname(PROC_NAME); hthread = OpenThread((THREAD_GET_CONTEXT THREAD_SET_CONTEXT THREAD_SUSPEND_RESUME), false, threadid); 이제는 컨텍스트 (context) 를얻기위해스레드를멈추어야한다. 스레드의컨텍스트는주변장치정보는물론모든레지스터들의현재상태이다. 그러나우린주로실행되어질다음명령을가리키는 EIP레지스터에관심이있다. 그래서만약우리가컨텍스트정보를받기전스레드를중지시키지않는다면, 그것은계속실행될것이고우리가정보를얻을때그것은유효하지않게된다. 일단스레드를중지시키면우린 GetThreadContext() 함수를이용해서컨텍스트를받을것이다. 우린실행될다음명령값을얻어서우린우리의스텁이돌아가야하는곳을알수있다. 그런후에는단지적당한포인터를갖도록스텁을패칭하고그것이실행되도록스레드가그것을실행하도록강제하는것이문제이다 : SuspendThread(hThread); ctx.contextflags = CONTEXT_CONTROL; GetThreadContext(hThread, &ctx); oldip = ctx.eip; //Set the EIP of the context to the address of our stub ctx.eip = (DWORD)stub; ctx.contextflags = CONTEXT_CONTROL; //Right now loaddll is code, which isn't writable. We need //to change that.
13 VirtualProtect(loadDll, stublen, PAGE_EXECUTE_READWRITE, &oldprot); //Patch the first push instruction memcpy((void *)((unsigned long)loaddll + 1), &oldip, 4); //Patch the 2nd push instruction memcpy((void *)((unsigned long)loaddll + 8), &dllstring, 4); //Patch the mov eax, 0xDEADBEEF to mov eax, LoadLibrary memcpy((void *)((unsigned long)loaddll + 13), &loadlibaddy, 4); WriteProcessMemory(hProcess, stub, loaddll, stublen, NULL); //Write the stub into the target //Set the new context of the target's thread SetThreadContext(hThread, &ctx); //Let the target thread continue execution, starting at our stub ResumeThread(hThread); 이제남은것은증거를없애는것이다. 우리가그것하기전타깃이우리의스텁을확실히 실행하도록우린잠시동안인젝터를멈추어야만한다. 우린우리가할당한메모리가 언매핑되고인젝터를나가기전에 8 초동안멈추기위해 Sleep() 를사용할것이다. Sleep(8000); VirtualFreeEx(hProcess, dllstring, strlen(dll_name), MEM_DECOMMIT); VirtualFreeEx(hProcess, stub, stublen, MEM_DECOMMIT); CloseHandle(hProcess); CloseHandle(hThread);
14 이방법은윈도우의어떤버전에서든동작할것이고, A/V 알람이나프로그램이기능불량을 일으키게할가능성이가장적을것이다. 만약우리가그것을이해하고적당히실현할수 있다면, 이것은세가지방법중최고가될것이다. Appendix A - Methods of obtaining a process ID 만약당신이타깃으로삼은프로세스가윈도우를가지고있다면, 당신은아래보이는것 처럼 GetWindowTheadPocessId 와함께 FindWindow 함수를사용할수있다 : unsigned long GetTargetProcessIdFromWindow(char *classname, char *windowname) unsigned long procid; HWND targetwnd; targetwnd = FindWindow(className, windowname); GetWindowThreadProcessId(targetWnd, &procid); return procid; 만약당신이실행파일의이름만을알거나그것이윈도우를지니고있지않다면 :
15 unsigned long GetTargetProcessIdFromProcname(char *procname) PROCESSENTRY32 pe; HANDLE thsnapshot; BOOL retval, ProcFound = false; thsnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if(thsnapshot == INVALID_HANDLE_VALUE) MessageBox(NULL, "Error: unable to create toolhelp snapshot", "Loader", NULL); return false; pe.dwsize = sizeof(processentry32); retval = Process32First(thSnapshot, &pe); while(retval) if(strstri(pe.szexefile, procname) ) ProcFound = true; break; retval = Process32Next(thSnapshot,&pe);
16 pe.dwsize = sizeof(processentry32); return pe.th32processid; Appendix B - Methods of obtaining a thread ID 만약당신이타깃으로정한프로세스가윈도우를지니고있다면, 당신은아래보이는 것처럼 GetWindowThreadProcessId 와 toolhelp API 와함께 FindWindow 함수를사용할 수있다. unsigned long GetTargetThreadIdFromWindow(char *classname, char *windowname) HWND targetwnd; HANDLE hprocess unsigned long processid, ptid, threadid; targetwnd = FindWindow(className, windowname); GetWindowThreadProcessId(targetWnd, &processid); _asm
17 mov eax, fs:[0x18] add eax, 36 mov [ptid], eax hprocess = OpenProcess(PROCESS_VM_READ, false, processid); ReadProcessMemory(hProcess, (const void *)ptid, &threadid, 4, NULL); CloseHandle(hProcess); return threadid; 만약당신이타깃의실행파일이름만을안다면, 당신은그것의장소를찾기위해이코드를 사용할수있다. unsigned long GetTargetThreadIdFromProcname(char *procname) PROCESSENTRY32 pe; HANDLE thsnapshot, hprocess; BOOL retval, ProcFound = false; unsigned long ptid, threadid; thsnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if(thsnapshot == INVALID_HANDLE_VALUE) MessageBox(NULL, "Error: unable to create toolhelp snapshot", "Loader",
18 NULL); return false; pe.dwsize = sizeof(processentry32); retval = Process32First(thSnapshot, &pe); while(retval) if(strstri(pe.szexefile, procname) ) ProcFound = true; break; retval = Process32Next(thSnapshot,&pe); pe.dwsize = sizeof(processentry32); CloseHandle(thSnapshot); _asm mov eax, fs:[0x18] add eax, 36 mov [ptid], eax hprocess = OpenProcess(PROCESS_VM_READ, false, pe.th32processid);
19 ReadProcessMemory(hProcess, (const void *)ptid, &threadid, 4, NULL); CloseHandle(hProcess); return threadid; Appendix C - CreateRemoteThread complete example source code #include <windows.h> #include <stdio.h> #include <tlhelp32.h> #include <shlwapi.h> #define PROCESS_NAME "target.exe" #define DLL_NAME "injected.dll" //I could just use PROCESS_ALL_ACCESS but it's always best to use the absolute bare minimum of priveleges, so that your code works in as //many circumstances as possible. #define CREATE_THREAD_ACCESS (PROCESS_CREATE_THREAD PROCESS_QUERY_INFORMATION PROCESS_VM_OPERATION PROCESS_VM_WRITE PROCESS_VM_READ)
20 BOOL WriteProcessBYTES(HANDLE hprocess,lpvoid lpbaseaddress,lpcvoid lpbuffer,size_t nsize); BOOL LoadDll(char *procname, char *dllname); BOOL InjectDLL(DWORD ProcessID, char *dllname); unsigned long GetTargetProcessIdFromProcname(char *procname); bool IsWindowsNT() // check current version of Windows DWORD version = GetVersion(); // parse return DWORD majorversion = (DWORD)(LOBYTE(LOWORD(version))); DWORD minorversion = (DWORD)(HIBYTE(LOWORD(version))); return (version < 0x ); int WINAPI WinMain(HINSTANCE hinstance,hinstance hprevinstance,lpstr lpcmdline,int ncmdshow) if(iswindowsnt()) LoadDll(PROCESS_NAME, DLL_NAME); else MessageBox(0, "Your system does not support this method", "Error!", 0); return 0;
21 BOOL LoadDll(char *procname, char *dllname) DWORD ProcID = 0; ProcID = GetProcID(procName); if(!(injectdll(procid, dllname))) MessageBox(NULL, "Process located, but injection failed", "Loader", NULL); return true; BOOL InjectDLL(DWORD ProcessID, char *dllname) HANDLE Proc; char buf[50]=0; LPVOID RemoteString, LoadLibAddy; if(!processid) return false; Proc = OpenProcess(CREATE_THREAD_ACCESS, FALSE, ProcessID); if(!proc) sprintf(buf, "OpenProcess() failed: %d", GetLastError()); MessageBox(NULL, buf, "Loader", NULL); return false;
22 LoadLibAddy = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA"); RemoteString = (LPVOID)VirtualAllocEx(Proc, NULL, strlen(dll_name), MEM_RESERVE MEM_COMMIT, PAGE_READWRITE); WriteProcessMemory(Proc, (LPVOID)RemoteString, dllname, strlen(dllname), NULL); CreateRemoteThread(Proc, NULL, NULL, (LPTHREAD_START_ROUTINE)LoadLibAddy, (LPVOID)RemoteString, NULL, NULL); CloseHandle(Proc); return true; unsigned long GetTargetProcessIdFromProcname(char *procname) PROCESSENTRY32 pe; HANDLE thsnapshot; BOOL retval, ProcFound = false; thsnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if(thsnapshot == INVALID_HANDLE_VALUE) MessageBox(NULL, "Error: unable to create toolhelp snapshot", "Loader", NULL);
23 return false; pe.dwsize = sizeof(processentry32); retval = Process32First(thSnapshot, &pe); while(retval) if(strstri(pe.szexefile, procname) ) ProcFound = true; break; retval = Process32Next(thSnapshot,&pe); pe.dwsize = sizeof(processentry32); return pe.th32processid; Appendix D - SetWindowsHookEx complete example source code
24 #include <windows.h> #include <tlhelp32.h> #define PROC_NAME "target.exe" #define DLL_NAME "injected.dll" void LoadDll(char *procname, char *dllname); unsigned long GetTargetThreadIdFromProcname(char *procname); int WINAPI WinMain(HINSTANCE hinstance,hinstance hprevinstance,lpstr lpcmdline,int ncmdshow) LoadDll(PROC_NAME, DLL_NAME); return 0; void LoadDll(char *procname, char *dllname) HMODULE hdll; unsigned long cbtprocaddr; hdll = LoadLibrary(dllName); cbtprocaddr = GetProcAddress(hDll, "CBTProc"); SetWindowsHookEx(WH_CBT, cbtprocaddr, hdll, GetTargetThreadIdFromProcName(procName));
25 return TRUE; unsigned long GetTargetThreadIdFromProcname(char *procname) PROCESSENTRY32 pe; HANDLE thsnapshot, hprocess; BOOL retval, ProcFound = false; unsigned long ptid, threadid; thsnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if(thsnapshot == INVALID_HANDLE_VALUE) MessageBox(NULL, "Error: unable to create toolhelp snapshot", "Loader", NULL); return false; pe.dwsize = sizeof(processentry32); retval = Process32First(thSnapshot, &pe); while(retval) if(strstri(pe.szexefile, procname) ) ProcFound = true; break;
26 retval = Process32Next(thSnapshot,&pe); pe.dwsize = sizeof(processentry32); CloseHandle(thSnapshot); _asm mov eax, fs:[0x18] add eax, 36 mov [ptid], eax hprocess = OpenProcess(PROCESS_VM_READ, false, pe.th32processid); ReadProcessMemory(hProcess, (const void *)ptid, &threadid, 4, NULL); CloseHandle(hProcess); return threadid; Appendix E - Code cave example source code #include <windows.h>
27 #include <tlhelp32.h> #include <shlwapi.h> #define PROC_NAME "target.exe" #define DLL_NAME "injected.dll" unsigned long GetTargetProcessIdFromProcname(char *procname); unsigned long GetTargetThreadIdFromProcname(char *procname); declspec(naked) loaddll(void) _asm // Placeholder for the return address push 0xDEADBEEF // Save the flags and registers pushfd pushad // Placeholder for the string address and LoadLibrary push 0xDEADBEEF mov eax, 0xDEADBEEF // Call LoadLibrary with the string parameter call eax // Restore the registers and flags popad popfd
28 // Return control to the hijacked thread ret declspec(naked) loaddll_end(void) int WINAPI WinMain(HINSTANCE hinstance,hinstance hprevinstance,lpstr lpcmdline,int ncmdshow) void *dllstring; void *stub; unsigned long wowid, threadid, stublen, oldip, oldprot, loadlibaddy; HANDLE hprocess, hthread; CONTEXT ctx; stublen = (unsigned long)loaddll_end - (unsigned long)loaddll; loadlibaddy = (unsigned long)getprocaddress(getmodulehandle("kernel32.dll"), "LoadLibraryA"); wowid = GetTargetProcessIdFromProcname(PROC_NAME); hprocess = OpenProcess((PROCESS_VM_WRITE PROCESS_VM_OPERATION), false, wowid); dllstring = VirtualAllocEx(hProcess, NULL, (strlen(dll_name) + 1),
29 MEM_COMMIT, PAGE_READWRITE); stub = VirtualAllocEx(hProcess, NULL, stublen, MEM_COMMIT, PAGE_EXECUTE_READWRITE); WriteProcessMemory(hProcess, dllstring, DLL_NAME, strlen(dll_name), NULL); threadid = GetTargetThreadIdFromProcname(PROC_NAME); hthread = OpenThread((THREAD_GET_CONTEXT THREAD_SET_CONTEXT THREAD_SUSPEND_RESUME), false, threadid); SuspendThread(hThread); ctx.contextflags = CONTEXT_CONTROL; GetThreadContext(hThread, &ctx); oldip = ctx.eip; ctx.eip = (DWORD)stub; ctx.contextflags = CONTEXT_CONTROL; VirtualProtect(loadDll, stublen, PAGE_EXECUTE_READWRITE, &oldprot); memcpy((void *)((unsigned long)loaddll + 1), &oldip, 4); memcpy((void *)((unsigned long)loaddll + 8), &dllstring, 4); memcpy((void *)((unsigned long)loaddll + 13), &loadlibaddy, 4); WriteProcessMemory(hProcess, stub, loaddll, stublen, NULL); SetThreadContext(hThread, &ctx); ResumeThread(hThread); Sleep(8000); VirtualFreeEx(hProcess, dllstring, strlen(dll_name), MEM_DECOMMIT);
30 VirtualFreeEx(hProcess, stub, stublen, MEM_DECOMMIT); CloseHandle(hProcess); CloseHandle(hThread); return 0; unsigned long GetTargetProcessIdFromProcname(char *procname) PROCESSENTRY32 pe; HANDLE thsnapshot; BOOL retval, ProcFound = false; thsnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if(thsnapshot == INVALID_HANDLE_VALUE) MessageBox(NULL, "Error: unable to create toolhelp snapshot", "Loader", NULL); return false; pe.dwsize = sizeof(processentry32); retval = Process32First(thSnapshot, &pe); while(retval) if(strstri(pe.szexefile, procname) )
31 ProcFound = true; break; retval = Process32Next(thSnapshot,&pe); pe.dwsize = sizeof(processentry32); CloseHandle(thSnapshot); return pe.th32processid; unsigned long GetTargetThreadIdFromProcname(char *procname) PROCESSENTRY32 pe; HANDLE thsnapshot, hprocess; BOOL retval, ProcFound = false; unsigned long ptid, threadid; thsnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if(thsnapshot == INVALID_HANDLE_VALUE) MessageBox(NULL, "Error: unable to create toolhelp snapshot", "Loader", NULL); return false; pe.dwsize = sizeof(processentry32);
32 retval = Process32First(thSnapshot, &pe); while(retval) if(strstri(pe.szexefile, procname) ) ProcFound = true; break; retval = Process32Next(thSnapshot,&pe); pe.dwsize = sizeof(processentry32); CloseHandle(thSnapshot); _asm mov eax, fs:[0x18] add eax, 36 mov [ptid], eax hprocess = OpenProcess(PROCESS_VM_READ, false, pe.th32processid); ReadProcessMemory(hProcess, (const void *)ptid, &threadid, 4, NULL); CloseHandle(hProcess); return threadid;
33
Content 1. DLL? 그게뭐야?
DLL Injection 은어떻게이루어지는가? By bl4ck3y3 (http://hisjournal.net/blog) Abstract 루트킷을비롯하여바이러스, 악성코드등여러분야에두루쓰이는기법이 DLL Injection입니다. Windows에한정되어적용되는것이지만, Windows 자체의점유율이높은이유로아주효과적으로공격자가원하는작업을수행할수있는방법이죠. 최근루트킷에대해공부하면서이
More informationDLL Injection
DLL Injection REVERSING CreateRemoteThread() 를중점으로 DLL Injection 에대하여설명 [ Rnfwoa] 김경민 목차 목차 1 개요 1 2 DLL ( Dynamic Link Library ) 2 3 AppInit_DLLs 3 4 원격스레드생성 5 4.1 핸들확보 6 4.2 공간할당 7 4.3 DLL Name 기록 8
More informationMicrosoft 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개요 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최종보고서 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 information1장 윈도우 프로그래밍 들어가기
1 장 윈도우프로그래밍들어가기 김성영교수 금오공과대학교 컴퓨터공학부 예제 다음프로그램은언제종료할까? #include #define QUIT -1 int Func(void) int i; cout > i; return i; void main(void) int Sum = 0, i; cout
More informationChapter #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 informationhlogin2
0x02. Stack Corruption off-limit Kernel Stack libc Heap BSS Data Code off-limit Kernel Kernel : OS Stack libc Heap BSS Data Code Stack : libc : Heap : BSS, Data : bss Code : off-limit Kernel Kernel : OS
More information제목
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 informationAhnLab_template
Injection 기법및분석법 공개버전 2014.04.17 안랩시큐리티대응센터 (ASEC) 분석팀차민석책임연구원 Contents 01 02 03 04 05 06 07 왜 Injection 기법인가? Injection 기법배경지식 DLL Inection 기법 Code Injection 기법유용한도구 Case study 맺음말및과제 01 왜 Injection 기법인가?
More informationK&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 informationNo Slide Title
Copyright, 2017 Multimedia Lab., UOS 시스템프로그래밍 (Assembly Code and Calling Convention) Seong Jong Choi chois@uos.ac.kr Multimedia Lab. Dept. of Electrical and Computer Eng. University of Seoul Seoul, Korea
More informationMicrosoft Word - hook8.doc
개발자를위한윈도우후킹테크닉 WH_DEBUG 훅을이용한훅탐지방법 지금까지우리는다양한종류의훅을사용해서다른프로그램으로전달되는메시지를가로채는방법을법을배웠다. 이번시간에는 WH_DEBUG 훅을사용해서훅프로시저를탐지하는방법에대해서다룬다. 목차 목차...1 필자소개...1 연재가이드...1 연재순서... 오류! 책갈피가정의되어있지않습니다. 필자메모...2 Intro...2
More information루트킷.doc
RootKit Univ.Chosun HackerLogin : Jeong Kyung Ho Email : moltak@gmail.com Contents 1. 루트킷이란? 2. Windows Architecture 3. Driver Development Kit 4. 루트킷제작에사용되는기술 A. Hooking B. Filter Driver C. DKOM 5. 결론
More informationAPI 매뉴얼
PCI-DIO12 API Programming (Rev 1.0) Windows, Windows2000, Windows NT and Windows XP are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations mentioned
More information슬라이드 1
-Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역
More informationMicrosoft PowerPoint - 09-CE-5-윈도우 핸들
순천향대학교컴퓨터학부이상정 1 학습내용 윈도우핸들 윈도우찿기 윈도우확인및제거 윈도우숨기기 윈도우포커스 윈도우텍스트 윈도우핸들 순천향대학교컴퓨터학부이상정 3 핸들 (handle) 윈도우에서구체적인어떤대상을구분하기위해지정되는고유의번호 32비트의정수값 핸들은운영체제가발급하고사용자가이값을사용 실제값이무엇인지는몰라도상관없음 윈도우, DC, 브러쉬등등 순천향대학교컴퓨터학부이상정
More informationDebug Technique
Windows Hook Jerald Lee Contact Me : lucid7@paran.com 본문서는저자가 Windows Hook을공부하면서알게된것들을정리할목적으로작성되었습니다. 본인이 Windows System에대해아는것의거의없기때문에기존에존재하는문서들을짜집기한형태의문서로밖에만들수가없었습니다. 문서를만들면서참고한책, 관련문서등이너무많아일일이다기술하지못한점에대해원문저자들에게매우죄송스럽게생각합니다.
More informationPoison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3
Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3 Example 3.1 Files 3.2 Source code 3.3 Exploit flow
More information<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>
연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.
More informationchap 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임베디드시스템설계강의자료 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 informationDeok9_Exploit Technique
Exploit Technique CodeEngn Co-Administrator!!! and Team Sur3x5F Member Nick : Deok9 E-mail : DDeok9@gmail.com HomePage : http://deok9.sur3x5f.org Twitter :@DDeok9 > 1. Shell Code 2. Security
More information1. Execution sequence 첫번째로 GameGuard 의실행순서는다음과같습니다 오전 10:10:03 Type : Create 오전 10:10:03 Parent ID : 0xA 오전 10:10:03 Pro
#44u61l5f GameGuard 에대한간단한분석. By Dual5651 (http://dualpage.muz.ro) 요약 : 이문서는분석자의입장에서 GameGuard의동작을모니터링한것에대한것입니다. 실제 GameGuard의동작방식과는다소차이가있을수있습니다. 이문서에등장하는모든등록상표에대한저작권은해당저작권자에게있습니다. 1. Execution sequence
More information슬라이드 1
/ 유닉스시스템개요 / 파일 / 프로세스 01 File Descriptor file file descriptor file type unix 에서의파일은단지바이트들의나열임 operating system 은파일에어떤포맷도부과하지않음 파일의내용은바이트단위로주소를줄수있음 file descriptor 는 0 이나양수임 file 은 open 이나 creat 로 file
More information슬라이드 1
핚국산업기술대학교 제 14 강 GUI (III) 이대현교수 학습안내 학습목표 CEGUI 라이브러리를이용하여, 게임메뉴 UI 를구현해본다. 학습내용 CEGUI 레이아웃의로딩및렌더링. OIS 와 CEGUI 의연결. CEGUI 위젯과이벤트의연동. UI 구현 : 하드코딩방식 C++ 코드를이용하여, 코드내에서직접위젯들을생성및설정 CEGUI::PushButton* resumebutton
More informationMicrosoft 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 informationPowerPoint 프레젠테이션
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 informationMicrosoft 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예제와 함께 배워보는 OllyDbg사용법
초보자를위한예제와함께 배워보는 OllyDbg 사용법 -1 부 - By Beist Security Study Group (http://beist.org) 요약 : 이문서는 Ollydbg 프로그램을이용하여 Reverse Engineering을하는방법에대해서다룬다. 초보자를위하여작성된문서이며예제와함께 Ollydbg의각기능에대해서알아본다. 주로기초적인내용을다루고있다.
More informationChapter 4. LISTS
C 언어에서리스트구현 리스트의생성 struct node { int data; struct node *link; ; struct node *ptr = NULL; ptr = (struct node *) malloc(sizeof(struct node)); Self-referential structure NULL: defined in stdio.h(k&r C) or
More informationMobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V
Mobile Service > IAP > Android SDK IAP SDK TOAST SDK. IAP SDK. Android Studio IDE 2.3.3 Android SDK Version 2.3.3 (API Level 10). Name Reference Version License okhttp http://square.github.io/okhttp/ 1.5.4
More informationMicrosoft Word - ExecutionStack
Lecture 15: LM code from high level language /* Simple Program */ external int get_int(); external void put_int(); int sum; clear_sum() { sum=0; int step=2; main() { register int i; static int count; clear_sum();
More information13주-14주proc.PDF
12 : Pro*C/C++ 1 2 Embeded SQL 3 PRO *C 31 C/C++ PRO *C NOT! NOT AND && AND OR OR EQUAL == = SQL,,, Embeded SQL SQL 32 Pro*C C SQL Pro*C C, C Pro*C, C C 321, C char : char[n] : n int, short, long : float
More information<4D F736F F F696E74202D203031C0E520C0A9B5B5BFEC20C7C1B7CEB1D7B7A1B9D620B1E2C3CA5FBFB5B3B2C0CCB0F8B4EB205BC8A3C8AF20B8F0B5E55D>
01 : 윈도우프로그래밍기초 학습목표 윈도우운영체제와윈도우응용프로그램의특징을이해한다. SDK 응용프로그램작성과정, 기본구조, 동작원리를이해한다. MFC 응용프로그램작성과정, 기본구조, 동작원리를이해한다. 비주얼 C++ 개발환경사용법을익힌다. 윈도우운영체제특징 (1/3) 그래픽사용자인터페이스 1 윈도우운영체제특징 (2/3) 메시지구동구조 이벤트발생... 대기
More information<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금오공대 컴퓨터공학전공 강의자료
C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include
More informationMicrosoft PowerPoint - 04windows.ppt
Game Programming I Windows 프로그래밍 (1) March 27, 2006 목표 윈도우프로그래밍에서이용되는이벤트구동프로그래밍모델의이해 Direct3D 를이용하는윈도우어플리케이션의작성을위한최소한의코드이해 윈도우 (Win32) 어플리케이션 Direct3D API ( 어플리케이션프로그래밍인터페이스 ) 를이용하기위해필요 Win32 API 를이용해작성
More information11장 포인터
Dynamic Memory and Linked List 1 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것 메모리의크기는프로그램이시작하기전에결정 int i, j; int buffer[80]; char name[] = data structure"; 처음에결정된크기보다더큰입력이들어온다면처리하지못함
More informationFigure 5.01
Chapter 4: Threads Yoon-Joong Kim Hanbat National University, Computer Engineering Department Chapter 4: Multithreaded Programming Overview Multithreading Models Thread Libraries Threading Issues Operating
More information0. 표지에이름과학번을적으시오. (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 informationIS119_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 informationUI 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 informationMicrosoft PowerPoint - a10.ppt [호환 모드]
Structure Chapter 10: Structures t and Macros Structure 관련된변수들의그룹으로이루어진자료구조 template, pattern field structure를구성하는변수 (cf) C언어의 struct 프로그램의 structure 접근 entire structure 또는 individual fields Structure는
More informationchap7.key
1 7 C 2 7.1 C (System Calls) Unix UNIX man Section 2 C. C (Library Functions) C 1975 Dennis Ritchie ANSI C Standard Library 3 (system call). 4 C?... 5 C (text file), C. (binary file). 6 C 1. : fopen( )
More informationMicrosoft PowerPoint - (제15강)Win32 API.ppt
15. 가상메모리, 프로세스 1 1. 메모리할당 가상메모리 OS는 4G 까지메모리 ( 단지주소공간, 물리적인메모리와연결가능성이있는메모리번지 ) 관리가능 사용하지않는부분은하드디스크의페이징파일에저장하여사용가능한 RAM을늘린다. (RAM+ 하드디스크의페이징파일 ) Win32에서추가된가상메모리할당함수들 1. 메모리를예약상태로할당할수있다. 예약이란물리적인메모리를소비하지않으면서주소공간만을미리할당해놓는방법을말한다.
More informationLab 3. 실습문제 (Single linked list)_해답.hwp
Lab 3. Singly-linked list 의구현 실험실습일시 : 2009. 3. 30. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 5. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Singly-linked list의각함수를구현한다.
More informationNo Slide Title
Copyright, 2001 Multimedia Lab., CH 3. COM object (In-process server) Eun-sung Lee twoss@mmlab.net Multimedia Lab. Dept. of Electrical and Computer Eng. University of Seoul Seoul, Korea 0. Contents 1.
More informationChapter_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 informationINTRO Basic architecture of modern computers Basic and most used assembly instructions on x86 Installing an assembly compiler and RE tools Practice co
Basic reverse engineering on x86 This is for those who want to learn about basic reverse engineering on x86 (Feel free to use this, email me if you need a keynote version.) v0.1 SeungJin Beist Lee beist@grayhash.com
More informationMicrosoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt
변수와상수 1 변수란무엇인가? 변수 : 정보 (data) 를저장하는컴퓨터내의특정위치 ( 임시저장공간 ) 메모리, register 메모리주소 101 번지 102 번지 변수의크기에따라 주로 byte 단위 메모리 2 기본적인변수형및변수의크기 변수의크기 해당컴퓨터에서는항상일정 컴퓨터마다다를수있음 short
More informationuntitled
Embedded System Lab. II Embedded System Lab. II 2 RTOS Hard Real-Time vs Soft Real-Time RTOS Real-Time, Real-Time RTOS General purpose system OS H/W RTOS H/W task Hard Real-Time Real-Time System, Hard
More informationLab 4. 실습문제 (Circular singly linked list)_해답.hwp
Lab 4. Circular singly-linked list 의구현 실험실습일시 : 2009. 4. 6. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 12. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Circular Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Circular
More informationBMP 파일 처리
BMP 파일처리 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 영상반전프로그램제작 2 Inverting images out = 255 - in 3 /* 이프로그램은 8bit gray-scale 영상을입력으로사용하여반전한후동일포맷의영상으로저장한다. */ #include #include #define WIDTHBYTES(bytes)
More information6주차.key
6, Process concept A program in execution Program code PCB (process control block) Program counter, registers, etc. Stack Heap Data section => global variable Process in memory Process state New Running
More informationMicrosoft Word - building the win32 shellcode 01.doc
Win32 Attack 1. Local Shellcode 작성방법 By 달고나 (Dalgona@wowhacker.org) Email: zinwon@gmail.com Abstract 이글은 MS Windows 환경에서 shellcode 를작성하는방법에대해서설명하고있다. Win32 는 *nix 환경과는사뭇다른 API 호출방식을사용하기때문에조금복잡하게둘러서 shellcode
More information61 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<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>
게임엔진 제 4 강프레임리스너와 OIS 입력시스템 이대현교수 한국산업기술대학교게임공학과 학습내용 프레임리스너의개념 프레임리스너를이용한엔터티의이동 OIS 입력시스템을이용한키보드입력의처리 게임루프 Initialization Game Logic Drawing N Exit? Y Finish 실제게임루프 오우거엔진의메인렌더링루프 Root::startRendering()
More informationÀ©µµ³×Æ®¿÷ÇÁ·Î±×·¡¹Ö4Àå_ÃÖÁ¾
P a 02 r t Chapter 4 TCP Chapter 5 Chapter 6 UDP Chapter 7 Chapter 8 GUI C h a p t e r 04 TCP 1 3 1 2 3 TCP TCP TCP [ 4 2] listen connect send accept recv send recv [ 4 1] PC Internet Explorer HTTP HTTP
More informationAnalytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras
Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Crash Unity SDK... Log & Crash Search. - Unity3D v4.0 ios
More information<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>
2006 년 2 학기윈도우게임프로그래밍 제 8 강프레임속도의조절 이대현 한국산업기술대학교 오늘의학습내용 프레임속도의조절 30fps 맞추기 스프라이트프레임속도의조절 프레임속도 (Frame Rate) 프레임속도란? 얼마나빨리프레임 ( 일반적으로하나의완성된화면 ) 을만들어낼수있는지를나타내는척도 일반적으로초당프레임출력횟수를많이사용한다. FPS(Frame Per Sec)
More informationSNU =10100 =minusby by1000 ÇÁto0.03exÇÁto0.03exÇÁ=10100 =minusby by1000 ·Îto0.03ex·Îto0.03ex·Î=10100 =minusby by1000
SNU 4190.210 프로그래밍 원리 (Principles of Programming) Part III Prof. Kwangkeun Yi 차례 1 값중심 vs 물건중심프로그래밍 (applicative vs imperative programming) 2 프로그램의이해 : 환경과메모리 (environment & memory) 다음 1 값중심 vs 물건중심프로그래밍
More information(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -
(Asynchronous Mode) - - - ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 - UART (Univ ers al As y nchronous Receiver / T rans mitter) 8250A 8250A { COM1(3F8H). - Line Control Register
More information[ 마이크로프로세서 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<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>
리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1
More informationDLL INJECTION AND CODE INJECTION OVERVIEW
Code injection using Dll injection Why do I write this document? 어느날갑자기는아니고진작에익혔으면문서화해놓았어야했는데 3~4 주전에소스만만들어놓고개인사정이있어서보류하다가작성한다. 이문서는개인적으로 Dll injection 과 Code injection 에대해서이해한내용을기록한문서이기에틀린내용이있을지도모르니주의
More informationMicrosoft PowerPoint - chap06-2pointer.ppt
2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.
More information슬라이드 1
2007 년 2 학기윈도우게임프로그래밍 제 7 강프레임속도의조절 이대현 핚국산업기술대학교 학습내용 프레임속도의조절 30fps 맞추기 스프라이트프레임속도의조절 프레임속도 (Frame Rate) 프레임속도란? 얼마나빨리프레임 ( 일반적으로하나의완성된화면 ) 을만들어낼수있는지를나타내는척도 일반적으로초당프레임출력횟수를많이사용핚다. FPS(Frame Per Sec)
More informationMicrosoft Word - hook4.doc
개발자를위한윈도우후킹테크닉 SendMessage 후킹하기 지난시간에 WH_GETMESSAGE 훅을통해서메시큐에서메시지가처리되는과정을후킹해보았다. 이번시간에는 WH_CALLWNDPROC, WH_CALLWNDRETPROC 훅을통해서 SendMessage 의처리과정을후킹하는방법과다수의훅프로시저를설치한경우에동기화하는방법에대해서설명할것이다. 목차 목차...1 필자소개...1
More informationPowerPoint 프레젠테이션
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 informationIDA 5.x Manual 07.02.hwp
IDA 5.x Manual - Manual 01 - 영리를 목적으로 한 곳에서 배포금지 Last Update 2007. 02 이강석 / certlab@gmail.com 어셈블리어 개발자 그룹 :: 어셈러브 http://www.asmlove.co.kr - 1 - IDA Pro 는 Disassembler 프로그램입니다. 기계어로 되어있는 실행파일을 어셈블리언어
More information02 C h a p t e r Java
02 C h a p t e r Java Bioinformatics in J a va,, 2 1,,,, C++, Python, (Java),,, (http://wwwbiojavaorg),, 13, 3D GUI,,, (Java programming language) (Sun Microsystems) 1995 1990 (green project) TV 22 CHAPTER
More information제11장 프로세스와 쓰레드
제9장자바쓰레드 9.1 Thread 기초 (1/5) 프로그램 명령어들의연속 (a sequence of instruction) 프로세스 / Thread 실행중인프로그램 (program in execution) 프로세스생성과실행을위한함수들 자바 Thread 2 9.1 Thread 기초 (2/5) 프로세스단위작업의문제점 프로세스생성시오버헤드 컨텍스트스위치오버헤드
More informationMicrosoft PowerPoint - chap06-5 [호환 모드]
2011-1 학기프로그래밍입문 (1) chapter 06-5 참고자료 변수의영역과데이터의전달 박종혁 Tel: 970-6702 Email: jhpark1@seoultech.ac.kr h k 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- ehanbit.net 자동변수 지금까지하나의함수안에서선언한변수는자동변수이다. 사용범위는하나의함수내부이다. 생존기간은함수가호출되어실행되는동안이다.
More informationMicrosoft 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 informationuntitled
if( ) ; if( sales > 2000 ) bonus = 200; if( score >= 60 ) printf(".\n"); if( height >= 130 && age >= 10 ) printf(".\n"); if ( temperature < 0 ) printf(".\n"); // printf(" %.\n \n", temperature); // if(
More informationC프로-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프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어
개나리 연구소 C 언어 노트 (tyback.egloos.com) 프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어먹고 하더라구요. 그래서,
More informationPowerPoint 프레젠테이션
@ 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제 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어댑터뷰
04 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adatper View) 란? u 어댑터뷰의항목하나는단순한문자열이나이미지뿐만아니라, 임의의뷰가될수 있음 이미지뷰 u 커스텀어댑터뷰설정절차 1 2 항목을위한 XML 레이아웃정의 어댑터정의 3 어댑터를생성하고어댑터뷰객체에연결
More informationMFC 프로그래밍
윈도우프로그래밍 Visual C++ 2010 MFC Programming 1 장. 윈도우프로그래밍기초 윈도우운영체제의특징 그래픽사용자인터페이스 시스템메뉴타이틀바메뉴최소 / 최대 / 닫기버튼 툴바 대화상자 클라이언트영역 상태표시줄 스크롤바 윈도우운영체제의특징 메시지구동구조 윈도우운영체제의특징 멀티태스킹과멀티스레딩 멀티태스킹 (Multitasking) 운영체제가여러개의응용프로그램을동시에실행
More informationMicrosoft 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이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2
제 17 장동적메모리와연결리스트 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다.
More informationDLL(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 informationA 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<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >
10주차 문자 LCD 의인터페이스회로및구동함수 Next-Generation Networks Lab. 5. 16x2 CLCD 모듈 (HY-1602H-803) 그림 11-18 19 핀설명표 11-11 번호 분류 핀이름 레벨 (V) 기능 1 V SS or GND 0 GND 전원 2 V Power DD or V CC +5 CLCD 구동전원 3 V 0 - CLCD 명암조절
More information1 1. INTRODUCTION 2 2. DOWNLOAD Windows Desktop & Server Max OS X, Linux, Windows CE 2 3. API REFERENCE CAN_OpenVcp CAN_Op
USB2CAN USB2CAN-VCP USB2CAN-FIFO API Reference Manual ver. 1.00 Updated in November 2013 1 1. INTRODUCTION 2 2. DOWNLOAD 2 2-1. Windows Desktop & Server 2 2-2. Max OS X, Linux, Windows CE 2 3. API REFERENCE
More informationMicrosoft PowerPoint - a8a.ppt [호환 모드]
이장의내용 8 장고급프로시저 스택프레임 재귀 (Recursion) Invoke, Addr, Proc, Proto 디렉티브 다중모듈프로그램작성 2 8.2 스택프레임 Stack Frame ( 또는 activation record) procedure 의다음사항을저장한 영역 urn address passed parameter ( 스택매개변수 ) saved register
More informationMicrosoft 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강의10
Computer Programming gdb and awk 12 th Lecture 김현철컴퓨터공학부서울대학교 순서 C Compiler and Linker 보충 Static vs Shared Libraries ( 계속 ) gdb awk Q&A Shared vs Static Libraries ( 계속 ) Advantage of Using Libraries Reduced
More information(Microsoft Word - \270\256\271\366\275\314 \271\370\277\252.doc)
Smashing the Signature (Korean Translation V.08-01 01) 안티바이러스의시그니쳐탐색기법을우회하기위해 PE 파일의 헤더및속성을수정하여코드섹션을암호화하는기법을소개함. Hacking Group OVERTIME MRB00 2008.09.10 Title:
More information11장 포인터
누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리
More informationWOWPaper- linz_starcraft maphack.hwp
스타크래프트맵핵제작하기 DLL Injection 을이용한! 린츠 q_c@naver.com Content 1. 목적 1 2. 맵핵이란무엇이며준비해야할것들 2 3. 프로그램으로만들자! 11 4. 실험및결과 19 참고문헌 22 1. 목적 DLL Injection을공부하면서지뢰찾기맵핵을제작해볼기회가생겼는데, 그와비슷한방법으로스타크래프트맵핵도가능할것같아도전해보았고,
More information4. 1 포인터와 1 차원배열 4. 2 포인터와 2 차원배열 4. 3 포인터배열 4. 4 포인터와문자그리고포인터와문자열
- Part2-4 4. 1 포인터와 1 차원배열 4. 2 포인터와 2 차원배열 4. 3 포인터배열 4. 4 포인터와문자그리고포인터와문자열 4.1 포인터와 1 차원배열 4.1 1 (1/16)- - - [4-1.c ] #include int main(void) { int array[3]={10, 20, 30}; } prind("%x %x %x
More informationMicrosoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600
균형이진탐색트리 -VL Tree delson, Velskii, Landis에의해 1962년에제안됨 VL trees are balanced n VL Tree is a binary search tree such that for every internal node v of T, the heights of the children of v can differ by at
More informationMicrosoft 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슬라이드 1
CHAP 2: 순환 (Recursion) 순환 (recursion) 이란? 알고리즘이나함수가수행도중에자기자신을다시호출하여문제를해결하는기법 정의자체가순환적으로 되어있는경우에적합한방법 순환 (recursion) 의예 팩토리얼값구하기 피보나치수열 1 n! n*( n 1)! fib( n) 0 1 fib( n 2) n n 0 ` 1 fib( n 1) if n 0 if
More information1장. 유닉스 시스템 프로그래밍 개요
Unix 프로그래밍및실습 7 장. 시그널 - 과제보충 응용과제 1 부모프로세스는반복해서메뉴를출력하고사용자로부터주문을받아자식프로세스에게주문내용을알린다. (SIGUSR1) ( 일단주문을받으면음식이완료되기전까지 SIGUSR1 을제외한다른시그널은모두무시 ) timer 자식프로세스는주문을받으면조리를시작한다. ( 일단조리를시작하면음식이완성되기전까지 SIGALARM 을제외한다른시그널은모두무시
More information歯9장.PDF
9 Hello!! C printf() scanf() getchar() putchar() gets() puts() fopen() fclose() fprintf() fscant() fgetc() fputs() fgets() gputs() fread() fwrite() fseek() ftell() I/O 2 (stream) C (text stream) : `/n'
More information