Compilieren: Na klar! Decompilieren: (K)ein Problem ?!

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Bong-Jour
User
Beiträge: 54
Registriert: Donnerstag 24. Juli 2008, 13:14
Kontaktdaten:

Mittwoch 11. März 2009, 17:03

Geplänkel, dass du nicht lesen musst:

Ich habe mir mal Gedanken über die Verwendung meiner Quelltexte von Dritten gemacht (unerlaubt ^^) und dazu ein bischen hier im Forum recherchiert. Beim decompilieren von pycs waren sich alle einig, dass es kaum eine Hürde darstellt. Aber bei exe.Dateien scheint jeder eine Andere Meinung zu haben.

Es kam auch oft das Argument zum Tragen, dass es sich wirtschaftlich gar nicht lohnen würde. Dies spielt aber für mich eine untergeordnete Rolle. Mir geht es ums Prinzip und ich möchte Jemanden "die Arbeit" so unschön wie möglich gestalten ^^


Eigentliche Frage:

Wie ist es den nun mit .exe Dateien ? Kann man sie tatsächlich decompilieren ? Und wenn Programmiersprache nur dazu dient Maschienencode zu erstellen, könnte man dann nicht aus einem Maschienencode den Quelltext zu jeder beliebigen Sprache erstellen lassen.. ?
Das ist kein Hakenkreuz - Das ist das neue Python-Symbol!
DasIch
User
Beiträge: 2452
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Mittwoch 11. März 2009, 17:25

Ja.
Ja.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Mittwoch 11. März 2009, 18:17

Python ist die falsche Sprache, wenn da "exe"-Dateien erzeugt werden sollen, die möglichst schwer in Programmcode zurückverwandelt werden können sollen. Meines Wissens erzeugt nichts, was hier als py2exe und Co herumfliegt, Maschinencode, sondern packt nur einen Python-Interpreter zusammen mit dem Python-Bytecode in ein Programm, so das man nicht extra noch Python installieren muss.

Gäbe es einen Compiler, der Python-Programme in Maschinencode übersetzen kann, lässt sich aus solch generiertem Maschinencode in aller Regel auch wieder der Quelltext gewinnen, da ein einfacher Compiler bestimmte Muster erzeugt, die man erkennen und zurückverwandeln kann.

Eine bessere Chance hätte man mit stark optimierenden Compilern für ungewöhnliche Sprachen wie es sie z.B. für OCaml findet. Oder aber man verwürfelt noch mal den Assembler-Code, den ein Compiler wie der GCC erzeugt, wofür es meines Wissens auch spezielle Programme gibt. Das zerstört die Muster.

Weil diese Muster je nach Sprache unterschiedlich sind, kann man zwar theoretisch für jeden Maschinencode auch in jeder Sprache etwas äquivalentes finden, aber besser geht es, wenn man wieder die Originalsprache erzeugt.

Und es muss natürlich auch passende Sprachkonstrukture geben. Einen Sprung auszudrücken, ohne das man ein goto o.ä. in der Hochsprache hat, wird schwer.

Also: Ja, man kann exe-Dateien dekompilieren. Ja, theoretisch in jede Hochsprache, aber praktisch nicht.

Übrigens braucht man meinst nicht alles zurück zu übersetzen, sondern meist will man ja einen ganz bestimmten Test auf eine Lizenz o.ä. aushebeln. Dazu muss man bei weitem nicht alles verstehen. Ist der Test naiv implementiert, drehe ich einfach seine Bedingung und dann funktioniert mein Programm mit jeder ungültigen Lizenz - nur nicht mehr mit einer gültigen.

Und somit hast du dann auch den Weg gefunden, wie du jemandem Arbeit machen kannst: Lege Schicht um Schicht an Verwirrungen, Ablenkungen und Sackgassen über deinen Code und habe niemals nur eine einzige Stelle, wo etwas passiert. Sichere zudem alles mit cryptografisch sicheren Algorithmen ab, z.B. indem du an mehreren Stellen im Programm Prüfsummen über dein Programm sowohl auf der Platte als auch im Hauptspeicher berechnest, die du dann mit deinem privaten Schlüssel signiert hast.

Beachte, dass der Nutzer deines Programms es in einer VM (und damit aus deiner Sicht feindlichen Umgebung) laufen lassen könnte und somit sogar den Prozessor kontrollieren kann. Erkenne also die VM und verweigere kreativ den Dienst.

Der IMHO zur Zeit sicherste Weg, ein Programm zu schützen ist, in das abgeschottete und "sichere" Audio- und Video-Subsystem von Windows Vista und Windows 7 aufnehmen zu lassen. Wie das geht, weiß ich nicht, aber da Musik und Filme ein wertvolles Gut sind, wird hier dem Benutzer eigentlich jedes Mitspracherecht aberkannt, egal, ob das nun sein eigener Computer ist oder nicht.

