20
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-03-16

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

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

*** 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?うまいのかそれ?

20
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?