2009-10-28 11 views
-3

J'ai développé une application en Java. J'ai besoin que mon programme Java ne termine pas un explorateur de processus/gestionnaire de tâches.Programme java non-killable

+5

Pourquoi voulez-vous atteindre cet objectif? – KB22

+3

Etre capable de faire cela serait un trou de sécurité de la taille de la lune. Essentiellement, vous seriez en mesure de détruire les ordinateurs facilement. – user44242

+0

Avast processus fait ce que je suis attendu, alors pourquoi ce n'est pas par le programme Java –

Répondre

6

Pas possible ...

façons Là peut-être pour le cacher du Gestionnaire des tâches ou même d'autres explorateurs de processus propriétaire pour Windows, mais qui a besoin d'un accès à l'API native win32. Peut-être que vous pouvez utiliser JNI (Java Native Interface) pour y parvenir, mais je suis toujours sceptique.

& plus JVM lui-même est un processus qui peut bien sûr être tué.

+0

Salut Asad Khan, Je cherche sur le Web. Ils donnent le faire par VC++ ou RootKit ou ajouter le handle DENY. Mais je ne sais pas comment l'utiliser pour mon programme java. Si vous connaissez l'un des trois, veuillez me répondre. Merci et salutations Mayan Alagar –

+1

Donc - vous demandez des conseils sur la façon de construire un rootkit ... et vous avez honnêtement attendu une réponse? –

2

Je crois que ce n'est pas possible.

Le système d'exploitation devrait toujours être capable de gérer l'application, ce qui pourrait impliquer de les terminer.

1

Ceci n'est pas possible.

Le plus proche que vous pouvez réaliser est d'ajouter un point d'arrêt à votre programme Java qui bloquera indéfiniment; par exemple. Runtime.getRuntime().addShutdownHook(Thread).

Cela aura l'effet qu'un signal de suppression normal sous Posix n'aura aucun effet. A partir du gestionnaire de tâches Windows, une tentative de "Terminer le processus" échouera et Windows vous demandera si le processus ne répond pas et si vous souhaitez y mettre fin - À ce stade, il n'y a aucun moyen d'empêcher la résiliation.

+0

Hi Adamski, Je cherche sur le Web. Ils donnent le faire par VC++ ou RootKit ou ajouter le handle DENY. Mais je ne sais pas comment l'utiliser pour mon programme java. Si vous connaissez l'un des trois, veuillez me répondre. Merci et salutations Mayan Alagar –

2

Vous pouvez jeter un oeil à rmid. Je pense que vous pouvez le faire redémarrer automatiquement votre service chaque fois qu'il est tombé. Pour autant que je m'en souvienne, c'est ce qui a été souvent utilisé à Jini.

(Donc cela vous donnerait un chien de garde externe, basé uniquement sur les outils Java.) Bien sûr que vous allez faire quand rmid meurt lui-même, je suppose que vous faites quelque chose avec cron. Et ainsi de suite et ainsi de suite.)

7

Comme d'autres l'ont dit, ce n'est pas possible. Raymond Chen of Microsoft a donné une bonne explication quant à pourquoi.

5

Même si cela était possible, vous ne devriez même pas veulent (et encore moins « besoin ») pour ce faire.

La seule chose qu'il pourrait réaliser est d'énerver les utilisateurs et peut-être causer des problèmes juridiques. Il n'y a pas de raison légitime de le faire, alors ne le faites pas.

1

Il est possible dans VC++ et dans d'autres langues car vous avez la possibilité de vous connecter directement au système d'exploitation lui-même. Les programmes Java passent toujours par la JVM en tant que couche intermédiaire et si vous pouviez l'intégrer profondément à la machine JVM, comme on l'a dit, ce serait un énorme trou de sécurité:

Version courte: Si vous voulez absolument doit le faire, le faire dans un langage qui compile les binaires natifs et n'a pas de VM entre vous et l'API OS.