2013-01-21 26 views
19
not exp log srand xor s qq qx xor 
s x x length uc ord and print chr 
ord for qw q join use sub tied qx 
xor eval xor print qq q q xor int 
eval lc q m cos and print chr ord 
for qw y abs ne open tied hex exp 
ref y m xor scalar srand print qq 
q q xor int eval lc qq y sqrt cos 
and print chr ord for qw x printf 
each return local x y or print qq 
s s and eval q s undef or oct xor 
time xor ref print chr int ord lc 
foreach qw y hex alarm chdir kill 
exec return y s gt sin sort split 

Tak jak każdy inny JAPH, wypisuje on "kolejny haker perlowy". Chciałbym jednak na wpół szczegółowej analizy tego, do czego służy ta konkretna JAPH do pracy - nie jestem dobry w Perlu, ale niektóre JAPH, które mogę przeczytać ... to, nie ma mowy.Jak działa ta słynna JAPH?

+11

Zawsze zaczynaj z: http://perldoc.perl.org/B/Deparse.html – toolic

+6

http://www.perlmonks.org/?node_id = 290623 – toolic

+1

@toolic Ah, shoulda sprawdził Dojo - mnisi perla rozwiązali go ponownie – PinkElephantsOnParade

Odpowiedz

15

To naprawdę nie jest takie trudne, gdy zrozumiesz podstawy. Oto kilka wskazówek na początek:

not exp log srand 
     # srand = 1, exp o log = id, not 1 = 0 

     # $_ = undef 
xor s// /x      
     # $_ = ' ' 
xor s//length uc ord and print chr ord for qw q join use sub tied q/ 
     # $_ = ' length uc ord and print chr ord for qw q join use sub tied q' 

xor eval 

Zauważ, że chr ord z ciągiem zwraca pierwszy znak i join use sub tied w końcu ma pierwsze znaki j, u, s, t. :)

Tak dla zabawy, pisałem o przedłużenie tego słynnego japhs lat temu

not srand xor s qq qx xor s x x length uc 
ord and print uc chr ord for qw q join qx 
xor eval xor lc eval qq x abs cos ord and 
print chr ord for qw q use substr tied qx 
xor print qq q q xor int eval lc qq m cos 
and print chr ord for qw y abs ne or tied 
hex exp ref y m xor scalar srand print qq 
q q xor sin abs eval q x log srand ord or 
printf uc chr ord foreach qw q package qx 
xor sqrt eval lc qq y sqrt cos and printf 
chr ord for qw x each return local x y or 
print qq s s and uc exp eval q s undef or 
oct xor time xor ref print chr int ord lc 
for qw y hex alarm chdir kill exec return 
y s xor log exp eval q x print chr length 
join qw y length for map substr chr shift 
y x or sqrt abs ord lc and eval print q q 
q and s q q lcfirst chr eval log shift qx 

drukowania prawdziwą ciąg "Just another Perl hacker,\n".

A to mniejsza wersja zawierająca German Christmas pozdrowienia:

not exp log srand xor s qq qx xor 
s x x length uc ord and print chr 
ord for qw q find redo ord helpme 
eval scalar qx xor eval xor print 
q q q xor int eval lc q m cos and 
print chr ord for qw y flock each 
s tell y m gt sin ref study split 
+0

Ahhh - podpowiedź to ujawniła. Teraz rozumiem, heh. – PinkElephantsOnParade

11

Pierwsze pojawienie się tej JAPH wydaje się być na http://www.perlmonks.org/?node_id=290607

Jak PerlMonks wątku stany, teraz nie jest automatycznym narzędziem który ma ten rodzaj zaciemniania: http://namazu.org/~takesako/ppencode/

można odczytać to source code, ale w odwrotnej inżynierii jest tak dużo zabawniejszy :)

Na przykład, oto kod, aby wydrukować spacje:

[email protected]:~$ perl -e 'length q chmod lc and print chr ord q q eq' 
[email protected]:~$ 

Jest to jedyny sposób drukowania znaku „”? Właściwie nie, orzeźwiający produkuje:

[email protected]:~$ perl -e 'oct oct hex ord q else and print chr ord q q q' 
[email protected]:~$ 

Cool, oba warianty koniec na tym samym and print chr ord q q .... Więc wszystko, co poprzednio, musi oceniać na prawdziwą wartość i jest tylko po to, żeby oczyścić z pyłu.

Następnie print chr ord można uprościć po prostu print w tym kontekście jako chr(ord($str)) odbiera tylko pierwszy znak od $str. Więc to sprowadza się do:

[email protected]:~$ perl -e 'print q q eq' 
[email protected]:~$ 

q q eq jest niezwykłym przedstawieniem q środki, to jest łatwiej rozpoznawane jako q (e). Ta sama logika działa dla oryginalnej, jeszcze bardziej zaciemnionej JAPH: print chr ord for qw y ... y wybierze wszystko między znakami y i zostanie oddzielone białymi znakami jako tablica.


Istnieje pokrewny temat, który dotyczy kodu Perla w kształcie sztuki ASCII. Istnieje również moduł CPAN: Acme::EyeDrops

Powiązane problemy