c ++ - Sådan skriver du en ukværelig proces til Windows?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg søger en måde at skrive en ansøgning på. Jeg bruger Visual C ++ 6.0.


Jeg skal forhindre, at brugeren lukker denne proces via task manager.

Bedste reference


Du kan ikke gøre det.

Andre referencer 1


Raymond Chen om hvorfor dette er en dårlig ide:


http://blogs.msdn.com/oldnewthing/archive/2004/02/16/73780.aspx[1]

Andre referencer 2


Du kan gøre en ufærdig proces, men det vil ikke være i stand til at udføre noget nyttigt, mens det er umuligt. For eksempel er en måde at gøre en proces umulig på, at få den til at foretage synkroniske I/O-anmodninger til en driver, der aldrig kan fuldføre (for eksempel ved bevidst at skrive en buggy-driver). Kernen tillader ikke, at en proces afsluttes, indtil I/O-anmodningerne er færdige.


Så det er ikke helt rigtigt, at du ikke kan gøre det, som nogle siger. Men du vil ikke have det alligevel.

Andre referencer 3


Det hele afhænger af, hvem der ikke skal kunne dræbe den proces. Du har normalt en interaktivt logget bruger. Hvis processen kører i den sammenhæng, kan brugeren dræbe den. Det er hendes proces, så hun kan dræbe den, nej overraskelse her.


Hvis din bruger har begrænsede rettigheder, kan du altid starte processen som en anden bruger. En bruger kan ikke dræbe en proces tilhørende en anden bruger (undtagen for administratoren), ingen overraskelse her også.


Du kan også prøve at få din proces til at køre med Local System privilegier, hvor jeg ikke engang en administrator kunne dræbe det (selvom han kunne få tilladelse til at gøre det, iirc).


Generelt er det dog en frygtelig dårlig ide. Din proces ejer ikke maskinen, brugeren gør.Den eneste uundgåelige proces på en computer, jeg ved, er operativsystemet og med rette. Du skal sørge for at du kan ' t ressourcer (som ikke kan frigives, fordi du er umulig) og andre skadelige bivirkninger. Normalt ting som dette er ikke domænet for normale applikationer, og de bør holde sig væk fra det af en grund.

Andre referencer 4


Afhænger af brugerens tilladelse. Hvis du kører programmet som administrator, vil en normal bruger ikke have tilstrækkelige tilladelser til at dræbe din proces. Hvis en administrator forsøger at dræbe processen, vil han i de fleste tilfælde lykkes. Hvis du virkelig vil have, at nogen ikke dræber dig, skal du tage et kig på Windows-systemtjenester og driverudvikling. Under alle omstændigheder skal du være opmærksom på, at hvis en bruger ikke kan dræbe en proces, sidder han fast med det, selvom det opfører sig unormalt duo til fejl! Du vil finde en enorm rigdom af disse slags programmer/eksempler på det juridiske! site rootkit.com. Vær venlig at respektere brugeren. [2]

Andre referencer 5


Hvad jeg har lært af malware:



  • Opret en proces, der skaber et dusin af sig selv

  • Hver gang du opdager den, der mangler (den blev dræbt), spyt et dusin mere.

  • Hver enkelt skal være et unikt procesnavn, så en batchproces ikke nemt kunne dræbe dem alle ved navn

  • Luk rækkefølgen og genstart nogle af processerne for at holde pids'erne skiftende, hvilket også ville forhindre et partiets dræb


Andre referencer 6


Det er en Win32 FAQ i årtier. Se Google Groups og Und. Bestyrelser for kendte metoder. (Hooking cs og andre ...)

Noobs der svarer 'Du kan ikke gøre det' kender intet til Win32 programmering: du kan gøre alt med Win32 api ...

Andre referencer 7


Der er ikke en 100\% idiotsikker metode, men det skal være muligt at beskytte en proces på denne måde. Desværre ville det kræve mere knowlegde af Windows Security System API end jeg har lige nu, men princippet er simpelt: Lad applikationen Kør under en anden (administrator) konto og indstil sikkerhedsegenskaberne for procesobjektet til det maksimale. (Næg alle andre brugere ret til at lukke processen, så kun den særlige administratorkonto kan lukke den.)
Opret en sekundær tjeneste og få den til at fungere som en procesmogler. Den skal have en redningslinje til den beskyttede applikation, og når denne livlinje bliver skåret (applikationen lukker), skal den genstarte processen igen. (Denne livlinje ville være nogen form for inter-process kommunikation.)
Der er dog stadig måder at dræbe sådan en uundgåelig proces på. Men det kræver kun viden, som de fleste brugere ikke rigtig ved, så omkring 85\% af alle brugere har ikke en anelse om at stoppe din proces.


Husk på, at der kan være juridiske konsekvenser for at oprette en ansøgning som denne. For eksempel oprettede Sony et rootkit-program, der installerede sig automatisk, når folk indsatte en Sony musik-cd eller spil-cd i deres computer. Dette var en del af deres DRM-løsning. Desværre var det ret svært at dræbe denne applikation og blev installeret uden nogen advarsler til brugerne. Værre, det havde nogle svagheder, der ville give hackere yderligere måder at få adgang til disse systemer og dermed få mange af dem smittet. Sony måtte kompensere ganske mange mennesker for skader og måtte betale en stor bøde. (Og så vandt jeg ikke engang om konsekvenserne af deres omdømme.)


Jeg vil overveje, at en sådan ansøgning er lovlig kun , når du installerer den på din egen computer. Hvis du planlægger at sælge denne applikation til andre, skal du skal fortælle disse købere, hvordan man dræber processen, hvis det er nødvendigt. Jeg ved, at Symantec gør noget lignende med deres software, hvilket er præcis hvorfor jeg Brug ikke deres software længere. Det er min computer, så jeg skal kunne dræbe enhver proces, jeg kan lide.

Andre referencer 8


Det er forklaret her:
http://blogs.technet.com/b/markrussinovich/archive/2005/08/17/unkillable-processes.aspx[3]

Andre referencer 9


Den ældste idé i verden, to processer, der responderer hinanden?

Andre referencer 10


Jeg snuble lige over dette indlæg, mens jeg forsøgte at finde en løsning på mit eget (utilsigtet) uundgåeligt procesproblem. Måske vil mit problem være din løsning.



  1. Brug jboss Web Native til at installere en tjeneste, der vil køre en batchfil (modificer service.bat, så den påberåber din egen batchfil)

  2. I din egen batchfil skal du påberåbe en java-proces, der udfører den opgave, du vil fortsætte

  3. Start tjenesten. Hvis du ser processen i procesudforsker, ser det resulterende træ ud:



jbosssvc.exe -> cmd.exe -> java.exe



  1. brug taskkill fra en administrativ kommandoprompt for at dræbe cmd.exe. Jbosssvc.exe vil opsige, og java.exe vil være en forældreløs køreproces, der (så vidt jeg kan fortælle) ikke kan blive slået ihjel. Indtil videre har jeg forsøgt med Taskmanager, proces explorer (kører som administrator), og taskkill til ingen nytte.



Ansvarsfraskrivelse: Der er meget få tilfælde, hvor dette er en god ide, som alle andre har sagt.