Hatena::ブログ(Diary)

お前の血は何色だ!! 4 このページをアンテナに追加 RSSフィード Twitter

2016-02-20

日の丸を丸く描くんじゃねーよ。

f:id:rti7743:20160220062815j:image:medium

みなさんは、日本国国旗である日の丸、好きできすか?

私は大好きです。

ってことを書くと、このウヨクがーといってくる頭のおかしい人がいそうですが、個人的には、どちらかといえばリベラルな方なんじゃないのかと思ってます。

それでは、なぜ日の丸が好きなのか?

自国の国旗が好きで何が悪いという単純な理由だけではなく、

好きな理由をいくつか上げることができます。


なぜ日の丸が好きなのか?

好きな理由1

白い長方形に赤い丸。

実にシンプルで、美しいデザインだと思います。

引き算の料理と言われる日本料理や、盆栽、見えそうで見えない美少女のパンツみたいに、シンプルなところに美を見つけ出す日本人にふさわしいデザインだと思います。

f:id:rti7743:20160220062817p:image:medium



好きな理由2

日の丸弁当がうまい。

白米に梅干しというコンボは最強です。

日本人として疑う余地がありません。

f:id:rti7743:20160220062816j:image:medium


余談ですが、

ピザマルガリータ(マルゲリータ)も、緑のバジルと白いチーズと赤いトマトで、イタリア国旗をかたどったデザインだそうです。

シンプルな国旗だとそれをかたどった美味しい食べ物が作られるのでしょうか。


好きな理由3

子供で簡単書ける

長方形の白い紙に、赤ペンで丸をでかくかけば完成です。

子供でも簡単にかけます。

もし、アメリカ星条旗や、シンプルながらマークがある中国ロシア国旗をかけといわれたらけっこう大変です。


好きな理由4

よってグラフィックプログラムの入門に最適

長方形に丸、そして塗りつぶしというグラフィックAPIに必要なことがすべて詰まっています。

日の丸を書くコードはグラフィックAPIを学ぶhello worldのようなものでしょう。

<script>
	var canvas = document.getElementById('canv');
	var context = canvas.getContext('2d');

	context.beginPath();
	
	//四角形を描き
	context.fillStyle = "rgb(255, 255, 255)";
	context.fillRect(0,0,200,120);

	//円を描き
	context.strokeStyle  = "rgb(255, 0, 0)";
	context.arc(100, 60, 40, 0, Math.PI*2, false);

	//塗りつぶす
	context.fillStyle = "rgb(255, 0, 0)";
	context.fill();
	context.stroke();

</script>

もし、これがアメリカ星条旗を描けと言われたらと思うと、

あまりの難しさに初心者は卒倒します。

星マークとかは関数化したりしていい感じに逃げたいところですが、そうなるとhello world から外れてしまいますね。

f:id:rti7743:20160220062818p:image:medium


ちなみに旭日旗は嫌いです

ちなみに旭日旗は嫌いです。

まずデザインがシンプルではありません。

単純に円に丸ではないので、子供とかは簡単に書くことができませんし、グラフィックプログラムの例題としても複雑過ぎます。

そして何よりも旭日旗弁当は、あまり美味そうには思えないところです。

旭日旗 弁当

https://www.google.co.jp/search?q=%E6%97%AD%E6%97%A5%E6%97%97+%E5%BC%81%E5%BD%93&source=lnms&tbm=isch

f:id:rti7743:20160220062820p:image:medium


本題

このようにシンプルで美しい日の丸ですが、

最近、日の丸を円形で書く人たちがいます。

例えばAppleのサイト。国旗が円形でデサインされています。

f:id:rti7743:20160220062821p:image:medium

http://www.apple.com/choose-your-country/


確かに円形にすることでおしゃれっぽく見えます。

星条旗や複雑なデザイン、シンボルマークをもっている国旗はとても綺麗に見えますが・・・

f:id:rti7743:20160220062822p:image:medium



問題は日の丸にあります。

これです。

f:id:rti7743:20160220062823p:image:medium


私は、これを何度見ても「ゲゲゲの鬼太郎目玉の親父」にしか見えません。

最初見た時、これが日の丸であることを視認できませんでした。

なんだこの目玉の親父は? というか、なぜ目玉の親父がこんなところにいるんだ?きっと何か哲学的な意味があるに違いないと、深く深く考えこんでしまいました。


