본문 바로가기

Programming/Tips(C++,C#)143

0123 - 서비스 프로그래밍(3) and 사용자 세션관리 * 서비스 프로그램과 사용자 프로그램의 IPC -> 서비스프로그램은 메모리에 write가능하다. 그런데 사용자는 접근을 못한다. -> 서비스가 일시적으로 권한을 떨어뜨려서 작성하자. -> 이걸 SD(Security Descriptor)를 수정해서 권한을 떨궈. 단 이것은 Admin그룹만 가능하게 해야한다. 그런데 만약 EVERYONE으로하면 뚫릴수 있다. -> 이거는 소켓이 편한데 소켓을 못써먹을경우 천상 공유메모리를 사용하여야하는데... -> 이벤트 누가받을수있어?를 고려해야한다. *권한먹기용 SD예제 SetSampleServiceStatus(SERVICE_START_PENDING, NO_ERROR, 0); SECURITY_ATTRIBUTES SA = {0}; SA.bInheritHandle = FAL.. 2009. 1. 23.
0122 - 서비스프로그래밍 (2). 서비스프로그램등록/제거 1. Install Service Program void CServiceManagerDlg::OnButtonInstall() { // TODO: Add your control notification handler code here SC_HANDLE hServiceManager = NULL; SC_HANDLE hService = NULL; TCHAR szPath[MAX_PATH+_MAX_FNAME] = {0}; //step //1. 운영체제의 서비스매니저에 연결 hServiceManager = ::OpenSCManager(NULL, NULL,SC_MANAGER_CREATE_SERVICE); if(hServiceManager == NULL){ AfxMessageBox(_T("Error: Failed to o.. 2009. 1. 22.
0122 - 서비스 프로그래밍 (1) *서비스프로그래밍 -메인이있긴하나 메인이메인이아니다. -함수호출하지않고 콜백함수가있다. -제약이 많지만 권한이 시스템 권한이다. 2009. 1. 22.
0121 *레지스트리 : 기존의 ini파일을 옮겨놓은것 *레지스트리 함수 1)Create HKEY hKey= ::RegCreateKeyEx(HKEY_CURRENT_USER,내키경로 , 0, NULL, REG_OPTION_NON_VOLITILE, KEY_ALL_ACCESS, NULL, &hKey, NULL); //오픈해줌 ->이건 나중에 중복되면 Open해줌 hKey를 사용후에는 반드시 닫을것 2)write ::RegSetValueKey(key핸들, key값, NULL, REG_SZ, (BYTE*)문자열,문자열길이*sizeof(TCHAR) 3) Open ::RegOpenKeyEx(HANDLE hkey, LPCSTR subkey, DWORD option, REGSAM regsam, &hKey) *UAC의 권한과정 알.. 2009. 1. 21.
0120 * ::EnumProcesses(저장소,크기,저장갯수) : 시스템에서 현재 수행중인 프로세스들의 리스트를 가져온다. HANDLE hProcess = ::OpenProcess(flag,false,pid); flag = PROCESS_QUERY_INFORMATION : 프로세스정보퍼미션얻기 PROCESS_VM_READ : 가상메모리 읽기권한 ::GetModuleFileNameex(HANDLE,NULL,buffer,Name) : 모듈이름 가져오기. =>커널에서 드라이버를 가지고 수행되는 것이 있다. 그것을 이용하자. *메시지 후킹하기 - PE파일(실행파일임)을 찾아서 뒤져보자. -런타임시 가상메모리 주소 변경 -> 많이쓰인다. -IAT(Import Address Table)을 런타임시 변경 - 윈도우실행파일의.. 2009. 1. 20.
0119 *CriticalSection, Mutex, Semaphore, Event : Kernel Object. (Ring 0에서 의미있음) + ::WaitForSingleObject(), ::WaitForMutexObject(); 이건 Barrier임 자기 자신의 종료 이벤트도 기다린다. *InitInstance의 시작부분이 실행에 필요한 것을 로딩한다. *CEvent EventUpdate(FALSE,FALSE,_T("EVENT_NPS_UPDATE")); ::WaitForSingleObject(EventUpdate.m_hObject, INFINITY); CWnd* pMain = AfxGetMainWnd(); ::PostMessage(pMain->m_hWnd, UM_UPDATEAPP); or CWinApp* p.. 2009. 1. 19.
728x90