Po prostu kolejny haker Perla
Po prostu inny haker Perla lub JAPH zazwyczaj odnosi się do programu Perla , który wypisuje „Kolejny haker Perla” (przecinek jest kanoniczny, ale czasami jest pomijany). Krótkie programy JAPH są często używane jako podpisy na forach internetowych lub jako projekty koszulek . Wyrażenie lub akronim jest również czasami używane (bez kodu ) do podpisu.
Programy JAPH są klasycznie wykonywane przy użyciu niezwykle zaciemnionych metod, w duchu konkursu Obfuscated C Contest . Niedawno, gdy zjawisko to stało się dobrze znane, wyrażenie to jest czasami używane w zwykłych przykładach (bez zaciemniania).
Pomysł użycia maleńkich programów w Perlu, które drukują podpis jako podpis , wyszedł od Randala L. Schwartza w jego postach na grupie dyskusyjnej comp.lang.perl. Napisał wiele JAPH, które są pokazane poniżej.
Przykłady
Program JAPH bez zaciemniania:
print "Kolejny haker Perla," ;
Osadzanie JAPH w nieprzejrzystym kodzie:
$_ = '987;s/^(\d+)/$1-1/e;$1?eval:print"Kolejny haker Perla,"' ; ewaluacja ;
Dekodowanie JAPH z transponowanego literału łańcuchowego :
$_ = "krJhruaesrltre ca cnP,ohet" ; $_ .= $1 , wypisz $2while s/(..)(.)// ;
Drukowanie JAPH jako oddzielnych procesów:
0
0
for $i ( .. 4 ) { if ( ! fork ) { $i == lub nie { $SIG { LCAŁK } = sub { print "J" } } lub $i == 1 lub nie { $SIG { LCAŁK } = sub { drukuj "A" } } lub
$i == 2 lub nie { $SIG { LCAŁK } = sub { print "P" } } lub $i == 3 lub nie { $SIG { LCAŁK } = sub { print "H" } } ; spać $i ; ostatni ; } } zabij LCAŁK => $$ ;
Wygląda na to, że robi coś zupełnie niezwiązanego z drukowaniem JAPH:
$_ = "wftedskaebjgdpjgidbsmnjgc" ; tr /az/o h , słoik fraz z golfem !/ ; drukować ;
Rozwidlanie procesów w celu wydrukowania jednej litery w odpowiedniej kolejności:
@P = split // , ".URRUU\c8R" ; @d = split // , "\nrekcah xinU / lreP rehtona tsuJ" ; sub p { @p { "r$p" , "u$p" } = ( P , P ); potok "r$p" , "u$p" ; ++ $p ;( $q *= 2 ) +=
$f =! widelec ; map { $P = $P [ $f ^ ord ( $p { $_ }) & 6 ]; $p { $_ } = / ^ $ P/ix ? $P:close$_ } klucze %p } p ; p ; p ; p ; p ; mapa { $p { $_ } =~
/^[P.]/ && zamknij $_ } %p ; czekać do $? ; map { /^r/ && <$_> } %p ; $_ = $d [ $q ]; sleep Rand ( 2 ) if /\S/ ; wydrukować
Używając tylko słów kluczowych Perla (bez interpunkcji ):
not exp log srand xor s qq qx xor s x x długość uc ord i wypisz chr ord dla qw q dołącz użyj sub wiązane qx xor eval xor print qq q q xor int eval lc q m cos i wypisz chr ord dla qw
y abs ne otwórz związany hex exp ref y m xor skalar srand print qq q q xor int eval lc qq y sqrt cos i wypisz chr ord dla qw x printf każdy zwróć lokalny x y lub wydrukuj qq s s i eval q s
undef lub oct xor czas xor ref print chr int ord lc foreach qw y hex alarm chdir kill exec return y s gt sin sort split
Używaj tylko znaków interpunkcyjnych , bez znaków alfanumerycznych . To psuje się po Perlu 5.30.0, ponieważ użycie $# i $* powoduje błędy krytyczne. Ten JAPH został napisany przez Erica Roode'a i działa tylko na systemach Unix i systemach uniksopodobnych :
`$=` ; $_ =\ % !;($ _ ) = /(.)/ ; $= =++ $| ;( $. , $/ , $, , $\ , $" , $; , $^ , $# , $ ~ , $* , $: , @% ) = ( $! =~ /(.)(. ).(.)(.)(.)(.)..(.)(.)(.)..(.)......(.)/ , $ " ) ,
$= ++ ; $. ++ ; $. ++ ; $_ ++ ; $_ ++ ;( $_ , $\ , $, ) = ( $~ . $" . "$;$/$%[$?]$_$\$,$:$%[$?]" , $" & $~ , $# ,); $, ++ ; $, ++ ; $^ |= $" ; `$_$\$,$/$:$;$~$*$%[$?]$.$~$*${#}$%[$?]$;$\$"$^$~$ *.>&$=`
Znacznie krótsza, wykorzystująca tylko znaki interpunkcyjne, oparta na module EyeDrops :
'' =~ ( '(?{' . ( '-)@.)@_*([]@!@/)(@)@-@),@(@@+@)' ^ '] [ ) @]`}`]()`@.@]@%[`}%[@`@!#@%[' ) . ',"})' )
Grafika ASCII (aby ten kod w kształcie dromadera działał, rozmiar konsoli musi być ustawiony na co najmniej 119×48):
0 # sub j (\$){( $ P , $ V ) = @_ ; while ( $$P =~ s: ^ ([()]) :: x ){ $V += ( '(' eq $1 )? - 32 : 31 } $V += ord ( substr ( $$P , , 1 , "" )) -
74 } sub za { mój ( $I , $K , $ J , $L ) = @_ ; $I = int ( $I * $M / $Z ); $K = int ( $K * $M /$Z);$J=int($J*$M / $Z ); $L = int ( $L * $M / $Z );
0
$G = $ J - $I ; $F = $L - $K ; $E = ( abs ( $ G ) >= abs ( $ F ))? $G:$F ;( $E < ) i ( $ I , $ K ) = ( $ J , $ L ); $E ||= 0,01 ; dla ( 0
$i = ; $i <= abs $E ; $i ++ ){ $D -> { $K + int ( $i * $F /$E) }->{$I+int($i*$G/ $E )} = 1 }} sub p { $D = {}; $ Z = $ z || 0,01 ; mapa { $H = $_ ; $ja =
0 $N = j $H ; $K = $O = j $H ; while ( $H ){ $q = ord substr ( $H , , 1 , "" ); jeśli ( 42 == $q ){ $J = j $H ; $L = j $H } else { $q -= 43 ;
$L = $q %9 ; $J = ( $q - $L ) / 9 ; $L = $q - 9 * $J - 4 ; $J -= 4 } $J += $I ; $L += $K ; a ( $I , $K , $J , $ L ); ( $I , $K
) = ( $J , $L )} za ( $I , $K , $N , $O )} @_ ; moje $T ; mapa { $y = $_ ; map { $T .= $D -> { $y } -> { $_ }? $\ : ' ' } ( - 59 .. 59 );
$T .= "\n" }( - 23 .. 23 ); print "\e[H$T" } $w = eval { wymaga Win32::Console::ANSI }; $b = $w ? „1;7;” : "" ;( $j , $u , $s , $t , $a , $n , $o , $h , $c ,
$k , $p , $e , $r , $l , $C ) = split /}/ , 'Tw*JSK8IAg*PJ[*J@wR}*JR]*QJ[*J' . 'BA*JQK8I*JC}KUz]BAIJT]*QJ[R?-R[e]\RI' . '}Tn*JQ]wRAI*JDnR8QAU}wT8KT' . ']n*JEI*EJR*QJ]*JR*DJ@IQ[}*JSe*JD[n]*JPe*' . 'JBI/KI}T8@?PcdnfgVCBRcP' . '?ABKV]]}*JWe*JD[n]*JPe*JC?8B*JE};Vq*OJQ/IP[' . 'wQ}*JWeOe{n*EERk8;' .
'J*JC}/U*OJd[OI@*BJ*JXn*J>w]U}CWq*OJc8KJ?O[e]U/T*QJP?}*JSe*JCnTe' . 'QIAKJR}*JV]wRAI*J?}T]*RJcJI[\]3;U]Uq*PM[wV]W]WCT*DM*SJ' . 'ZP[Z' . 'PZa[\]UKVgogK9K*QJ[\]n[RI@*EH@IddR[Q[]T]T]T3o[dk*JE' . '[Z\U' . '{T]*JPKTKK]*OJ[QIO[PIQIO[[gUKU\k*JE+J+J5R5AI*EJ00' . 'BCB*' . 'DMKKJIR[Q+*EJ0*EK' ; sub h { $\ = qw(% & @ x) [ int rand 4
0
0 ]; map { printf "\e[$b;%dm" , int ( rand 6 ) + 101 - 60 * ( $w || ); system ( "cls" ) jeśli $w ;( $A , $S ) = ( $_ [ 1 ], $ _ [ ]);( $ M , @ ,) = podział
0
'}' ; for ( $z = 256 ; $z > ; $z -= $S ){ $S *= $A ; p @ ,} śpij $_ [ 2 ]; while ( $_ [ 3 ] && ( $ z += $ S ) <= 256 ){ p @ ,}}( ""
. "32}7D$j" . "}AG" . "$u}OG" . "$s}WG" . "$t" , "" . "24}(" . "IJ$a" . "}1G$n" . "}CO$o" . "}GG$t" . "}QC" . "$h}" . "^G$e" . "})IG" . "$r" , "32}?"
. "H$p}FG$e}QG$r" . "}ZC" . "$l" , "28}(LC" . "" . "" . "$h}:" . "J$a}EG" . "$c" . "}M" . "C$k}ZG" . "$e" . "}" . "dG$r" , "18" . "}(" . "D;" . 0
00
0
"$C" )}{ h ( 16 , 1 , 1 , ); h ( 8 , 0,98 , , ); h ( 16 , 1 , 1 , 1 ) ; h ( 8,0 , 0,98 , 1 ) ; powtórz } ### #pisane 060204 przez
#liverpole @@@@@@@ #@@@@@@@@@@@
Zobacz też
Dalsza lektura
- Simona Cozensa (2005). Zaawansowane programowanie w Perlu . O'Reilly. s. 261 –263. ISBN 9780596004569 .
Linki zewnętrzne
- Perl hodowlany: elegancja JAPH
- Cpan.org , zbiór JAPH w CPAN .
- Jak działa ten słynny JAPh? i Fun With Reserved Keywords na stronie Stack Overflow wyjaśniają, jak działa kod blokheada.