Stefan
problembär

Mittwoch 11. März 2009, 21:14

Hallo,

erstmal:

http://de.wikipedia.org/wiki/Decompiler

Normalerweise ist "Obfuscation" ein ganz guter Schutz für Skriptcode. Für Perl gibt es z.B.

http://search.cpan.org/~smueller/PAR-Pa ... fuscate.pm

(Perls "PAR" ist sowas wie Pythons py2exe, dieses Modul schaltet automatisch (bei Perl) Obfuscation ein, sehr praktisch.)

Obfuscation klappt leider bei Python nicht :(, weil Python bekanntlich sehr strenge Vorgaben an die Syntax macht (, die unter anderem die gute Lesbarkeit des Codes sicherstellen).

Gruß
DasIch
User
Beiträge: 2452
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Mittwoch 11. März 2009, 21:45

Obfuscation klappt bei Python durchaus, allerdings ist dass bei weitem schwerer als bei Perl.
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 11. März 2009, 22:02

Ein paar Info's gibt es dazu im Wiki: [wiki]FAQ#IchWillAberUnbedingtEinenCompiler[/wiki]

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
problembär

Mittwoch 11. März 2009, 22:52

Vielleicht ganz interessant ist auch noch, daß wohl nach 8 Jahren Entwicklung nächste Woche "Parrot"

http://www.parrot.org/

fertig werden soll (1.0). Es ist eine VM, die in erster Linie für Perl6 geschrieben wurde, auf der aber auch Python-Code läuft. Es heißt in

http://docs.parrot.org/parrot/latest/ht ... w.pod.html
by resembling the underlying hardware to some extent, it's possible to compile down Parrot bytecode to efficient native machine language.
Könnte interessant werden ...

Gruß
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Donnerstag 12. März 2009, 10:24

Lass es bleiben, es nützt nichts. Sieh dir an was Skype gemacht hat um ihre Applikation zu "schützen" und trotzdem hat es nichts gebracht: http://www.secdev.org/conf/skype_BHEU06.handout.pdf .
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 12. März 2009, 10:52

Bong-Jour hat geschrieben:Wie ist es den nun mit .exe Dateien ? Kann man sie tatsächlich decompilieren ?
Ja, siehe diesen Thread wo Crackus ein "kompiliertes" Programm mit Salt online stellt und darauf hofft dass der Salt geheim bleibt. Trundle hat den Salt ausgelesen und sein Ergebnis selbst gehasht. Daraus ist dann exetractor entstanden. Somit ist die Sicherheit von kompilierten Skripten quasi noch geringer als die von Bytecode.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
snafu
User
Beiträge: 5466
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Donnerstag 12. März 2009, 11:00

Ich persönlich verstehe den Sinn ohnehin nicht. Man lernt durch Open Source (davon gehe ich doch mal ganz stark aus), aber gibt seine Kenntnisse sozusagen als "Dankeschön" nicht an andere weiter. Für mich hat das sowas von: "Hihi, ich kann was, was du nicht kannst und das verrat' ich nicht." Und wenn Leute Quellcode übernehmen, machen sie daraus etwas besseres, etwas schlechteres oder etwas ganz anderes. Wenn das Programm am Ende gut ist, nutze ich es, ansonsten eben nicht.

Gut, manch einer opfert sehr viel Zeit für sein Projekt und möchte diese auch (für mich berechtigterweise) bezahlt bekommen. Aber muss es deshalb Closed Source werden? Von den potenziellen Qualitätsverbesserungen, die durch Fehlerbehebung vieler (weil sie eben den Code kennen) herrührt, wissen wir alle. So kann ich mir beispielsweise ein qualitativ hochwertiges Produkt mit besonderen Serviceleistungen bezahlen lassen, die eben über ein Hobby hinausgehen (dies kann der Zahlende wohl erwarten).

Und an sich kann jeder, der den Programmablauf verstanden hat, ihn (in welcher Sprache auch immer) nachbauen. Da in den meisten Fällen wohl kein Patent angemeldet wird, sollte dies auch rechtlich kein Problem darstellen. Jemand, der das geschafft hat, kennt sein Programm und hat die Möglichkei,t es zum Wohle aller (das mag jetzt etwas hippiehaft klingen) zu verbessern. Wer sich hingegen auf den Lorbeeren fremden Codes ausruht (ohne diesen wirklich verstanden zu haben), wird vermutlich nichts sinnvoll besseres herzaubern und damit auch nicht in ernsthafter Konkurrenz zum Original treten können. So sehe ich das zumindest.
shcol (Repo | Doc | PyPi)
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

Donnerstag 12. März 2009, 12:16

Typische Linux mentalität mit alles soll/muss open source sein ;)

