Welche Sprachen sind auslesbar?

  • VB.NET

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von thefiloe.

    Welche Sprachen sind auslesbar?

    Moin!
    Ich möchte gerne wissen welche Sprachen man alles auslesen kann.
    Also den Quellcode einer EXE Datei auszulesen!
    In .NET geht dies ja, sehr schnell.
    Wie siehts mit VB6 aus?
    Oder C++, usw..
    ?(
    BIG THX
    Visual Basic.NET 8o
    MS-SQL
    8o
    Eig. die meisten Sprachen die eine Art Zwischensprache verwenden. .NET verwendet hier z.B. ILAsm. Gleiches gilt bei z.B. Java, wobei das nicht zu einer exe compiliert.
    Reines C++ tut dies nicht und ist somit nicht decompilierbar. Was jedoch wiederum andere Nachteile mit sich bringt.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    man kann alles dekompilieren, c++ zb mit ida.
    der mensch hat den computer entworfen, also wird ein mensch auch alles nachvollziehen können was auf einem computer passiert. es stellt sich eher die frage nach dem aufwand.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „tolio“ ()

    Nein kannst du nicht. Du kannst immer nachvollziehen was auf einem Rechner passiert. Und ja, du kannst auch nachvollziehen was ein in C++ geschriebenes Programm macht. Aber du kannst nicht den kompletten Code wiederherstellen. Das geht schlicht weg nicht.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Man kann die Sprachen doch bei sowas in 3 Gruppen einteilen:
    1.: Sprachen, bei denen der Quelltext direkt abgespeichert wird (Scriptsprachen wie Python, Batch, JavaScript, PHP, ...). Hier ist der Quellcode sowieso ohne weiteres auslesbar.
    2.: Sprachen, welche in eine Zwischensprache kompiliert werden (alle auf .NET basierenden Sprachen wie VB.NET, C# etc. oder auch Java). Hier lässt sich mittels eines Decompilers der Ursprungscode zu großen Teilen rekonstruieren.
    3.: Sprachen, welche direkt zu Maschinencode kompiliert werden (C++, C, ...). Hier lässt sich der Ursprungscode kaum rekonstruieren, allerdings ist es auch hier möglich, die Funktionsweise des Programmes gut nachzuvollziehen, wenn man nur genug Zeit investieren will.

    Grüße
    Stefan
    @tolio
    Klar, jedoch sind die Ergebnisse bei den Sprachen, welche unter Punkt 2 fallen sehr präzise und Membernamen bleiben größtenteils vorhanden. Bei Sprachen, welche unter Punkt 3 fallen gehen diese Informationen jedoch verloren.
    Hi

    thefiloe schrieb:

    Aber du kannst nicht den kompletten Code wiederherstellen. Das geht schlicht weg nicht.


    Das wage ich zu bezweifeln. Den Code 1-zu-1 wiederbekommen sicherlich nicht, aber nur weil es bisher kein Programm gibt, das die Aufgabe übernimmt, heißt es nicht, dass es nicht prinzipiell möglich wäre.

    Viele Grüße
    ~blaze~
    In C++ ist es 100% unmöglich den ursprünglichen Code zu erhalten. So ca 80% des Codes wird vom Compiler komplett auseinander gezogen und von ihm neu generiert. Templates werden aufgelöst, anschließend wird alles noch optimiert und dann ist vom Original nicht mehr viel übrig.
    @Gonger96 blaze hat das schon ganz richtig erkannt. Nur weil es noch nicht geht heißt es nicht, dass es überhaupt nicht geht. Man wird irgendwann bestimmt anhand von irgendwelchen Strukturerkennungen sehen ob es sich dabei um ein Template handeln könnte oder nicht und dann entsprechend rück übersetzen. Optimierungen rückübersetzen gehen inzwischen sogar durch das Wissen des Compilers ziemlich gut, da diese optimierungen bekannt sind und auch entsprechend erkannt werden können.

    Edit: Und am Ende machts sowieso kein unterschied, da man alles nur verstehen muss
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „jvbsl“ ()

    Ist doch garkein Blödsinn? Tatsache ist, dass sehr viel in der fertigen PE einfach nicht mehr da ist und deswegen kann mans auch nicht zurück zum Orginal versetzen. In äquivalenten Code aber mit Sicherheit, dass geht ja heutzutage schon. Manchmal sogar ein teils lesbarer C-Code.
    das mag sein, dass die sachen die zur CompileTime aufgelöst werden vorerst nur sinnvoll zurück zu einem konstanten Ausdruck übersetzt werden können, aber damit ändert sich in keinsterweise auch nur ein Teil des Codes. Ist ja nicht so, dass Optimierungen ganze Klassen entfernen. Das Rückübersetzen zu einer verwendbaren OOP Struktur dürfte durchaus im Bereich des möglichen liegen.
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Ich will auch etwas dazu sagen: Da der Computer die Anweisungen verstehen muss, kann man auch herausfinden, was und wie eine Anwendung macht. Der Aufwand ist halt jeweils unterschiedlich.
    Schau dir mal Anubis an: Dort lädst du eine Datei hoch, die gestartet wird, während sehr ausführlich protokolliert wird, was geschieht. Dort wird nicht mal in den Quelltext geschaut und trotzdem weiß ich, was wie geschieht.

    Jetzt eine Frage: Warum möchtest du deinen Quelltext verstecken? Wahrscheinlich hast du Angst, dass dir jemand dein geistiges Eigentum stiehlt. So ging es mir am Anfang auch. Und dann hat mich jemand aufgeklärt; so wie hier. Und es fiel folgende Frage:
    Was hast du, dass du vor uns verbergen möchtest?

    Ich musste erst einmal stutzen, denn mir fiel keine Antwort ein. Irgendjemand anderes schrieb dann:
    Solange du kein Projekt wie Windows veröffentlichst, dass Patente enthält, mit denen du Geld verdienst, hast du nichts vor uns zu verbergen.

    Ich musste recht geben und tue dies immer noch!

    Ich hoffe ich konnte dich, @Cheffboss, zum Nachdenken anregen und an die Beiden, die ich hier zitiert habe: Entschuldigung, dass ich nicht mehr weiß, wer diese Zeilen schrieb und wie der genaue Wortlaut war, aber ein Danke an euch Beiden!

    Grüße
    Alle Angaben sind ohne Gewähr, jedoch mit Pistole. Glücksspiel, Drogen und leckeres Essen können süchtig machen.

    43232069737420636f6f6c21
    Wenn die Frage darauf hinausläuft, ob du bei C++ Passwörter im Quelltext hinterlegen kannst. Nein.

    Grundsätzlich kann man Resourcen überall auslesen und bei kompilierten Sprachen auf jeden Fall den Assembler Code. Dieser kann nicht nur gelesen sondern auch verändert werden.
    Daher ist zB auch jeder Kopierschutz der nicht online abfragt oder jede Schlüssel/Lizenz/Passwort/whateverabfrage die nicht online stattfindet (sondern im Code) nicht sicher!
    Das ist meine Signatur und sie wird wunderbar sein!
    @Gonger96 aber der Code der von Templates erzeugt wird wird für die unterschiedlichen Datentypen immer ähnlich aufgebaut sein, das mag jeder Compiler etwas anders machen, aber jeder für sich geht immer nach dem gleichen Schema vor, deshalb dürfte es möglich sein solch eine Struktur zu erkennen. Ich sage nicht, dass es mit einem geringen Aufwand möglich ist, oder gar überhaupt mit heutiger Hardware. Aber es dürfte aufjedenfall möglich sein solche Dinge rückzuübersetzen.
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---