[nr-pm] Obfuscated?

Thomas Bayen t.bayen at bayen.de
Mon Nov 19 06:51:00 CST 2001


"Schmidt, Maik, VP-TD, ST" wrote:
> 
> Yo!
> 
> >Die, die es schreiben, tun es, weil sie es können.
> Leider kenne ich genug Software, die "obfuscated" ist, obwohl der/die
> AutorIn es gar nicht gewollt hat. Außerdem ist es meiner Meinung nach kein
> Problem, ein kleines Regelwerk und einen entsprechenden Generator
> (vielleicht sogar in Perl?) zu entwickeln, der aus einem "normalen"
> Quelltext obfuscated (Perl|Java|C++|...)-code generiert. Mit "Können" hat
> das auch nicht viel zu tun und insbesondere dürften die Regeln zur
> Verschleierung in allen Sprachen annähernd gleich sein. Perl vereinfacht die
> Sache einfach aufgrund der diagonalen Struktur (TMTOWTDI).

Wenn Du Dich mal in ein paar obfuscated Perl Programme eingelesen hast,
wirst Du schnell merken, daß ein grosser Unterschied zwischen "zufällig
unleserlich geschrieben" und "absichtlich obfuscated" besteht. Die von
Dir angesprochenen Generatoren gibt es im ACME-Bereich übrigens auch.
Allerdings wirst Du damit niemals die Individualität, die Fertigkeit und
den künstlerischen Ausdruck eines handgemachten Programms erreichen. Das
ist wie ein Ölgemälde von mir mit einem von Rembrandt und mit einem
Photo zu vergleichen.

Außerdem bezog ich mich auf die Tatsache, daß "...because you can" schon
immer der wichtigste Grund für Unixer gewesen ist, etwas zu tun. :-)


> >Die, die es lesen und verstehen, tun es, weil es der einzige Weg ist,
> >sich zu beweisen, daß man wirklich Perl kann.
> Solche Dinge zu verstehen ist meiner Meinung nach kein Beweis dafür, dass
> man die Sprache Perl verstanden hat (maximal ist es ein Beweis für ein
> Syntax- nicht aber ein Semantikverständnis). Es beweist lediglich, dass man
> in der Lage ist, den wirren Gedankengängen eines anderen zu folgen.

Da mag was dran sein. Trotzdem habe ich Quoting-Regeln, Interpolation,
RegEx-Modifikatoren etc. oft erst dann wahrgenommen und verstanden, wenn
ich sie in einer besonders aussergewöhnlichen Anwendung gesehen habe.
Wenn ich etwas sehe, daß ich nicht sofort verstehe, lese ich solange die
perldoc, bis ich weiss, was da läuft. Ich behaupte, daß ich deshalb
heute ein intensives Verständnis der Syntax habe, das mir auch beim
Debugging "normaler" Programmtexte hilft.

Was das Semantikverständnis angeht: Sowas kann man natürlich in kurzen
Programmen oft nicht wirklich mitbekommen. Andererseits ist die Semantik
oft nicht wirklich von der Programmiersprache abhängig. Wenn Du also
z.B. ein guter Java-Programmierer bist, ist die Beherrschung der
Perl-Syntax schon eine wichtige Aufgabe. (Wenn Du ein schlechter
Java-Programmierer bist, kann Dir eh keiner helfen... ;-)


> >Die, die es lesen und nicht verstehen, tun es vielleicht, weil Sie dabei
> >glauben, einen Hauch der Unendlichkeit zu spüren, die Gott (und Larry
> >Wall) erschaffen hat.
> Hmmm ... klingt irgendwie ziemlich verschroben, oder? Ich finde es ziemlich
> gefährlich, sich dermaßen mit etwas so vergänglichem wie einer
> Programmiersprache zu identifizieren. Ich verdiene meinen Lebensunterhalt
> mit der kommerziellen Entwicklung von Software. Dabei folge ich schon immer
> Larry Wall's Motto "Use whatever you think of first". Wenn ich meine, dass
> Perl für ein bestimmtes Problem das Mittel der Wahl ist, so setze ich es
> ein. Genauso leidenschaftslos setze ich aber auch C++, Java, Python und Ruby
> ein.