Komisch das genau die gleichen leute meinen bei jedem server jedwede identifikationsstrings abschalten zu müssen.

Obfuscaten kann durchaus die Sicherheit erhöhen je nach Fall.

Ob sich das lohnt muss jeder selber wissen, mir reicht ein py2exe völlig aus.
Benutzeravatar
snafu
User
Beiträge: 5466
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Donnerstag 12. März 2009, 12:32

Mad-Marty hat geschrieben:Komisch das genau die gleichen leute meinen bei jedem server jedwede identifikationsstrings abschalten zu müssen.
Ich sehe ehrlich gesagt keinen Zusammenhang zwischen meiner Privatsphäre beim Surfen im Internet und der Bekanntmachung von Quellcode.

Nichts soll oder muss. Das ist eher eine moralische und pragmatische Angelegenheit. Vertreiber von Open Source Software zwingen dich ja nicht genrell dazu, auch Open Source zu entwickeln. Die Vor- und Nachteile sollte da jeder für sich selbst abwägen, aber ich persönlich kann's halt nicht so recht nachvollziehen. Das soll aber nicht heißen, dass ich beleidigt bin, wenn jemand das anders sieht. ;)
shcol (Repo | Doc | PyPi)
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 12. März 2009, 12:53

Mad-Marty hat geschrieben:Typische Linux mentalität mit alles soll/muss open source sein ;)
Ist ja auch ok so.
Mad-Marty hat geschrieben:Komisch das genau die gleichen leute meinen bei jedem server jedwede identifikationsstrings abschalten zu müssen.
Jein. Postfix zum Beispiel zeigt die Version Standardmäßig nicht an, wohingegen Exim das durchaus macht. An dieser Stelle kann es aber durchaus nützlich sein, dass man die Version nicht anzeigt, weil so der Angreifer nicht sofort weiß ob die Version verwundbar ist oder nicht. Bei automatisierten Scans hofft man darauf dass der Server nicht in den Fokus des Angreifers fällt. Als Schutz gegen einen Angreifer der genau meinen Server angreifen will hilft es natürlich keineswegs.

Wohingegen obfuskierter Quelltext keinem praktischen Ziel dient, außer allen betroffenen das Leben schwer zu machen.
Mad-Marty hat geschrieben:Obfuscaten kann durchaus die Sicherheit erhöhen je nach Fall.
Ja? Bitte um Beispiele.

Eine obfuskierte SQL-Injection-Lücke ist nicht besser als eine offene SQL-Injection-Lücke. Die Lösung des Problemes ist nicht das Problem zu verstecken sondern die Lücke zu entfernen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
snafu
User
Beiträge: 5466
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Donnerstag 12. März 2009, 13:20

Gut, der wichtige Aspekt der Sicherheit durch Anonymität kommt natürlich auch noch hinzu. Den hatte ich gerade unterschlagen. Jedenfalls ist Open Source IMHO nicht unsicherer, nur weil es offen dargelegt wird. (Ich glaube, ich verstehe jetzt doch, worauf Mad-Marty hinaus wollte) Sowas hält ja wahrscheinlich gerade dazu an, seine Software so sicher wie möglich zu entwickeln. Das läuft jetzt aber wohl auf eine Grundsatzdiskussion hinaus...
shcol (Repo | Doc | PyPi)
Bong-Jour
User
Beiträge: 54
Registriert: Donnerstag 24. Juli 2008, 13:14
Kontaktdaten:

Donnerstag 12. März 2009, 13:35

@snafu: Ich finde es naiv anderen den Code offenzulegen.. Ich denke da an Viren, die in der Software platziert werden oder auch Wege um mit dem Client in den Server einzubrechen.

@veers: Mein technisches Verständnis reicht nicht aus für das Verstehen dieses Dokumentes ^^ Aber welchen Sinn sollte es haben den Skype-Client zu decompilieren ?

@sma: Wie erkenne ich denn, ob der User mein Programm in einem emulierten Betriebssystem "traktiert" .. ? Und wie ist das mit den mehreren Stellen an denen etwas passiert gemeint ? Soll ich hier sinnlose Threads paralell laufen lassen.. ?


Was macht Microsoft eigentlich zum Schutz des Internet Explorers.. ? Es gibt doch seit Jahren den Rechtsstreit, dass Microsoft die Queltexte offenlegen soll. Anscheinend hat man hier deutliche Probleme mit der Dekompilation.

( Und wofür steht eigentlich die Abkürzung IMHO, die sma in jedem Post verwendet.. ? Bislang habe ich einfach die kopfinterne Funktion string.replace(Post["sma"], "IHMO", "") verwendet, damit ich weiterlesen konnte :D )
Das ist kein Hakenkreuz - Das ist das neue Python-Symbol!
Antworten