2013-11-25 2 views
1

화이트리스트에 대해 실행중인 모든 프로세스를 검사하고 목록에없는 프로세스가 종료되는 응용 프로그램을 만들려고합니다.
내 생각은 처음에 tasklikst 명령을 사용하여 각 초마다 말할 수있는 목록을 얻고 목록과 대조해 봅니다.
그런 다음 프로세스가 생성되고 아직 실행되지 않은 상태에서 더 빨리 확인하는 것이 더 좋을 것이라고 생각했습니다. 거기에서 우리의 목록과 비교하여 확인한 다음 목록에없는 경우 프로세스를 종료합니다. 그래서 어떻게 할 수 있습니까?
이 문제를 해결하기 위해 어떤 방법을 제안합니까?
나는 또한 C + + 또는 C# 언어를 사용하여 회의적입니까? 이 경우 전혀 차이가 있습니까?프로세스가 생성되고 프로세스가 실행되지 않거나 프로세스가 종료되는 것을 어떻게 알 수 있습니까?

+0

http://msdn.microsoft.com/en-us/library/windows/desktop/ms684865(v=vs.85).aspx – Abhineet

+0

이 IIRC에는 WMI가 필요합니다 –

+2

이미이 그룹 정책이 있습니다. 그것을 써. 바퀴를 재발 명할 필요가 없습니다. –

답변

3

C#에서 가장 간단한 방법은 Process.GetProcesses를 주기적으로 사용하고 Process.Kill을 사용하여 죽이기를 원하는 모든 것을 종료하는 것입니다. 그러나 프로세스를 죽일 때 프로세스가 중간에있을 수 있다는 점에 유의하십시오. 악성 소프트웨어가 아니라 게임 등에 대해서만 도움이됩니다. 또한 사용자가 exe 파일의 이름을 "notepad.exe"와 같은 것으로 바꿀 수 있음을 잊지 마십시오. 이것이 문제인 경우 파일 이름 대신 실행 파일의 전체 경로를 확인할 수 있습니다.

폴링하지 않고 더 똑똑한 방법을 원할 경우 시작 프로세스 호출에 후크를 만들 수 있습니다 (Monitor process start in the system 참조). 이렇게하면 실제로 프로세스가 처음부터 실행되는 것을 방지 할 수 있습니다.

1

C++ 또는 C#으로 구현할 수 있지만 은 실제로과 관련이 없습니다. 가장 편안하게 선택하십시오.

  • 가 타이머를 설정하거나
  • 열거가 화이트 -에 대해 이름을 확인 발견 된 각 프로세스에 대한
  • 를 처리하는 동안 한 번 코드를 실행할 작업이나 그런 것을 예정 : 여기 알고리즘은 당신이 열거하고 죽일 Process class를 사용하여 C#에서 처리

을 죽일 사전

  • 시도를 나열.

    지금 상황이 이해하기 :

    • 다른 응용 프로그램을 열거 나 죽일 수있는 권한이 없을 수 있습니다 응용 프로그램이
    • 가능성이 관리자 권한을 요구하는 것입니다 귀하의 코드는
    • 상황이 복잡 수있는 실행하는 경우 Active Directory가 그룹 정책으로 설정
    • 바이러스 또는 기타 원하지 않는 응용 프로그램이 코드를 잘 알려진 또는 무해한 응용 프로그램 (사용자의 흰색 목록에있는 응용 프로그램 중 하나)에 "주입"할 수 있습니다.
    • 당신은 단지 세계화 그
    • 확인 지원을하지 않도록, 시스템 작업의 대부분을 죽일 실패, 프로세스 이름이 변경 얻을 수있는
    • 이름에만 의존하는 것은 좋지 좋습니다. 진위 여부를 확인하려면 일부 암호화 서명에 의존해야하며 앱을 업데이트 할 때 유지 관리가 어렵습니다.

    마지막 단락을 감안할 때 구현하려는 솔루션은 매우 기본입니다. 사용자가 애플리케이션을 종료하는 것을 막을 수있는 것은 없습니다. 또는 바이러스 응용 프로그램의 이름을 뭔가 표준으로 바꿉니다. 그것은 "이익을 가져다주는 무명을 통한 안보"와 매우 비슷하지만, 방어력면에서 약합니다.

  • 1

    하나의 기술은 모든 프로세스에 주입되는 SetWindowsHookEx을 사용하여 글로벌 훅 DLL을 만드는 것입니다. 이 방법을 사용하면 새로운 프로세스에 대한 알림을 받게되며 원하는대로 조치를 취할 수 있습니다.

    물론이 DLL은 모든 프로세스에로드되는 것을 고려하여 가능한 경량으로 만들어야합니다. 그러나 나는 여전히 이것이 지속적으로 투표를하는 것보다 더 희박해질 것이라고 생각한다.

    +0

    SetWindowsHookEx를 사용하여 createprocess 함수를 후크 할 수 있습니까? 그렇다면 어떻게 그리고 어떻게 createprocess를 후킹 할 수 있습니까? – Breeze

    관련 문제