JAPH

JAPH

Just another Perl hacker (abgekürzt JAPH) steht für ein in der Programmiersprache Perl geschriebenes kurzes Computerprogramm, das lediglich den Text „Just another Perl hacker“ ausgibt, seine Funktionsweise im Quelltext dabei aber möglichst wirkungsvoll verschleiert. Ein solches Programm dient experimentellen Zwecken sowie der Unterhaltung der Programmierer und hat darüber hinaus keinerlei praktischen Nutzen, obgleich die Analyse der Funktionsweise eines JAPHs für Perl-Programmierer außerordentlich lehrreich sein kann.

Inhaltsverzeichnis

Methodik der Verschleierung

Zum Zweck der Verschleierung (engl. Obfuscation) wird der Programmcode zumeist – unter Ausnutzung auch der abwegigsten syntaktischen Möglichkeiten der Programmiersprache Perl – derart kryptisch formuliert, dass man ihm seine Funktion (die Ausgabe von „Just another Perl hacker“) selbst auf den zweiten Blick kaum ansieht. Nicht selten wird dem Quelltext darüber hinaus durch kreatives Layout ein originelles und für Programmcode völlig untypisches Erscheinungsbild verliehen. Beides dient der Verschleierung der eigentlichen Funktion und/oder der Funktionsweise des Programms, oder gar der Tatsache, dass es sich bei dem vorliegenden Text überhaupt um ein Computerprogramm handelt.

Historie

Die „Programmierdisziplin“ JAPH wurde vermutlich Anfang der 1990er Jahre durch Randal L. Schwartz begründet, der bei Postings in die Newsgroup „comp.lang.perl“ (Vorgänger der heutigen Newsgroup „comp.lang.perl.misc“) immer ein JAPH in seine Signature integrierte. (Signatures können auch andere kurze Programme enthalten, wie diese Sammlung zeigt.) Auch heute noch werden JAPHs entweder im Rahmen von Programmierwettbewerben (z.B. dem Obfuscated Perl Contest) entwickelt, oder just for fun – als kreative Fingerübung der Perl-Programmierer.

Beispiele

Ein Perl-Programm für die Ausgabe von „Just another Perl hacker“ sähe normalerweise so aus:

print "Just another Perl hacker";

Verschleierung (Obfuscation) kann beispielsweise erreicht werden durch Einbinden dieser – an sich verständlichen – Anweisung in sehr undurchsichtigen aber an sich funktionslosen Code:

$_='987;s/^(d+)/$1-1/e;$1?eval:print"Just another Perl hacker"';eval;

Ein JAPH kann auch wie purer Datenmüll aussehen, obwohl dieser tatsächlich sowohl die auszugebenen Zeichen als auch den Code für deren Ausgabe enthält. In diesem Fall wurde der auszugebende Code durcheinandergewürfelt und der Perl-Einzeiler sortiert den Text zur Ausgabe wieder zurück:

$_="krJhruaesrltre c a cnp,ohet";$_.=$1,print$2while s/(..)(.)//;

Manche JAPHs sind weniger schwer verständlich, scheinen aber einem gänzlich anderen Zweck zu dienen als der Ausgabe von „Just another Perl hacker“. Beim folgenden Beispiel von Randal L. Schwartz wurde der auszugebende Text mit einem festen Textstring umcodiert. Der Einzeiler macht lediglich die Umcodierung rückgängig:

$_ = "wftedskaebjgdpjgidbsmnjgc";
tr/a-z/oh, turtleneck Phrase Jar!/; print;

Das folgende JAPH-Programm von Eric Roode besteht ausschließlich aus Sonderzeichen; alphanumerische Zeichen und Leerraum fehlen gänzlich. (Hinweis: dieses JAPH ist nur unter Unix lauffähig.)

