Question

J'ai une application, ce qui me affiche des données. Je dois joindre au processus de cette application, trouver les données dont j'ai besoin en mémoire (un numéro unique, en fait), et enregistrez-le quelque part. Cette application ne semble pas utiliser les commandes de fenêtres standards, donc les choses ne vont pas être aussi simple que la lecture des données de contrôle à l'aide AutoIt ou quelque chose de similaire.

Actuellement, je suis une base de données auto-apprenant gars et avoir une connaissance assez superficielle sur les applications de fenêtres de débogage. Même pas sûr si je posais ma question assez correctement.

Alors, pouvez-vous me donner quelques directives de départ, disons, que dois-je lire d'abord, et les directions générales que je devrais travailler?

Merci.

Était-ce utile?

La solution

Mon conseil principal est: essayer de trouver tout autre méthode d'intégration que cela. Même si vous réussissez, vous serez en otage à toutes sortes de changements dans le processus cible, et éventuellement dans Windows O / S. Ce que vous décrivez est la plupart des scanners de virus de comportement devraient signaler et Hinder: sinon maintenant, à l'avenir.

Cela dit, vous pouvez jeter un oeil à injection DLL . Cependant, il semble que si vous allez avoir à déboguer le diable hors du processus cible au niveau du démontage: sinon, comment allez-vous savoir quelle adresse mémoire à lire?

Autres conseils

Pour lire la mémoire d'une autre application, vous devez ouvrir le processus en ce qui concerne des OpenProcess avec au moins les droits d'accès PROCESS_VM_READ puis utilisez ReadProcessMemory pour lire une adresse de mémoire à partir du processus. Si vous êtes un administrateur ou avoir le privilège de débogage vous serez en mesure d'ouvrir un processus avec des droits d'accès maximal, il vous suffit de permettre SeDebugPrivilege avant (voir par exemple http://support.microsoft.com/kb/131065 ).

Si vous ne savez pas beaucoup sur la mémoire du processus de destination, vous pouvez simplement énumérer les blocs de mémoire par rapport de VirtualQueryEx (voir Comment peut-on utiliser VirtualAllocEx faire salle de maquillage pour une cave de code? comme un exemple où j'examine le code du programme. les données du programme, vous pouvez examiner de la même manière ).

Le problème le plus pratique que je vois est que vous posez votre question dans trop général façon. Si vous expliquez plus quel genre de données que vous recherchez Je pourrais probablement vous suggérer une meilleure façon. Par exemple, si vous pouviez voir les données que vous pourriez quelque part examiner les fenêtres correspondantes et des contrôles par rapport de Spy ++ (une partie des outils Visual Studio). Les plus importants sont la classe des fenêtres (ou des contrôles) et les messages qui seront envoyés au moment où sont affichés la fenêtre la plus intéressante. Vous pouvez également utiliser Moniteur de processus pour tracer tous les accès aux fichiers et registre le moment où seront affichés les fenêtres avec les informations intéressantes. Au moins au début, vous devriez examiner la mémoire du processus avec ReadProcessMemory au moment où les données que vous recherchez sont affichées dans la fenêtre.

Si vous avez pas de succès dans vos enquêtes, je vous recommande d'insérer dans votre question plus d'informations.

Je connaissais les fenêtres de débogage API, mais il est perdu depuis longtemps la mémoire. Que diriez-vous à l'aide ollydbg:

http://www.ollydbg.de/

Et que le contrôle à la fois le script ollydbg et AutoIt?

intéressant sons ... mais très difficile. Puisque vous dites que cela est un « one-off », ce quelque chose comme ça au lieu?

  • une capture d'écran de cette application.
  • Exécuter la capture d'écran grâce à un programme OCR
  • Si vous êtes en mesure de lire le texte que vous recherchez une manière prévisible, vous êtes à mi-chemin!

Alors maintenant, si vous pouvez lire une capture d'écran scanno de votre application, il est facile d'écrire un programme qui effectue les opérations suivantes:

  • Scripts les étapes pour obtenir les données sur l'écran
  • Crée une capture d'écran des données en question
  • exécute grâce à un programme OCR comme Microsoft Office Document Imaging
  • Extrait le texte pertinent et fait « tout » avec elle.

J'ai fait quelque chose comme ça avant avec de jolis bons résultats, mais je dirais qu'il est une solution fragile. Si l'application change, il cesse de fonctionner. Si l'OCR ne peut pas lire le texte, il cesse de fonctionner. Si l'OCR lit le mauvais texte, il pourrait faire pire que travail d'arrêt ...

Comme les autres affiches ont dit, pour atteindre en mémoire et en tirant des données est un sujet assez avancé ... Kudos pour vous si vous pouvez trouver un moyen de le faire!

Je sais que cela ne peut pas être une réponse populaire, en raison de la nature de ce que ce logiciel est utilisé pour, mais des programmes comme cheatengine et ArtMoney vous permettent de rechercher à travers toute la mémoire réservée par un procédé pour une valeur donnée, affiner les résultats jusqu'à ce que vous trouverez l'adresse de la valeur que vous recherchez.

Je l'ai appris d'abord en essayant d'apprendre à mieux protéger mes jeux après venir à travers un entraîneur pour l'un d'eux, mais ont trouvé la technique parfois utile lors du débogage.

Voici un exemple de la technique décrite ci-dessus en cours d'utilisation: https: // www. youtube.com/watch?v=Nv04gYx2jMw&t=265

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