exe datei dekompilieren



  • Hi zusammen,
    wollte euch fragen ob es möglich ist die exe-Datei von meinem Programm zu dekompilieren.

    Habe bereits in mehreren Foren gelesen dass es zwar möglich ist aber nichts bringt, bzw. der Code nicht wirklich lesbar wird.

    Ich frage deshalb, da ich wissen wollte ob ich meine exe datei nochmals speziell sichern muss oder nicht.



  • Und was erwartest du jetzt hier gesagt zu bekommen?



  • naja, mir gehts darum:

    In java gibt es ein tool mit dem man ein entpacktes Jar-File dekompilieren kann.
    Danach hast du den kompletten Code der einfach zu lesen ist.

    Nun wollte ich wissen ob so etwas in C++ auch sehr einfach möglich ist? Oder ob der aufwand so froß ist, dass ein normaler Anwender sich nicht die Mühe macht.


  • Mod

    Das was du erhältst ist, je nach Menge der Debuginformationen, zwischen vollkommen unlesbarem Semiassembler und dem vollständigen Quelltext. Und du kannst dich nicht wirksam gegen Decompilieren schützen, von daher ist alle Überlegung dazu sowieso hinfällig.

    edit: Hier mal ein paar Beispiele eines nichtkommerziellen Decompilers (es gibt bessere):
    http://boomerang.sourceforge.net/cando.php?hidemenu
    Beachte vor allem die späteren Beispiele, wo der Compiler Optimierungen durchgeführt hat, die dann schon in Richtung kryptisch gehen. Und das hier sind einfache Programme mit wenigen Zeilen. Da dies ein freies Programm ist, kannst du ja mal dein eigenes Programm damit decompilieren und gucken, was du von dem Ergebnis hältst.



  • Ist ziemlich unterschiedlich.

    C Code ist normalerweise deutlich schöner zu kompilieren.
    Häufiges Nutzen von System-/Bibliotheksfunktionen erleichtert das Lesen auch enorm.

    IDA Pro mit HexRays ist der wohl effizienteste Decompiler für x86 Assembler und erzeugt bei komplexeren Code auch nur Code wie zb:

    char __cdecl sub_401170(const char *Str)
    {
      char v1; // bl@3
      char *EndPtr; // [sp+0h] [bp-4h]@1
    
      EndPtr = 0;
      *errno() = 0;
      strtoul(Str, &EndPtr, 0);
      v1 = !*EndPtr && *errno() != 34;
      _EDX = (char *)(Str - 16);
      _EAX = -1;
      __asm { lock xadd [edx], eax }
      if ( _ZF )
      {
        if ( Str != (const char *)20 )
          (**((void (__stdcall ***)(_DWORD))Str - 5))(1);
      }
      return v1;
    }
    

    (Das ist eine zufällige Funktion aus Lord of the rings online)
    Allerdings sind die späteren Versionen von HexRays deutlich leistungsfähiger, ich nutzt ver 1.1 weil es die einzige öffentlich gecrackte ist und ich absolut kein Geld für die Originallizenz habe 😕 )

    Man beachte vor allem die Verwirrung durch inlining.



  • Hui, schon Freitag...

    Lösung:
    Open Source programmieren, dann brauchst Du Dir auch keine Gedanken machen, dass Dein Programm decompiliert wird, weil der Source-Code eh offen liegt.
    Danke für den Fisch.
    rya.



  • Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ (auch C++0x) in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Wovor hast du Angst? Könnte jemand schlechten Code lesen? 🙄


Anmelden zum Antworten