Announcement

Collapse
No announcement yet.

Programme gegen dekompilieren schützen?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Programme gegen dekompilieren schützen?

    ich interessiere mich dafür, wie man am besten seine net programme vor dem
    dekompilieren schützen kann. hab gehört es gibt ein paar tool, leider habe ich bisher kein kostenloses finden können...kann mir jemand einen tipp geben ?

  • #2
    Decompiler und Obfuscator

    vor dem dekompilieren schützen kann
    Das geht nicht. Egal was wo angepriesen wird.

    Es gibt Obfuskatoren die den Code verschleiern damit er schlechter lesbar ist - und meist auch nicht mehr funktioniert (v.a. wenn Metaprogrammierung verwendet wird). Ich hab keine guten Erfahrungen damit gemacht und lasses es deshalb bleiben.
    Siehe hierzu: Decompiler und Obfuscator.

    Grundsätzlich gilt: Wenn jemand an den Code möchte kommt er auch dazu - das gilt auch für jede Programmiersprache. Egal welche Sprache der Code wird spätesten bei der Ausführung in den Speicher geladen und kann per Speicherabbild ergattert werden. Ist nur eine Frage des Aufwands.

    Somit ist besser sich mit der Tatsache zufrieden zu geben dass es keinen Schutz gibt und stattdessen guten Code zu schreiben. Ohne Kommentare ist es doch meist schon schwierig zu erkennen was wo passiert.


    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Sicher ist der Code nur wenn er nicht auf dem Clientrechner zu liegen kommt. Dies kannst du z.B. erreichen wenn der wichtige Teil des Codes auf deinem Server (z.B. mit ASP.NET) liegt.

      Comment


      • #4
        Alternativ lassen sich wirklich kritische Sachen auch in eine C++ Dll legen. Hier steigt der Aufwand gewaltig an den Quellcode zu entschlüsseln.
        Natürlich ist das auch nicht 100% sicher, aber man muss schon viel Arbeit reinstecken und Know How haben um eine C++ Dll (sprich Assembler) zu lesen und wieder zu rekonstruieren.

        Comment


        • #5
          @fanderlf:

          C++ Dll (sprich Assembler)
          Das ist nicht korrekt.
          C++ ist eine Programmiersprache und der C++-Kompiler übersetzt in Maschinensprache.
          Assembler ist eine Programmiersprache und der ASM-Kompiler übersetzt in Maschinensprache.

          C++ hat mit Assembler per Definition nichts zu tun. Nur weil es möglich ist in VC++ den "Inline-Assembler" zu verwenden ist dies keine hinreichende Bedingung um C++ = Assembler zu folgern.

          Wie kann dann C++ mit dem Assembler zusammenarbeiten?
          Ganz einfach. Jeder Kompiler kompiliert seine Teile in das Kompilat (*.obj) und der Linker fügt diese dann korrekt zusammen.


          mfG Gü
          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

          Comment


          • #6
            Hm ich dachte immer, dass sich Assembler und Maschinensprache 1zu1 übersetzen lassen und dass Assembler einfach nur eine schönere Schreibweise für Maschinensprache ist. Soweit ich mich erinnern kann war das auf den kleineren µCs mit denen ich programmiert habe auch so

            Aber ich habe das auch nie tiefer verfolgt. Wenns nicht stimmt Asche über mein Haupt

            Comment


            • #7
              Assembler und Maschinensprache 1zu1 übersetzen lassen
              Übersetzen ist ja kein Problem - da sagt ja schon dass es zwei verschieden Sachen sind. Deutsch lässt sich auch nach Englisch übersetzen in ist trotzdem nicht das Gleiche.
              Da es bijektive Abbildungen sind ist die Übersetzung sogar umkehrbar. Dies wird bei Debuggern (und Dekompilern) ausgenutzt.

              Prozessoren (und auch µC - allgemein elektronische Schaltungen) verstehen nur bits. Somit können Befehle nur in Binärcode verarbeitet und einprogrammiert werden.
              Code:
              10110000 01100001
              Stellt einen gültigen Maschinenbefehl dar. Da dies aber wenig praxistauglich wurde eine Mnenomic entwickelt welche die Befehle abstahiert -> Assembler. Der obige Befehl bedeutet in Assebmler:
              Code:
              mov al, 61h
              ist also schon logischer. Dieser Befehl wird in die Maschinensprache übersetzt (kompiliert) um ausgeführt werden zu können.
              Da auch dies nicht ideal ist wurden Hochsprachen entwickelt deren Compiler entweder von der Syntax direkt in Maschinensprache übersetzten oder den Zwischenweg über Assembler (oder eine andere Zwischensprache) gehen.

              und dass Assembler einfach nur eine schönere Schreibweise für Maschinensprache ist.
              Da stimmt auch: Assembler <-> Maschinensprache <-> Hochsprache
              Es sind nur verschiedene Darstellung einer Menge (an Befehlen).

              Soweit ich mich erinnern kann war das auf den kleineren µCs mit denen ich programmiert habe auch so
              µC besitzen auch einen Compiler (oder Interpreter - je nach Chip).

              Aber ich habe das auch nie tiefer verfolgt. Wenns nicht stimmt Asche über mein Haupt
              Das ist ja auch nicht von all zu wichtiger Bedeutung - da ich nur merke dass viele eine nicht ganz korrekte (falsche) Vorstellung von Assembler haben wollte ich das mal klarstellen.


              mfG Gü
              "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

              Comment

              Working...
              X