1. Qiita
  2. Items
  3. PHP

同僚に殴られる系のズンドコキヨシ.php

  • 15
    Like
  • 0
    Comment

http://qiita.com/shinderuman@github/items/7c432e8cb7719d35342a

なるほど、クソコーダーとしてかかねばならぬ。

説明文を追加したが、同僚に殴られないためにはマネしない方が良いです。

*** ver 7

<?php 
eval($argv[0]);
  • ただし、ファイル名は while(!@strstr($l.=[ズン,ドコ][rand()%2],ズンズンズンズンドコ));@die($l.キ・ヨ・シ!);にすること。
  • ファイルシステムや、ファイラなどによっては利用文字種で作れないかも
  • そんなファイル名のファイルは以下のスクリプトで作成できる(OSXで確認)
<?php 
file_put_contents('while(!@strstr($l.=[ズン,ドコ][rand()%2],ズンズンズンズンドコ));@die($l.キ・ヨ・シ!);', '<?php eval($argv[0]);');
  • 果てしの無い「もうphp -rでいいじゃねーか」感
  • 他所でみたstrtrを使うものを越える方法がイマイチおもいつかなく(<?php while(!@strstr($l.=rand()%2,"00001"))?><?=@strtr($l.キ・ヨ・シ!,[ズン,ドコ]);)、そろそろネタ切れです。
  • 以下のようにbase64をつかえばもっと扱いやすい(?)ですね…(だからなんだ)
<?php
eval(base64_decode($argv[0]));
  • ファイル名は「d2hpbGUoIUBzdHJzdHIoJGwuPVvjgrrjg7Ms44OJ44KzXVtyYW5kKCklMl0s44K644Oz44K644Oz44K644Oz44K644Oz44OJ44KzKSk7QGRpZSgkbC7jgq3jg7vjg6jjg7vjgrfvvIEpOyAg」にしてください
  • こういうコードを書くと致命的なセキュリティホールをつくりがちなので、勿論マネしてはいけません

*** ver 6

<?php
while(!@strstr($l.=[ズン,ドコ][rand()%2],ズンズンズンズンドコ))?><?=$l?>キ・ヨ・シ!
  • ループ抜けにつかわなくなったので、dieが不要に
  • 最後はテンプレートエンジンとしてのPHP力を発揮
  • (依然と長さの比較がわかりづらくなるので、<?phpの後に改行を入れているが、空白でOK)

*** ver 5

<?php
while(!@strstr($l.=[ズン,ドコ][rand()%2],ズンズンズンズンドコ));@die($l.キ・ヨ・シ!);
  • strstrの引数の式で代入と判定で十分だったな…ループが終わったらdie
  • whileに文({})が必要ない場合は省略できる(ただし、;が必要)
  • strstrと代入が一文になったので、@が一個へらせた

*** ver 4

<?php
while(@$l.=[ズン,ドコ][rand()%2])@strstr($l,ズンズンズンズンドコ)?@die($l.キ・ヨ・シ!):0;
  • 二値なら、奇数判定でよかった。

*** ver 3

積極的にエラーを握りつぶして行くスタイルでなぐられ度アップ❤

<?php
while(@$l.=[ズン,ドコ][rand(0,1)])@strstr($l,ズンズンズンズンドコ)?@die($l.キ・ヨ・シ!):0;
  • ベアワード("でくくられておらず、定数になっていない文字)は、エラーにはなるが表記通りの値として判定される、@一個あれば"二個いらないのだ!

*** ver 2

1文字削れた

<?php
while(@$l.=['ズン','ドコ'][rand(0,1)])strstr($l,'ズンズンズンズンドコ')?die($l.'キ・ヨ・シ!'):0;
  • if文もカッコが多いif()三項演算子なら?:ですむ

*** ver 1

<?php
while(@$l.=['ズン','ドコ'][rand(0,1)])if(strstr($l,'ズンズンズンズンドコ'))die($l.'キ・ヨ・シ!');
  • whileif{}は一文しかないときは省略できる
  • $l='';よりも@一文字のほうが少ない(未定義変数にいきなり値をいれるとエラーになるが、@で握りつぶせる)
  • [...][...]は5.5>=phpから
  • dieは引数に文字列が来た時、それを出力しながら終了する

あるいは

<?php
$l='';
while($l.=['ズン','ドコ'][rand(0,1)])
    if(strstr($l,'ズンズンズンズンドコ'))
        die($l.'キ・ヨ・シ!');

(PHP7.0.3)

富豪手法です。

mt?うまいのかそれ?

Comments Loading...