화이트리스트에 대해 실행중인 모든 프로세스를 검사하고 목록에없는 프로세스가 종료되는 응용 프로그램을 만들려고합니다.
내 생각은 처음에 tasklikst
명령을 사용하여 각 초마다 말할 수있는 목록을 얻고 목록과 대조해 봅니다.
그런 다음 프로세스가 생성되고 아직 실행되지 않은 상태에서 더 빨리 확인하는 것이 더 좋을 것이라고 생각했습니다. 거기에서 우리의 목록과 비교하여 확인한 다음 목록에없는 경우 프로세스를 종료합니다. 그래서 어떻게 할 수 있습니까?
이 문제를 해결하기 위해 어떤 방법을 제안합니까?
나는 또한 C + + 또는 C# 언어를 사용하여 회의적입니까? 이 경우 전혀 차이가 있습니까?프로세스가 생성되고 프로세스가 실행되지 않거나 프로세스가 종료되는 것을 어떻게 알 수 있습니까?
답변
C#에서 가장 간단한 방법은 Process.GetProcesses를 주기적으로 사용하고 Process.Kill을 사용하여 죽이기를 원하는 모든 것을 종료하는 것입니다. 그러나 프로세스를 죽일 때 프로세스가 중간에있을 수 있다는 점에 유의하십시오. 악성 소프트웨어가 아니라 게임 등에 대해서만 도움이됩니다. 또한 사용자가 exe 파일의 이름을 "notepad.exe"와 같은 것으로 바꿀 수 있음을 잊지 마십시오. 이것이 문제인 경우 파일 이름 대신 실행 파일의 전체 경로를 확인할 수 있습니다.
폴링하지 않고 더 똑똑한 방법을 원할 경우 시작 프로세스 호출에 후크를 만들 수 있습니다 (Monitor process start in the system 참조). 이렇게하면 실제로 프로세스가 처음부터 실행되는 것을 방지 할 수 있습니다.
C++ 또는 C#으로 구현할 수 있지만 은 실제로과 관련이 없습니다. 가장 편안하게 선택하십시오.
- 가 타이머를 설정하거나
- 열거가 화이트 -에 대해 이름을 확인 발견 된 각 프로세스에 대한
- 를 처리하는 동안 한 번 코드를 실행할 작업이나 그런 것을 예정 : 여기 알고리즘은 당신이 열거하고 죽일 Process class를 사용하여 C#에서 처리
을 죽일 사전
- 다른 응용 프로그램을 열거 나 죽일 수있는 권한이 없을 수 있습니다 응용 프로그램이 이
- 가능성이 관리자 권한을 요구하는 것입니다 귀하의 코드는
- 상황이 복잡 수있는 실행하는 경우 Active Directory가 그룹 정책으로 설정
- 바이러스 또는 기타 원하지 않는 응용 프로그램이 코드를 잘 알려진 또는 무해한 응용 프로그램 (사용자의 흰색 목록에있는 응용 프로그램 중 하나)에 "주입"할 수 있습니다.
- 당신은 단지 세계화 그
- 확인 지원을하지 않도록, 시스템 작업의 대부분을 죽일 실패, 프로세스 이름이 변경 얻을 수있는
- 이름에만 의존하는 것은 좋지 좋습니다. 진위 여부를 확인하려면 일부 암호화 서명에 의존해야하며 앱을 업데이트 할 때 유지 관리가 어렵습니다.
마지막 단락을 감안할 때 구현하려는 솔루션은 매우 기본입니다. 사용자가 애플리케이션을 종료하는 것을 막을 수있는 것은 없습니다. 또는 바이러스 응용 프로그램의 이름을 뭔가 표준으로 바꿉니다. 그것은 "이익을 가져다주는 무명을 통한 안보"와 매우 비슷하지만, 방어력면에서 약합니다.
하나의 기술은 모든 프로세스에 주입되는 SetWindowsHookEx
을 사용하여 글로벌 훅 DLL을 만드는 것입니다. 이 방법을 사용하면 새로운 프로세스에 대한 알림을 받게되며 원하는대로 조치를 취할 수 있습니다.
물론이 DLL은 모든 프로세스에로드되는 것을 고려하여 가능한 경량으로 만들어야합니다. 그러나 나는 여전히 이것이 지속적으로 투표를하는 것보다 더 희박해질 것이라고 생각한다.
SetWindowsHookEx를 사용하여 createprocess 함수를 후크 할 수 있습니까? 그렇다면 어떻게 그리고 어떻게 createprocess를 후킹 할 수 있습니까? – Breeze
- 1. 유닉스에서 어떻게 프로세스가 시작되는지 알 수 있습니까?
- 2. 프로세스가 실행되고 있지 않다는 것을 어떻게 알 수 있습니까?
- 3. 프로세스가 제대로 실행되지 않음
- 4. 프로세스가 크론에서 스크립트에서 실행되지
- 5. cmd에서 프로세스가 실행되지 않습니다.
- 6. PHP S3 클래스 putObjectFile() 프로세스가 완료되었는지 어떻게 알 수 있습니까?
- 7. 이전에 프로세스가 시작된 경우 프로세스가 시작되는 것을 방지하는 방법은 무엇입니까?
- 8. 프로세스가 종료되는 이유를 결정하는 방법은 무엇입니까?
- 9. dup2() 하위 프로세스가 일찍 종료되는 원인이 됨
- 10. mongrel_cluster의 각 프로세스가 요청을 처리하는 것을 어떻게 확인할 수 있습니까?
- 11. 프로세스가 OSX에서 그래픽 인터페이스를 가지고 있는지 어떻게 알 수 있습니까?
- 12. 무엇이 노드 프로세스가 멈추는 지 어떻게 알 수 있습니까?
- 13. 프로세스가 어떻게 종료 되었습니까?
- 14. Python popen 프로세스가 실행되지 않습니다.
- 15. Windows에 숨겨진 프로세스가 있습니까?
- 16. 현재 프로세스가 서비스인지 여부를 어떻게 알 수 있습니까 (C++, Win32)?
- 17. 프로세스가 네트워크 인터페이스를 사용하는지 어떻게 알 수 있습니까?
- 18. 프로세스가 시작된 원래 사용자 이름을 어떻게 알 수 있습니까?
- 19. 프로세스가 백그라운드로 된 시점을 프로세스는 어떻게 알 수 있습니까?
- 20. 프로그램이 다른 프로세스가 서비스로 실행 중인지 어떻게 알 수 있습니까?
- 21. C# process.start, 프로세스가 종료되었는지 어떻게 알 수 있습니까?
- 22. node.js 프로세스가 멈출 때를 어떻게 알 수 있습니까?
- 23. Linux 프로세스가 무엇을 기다리는 지 어떻게 알 수 있습니까?
- 24. erlang 프로세스가 어떤 노드에서 실행되고 있는지 어떻게 알 수 있습니까?
- 25. 이러한 파일이나 프로세스가 무엇을하는지 어떻게 알 수 있습니까? (Linux)
- 26. JBoss의로드 프로세스가 성공적으로 완료되었음을 어떻게 알 수 있습니까?
- 27. waitpid의 경우 하위 프로세스가 완료되었는지 어떻게 알 수 있습니까?
- 28. 특정 프로세스가 멈췄을 때 어떻게 알 수 있습니까?
- 29. wow64에서 임의의 프로세스가 실행 중인지 어떻게 알 수 있습니까?
- 30. 프로세스가 dlclose() ed 라이브러리로 끝났는 지 어떻게 알 수 있습니까?
http://msdn.microsoft.com/en-us/library/windows/desktop/ms684865(v=vs.85).aspx – Abhineet
이 IIRC에는 WMI가 필요합니다 –
이미이 그룹 정책이 있습니다. 그것을 써. 바퀴를 재발 명할 필요가 없습니다. –