Das sollte auch verschroben klingen. ;-) Trotzdem weiss ich noch, das es
ein tolles Gefühl war, als ich das erste mal die "Schwartzian
Transformation" verstanden hatte und ich begriff, warum das so und nicht
anders die beste Lösung ist. Das war, als ob man sich durch ein Dickicht
kämpft und auf einmal auf einer Lichtung alles klar wird. Ist es falsch,
das mit der "Eleganz der Schöpfung" zu erklären?

Mir macht dieses Gefühl Spass! Da ist nichts gefährliches dran! Kinder
haben das, wenn sie Ihren ersten Schuh zubinden, als obfuscated
programmer hatte ich das schon, als auf dem 64er die "Einzeiler" in Mode
kamen und Einstein hatte das, als er die Relativitätstheorie durchblickt
hatte. Jeder holt sich seinen Teil der Schöpfung...

 
> Um das ganze mal zusammenzufassen
> Ich beobachte die Mailinglist passiv seit wenigen Wochen und habe immer noch
> kein klares Bild von der ganzen Sache. Insgesamt empfinde ich es aber in
> diesem Kontext als wenig dienlich, die klassischen Vorbehalte gegen Perl als
> "write only"-Sprache zu verstärken. Ich schätze Perl aufgrund seiner
> Ausdrucksstärke und seiner starken Bibliotheken und versuche es auch gerade
> zumindest als Sprache zur Realisierung von Applikationsprototypen bei einem
> weiteren meiner Arbeitgeber einzuführen. Da bekommt man von Gegnern der
> Sprachen häufig zu hören, dass Perl von seiner Struktur her fast gar nichts
> anderes zuläßt als obfuscated code. Persönlich finde ich dies ziemlich
> traurig. Insbesondere, weil ich schon einige größere OO-Projekte (mit weit
> über 100 Klassen) realisiert habe, die eindeutig das Gegenteil beweisen.

Um das mal klar zu stellen: Auch ich arbeite sonst gerne streng OO und
habe da auch zumindest ein größeres Perl-Projekt gemacht. Auch bin ich
ein starker Verfechter von lesbarem Code. Insbesondere da sehe ich auch
eine Stärke von Perls TMTOWTDI, weil man ein Programm so schreiben kann,
wie man selber denkt und damit die Dokumentation des Lösungsweges oft
schon im Sourcecode steht.

Nichtsdestotrotz kann es zur allgemeinen Erheiterung und Belustigung des
Volkes und als Denksportaufgabe durchaus nützlich und schön sein, sich
mit obfuscated Code auseinanderzusetzen. Das kann in jeder
Programmiersprache sein, macht IMHO in Perl aber besonders viel Spaß. 

Ich sehe nicht, daß man damit Vorbehalte verstärkt. Ich habe schon sehr
viele Read-Only-Programme gesehen und die meisten davon waren nicht in
Perl! Nenne mir ein einziges Sprachkonstrukt, was dazu führt, daß in
Perl nicht-obfuscated code verhindert wird!?! Die meisten Leute, die
sowas erzählen, haben doch höchstens mal ein paar CGI-Module
herumgeschubst.


> Versöhnliche Grüße,
> 
>   <maik/>


Versöhnte Grüße,

Thomas Bayen (jetzt wieder mit obfuscated Signatur...)

perl -pe'$_=join"",map{unpack b6,chr(-33+ord)}split//,q;5J2+:V.WGI%6;
.q.<5&JO3657KIK5J6*ZO3X-WGYO-<C%J+2V6SKJ+6L.;s*.{78}*$&\n*g;y;01; #;'
___________________________
Abmelden:
Mail an majordomo at hfb.pm.org mit dem Text:
unsubscribe niederrhein-pm