目玉の親父に似ているわけですから、せっかくだから吹き出しをつけて喋らせてみましょう。

おいっ 鬼太郎

f:id:rti7743:20160220062825p:image:w360


完全に一致



この丸いのは他にもあって、

「速報版! 日の丸 F-35 航空観閲式 航空自衛隊 百里基地」の動画より

f:id:rti7743:20160220062826j:image:medium


おいっ 鬼太郎

f:id:rti7743:20160220062827p:image


補足:この場合、国籍マークであって、日の丸ではないのかもしれないが、目玉のおやじであることにかわりない。


と、いうわけで、円形で日の丸を書かれると目玉の親父にしか見えないです。

こういうデザインを見るたびに、毎回頭のなかで、「おいっ鬼太郎!」というフレーズが聞こえて一人笑いしてしまいます。

何あの人一人でニヤニヤわらっているの?と指をさされかねません。

大変危険です。

なので、日の丸は円形ではなく、できれば四角形で書いて欲しいと思っているのです。

f:id:rti7743:20160220062825p:image:medium

2015-08-30

太古の昔、メモリ空間は自由だった。

太古の昔、メモリ空間は自由だった。

好きなところにジャンプでき、自由に書き換えることもできた。


だが、その結果、解読不能摩訶不思議ソースコードができあがった。

これではいけないと人々は立ち上がった。


gotoなどの無条件ジャンプは悪とされた。


だが、自由にメモリ空間は書き換えられた。

その結果、グローバル変数でまみれた不思議なコードが出来上がった。

これではいけないと人々は立ち上がった。


グローバル変数は悪とされローカル変数などが導入された。


だが、長いスコープを持つ巨大な変数があった。

スレッドで再突入されるコードがあった。

これではいけないと人々は立ち上がった。


その結果、クラスや名前空間によりもっと細かいスコープで管理されるようになった。


だが、煩雑なクラス定義が残った。

これではいけないと人々は立ち上がった。


その結果、無名関数やlamda構文やリフレクションなどの構文ができた。




プログラム言語の歴史は、

自由すぎるメモリ空間をいかに制限して使いやすくするか、

それと同時に、制限はするがそれでも高い表現力を維持させるにはどうすればいいかという、

矛盾しそうな気もする課題への挑戦だったと思う。

2015-07-01

右派と左派って、真女神転生で例えるなら、右派がロウで、左派がカオスだな。

右派左派って、真女神転生で例えるなら、右派がロウで、左派カオスだと思う。


右派->ロウ

左派->カオス


規律のためなら死んでもいいのと、自由のためなら死んでもいいの違い。

規律ある社会や国家のために死んでもいいのと、個人の自由のためなら死んでもいい。みたいな。

個人の自由より秩序を優先と、個人の自由を何より優先。みたいな。


例えば、家に否定的な左派がなぜ同性婚に賛同するかというと、

本人たちがそれを望んでいて、特にデメリットがないならまあいいんでねという、個人の自由を何より最優先するからだと思う。


なんで左派が家とかの古くあるコミニティに否定的かというと、

それを窮屈に感じる人がいてそこから逃れたい人がいるならば、その個人の逃れたいという自由を最優先したいからだと思う。


ちなみに、左派表現の自由とかを最優先するかというと、

それは云わずもがな言いたいことを言う自由を優先したいからだ。ということは、逆に、右派表現規制などを行い社会秩序を守りたいのもなんとなくわかるよね。


ようするに、左派自由ありきなわけだ。だから、リベラル(自由主義者)なんだね。

言葉というのはよく出来ているものだ。




右派からすれば、左派は自分勝手な身勝手な奴らで、秩序を破壊する危険なやつらだし、

左派からすれば、右派は口うるさく自由を束縛する、人間の自由を奪う危険なやつらだ。

お互いが互いの価値観を理解し合うのは無理というものだろう。

お互いの価値観に違いがあるのを認めるぐらいしかないだろう。




どちらも、極限まで傾くと頭おかしい集団となる。

例えば、

右派だと、ナショナリズムとかで外国人とかを迫害し始めたり、検閲や全体主義を始めるだろうし、

左派だと、国家とか秩序をないがしろに始めるだろう。

これもたま、女神転生で、ロウを極めても頭おかしい集団になるし、カオスを極めても頭がおかしい集団になるのと一緒だ。



右派左派もどちらも極めた社会はディストピアそのものだ。




