Annonce

Réduire
Aucune annonce.

Keylogger en python

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Keylogger en python

    Bonjour,
    J'ai vu le tropic "[C] Keylogger +remote" dans la rubrique Challenges et j'essaie en ce moment de reproduire la même situation mais en python.

    J'ai un peu commence mais j'ai de sérieux doute sur la manière de récupérer les frappes de l'utilisateur en tache de fond :/

    Plusieurs questions :
    -Comment faire pour qu'un programme python s'exécute en tache de fond (sans ouvrir de fenêtre) ?
    -Si la question d'au dessus est possible, la fonction "input" pourrait -elle convenir a la récupération des frappes de clavier ?

    Je vous laisse les quelques bouts de code deja fait, ils sont pas assemblés dans un ordre pour le moment ^^

    fichier = open('logs.txt', 'web')
    sys.stdout = fichier #On remplace la sortie par defaut (écran) par le fichier logs.txt

    Logs = input()
    print(logs)
    Et j'ai commence la création d'un serveur pour transmettre le fichier logs:

    connexion = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    connexion.bind(('', 12800))
    connexion. listen(5)
    connexion_avec_client, infos_ connexion = connexion.accept()
    connexion_avec_client.sens(logs)
    connexion_avec_client.close
    connexion.close
    Et le code cote client
    connexion_avec_serveur.connect(('localhost', 12800))
    logs_reçu = connexion_avec_serveur.recv(1024)
    connexion_avec_serveur.close
    Merci d'avance !
    Dernière modification par Sadik, 17 novembre 2013, 10h11.
    Mon blog : http://rootsheep.info

  • #2
    Un keylogger en C c'est comme un keylogger en python, tu as besoin de l'API Windows en C, tu en auras besoin en python.

    En C tu utilises GetAsyncKeyState, idem pour python...

    Bref ce que tu sais faire en C, tu sais le faire en python.

    Par contre, ton keylogger évidemment ne sera pas portable, du côté de Unix, tu devras aussi regarder dans une API, faut chercher.

    Il est sans doute utile de lister toutes les touches existantes pour savoir si elles sont détectées afin de les inscrire dans ton fichier logs.

    À voir

    1 - GetAsyncKeyState
    2 - GetKeyState
    3 - Discussion Stackoverflow
    4 - Gestion du keylogger dans Windows une fois terminé

    Merci la prochaine fois de ne pas nous prendre pour des moteurs de recherche, google est beaucoup plus simple à utiliser que de créer un keylogger en C ou en python, autant dire que ta tâche sera très complexe...

    Désolé si je ne mâche pas mes mots, mais trop de posts apparaissent en étant non construis, et ce n'est pas parce-que tu montres un morceau de code que ça l'est, attention de faire une recherche précise et de ne pas poster juste pour vouloir poster.

    As-tu une idée ne serait-ce que dans la conception du programme? Si non, il faut commencer par là avant de coder tête baissée, sinon tu vas droit dans le mur!

    Bonne continuation...

    Commentaire


    • #3
      Re: Keylogger en python

      Bonjour,
      D'abord désolé si je devais pas poster.

      Concernant ta réponse je débute en programmation python et en programmation tout court vu qu'il s'agit de mon premier langage, je n'ai donc aucune connaissance en C et je ne savais pas qu'il existait un module pour mon problème (en C comme en python.)

      Pour la conception du programme, effectivement j'ai du aller trop vite a coder, il s'agit de mon premier "gros " programme (j'entend par la plus que quelques lignes^^) et j'ai du mal organise mes idées c'est vrai.

      Merci pour les liens je vais aller y faire un tour.

      Merci de ton aide,
      Cordialement

      Sadik
      Mon blog : http://rootsheep.info

      Commentaire


      • #4
        D'abord désolé si je devais pas poster.
        Je pense que tu as bien compris ce que je voulais dire, que ça plaise ou non, inutile de faire de la provocation, ça ne t'apportera rien de plus.

        Concernant ta réponse je débute en programmation python et en programmation tout court vu qu'il s'agit de mon premier langage, je n'ai donc aucune connaissance en C et je ne savais pas qu'il existait un module pour mon problème (en C comme en python.)
        Alors c'est inquiétant, étant donné que l'API win32 est tout de même assez complexe... mais heureusement fourni en documentation.

        Pour la conception du programme, effectivement j'ai du aller trop vite a coder, il s'agit de mon premier "gros " programme (j'entend par la plus que quelques lignes^^) et j'ai du mal organise mes idées c'est vrai.
        On est tous passé par là, mais je préfère largement les étapes de conception d'un programme, que du code où il faut se mettre dans la tête du codeur...

        À bientôt

        Commentaire


        • #5
          Bref ce que tu sais faire en C, tu sais le faire en python
          Non, le fait que python soit très haut niveau implique un certain nombre de restrictions par rapport à des langages bas niveau.

          Pour ce qui est de la portabilité, le fait que python utilise les API windows n'implique pas forcément une pauvre portabilité. Python tourne dans une machine virtuelle, par conséquent, il est possible qu'il existe des abstractions pour manipuler ce genre d'API très répandue.

          Désolé si je ne mâche pas mes mots, mais trop de posts apparaissent en étant non construis, et ce n'est pas parce-que tu montres un morceau de code que ça l'est, attention de faire une recherche précise et de ne pas poster juste pour vouloir poster.
          Je rejoins fred là dessus. Je sais que tu es fier de ce que tu fais, mais aligner 4 lignes de code et les poster rique de polluer le thread inutilement.

          Tortue 974.
          OxyGen Software
          Sécurité, développement, formations, informatique biomédicale
          [email protected]

          Commentaire


          • #6
            Re: Keylogger en python

            Bonjour,

            Envoyé par TorTukiTu Voir le message
            Je sais que tu es fier de ce que tu fais, mais aligner 4 lignes de code et les poster rique de polluer le thread inutilement.
            Encore désolé je ne pensais pas que cela gênerait autant de poster :/

            En tout cas vous avez répondu a mes questions je pense utiliser un fichier .pyw pour la tache de fond et me renseigner sur GetKeyState dont je n'ai pas encore tout compris le fonctionnement, mais bon ça devrait aller

            Je ferais plus attention a mes prochains posts, promis ^^

            Cordialement
            Sadik
            Mon blog : http://rootsheep.info

            Commentaire


            • #7
              Pour ce qui est de la portabilité, le fait que python utilise les API windows n'implique pas forcément une pauvre portabilité.
              Ça fait bientôt 10 ans que je fais du python non stop, je ne pense pas que tu m'apprennes grand chose, malgré qu'on est toujours à apprendre...

              python a une force c'est la portabilité, je ne suis pas là pour avantager ou donner des inconvénients à un langage, je parle juste de ce sujet qui est le keylogger, pas de la généralité d'applications python/C, et encore ça se discute avec cython. Un keylogger demande/oblige l'utilisation de l'API à l'OS concerné, abstraction ou non.

              Python est créé à partir du C/C++, ce qui le rend très proche de ces deux langages concernant la syntaxe.

              Python tourne dans une machine virtuelle, par conséquent, il est possible qu'il existe des abstractions pour manipuler ce genre d'API très répandue.
              Il en existe sans doute, on peut le créer soit même avec une détection d'OS très simplement. Mais comprendre le fonctionnement d'un keylogger, mène API ou non au même résultat.

              Conclusion : Mon post permettait d'en déduire qu'à partir de documentation souvent courantes en C/C++, nous pouvons assez facilement en déduire un code python (encore faut-il se documenter sur qui fait quoi dans une syntaxe pas forcément connue).

              Commentaire


              • #8
                Ça fait bientôt 10 ans que je fais du python non stop, je ne pense pas que tu m'apprennes grand chose, malgré qu'on est toujours à apprendre...
                C'est pas une question de te faire apprendre quoi que ce soit. Relis mes remarques, tu verra qu'elles sont totalement généralistes et ne s'appliquent pas qu'à python. je ne me risquerai pas à entrer dans les détails de python, je n'ai plus pratiqué depuis au moins 4 ou 5 ans.

                Un keylogger demande/oblige l'utilisation de l'API à l'OS concerné, abstraction ou non.
                Comme n'importe quel programme... Il y a bien un moment où ta machine virtuelle dois effectuer des actions sur l'OS hôte. Le truc, c'est que l'abstraction te permets justement de t'affranchir d'un appel direct vers l'API cible, en déléguant à la machine virtuelle. Du coup, tu gagnes en portabilité.

                Donc, pour en revenir à ta citation
                Par contre, ton keylogger évidemment ne sera pas portable
                Pas forcément. Si des interpréteurs python sont disponibles sur les machines cible et que l'abstraction qui va bien existe, il peut être parfaitement portable.

                Un keylogger en C c'est comme un keylogger en python, tu as besoin de l'API Windows en C, tu en auras besoin en python.
                Oui, mais le truc, c'est justement que la VM peut le faire pour toi. Après, je ne connais pas bien python, tu pourras surement nous en dire plus, fred.

                Python est créé à partir du C/C++, ce qui le rend très proche de ces deux langages concernant la syntaxe.
                Je ne parlais pas de syntaxe, mais des possibilités qu'offre le langage. Tu ne PEUX pas faire la même chose avec un langage très haut niveau comme python qu'avec de l'assembleur. Par exemple, tu ne peux pas écrire de bootloader en python.

                Mon post permettait d'en déduire qu'à partir de documentation souvent courantes en C/C++, nous pouvons assez facilement en déduire un code python
                Tu as tout à fait raîson. Après, l'abstraction fait que ca peut être géré apparement différement par python, mais c'est finalement relativement peut fréquent.

                Tortue 974.
                Dernière modification par TorTukiTu, 17 novembre 2013, 15h36.
                OxyGen Software
                Sécurité, développement, formations, informatique biomédicale
                [email protected]

                Commentaire


                • #9
                  Oui, mais le truc, c'est justement que la VM peut le faire pour toi. Après, je ne connais pas bien python, tu pourras surement nous en dire plus, fred.
                  Il existe des moyens d'avoir un keylogger tout cuit tout fait, cependant si c'est avoir un keylogger en tapant 5 lignes de code sans comprendre le fonctionnement, autant en télécharger un fonctionnel faisant directement le boulot.

                  L'intérêt est d'utiliser les API's qui permettent de comprendre les OS existants et d'en apprendre sur les différentes fonctions d'un keylogger, car des conceptions différentes de keylogger, il y en a un sacré paquet.

                  Je ne parlais pas de syntaxe, mais des possibilités qu'offre le langage. Tu ne PEUX pas faire la même chose avec un langage très haut niveau comme python qu'avec de l'assembleur. Par exemple, tu ne peux pas écrire de bootloader en python.
                  Oui, mais là tu pousses mémé dans les ortis

                  Un bootloader à une obligation d'utiliser un minimum d'assembleur, donc même du C ne suffit pas pour l'écrire entièrement à lui tout seul. Quand il y a des obligations, eh bien il n'y a rien à faire d'autres que de faire l'effort d'utiliser un autre langage.

                  Maintenant je ne connais pas bien le domaine en ce qui concerne la création d'un OS, donc je peux me tromper, j'ai dû lire cela quelque-part un jour.

                  De toute façon on ne choisit pas un langage parce-qu'il est beau et simple, mais surtout par rapport au besoin qu'on en a !

                  Commentaire


                  • #10
                    L'intérêt est d'utiliser les API's qui permettent de comprendre les OS existants et d'en apprendre sur les différentes fonctions d'un keylogger
                    Vu comme ca, effectivement. Mais dans ce cas, pourquoi ne pas directement utiliser du Cpp ? quitte à utiliser les API des OS, autant le faire directement pour en apprendre le plus possible. Après, ce ne sera plus exactement le même projet...

                    Du coup, toi qui a fait pas mal de python, tu ne penses pas qu'un keylogger en python est une aberration ?
                    Ca obligera à deployer l'interpréteur, qui lui est dépendant de l'OS cible.

                    Du coup:
                    - tu perds la portabilité de python.
                    - tu embarques tout une machine virtuelle pour juste quelques fonctionnalitées.
                    - tu as un malware partculièrement gras
                    - tu as un malware très peu discret

                    Un bootloader à une obligation d'utiliser un minimum d'assembleur, donc même du C ne suffit pas pour l'écrire entièrement à lui tout seul...
                    Maintenant je ne connais pas bien le domaine en ce qui concerne la création d'un OS, donc je peux me tromper, j'ai dû lire cela quelque-part un jour.
                    Non non, c'est tout à fait exact. On ne peut pas écrire un bootloader uniquement en C.

                    Oui, mais là tu pousses mémé dans les ortis
                    Effectivement, mais en y réfléchissant un peu, il n'y a pas à pousser aussi loin qu'un bootloader. Si notre ami décide par exemple de déployer un rootkit (driver ou LKM) dans un des OS cible, il ne pourra pas le faire en python.

                    De toute façon on ne choisit pas un langage parce-qu'il est beau et simple, mais surtout par rapport au besoin qu'on en a !
                    C'est exactement ce que je disais au dessus.

                    Tortue 974.
                    Dernière modification par TorTukiTu, 17 novembre 2013, 19h54.
                    OxyGen Software
                    Sécurité, développement, formations, informatique biomédicale
                    [email protected]

                    Commentaire


                    • #11
                      Vu comme ca, effectivement. Mais dans ce cas, pourquoi ne pas directement utiliser du Cpp ? quitte à utiliser les API des OS, autant le faire directement pour en apprendre le plus possible. Après, ce ne sera plus exactement le même projet...

                      Du coup, toi qui a fait pas mal de python, tu ne penses pas qu'un keylogger en python est une aberration ?
                      Ca obligera à deployer l'interpréteur, qui lui est dépendant de l'OS cible.

                      Du coup:
                      - tu perds la portabilité de python.
                      - tu embarques tout une machine virtuelle pour juste quelques fonctionnalitées.
                      - tu as un malware partculièrement gras
                      - tu as un malware très peu discret
                      Le seul intérêt de faire un keylogger, python, C ou C++, et de découvrir un fonctionnement (détection de l'appui d'une frappe clavier) de l'OS, et apprendre à concevoir un programme informatique.

                      Maintenant tu ne perds pas la portabilité, car on peut comme en C d'ailleurs, détecter l'OS et selon l'OS choisir l'API à utiliser.

                      Le problème de la VM est exclu en utilisant cython, qui permet de compiler un code C à partir d'un programme python.

                      Un malware est très souvent peu discret, étant des processus actifs, quelqu'un connaissant un minimum l'informatique, peu détecter un malware présent dans le système (peut-être pas tout de suite malheureusement, mais il le verra).

                      Commentaire


                      • #12
                        Maintenant tu ne perds pas la portabilité, car on peut comme en C d'ailleurs, détecter l'OS et selon l'OS choisir l'API à utiliser.
                        Dans un cadre d'apprentissage, OK, mais dans la vraie vie, ca oblige à réecrire le même code en un peu différent pour chaque OS cible.
                        C'est un coup à bien se faire ch*er. C'est d'ailleurs entre autre pour ca que python existe. Faire un bloc de code pour chaque OS, je pense pas franchement que ce soit dans la philosophie d'un langage qui utilise une VM comme python.

                        Un malware est très souvent peu discret, étant des processus actifs, quelqu'un connaissant un minimum l'informatique, peu détecter un malware présent dans le système (peut-être pas tout de suite malheureusement, mais il le verra).
                        C'est certain, il n'empèche que le concepteur du malware cherchera à le rendre le plus discret possible le plus longtemps possible. Et embarquer des tonnes de code au final mort n'aide pas. L'empreinte mémoire d'un interpréteur python n'aidant pas non plus.

                        Le problème de la VM est exclu en utilisant cython, qui permet de compiler un code C à partir d'un programme python.
                        Dans ce cas, pourquoi ne pas directement écrire le malware en C ? Quel est l'intéret de passer par Python ?


                        Conclusion, quitte à écrire un malware et à apprendre les API des OS, autant se concentrer sur un OS cible, choisir un langage qui assurera une faible taille au programme final, et un maximum de posibilités au développeur du malware. Le C semble plutot bien adapté pour ca. Après, comme je l'ai dit, ca deviens un autre projet.

                        Tortue 974.
                        Dernière modification par TorTukiTu, 17 novembre 2013, 20h42.
                        OxyGen Software
                        Sécurité, développement, formations, informatique biomédicale
                        [email protected]

                        Commentaire


                        • #13
                          Quel est l'intéret de passer par Python ?
                          La syntaxe plus simple... l'objectif étant de programmer en python, transformer ton code en C et de le compiler comme un simple programme en C, pratique non?

                          Le code est seulement 1,2 à 1,6 fois plus lent qu'un code C pur... c'est pas beau ça?

                          je pense pas franchement que ce soit dans la philosophie d'un langage
                          Les modules qui sont créés ne sont pas créés que par le créateur python, c'est une personne qui s'est fait chier à utiliser les API afin de le rendre portable.

                          Avant python était considéré comme un langage de script, maintenant de moins en moins, on commence à l'utiliser car justement grâce à cython, on peut avoir des vitesses d'exécution très efficace, seulement beaucoup d'entreprises ne connaissent pas cython, mais ça viendra...

                          Qui puis-est avec le cross compiling plus rien ne nous arrête, nous sommes les maîtres du monde, compiler du code sous Unix pour Unix (évidemment) et Windows, le top!

                          Finalement j'utilise le C que pour inventer un module non existant dans la lib standard... Souvent les modules créés hors de la lib standard sont lourds et trop de fonctions sont inutiles dans ma conception, je crée donc mon propre module léger en C pour le réutiliser plus tard dans mon code python

                          L'avenir commence seulement pour les langages de scripts en général

                          Voilà un avant goût sans la libération mémoire, la flemme...

                          Utilisation pour Unix en utilisant la XLib

                          Code:
                          #include <stdio.h>
                          #include <stdlib.h>
                          #include <X11/Xlib.h>
                          #include <X11/Xutil.h>
                          #include <X11/Xos.h>
                          
                          Display *init(void);
                          
                          int main(void)
                          {
                              int i=0;
                              XEvent event;
                              KeySym key;
                              Display *dis = init();
                              char letter = 'a';
                              char text[512];
                          
                              if (dis == NULL)
                                  exit(-1);
                          
                              while(i < 511 && letter != '\n')
                              {
                                  XNextEvent(dis, &event);
                                  if (event.type == KeyPress && XLookupString(&event.xkey, &letter, 255, &key, 0) == 1)
                                  {
                                      if (key == 0xFF0D)
                                      {
                                          text[i] = '\0';
                                          break;
                                      }
                                      else
                                      {
                                          text[i] = letter;
                                          i++;
                                      }
                                  }
                              }
                          
                              puts(text);
                          
                              return 0;
                          }
                          
                          
                          Display *init(void)
                          {
                              Display *dis = NULL;
                              int screen;
                              GC gc;
                              unsigned long black,white;
                              Window win;
                          
                              dis=XOpenDisplay((char *)0);
                              if (dis == NULL)
                                  return NULL;
                          
                              screen=DefaultScreen(dis);
                              black=BlackPixel(dis,screen);
                              white=WhitePixel(dis, screen);
                              win=XCreateSimpleWindow(dis,DefaultRootWindow(dis), 0, 0, 200, 300, 5, white, black);
                              XSelectInput(dis, win, ExposureMask|ButtonPressMask|KeyPressMask);
                              gc=XCreateGC(dis, win, 0,0);
                              XSetBackground(dis,gc,white);
                          	XSetForeground(dis,gc,black);
                              XClearWindow(dis, win);
                              XMapRaised(dis, win);
                          
                              return dis;
                          }
                          Dernière modification par fred, 18 novembre 2013, 17h15.

                          Commentaire


                          • #14
                            La syntaxe plus simple... l'objectif étant de programmer en python, transformer ton code en C et de le compiler comme un simple programme en C, pratique non?
                            Le code est seulement 1,2 à 1,6 fois plus lent qu'un code C pur... c'est pas beau ça?
                            Mouais, j'avoue être un puriste.
                            Mais j'estime que compiler un langage qui n'a pas été concu pour, ca reste du bricolage. Si on veux de la perf, autant écrire directement le programme en C.
                            CPython, c'est bien pour des gens qui n'ont pas le temps (ou ne veulent pas) apprendre le C. Pour un vrai projet un minimum costaud, ca n'est pas la meilleure solution dans la plupart des cas.

                            Finalement j'utilise le C que pour inventer un module non existant dans la lib standard... Souvent les modules créés hors de la lib standard sont lourds et trop de fonctions sont inutiles dans ma conception, je crée donc mon propre module léger en C pour le réutiliser plus tard dans mon code python
                            Tout dépend du projet et des contraintes.

                            Par exemple, écrire un module en C pour un keylogger en python, c'est embarquer un interpréteur pour pas grand chose. Autant tout écrire en C.
                            A l'inverse, pour un script qui doit faire du calcul lourd, ca peut être intéressant d'écrire les parties les plus lourdes sous forme d'un module C utilisable pour ton programme.

                            L'avenir commence seulement pour les langages de scripts en général
                            Je pense que pour les gros projets, l'avenir est plutot aux langage compilés en bytecode intermédiaire (java ou .NET typiquement). En revanche, le scripting aura toujours sa place dans le cadre de petites et moyennes applications. Compiler du script est très à la mode, mais je pense que c'est une mode qui va passer.

                            Après, c'est seulement ma vision personelle.

                            Tortue 974.
                            Dernière modification par TorTukiTu, 19 novembre 2013, 13h51.
                            OxyGen Software
                            Sécurité, développement, formations, informatique biomédicale
                            [email protected]

                            Commentaire


                            • #15
                              Mouais, j'avoue être un puriste.
                              Mais j'estime que compiler un langage qui n'a pas été concu pour, ca reste du bricolage. Si on veux de la perf, autant écrire directement le programme en C.
                              Non car tout le code ne demande pas forcément à être optimisé, et en plus l'avantage est de créer facilement tes GUI en PyQt et faire tes modules made in C.

                              D'ailleurs il y a le cas défini par toi même...

                              A l'inverse, pour un script qui doit faire du calcul lourd, ca peut être intéressant d'écrire les parties les plus lourdes sous forme d'un module C utilisable pour ton programme.
                              ----------------------

                              CPython, c'est bien pour des gens qui n'ont pas le temps (ou ne veulent pas) apprendre le C.
                              Oui ça existe sans doute...

                              ----------------------

                              Je pense que pour les gros projets, l'avenir est plutot aux langage compilés en bytecode intermédiaire (java ou .NET typiquement). En revanche, le scripting aura toujours sa place dans le cadre de petites et moyennes applications. Compiler du script est très à la mode, mais je pense que c'est une mode qui va passer.
                              Je ne suis pas de cet avis, mais je partage ceci, car c'est pareil pour ce qui me concerne.

                              Après, c'est seulement ma vision personelle.

                              Commentaire

                              Chargement...
                              X