2013-01-21 16 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 

किसी भी अन्य जैप की तरह, यह प्रिंट करता है "बस एक और पेर्ल हैकर"। लेकिन मैं इस विशेष जेएपीएच के काम का लाभ उठा रहे व्यवहार के बारे में एक अर्ध-विस्तृत विच्छेदन करना चाहता हूं - मैं पर्ल में अच्छा नहीं हूं, लेकिन कुछ जेएपीएच मैं पढ़ सकता हूं ... यह कोई रास्ता नहीं है।यह प्रसिद्ध जेएपीएच कैसे काम करता है?

+11

हमेशा से शुरू करें: http://perldoc.perl.org/B/Deparse.html – toolic

+6

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

+1

@toolic आह, कंधे ने दोजो की जांच की - पर्ल भिक्षुओं ने इसे फिर से हल किया – PinkElephantsOnParade

उत्तर

15

मूल बातें समझने के बाद यह वास्तव में कठिन नहीं है।

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 

ध्यान दें कि एक स्ट्रिंग की chr ord पहले अक्षर और अंत में join use sub tied रिटर्न पहला वर्ण j, u, s, t है: यहाँ कुछ संकेत प्राप्त करने के लिए आप शुरू कर रहे हैं।

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 

मुद्रण असली स्ट्रिंग "Just another Perl hacker,\n": :)

बस मस्ती के लिए

, मैं इस प्रसिद्ध japhs साल पहले का ही विस्तार से लिखा था।

और यह एक जर्मन क्रिसमस ग्रीटिंग युक्त एक छोटा संस्करण है:

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

अहह - संकेत ने इसका खुलासा किया। मैं अब देखता हूँ, हे। – PinkElephantsOnParade

11

इस JAPH की पहली उपस्थिति http://www.perlmonks.org/?node_id=290607

पर होने की PerlMonks राज्यों धागे के रूप में प्रकट होता है, अब वहाँ एक स्वचालित उपकरण है जो कहानियो को इस तरह का होता है: http://namazu.org/~takesako/ppencode/

आप इसे source code है पढ़ सकते हैं, लेकिन रिवर्स इंजीनियरिंग इतना मजेदार है :)

+०१२३५१६४१०६१

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

इस '' वर्ण के मुद्रण के लिए एक ही रास्ता है:

उदाहरण के लिए, यहाँ एक खाली स्थान के मुद्रित करने के लिए कोड है? असल में, नहीं, ताज़ा कर देता है:

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

कूल, दोनों एक ही and print chr ord q q ... पर अंत वेरिएंट। तो इससे पहले कि सब कुछ सही मूल्य का मूल्यांकन करना चाहिए और केवल हमारी आंखों को धूलने के लिए है।

फिर, print chr ord, सरल किया जा सकता बस उस संदर्भ में print के रूप में chr(ord($str)) केवल $str से पहले चरित्र चुनता है। तो यह करने पर निर्भर करता:

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

q q eqq उद्धरण का एक असामान्य प्रतिनिधित्व, यह और अधिक आसानी से q (e) रूप में पहचाना जाता है। मूल के लिए एक ही तर्क काम करता है, यहां तक ​​कि अधिक obfuscated JAPH: print chr ord for qw y ... yy वर्णों के बीच सबकुछ उठाएगा और एक सरणी के रूप में सफेद जगहों से अलग होगा।


एक संबंधित विषय है, जो एक एएससीआईआई कला के रूप में आकार वाले पर्ल कोड से संबंधित है। इसके लिए एक सीपीएएन मॉड्यूल भी है: Acme::EyeDrops

संबंधित मुद्दे