Windows 19

잡 (Job) - 프로세스 제약사항 설정 2

잡에 대한 프로세스 제약사항 설정 방법 중- JobObjectExtendedLimitInformation- JobObjectBasicUIRestrictions- JobObjectSecurityLimitInformation에 대해 알아보도록 하겠습니다. JobObjectExtendedLimitInformation     멤버기능  BasicLimitInformationBasicLimitInformation 구조체- 이전 포스팅 참고 IoInfo사용하지 않음  ProcessMemoryLimit잡 내의 한 프로세스가 사용할 수 있는 최대 메모리 사용량을 결정- BasicLimitInformation 구조체의 LimitFlag에 JOB_OBJECT_LIMIT_PROCESS_MEMORY 플래그가 세팅되어 있어야 ..

잡 (Job) - 프로세스 제약사항 설정 1

잡을 생성하고 나면 잡에서 수행할 프로세스들에 대한 제약사항을 설정할 수 있습니다.설정 할 수 있는 제약사항으로는 아래와 같은 내용들이 있습니다.- 기본 제약사항과 확장 제약사항은 잡 내 프로세스가 시스템 리소스를 독점하지 못하게 합니다.- 기본 UI 제약사항은 잡 내의 프로세스가 사용자 인터페이스를 사용하지 못하도록 합니다.- 보안 제약사항은 잡 내의 프로세스가 보안 자원(파일, 레지스트리 등)에 접근하지 못하도록 한다. 잡에 대한 내용은 아래 포스팅 참고- 잡 (Job) : http://wonjayk.tistory.com/287 이러한 제약사항들은 아래 함수로 설정할 수 있습니다.  - hJob : CreeateJobObject로 생성한 잡의 핸들로 제약사항을 설정할 잡의 핸들을 설정하면 됩니다.- ..

잡 (Job)