だから、できるならばどちらにも傾かないニュートラルルートを歩んでいきたいものだ。

右派左派も、あいつら何マジになっているんだと馬鹿にして指差して笑えるぐらいになりたい。

そして、右派からは左派だと言われ、左派からは右派だといわれる地点にいたいものだ。

その地点がどちらにも傾かないニュートラルルートだと僕は信じる。



右派を極めた頭おかしい奴ら、左派を極めた頭おかしい奴らをすべて笑って弾き返すニュートラルでいたいよね。

2015-04-11

ばれないプロセスの立ち上げ方を考えてみよう

監視が厳しい環境でもばれずに任意のプロセスを立ち上げることができるだろうか?

システム監視が厳しく、起動しているプロセスやポート等が常に監視されているシステムがあったとして、その監視をすり抜けて任意のプロセスを立ち上げることはできるだろうか?

一見無理だと思うかもしれないが、実はできなくもない。

今回は、ばれないプロセスの立ち上げ方を考察してみよう。


なお、今のところどうしても1度はroot権限が必要である。(落胆しないでね)


攻撃方法:apacheモジュールへの寄生プロセス

結論から言うと、隠したいプロセスapacheモジュールで実装する。


apacheモジュールとして動作しているから、psしてもapacheプロセスしかでてこない。

apacheがlistenしてくれているので追加の通信ポートが不要である。

apacheが外部と通信するのは当然のことなので何もおかしいことはない。

たいていの監視をすり抜けられる、完璧な隠れ蓑である。


もちろん、この方法はモジュールプラグイン方針を採用しているすべてのソフトで使うことができる。今回、apacheを取り上げたのは、通信しててもおかしくないソフトウェアで、モジュールがあり広く使われているということでapacheを選択した。


何か命令を送りたい場合は、http/httpsリクエストの中に特殊なヘッダを作り、そのヘッダがあれば命令を実行するなんてことにすれば完璧である。


GET /foo HTTP/1.0
Host: foo
Bar: nazonazo      <<これ
Connection: close

通常、ヘッダはログには記録されないため、ログだけ見る限り普通のアクセスと見える。

また、秘密のヘッダがわからなければ、プロセスは動作しないとなれば発見は遅れるだろう。

さらに、https通信であれば、ヘッダも暗号化されるし完璧である。

なんという恐ろしいことだ。


こんなに便利ならクラッカーは使っていないの?というと、

実は、既にapache寄生する手法を利用したマルウェアが存在する。

Darkleech Apache Module

http://www.atmarkit.co.jp/ait/articles/1308/05/news002_2.html

http://www.atmarkit.co.jp/ait/articles/1303/25/news122.html



まー、そりゃ誰だって考えつくよね。apacheなどのプロセス寄生させてしまえというアイディアはね。

apacheモジュールは、環境も整っていて簡単に作れるので、この機会に遊んでみよう。

くれぐれも自分のサーバだけで、遊ぶようにね。


不信なapacheへの対策:httpd -M

apacheには、モジュール一覧を見る機能がある。

これをつかって、怪しいモジュールがないかを確認する方法がある。

$ httpd -M
Loaded Modules:
 core_module (static)
 mpm_prefork_module (static)
 http_module (static)

これで不審なモジュールがなければ安心、・・・と思うかもしれないが、この方法には穴がある。


不信なapacheへの対策への対策:ラッパー

攻撃と防御が頻繁に繰り返されてきたwindowsでは、ダミーwinsock.dllをつかった攻撃がある。

winsockへのラッパーdllを作ることで、攻撃を行う。

winsock.dllを一度どけて、_insock.dllリネームし、自分が作ったwinsock.dllを差し込む方法である。

この方法ならば、単純な名前比較は意味を成さない。

では、_insock.dllなどへ既存のモジュールリネームされているかどうかを調べればよいかというと、

オープンソース環境下ではそうとも言えない。

_insock.dllとするのは、winsockのソースコードが無いため、仕方なくラッパーを作っているだけである。

もし、ソースがあれば、完璧なものを用意できるのでリネームする必要すらない。

つまり、既存の .so モジュールのソースをコピペして、やりたい処理を追加したものを準備できれば、それを上書きコピーで動作させることができるだろう。

よって、単純な名前比較は意味を成さない。


じゃあどうすればいいんだよ!?

侵入されてrootを取られたら\(^o^)/と思うしかない。

クリーンインストール以外に道はない。

