kensyou_jikenboのブログ

yahoo!ブログの同名ブログを移行しました

何故C#だったのか?に関して

昨日Visual Studio(以下VS)の登録の件を紹介したが、登録自体は行われていたということで大勢に影響は与えなさそうだ。多分VSをダウンロードした際に一緒に登録も行ってしまっている可能性が高いと考えられる(そうしないと「後○日」というポップアップが出てしまう)。
ただ、検察側の主張ではVSのダウンロードや登録なども南青山の派遣先でやっていたことになり、業務外の開発をよくやれたものだと改めて感じる。

さて、VSを見てみた機会にC#の方も再検討してみた。
被疑者が「C#できるか?」という点は、本事件で被疑者が逮捕されてすぐの頃から大きな論点になっていた。
これに関しては当ブログでも以前に取り上げたが、「C#できるか?」の前に疑問となる「何故C#だったか?」という点を本日は整理してご紹介。
被疑者がiesys.exeを作成したとすると、「何故普段使っているJavaではないのか?」、またウィルス作成に使われているのはC++が多いとのことで、「何故一応知識があるというC++で作らなかったのか?」という疑問が当初から出されていた。
それに対して、以下のように各言語についてiesys.exeを作成する際に注目される項目(基本文法、Windowsで動かすためのソフト、dobonサイト記載)を比較した…説明は後述。

イメージ 1

比較表の各言語について説明を行う。
Javaマイクロソフトが特許問題でサポートを2007年までで打ち切っており、Javaで書いたソフトを動かすための基盤ソフトがWindowsに標準では入っていない。
使用する場合は別途ロードする必要があるが、一般の人は殆ど入れていない。
(他の3言語共通のWindows用基盤ソフトもバージョンが色々あったり、入っていないWindowsのタイプもあるがJavaよりは動作するPCは圧倒的に多い)
トロイのように不特定の人にロードさせて動かす場合は、Javaで書いても動くPCが少ないのは致命的であり、この点で選択から外れる。
なお、JavaとJavscriptは別物なので、Javascriptを動くようにしてあってもJavaとは無関係。

C++…今回のトロイは一般的に考えられているようなウィルスとは基本構造が異なっていて、ウィルスの増殖機能や自動感染機能の作り込みは不要なため、そういう機能を書くのに適したC++を使う必要はない。
Windows用業務アプリケーションを書く感覚に近くなるだろう。
そうした時に参考になるサイトがネット上にはあって、今回のトロイもサンプルプログラムを流用していることが、以下のシマンテック社解析記事で報告されている。

"犯行予告に使われたマルウェア、国内メディアは「遠隔操作ウイルス」と命名"
<作成者との暗号化通信の処理に使われる文字列が日本語で書かれており、コードは日本語の Web サイトから取られていることも判明しました。>

記事中の「図 1. コード中に見つかった日本語」で引用されているプログラムコードが記載されているのが以下のサイである(ページの下の方にあり)。
”パスワードで文字列を暗号化する”
< //パスワードから共有キーと初期化ベクタを作成する
    //saltを決める
    byte[] salt = System.Text.Encoding.UTF8.GetBytes("saltは必ず8バイト以上");>

このサイト(「dobon」さんが運営しておられる)はC#の参考として非常に良く出来ていて有名なサイトである。
内容的にはややこしいプログラムの表記が並んでいるが、ご注目いただきたのがサンプルコードとして載せられているのは「VB.NET」と「C#」の2種類ということである。
つまり、犯人が参考にしたサイトにはC++のサンプルコードは載っておらず流用できない。
しかも、このサイトから「暗号化」という本来ややこしい機能のサンプルコードを流用出来ており、他にも隠しwebブラウザなども流用しているようなので、これがなければ犯人はもっとずっとトロイ作成に手間取っただろうと考えられるぐらい重要になる。
(当方も利用させて頂いているので、非常に役立つ素晴らしいサイトであることはよく知っている)
よって、C++は使用する必要がなく、かつ重要なプログラムがある参考サイトには載っていないのだから、これも選択から落ちることになる。

VBC言語系と文法の違いが大きいので、Javaを普段使っていて過去にもVBの開発経験がないような人にはC#の方が親和性が高くなる。よって選択から外れる。
(文法の違いは余り気にならないという人もいるようだが、普通は一系統の方がやりやすいだろう)

C#…以上からC#が消去法的に割りとすんなり残ることになる。ただそれだけでなく、MicrosoftJavaの代替的な位置づけを与えているソフトで、Windowsとの親和性がよく使いやすい言語でもある(当方も使用)。
よって無難かつ有効な選択と言って良いと思われる。

つまり、「何故C#で他の言語ではなかったのか?」という問いの答えは、ポイントとなる項目を把握すると簡単な比較によって容易に出るということである。
ただ、ソフト技術者はそれぞれが一家言をお持ちと思うので、以上の整理はあくまでも当方のごく個人的見解とさせていただく。
なおC#について書いたので、「C#できるか?」についても、以前に当ブログで記したのは5月23日で時間も経っていることもあり、別の観点を含めて明日書いてみようと思う(こちらは容易に結論は出ないと思うが)。

以上