잡(Job)은 간단하게 설명드리면 여러 개의 프로세스들을 하나로 묶은 그룹입니다. 잡이 필요한 이유- Windows는 프로세스의 부모/자식 관계를 항상 유지하지는 않습니다. (실행되고 종료됨에 따라 프로세스 트리는 끊어질 수 있습니다.)- 특정 프로세스가 수행되는데에 여러 개의 프로세스를 거쳐서 수행되었다고 가정했을 때, 앞서 수행된 특정 프로세스가 종료됨으로 인해 이전에 수행된 여러 개의 프로세스들이 모두 종료되어야 한다고 하면, 이 프로세스들을 모두 관리하기 위함입니다.- 여러 개의 프로세스의 데이터들(클라이언트)을 종합해 수행되는 프로세스(서버)라고 가정한다면, 특정 프로세스(클라이언트)가 과도하게 리소스를 점유하지 못하도록 제어할 필요도 있습니다. (이럴 땐 잡을 이용해 최대 CPU 점유 시간 제..

프로세스 권한 상승 - ShellExecuteEx()

윈도우에는 사용자 권한 상승(사용자 계정 컨트롤 : UAC - User Account Control)이라는 기능이 있습니다.이 기능은 윈도우 사용자에게 보다 높은 수준의 보안성을 제공하는 역할을 하는데요. 짧게 요약하자면, 관리자 권한과 일반 사용자 권한의 차등을 두어 관리자 권한을 갖지 않았다면 접근할 수 있는 리소스를 제한해 보안성을 높이는 방법입니다. - 요런거 많이 보셨을거에요~ 프로세스가 수행되려면 때때로 관리자 권한이 필요한 경우도 있을텐데 앞서 포스팅한 CreateProcess 함수를 보면 권한 상승과 관련된 플래그나 인자는 없습니다. 그럼, 어떻게 코드 레벨에서 권한 상승(관리자 권한)된 프로세스로 실행을 시킬 수 있을까요? 이럴 때에는 CreateProcess 대신 ShellExecute..

자식 프로세스

자식 프로세스는 현재 수행중이던 프로세스에서 새로운 프로세스를 실행시키는 것을 말합니다. 예를들어 아래 그림을 보면......explorer.exe 아래 KakaoTalk.exe, PotPlayerMini.exe, Procexp.exe 등등이 수행되고 있음을 알 수 있는데요바로 explorer.exe가 부모 프로세스그 explorer.exe가 실행시킨 KakaoTalk.exe, PotPlayerMini.exe, Procexp.exe들이 자식 프로세스라고 볼 수 있습니다.여기서 부모/자식간의 연관관계와 독립관계가 있는데요.- 연관관계 : procexp.exe => procexp64.exe- 독립관계 : explorer.exe => 하위 자식 프로세스들 연관관계와 독립관계는 프로세스간 공유하는 자료가 있고 ..

프로세스의 종료

프로세스는 4가지 형태로 종료될 수 있습니다. - 주 스레드의 진입점 함수가 반환될 때 (가장 아름다운 방법)- 프로세스 내 스레드 중 하나가 ExitProcess 함수를 호출 (좋지 못한 방법)- 다른 프로세스의 스레드가 TerminateProcess 함수를 호출 (역시 좋지 못한 방법)- 프로세스 내 모든 스레드가 전부 종료될 때  1. 주 스레드 진입점 함수(Entry-point Function)의 반환"주 스레드 진입점 함수의 반환"은 프로세스가 종료되는 조건 중 하나입니다.진입점 함수가 리턴된다는 뜻은 종료 함수를 거친다라는 의미로 보셔도 좋은데요, 이렇게 종료되어야 스레드들이 가지고 있던 리소스들이 제대로 해제가 됩니다.- 스레드가 가지고 있던 C++ 오브젝트들이 Destroyer를 통해 해제..

파일/디렉토리 접근 권한 (FILE_READ_DATA, FILE_WRITE_DATA ......)

파일/디렉토리 접근 권한에 대해 알아보겠습니다.+ Access Mask라고도 합니다. 요 접근 권한은 말 그대로 파일이나 디렉토리에 해당 프로세스가 어떠한 동작을 수행할 수 있는지를 나타내기도 합니다. 그림판에서 그림파일을 Open하는 동작을 예로들어보면..   1. wonjayk.png 라는 그림 파일을 열기 위해서 CreateFile 호출2. 접근 권한을 Generic Read 로 wonjayk.png 오픈 요러한 동작을 수행하게 되는데요 CreateFile 함수를 다시 살펴보면..- 윈도우 핸들 : http://wonjayk.tistory.com/270 CreateFile 함수를 호출하게 되면 lpFileName으로 호출된 파일의 핸들을 얻어오게 됩니다.여기서 두 번째 인자를 통해서 파일에 대한 접..

Display Memory - da, db, dc, dd, dD, df, dp, dq, du, dw

Memory Display 명령어들에 대해 알아보겠습니다.말 그대로 디버깅 중에 메모리 상태를 보여주는 명령어입니다.  windbg 도움말에는 위와 같이 설명되어있습니다.  하나씩 살펴보겠습니다.- 예제로는 CString(CHAR) 형태인 "CwonjaykDoc"라는 문자열을 활용했습니다.- 메모리 주소 : 0x00093a80- 디버깅시 자주 쓰일만한 것만 진하게 처리했습니다. 1. da : ASCII 문자열의 형태로 메모리 출력 2. db : 바이트 단위 배열로 보여주고 ASCII로 해석해서 출력 3. dc : Double-Word 단위로 메모리를 보여주고 ASCII로 해석해서 출력 4. dd : dc와 같지만 ASCII 해석 출력은 제외 5. dD : 메모리를 Double-Precision 소수점 형..

프로세스의 생성 2 - CreateProcess()

CreateProcess()의 두 번째 포스팅으로 STARTUPINFO 파라미터에 대해 알아보도록 하겠습니다. 프로세스가 생성될 때 이 STARTUPINFO or STARTUPINFOEX 구조체를 참조하여 프로세스의 속성들을 설정해줄 수 있습니다.CreateProcess()를 호출할 때 이 STARTUPINFO는 반드시 0으로 초기화 되어 있어야 합니다. 예를 들면,,,STARTUPINFO lpStartInfo = { sizeof(lpStartInfo) };CreateProcess(......, lpStartInfo, ......); 이런 식의 초기화가 필요합니다.- STARTUPINFO를 초기화 하지 않으면 쓰레기 값들이 들어가있기 때문에 오동작 가능성이 생기게 됩니다.  1. STARTUPINFO 구..

프로세스의 생성 1 - CreateProcess()

CreateProcess()는 프로세스를 생성하는 함수입니다.msdn을 참고해보면......- https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v=vs.85).aspx  CreateProcess 함수가 호출되면 프로세스 커널 오브젝트를 생성하고 실행 파일의 코드와 구동에 필요한 DLL들을 프로세스 주소 공간으로 로드합니다. 그 후 스레드 커널 오브젝트를 생성해 Main 함수를 실행시키면서 TRUE를 리턴하게 됩니다.  이번 포스팅에서는 CreateProcess 함수의 파라미터들에 대해서 알아보도록 하겠습니다.- 9번째 파라미터인 lpStartupInfo는 다음 포스팅에서 따로 언급하도록 하겠습니다. (양이 많아요~)- lpStartup..