そうされないためには、ネットワーク構成上 ルーター置いて、必要なポートだけフォワードして、 SSHVPNした環境 or IP範囲制限のみで可能などの地道な対策をすることになるだろう。

幸いにも、apacheモジュールを追加するには、apacheの設定ファイルやモジュールを書き換えなければならず、それをするには、root権限が必要である。

rootを取られるといった失態がなければ、ばれないプロセスを立ち上げることは多分不可能である。

もしかすると、 /home/foo/.***/ とかに拡張モジュールを置けるような親切なソフトウェアがあるかもしれないが、それは設計が間違っているのだ。そんなソフトウェアは使わないのが一番である。


まとめ

apache寄生まできたら次は、kernel寄生でもするのだろうか。

確かに、kernelモジュールの集合体である以上は理論上可能である。

作るのは大変であろうが、なんでもできるし発見を遅らせることもできるだろう。

驚くようなソフトウェアが作られるかもしれない。

それはとても面白そうだ。

2015-04-08

全能の逆説パラドックスの考察

好きなパラドックスの一つに、全能の逆説パラドックスがある。

全能者は自ら全能であることを制限し、全能でない存在になることができるか。
http://ja.wikipedia.org/wiki/%E5%85%A8%E8%83%BD%E3%81%AE%E9%80%86%E8%AA%AC

問「全能者は誰にも持ち上げられない石を作ることができるか?」

作ることができるならば、誰にも持ち上げられ石を持ちあげられないから、全能者ではないし、

作ることができないならば、そもそも全能者ではない。

wikipediaによると、いろいろな推測がされている。とても面白い。

また、以下の様な問がある。

問「全能者は自ら作った世界の法則に縛られるのかそうでないのか。」

(例:全能者は、内角の総和が180度でない三角形を作ることができるか?)

自分なりにいろいろ考えたが、それなりに納得の行く結論に達した。


rtiなりの全能の逆説パラドックスに対しての答え

問「全能者は誰にも持ちあげられない石を作ることができるか?」

問「全能者は、内角の総和が180度でない三角形を作ることができるか?」

答え「全能者は、それらすべて作成できると思う。」


全能者は内角の総和が180度でない三角形も作れるし、誰にも持ちあげられない石を作ることができる。

ただし、やった瞬間に世界の法則が壊れるので、全能者が創造した世界が崩壊する。



わかりやすいところで、誰にも持ちあげられない石を作ってしまった場合を考える。

誰にも持ちあげられない石とは、とてつもなく重い石だろう。

誰にも持ちあげられないわけだから当然である。


誰にも持ちあげられない石とは、怪力を持っている人だけではなく、パワードスーツを着たような人にも持ち上げられてはいけない。

誰にも持ちあげられないわけだから当然である。


誰にも持ちあげられない石は、クレーン車や、果てはロケットなどでも持ち上げられてはいけない。

誰にも持ちあげられないわけだから当然である。


誰にも持ちあげられない石は、地球の引力でさえも、その石を支えてはいけない。

誰にも持ちあげられないわけだから当然である。


絶対に負けてはいけないのだ。


それは、あらゆるものより重い石だろう。

あらゆるものより、重いということは、当然ブラックホールより重い石になるだろう。

ブラックホールの力に負けるようでは、誰にも持ちあげられない石ではない。


多分それは、宇宙が崩壊するほどの重さではないのだろうか。

その巨大な重さで、すべてのものは壊れてしまうのではないか?


いわば、rootrm -rf / するみたいな感じに似ている。

(dd if=/dev/null of=/dev/sda や format c: でもいい。)


全能者は、誰にも消すことができないファイルを消すことができる。

何でもできる全能者であるから当然である。

ただし、その結果、自分の世界の法則を修正不可能なぐらいに捻じ曲げてしまうため、世界が崩壊するのではないか。


崩壊した世界では、全能者は全能者ではない。

誰にも持ちあげられない石は全能者にも持ちあげられない。

よって、誰にも持ちあげられない石が世界を壊すのを止めるすべはない。

起動ディスクが壊れたOSが立ちあげられないように、自分の能力でも止められないわけだから、その世界は崩壊するのではないか。

(宇宙の法則が乱れる! or 破壊するもの)


こうなると、全能者にできることは、トラップにひかかった人が泣きながらOSを再インストールするように、涙目になって別の世界を作るぐらいかな・・・?