Question

J'ai écrit un programme qui est en quelque sorte un plugin non officiel et autonome pour une application. Il permet aux clients d’obtenir un service qui soit une alternative moins chère que celle du fournisseur. Mon programme n’est pas illégal, contre tout type de TOS, et n’est certainement pas un virus, un logiciel publicitaire ou autre. Cela étant dit, le fournisseur n'est bien sûr pas content que je prenne ses concurrents et tente d'empêcher l'exécution de mon application.

Il a déjà essayé certaines tactiques pour empêcher les gens de faire fonctionner mon application à côté de la sienne. Si cela est détecté, son application génère une fausse erreur.

Tout d'abord, il a vérifié si mon programme fonctionnait bien en recherchant une fenêtre ouverte avec le bon titre. Je l'ai contré en randomisant le titre du programme au démarrage.

Ensuite, il a recherché le nom du processus en cours d'exécution. Je l'ai contré en faisant en sorte que l'application se copie elle-même au démarrage sous [chaîne aléatoire] .exe, puis en l'exécutant.

Quoi qu'il en soit, ma question est la suivante: que peut-il faire d'autre pour détecter si mon programme est en cours d'exécution? Je sais que vous pouvez lire le texte de la fenêtre (barre d’état, étiquettes). Je suis prêt à contrer cela en remplaçant les étiquettes par des images (non?).

Mais qu'y a-t-il d'autre? Pouvez-vous détecter les fichiers .dll qu'un programme a chargés? Si oui, cela pourrait-il être résolu en randomisant les noms de dll avant de les charger?

Je sais qu'il est possible d'obtenir la signature d'un programme en mémoire et de la suivre de cette façon (comme un scanner de virus), mais ses chances de le faire ne sont probablement pas bonnes, car cela semble assez avancé.

Même si c'est un peu merdique de sa part, c'est plutôt amusant. C'est comme un combat de poing ringard.

MODIFIER: Quand j'ai dit que c'était un plugin, c'est juste le terme (incorrect) que j'ai utilisé. C'est un EXE autonome. Le " API " entre mon programme et l’autre, c’est simplement que je saisis des données dans les contrôles (comme les zones de texte, etc.).

Était-ce utile?

La solution

Je me sens un peu sale de répondre à cette question, mais il est tard et j'attends la fin de la copie du lecteur, donc ....

Il pourrait utiliser une somme de contrôle pour identifier votre exécutable / dll. Cela contourne les astuces de changement de nom.

Vous pouvez contourner ce problème en modifiant au hasard les bits du programme au démarrage (par exemple, modifier une ressource, jouer avec la version intégrée, etc.).

Si j’étais lui, je commencerais aussi à rechercher des modèles de trafic réseau; Si, par exemple, vous dirigez des clients vers des concurrents, vous recherchez ces informations quelque part, supprimez le processus et / ou déchargez la bibliothèque si un plug-in accède à un site figurant sur la liste noire.

Si vous prenez le jeu du chat et de la souris assez loin (par exemple, des crochets de shell pour recréer votre exécutable / bibliothèque s'il est supprimé), vous serez probablement signalé comme un virus par un logiciel antivirus.

Autres conseils

Pas très sportif de votre concurrent.

Déployez votre projet en tant que code source chiffré non compilé. Ecrivez un programme de décryptage et de déploiement qui peut randomiser, renommer des classes, réorganiser le code pour éviter toute détection de signature.

Ensuite, compilez le code sur l'ordinateur client à l'aide de CSharpCodeProvider pour compiler votre code. Vous pouvez générer des assemblages aléatoires, avec des signatures de fonctions totalement aléatoires (je suggère d'utiliser un grand dictionnaire de mots réels et communs au lieu d'être totalement aléatoires. Vous pouvez les concaténer pour plus de plaisir. Par exemple, Live, Virtual, Space, Office, Network, Utilitaire. Space.Live.Network.dll, Utility.Virtual.Live.dll).

Chaque version de votre programme sur chaque client sera différente. Assurez-vous de masquer votre programme de déploiement. Peut-être qu'il devrait se supprimer après avoir installé votre version personnalisée.

  

Quoi qu'il en soit, ma question est la suivante: que peut-il faire d'autre pour détecter si mon programme fonctionne?

  • Votre programme est-il un fichier EXE ou une DLL?
  • Vous appelez ça un plugin: à quoi se branche-t-il?
  • Comment votre programme est-il démarré / lancé / exécuté?
  • Que fait votre programme pour "insérer"?
  • Quelle est l'API entre votre programme et l'autre programme?

Ceci n'est pas une réponse à votre dernière question, mais au problème décrit.

Que diriez-vous de réparer l’autre application? Recherchez la chaîne recherchée dans les titres et modifiez-y une lettre.

Informez vos clients du problème en leur fournissant un correctif pour l'autre application plutôt que pour la vôtre.

@ryeguy ... La meilleure défense est une bonne attaque à mon humble avis. Faites ce que vous pouvez pour désactiver son processus avant qu'il ne désactive le vôtre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top