`$=`;$_=\%!;($_)=/(.)/;$==++$|;($.,$/,$,,$\,$",$;,$^,$#,$~,$*,$:,@%)=(
$!=~/(.)(.).(.)(.)(.)(.)..(.)(.)(.)..(.)......(.)/,$"),$=++;$.++;$.++;
$_++;$_++;($_,$\,$,)=($~.$"."$;$/$%[$?]$_$\$,$:$%[$?]",$"&$~,$#,);$,++
;$,++;$^|=$";`$_$\$,$/$:$;$~$*$%[$?]$.$~$*${#}$%[$?]$;$\$"$^$~$*.>&$=`

Nachstehendes Programm von Mark Jason Dominus gewann den 2. Preis im fünften Obfuscated Perl Contest, es erzeugt in abenteuerlich komplizierter Weise die Ausgabe „Just another Perl / Unix hacker“. (Eine ausführliche Erklärung der Funktionsweise ist verfügbar, siehe Weblinks.)

@P=split//,".URRUU\c8R";@d=split//,"\nrekcah xinU / lreP rehtona tsuJ";sub p{
@p{"r$p","u$p"}=(P,P);pipe"r$p","u$p";++$p;($q*=2)+=$f=!fork;map{$P=$P[$f^ord
($p{$_})&6];$p{$_}=/ ^$P/ix?$P:close$_}keys%p}p;p;p;p;p;map{$p{$_}=~/^[P.]/&&
close$_}%p;wait until$?;map{/^r/&&<$_>}%p;$_=$d[$q];sleep rand(2)if/\S/;print

Das folgende Programm ist ein „bilingualer“ JAPH: der Code kann sowohl vom Perl-Interpreter, als auch vom Interpreter der esoterischen Programmiersprache Brainfuck ausgeführt werden. Die Ausgabe ist in beiden Fällen „Just another Perl Hacker“. Zur Funktionsweise: der große Block mit den Plus- und Minuszeichen ist im Wesentlichen der Brainfuck-Code (mit reduziertem Instruktionssatz), die erste Zeile ist Perl-Code und implementiert einen Brainfuck-Interpreter für eben diesen reduzierten Satz an Instruktionen. (Für eine etwas ausführlichere Erläuterung siehe Weblinks.)

/[+-]/&&eval"\$/$_$_"||/\x2e/&&print chr$/for qw!
=================================================
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + .
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + . - - . + . -
- - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - . + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + .
+ + + + + + + + + + + + + . + . + + + + + . - - -
- - - - - - - - - . - - - . + + + + + + + + + + +
+ + . - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - . + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + . + + + + + + + + + + + + + + +
+ + + + + + . + + + + + + + + + + + + + . - - - -
- - . - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
- - - - . + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + . + + + +
+ + + + + + + + + + + + + + + + + + + + + . + + .
+ + + + + + + + . - - - - - - . + + + + + + + + +
+ + + + . - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - + + + + + + + + - - - - - - - -
=================================================
A bilingual JAPH. Valid code in Perl & brainf***!

Siehe auch

Weblinks


Wikimedia Foundation.

Игры ⚽ Поможем решить контрольную работу

Schlagen Sie auch in anderen Wörterbüchern nach:

  • JAPH — (англ. Just Another Perl Hacker)  короткая программа на Perl, выводящая строчку «Just Another Perl Hacker,» («Ещё один хакер перла,») (запятая в конце не обязательна). Короткие JAPH программы используются обычно в качестве подписей.… …   Википедия

  • JAPH — est le sigle Just Another Perl Hacker. C est un court script Perl qui affiche la chaîne Just Another Perl Hacker . C était originellement un exercice de virtuosité utilisé comme signature de courriel par certains hackers Perl. Il peut être un… …   Wikipédia en Français

  • JAPH — noun A program written in Perl that outputs the text Just another Perl hacker,<!usually with that comma usually programmed in an obfuscated manner so that the output is not obvious until it is run …   Wiktionary

  • JAPH — ● ►en sg. m. ►METIER►PERL Just Another Perl Hacker. Juste un autre hacker de Perl. Expression, utilisée à l origine par Randal L. Schwartz pour désigner un bidouilleur talentueux en Perl, et s étant rapidement popularisée. On rencontre aussi la… …   Dictionnaire d'informatique francophone

  • JAPH — abbr. Just Another PERL Hacker (PERL) …   United dictionary of abbreviations and acronyms

  • Just another Perl hacker — Just another Perl hacker, or JAPH, typically refers to a Perl program which prints Just another Perl hacker, (the comma is canonical but is occasionally omitted). Short JAPH programs are often used as signatures in online forums, or as T shirt… …   Wikipedia

  • Just another Perl hacker — (abgekürzt JAPH) steht für ein in der Programmiersprache Perl geschriebenes kurzes Computerprogramm, das lediglich den Text „Just another Perl hacker“ ausgibt, seine Funktionsweise im Quelltext dabei aber möglichst wirkungsvoll verschleiert. Ein… …   Deutsch Wikipedia

  • Perl6 — Perl 6 Apparu en Spécification : 2001 2009, mise en œuvre partielle par NQP Auteur Larry Wall …   Wikipédia en Français

  • Perl 6 — Apparu en Spécification : 2001 2011, mise en œuvre partielle par Rakudo Star Auteur …   Wikipédia en Français

  • Perl — This article is about the programming language. For other uses, see Perl (disambiguation). Perl Paradig …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”