Partage
  • Partager sur Facebook
  • Partager sur Twitter

Décomilation impossible ?

Comment faire pour y arriver ?

Sujet résolu
    18 mai 2006 à 16:45:26

    Salut :) ,


    J'ai entendu que c'était possible de "compiler 2 fois le programme" o_O ( ou un truc du genre ) pour qu'on ne puisse plus le décomiler,
    alors je me suis demandé... , comment faire ? :D


    Merci d'avance ^^


    [EDIT] P.S. Est ce que qq voudrait bien rajouter un 'p' dans le titre : compilation :D
    • Partager sur Facebook
    • Partager sur Twitter
      18 mai 2006 à 16:51:43

      Citation : PianoPâriss

      J'ai entendu que c'était possible de "compiler 2 fois le programme" o_O ( ou un truc du genre ) pour qu'on ne puisse plus le décomiler,


      A ma connaissance, légende urbaine...
      • Partager sur Facebook
      • Partager sur Twitter
      Music only !
        18 mai 2006 à 17:02:11

        Ne me dit pas ça -ed- :( , ça doit bien être possible de pouvoir faire en sorte que la décompilation du programme soit impossible ou très dure :) , non ? :o
        • Partager sur Facebook
        • Partager sur Twitter
          18 mai 2006 à 17:06:01

          Deja un programme decompiller est tres peu lisible , et generalement le code fournit par le decompilateur n' est pas recompillable ... Donc bon deja tu as un truc deja pas commode a lire qui ne fonctionne pas.


          Mais sinon compiler 2 fois un programme ... jamais entendu parler ( sauf peut etre en java avec les byte code et code machine mais dans ce cas la c' est pas le bon forum )
          • Partager sur Facebook
          • Partager sur Twitter
            18 mai 2006 à 17:11:25

            Oui, le code décompilé est en asm, mais on peut toujours par exemple le craker, c'est ça par exemple que je veux empêcher :)
            Donc vous croyez que c'est impossible, mais il y a bien des virus qui échapent au antivirus, non ; alors ? :p
            • Partager sur Facebook
            • Partager sur Twitter
              18 mai 2006 à 17:17:02

              Du coté d'upx tu devrais trouver ton bonheur.. http://fr.wikipedia.org/wiki/UPX
              • Partager sur Facebook
              • Partager sur Twitter
              Inkamath on GitHub - Interpréteur d'expressions mathématiques. Reprise du développement en cours.
                18 mai 2006 à 17:24:58

                il existe des dessassembleur qui affiche ton programme en asm "assembleur" mais c'est quasiment illisible.
                Ca ne sert qu'aux crackers comme le dit pianopariss ou aux developpeurs qui connaissent l'asm pour essayer de debugguer leur programme.

                Retrouve le code source en C , c'est, comme le dit -ed- :lol: une legende urbaine.
                • Partager sur Facebook
                • Partager sur Twitter
                  18 mai 2006 à 17:43:05

                  d'ou l'interet de sauvegarder son code source.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    18 mai 2006 à 18:51:28

                    Citation : azerty9

                    il existe des dessassembleur qui affiche ton programme en asm "assembleur" mais c'est quasiment illisible.


                    Je debute en asm et je peut t'assurer que ce langage est parfaitement intelligible, sont defaut n'est pas son "illisibilité" (iczelion pretend que la programmation masm est aussi facile que le C, cela dit j'apprend sur nasm avec un autre tuto que clui d'iczelion), c'est le fait qu'un code asm soit au moins 10 fois plus long qu'un code C.

                    Citation : azerty9

                    Retrouve le code source en C , c'est, comme le dit -ed- :lol: une legende urbaine.


                    (Helas ?) non, c'est bien une realité, meme si ça ne donne pas un bon code source en particulier a cause de l'absence de commentaires.
                    Je vous rammene bien sur a wikipedia :
                    fr.wikipedia.org
                    en.wikipedia.org
                    The Decompilation Wiki

                    Edit : il semble que j'aurais du tester ces logiciels avant de poster : pour un basique
                    #include <stdio.h>

                    int main()
                    {
                        puts("Hello, world");
                        return 0;
                    }

                    boomerang me donne fierement (ne cherchez pas a le lire, il ne marche pas) :
                    int global0 = 0x4000;

                    void __imp_malloc();
                    void proc3();
                    void __imp_SetUnhandledExceptionFilter();
                    void proc5();
                    void __imp___getmainargs();
                    void __imp__setmode();
                    void __imp___p__fmode();
                    void proc9();
                    void __imp___p__environ();
                    void proc11();
                    void __imp__cexit();
                    void __imp_ExitProcess();
                    void proc14();
                    void proc15();
                    void __imp_puts();
                    void proc17();

                    // address: 0x401100
                    void proc1() {
                        int local0;                 // r29
                        int local1;                 // r27
                        int local2;                 // r24
                        int local3;                 // r26
                        int local4;                 // r25
                        int local5;                 // tmp1

                    }

                    // address: 0x4017e0
                    void __imp_malloc() {
                        malloc();
                        return;
                    }

                    // address: 0x401220
                    void proc3() {
                        int local0;                 // r29
                        int local2;                 // r25
                        int local3;                 // tmp1

                    }

                    // address: 0x401800
                    void __imp_SetUnhandledExceptionFilter() {
                        SetUnhandledExceptionFilter();
                        return;
                    }

                    // address: 0x401300
                    void proc5() {
                        int local0;                 // r29

                        %esp = %esp - 4;
                        *(int*)%esp = local0;
                        local0 = %esp;
                        local0 = *(int*)%esp;
                        %esp += 4;
                        %esp += 4;
                        return;
                    }

                    // address: 0x4017a0
                    void __imp___getmainargs() {
                        __getmainargs();
                        return;
                    }

                    // address: 0x401790
                    void __imp__setmode() {
                        _setmode();
                        return;
                    }

                    // address: 0x401780
                    void __imp___p__fmode() {
                        __p__fmode();
                        return;
                    }

                    // address: 0x4012d0
                    void proc9() {
                        int local0;                 // r29
                        int local1;                 // r25
                        int local2;                 // r26
                        int local3;                 // r24
                        int local4;                 // tmp1

                        %esp = %esp - 4;
                        *(int*)%esp = local0;
                        local1 = 0x4030d0;
                        local0 = %esp;
                        local4 = local1 - 0x4030d0;
                        while (%flags) {
                            local2 = *(int*)(local1 + 4);
                            local3 = *(int*)local1;
                            local4 = local1;
                            local1 += 8;
                            local4 = *(int*)(local2 + 0x400000);
                            *(int*)(local2 + 0x400000) += local3;
                            local4 = local1 - 0x4030d0;
                        }
                        local0 = *(int*)%esp;
                        %esp += 4;
                        %esp += 4;
                        return;
                    }

                    // address: 0x401760
                    void __imp___p__environ() {
                        __p__environ();
                        return;
                    }

                    // address: 0x401290
                    void proc11() {
                        int local0;                 // r29
                        int local1;                 // r24
                        int local2;                 // tmp1

                        %esp = %esp - 4;
                        *(int*)%esp = local0;
                        local0 = %esp;
                        local2 = %esp;
                        %esp = %esp - 8;
                        local1 = 0;
                        local2 = local1;
                        local1 += 15;
                        local2 = local1;
                        local1 += 15;
                        local2 = local1;
                        local1 = local1 / 16;
                        local2 = local1;
                        local1 = local1 * 16;
                        *(int*)(local0 - 4) = local1;
                        local1 = *(int*)(local0 - 4);
                        %esp = %esp - 4;
                        proc14();
                        %esp = %esp - 4;
                        proc15();
                        *(int*)%esp = 0x403000;
                        %esp = %esp - 4;
                        __imp_puts();
                        local1 = 0;
                        %esp = local0;
                        local0 = *(int*)%esp;
                        %esp += 4;
                        %esp += 4;
                        return;
                    }

                    // address: 0x401750
                    void __imp__cexit() {
                        _cexit();
                        return;
                    }

                    // address: 0x401810
                    void __imp_ExitProcess() {
                        ExitProcess();
                        return;
                    }

                    // address: 0x401710
                    void proc14() {
                        int local0;                 // r25
                        int local1;                 // r24
                        int local2;                 // tmp1

                    }

                    // address: 0x4013b0
                    void proc15() {
                        int local0;                 // r29
                        int local1;                 // r27
                        int local2;                 // r24
                        int local3;                 // r25
                        int local5;                 // r26
                        int local6;                 // tmp1

                        %esp = %esp - 4;
                        *(int*)%esp = local0;
                        local0 = %esp;
                        %esp = %esp - 4;
                        *(int*)%esp = local1;
                        local6 = %esp;
                        %esp = %esp - 4;
                        local2 = *(int*)0x404020;
                        local6 = local2;
                        if (%flags) {
                            local2 = *(int*)0x401860;
                            local1 = 1;
                            global1[0] = local1;
                            local6 = local2 + 1;
                            if (%flags) {
                                local3 = *(int*)0x401864;
                                local2 = 0;
                                local6 = local3;
                                while (%flags) {
                                    local6 = local2;
                                    local2++;
                                    local5 = *(int*)(local2 * 4 + 0x401864);
                                    local6 = local5;
                                }
                            }
                            local6 = local2;
                            local1 = local2;
                            if (%flags) {
                                do {
                                    %esp = %esp - 4;
                                    (**(int*)(local1 * 4 + 0x401860))();
                                    local6 = local1;
                                    local1 = local1 - 1;
                                } while (%flags);
                            }
                            *(int*)%esp = 0x401310;
                            %esp = %esp - 4;
                            proc17();
                        }
                        local1 = *(int*)%esp;
                        %esp += 4;
                        local1 = *(int*)%esp;
                        %esp += 4;
                        local0 = *(int*)%esp;
                        %esp += 4;
                        %esp += 4;
                        return;
                    }

                    // address: 0x4017b0
                    void __imp_puts() {
                        puts();
                        return;
                    }

                    // address: 0x401260
                    void proc17() {
                        int local0;                 // r29
                        int local1;                 // r25

                    }

                    En gros la decompilation est possible ... comme l'IA (il reste meme du code asm ...)
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      18 mai 2006 à 19:07:12

                      Si le programme a déja été correctement compilé, avec pourquoi pas un peu d'optimisation, il doit pas en rester grand chose une fois décompilé :-°

                      Après, c'est impossible de l'empêcher complètement. La plupart des programmes propriétaires se sont déja faits crackés, tu crois que toi tu vas pouvoir empêcher ça ^^ ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        18 mai 2006 à 19:33:08

                        Citation : Louisclem

                        tu crois que toi tu vas pouvoir empêcher ça ^^ ?

                        OUI :D:lol::p MDR :D
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Décomilation impossible ?

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown