10
votes

Comment puis-je détecter un débogueur ou un autre outil qui pourrait analyser mon logiciel?

une situation très simple. Je travaille sur une application à Delphi 2007, qui est souvent compilée comme «libération» mais elle est toujours sous un débogueur. Et parfois, il fonctionnera également sous Silktest pour les tests de régression. Bien que cela soit assez amusant, je veux faire quelque chose de spécial ...

Je veux détecter si mon application est exécutée dans un débogueur / testeur de régression et si c'est le cas, je souhaite que la demande sache quel outil est utilisé! (Ainsi, lorsque l'application se bloque, je pourrais signaler ces informations dans son rapport d'erreur.)

Toute suggestion, solutions?


2 commentaires

Vous n'écrivez pas les logiciels malveillants, à droite ...?


docs.microsoft.com/en-us/ Windows / Desktop / Déboguer / ...


4 Réponses :


4
votes

Vous recherchez probablement le Isdebuggerpresent fonction.


2 commentaires

Mais il détectera-t-il également Silktest et d'autres logiciels de test? Ou des debuggers à distance?


Il existe également la fonction checkremotedebuggerpresent , ce qui semble semblable à identifier les débuggeurs à distance. Je ne suis pas familier avec Silktest, donc je ne sais pas si cela agit comme un débogueur ou non. Si cela le fait, alors ce qui précède fonctionnera. Sinon, vous devrez trouver une autre technique.



-1
votes

Vous pouvez également faire

if DebugHook <> 0 then ...


1 commentaires

Cela ne fonctionne que de l'intérieur de l'IDE Delphi, pas d'autres debuggers. N'oubliez pas non plus que l'application est débiguée dans le mode "Libération", pas le mode "Débogage".



11
votes

Vous pouvez vérifier le processus parent qui a démarré votre application. Avec CreatoToolHelP32Snapshot / / / / Process32Next Obtenez le PID parent ( Processentry32.th32ParentProcesside ou TPROCESSELRY32.TH32PARENTPROCESSID < / code>) Pour votre application PID. Ensuite, obtenez le nom de fichier du parent PID de comparer avec les applications que vous souhaitez rechercher, comme Silktest.

check Cet article pour l'utilisation du code.

en plus de isdebuggerpresent et checkremodedebuggerpresent , vous pouvez également interroger peb.beingdebugged (PEB est le bloc d'environnement de processus, pour obtenir PEB que vous devez Query Teb, qui est le bloc Enviroment du fil).


0 commentaires

1
votes

Pour détecter Silktest, vous pouvez essayer de joindre à une DLL utilisée uniquement par Silktest afin de détecter sa présence. Par exemple, si l'agent ouvert est connecté à un processus, win32hookdll_x86.dll ou win32hookdll_amd64.dll sera présent (les noms peuvent facilement être découverts avec un outil comme < Un href = "http://technet.microsoft.com/en-us/sysinternals/bb8966653" rel = "nofollow" title = "Explorateur de processus"> Explorateur de processus .


0 commentaires