kensyou_jikenboのブログ

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

C#出来るか出来ないかに関して

被疑者は「C#はそれで作成したソフトのテストは行なったことはあるが、
自分でプログラムすることは出来ない」という趣旨の証言をしている。
アクセスログ等で遠隔操作を被疑者が実行したことを証明出来れば、
C#出来るかどうかは大きな問題にならないであろう。
しかし、例えばアクセスログが残っていないような場合は大きな争点になる。

結論から云うと、”被疑者本人の頭の中のことなので、外から幾らああだこうだと
言っても最終的には本人しか分からない”ということにならざるを得ない。
(被疑者PCからC#で作ったトロイやひな形でも出てくれば別だが、痕跡があったというような
 曖昧な報道はあっても、証拠としては出ていないようなので、C#使えた確証は無いという
 前提で以下は記述する)

しかし、分からないだけではそれで終わってしまうが、客観的な推測ということは可能である。
きちんと筋道を立てて推論して、間接証拠なども組み合わせていけば、裁判でも認められる
ような立証につなげることも出来る。
それで、「C#が出来るか出来ないか」について、客観的に考えようとすると、
実際は多くの要因が絡む」ことを説明しようと思う。
考えられる要因を以下に列挙する。各要因内の分類は超ざっくりで、また説明は列挙の後で行う。

 (1)開発言語の種類・・・C++が出来ればC#も出来るという話があるが、もっと種類がある
   ・C、C++VC++C#、VC#、JAVA・・・今回の事件で話題に上がったものだけでも多種類ある
    →トロイはC#である、またC++VC++の違いは余り語られていないが大きく違う面がある
  (2)開発環境・・・種類多いが今回に関係するもの
   ・Visual Studio ・・・VC++、VC#用(MicroSoft製で無料と有料がある)
   ・Eclipse・・・JAVA用(基本的にオープンソフトで無料)  
  (3)各ソフト技術者の得意とする分野の分類1
   ・パソコンソフト
   ・組込みソフト
  (4)各ソフト技術者の得意とする分野の分類2
     ・Web・インターネット系ソフト
   ・制御系ソフト
  (5)担当する業務の種類・・・開発の各段階で担当が分かれる事が多い
   ・仕様作成、SE
   ・コーディング
   ・動作テスト
  (6)開発の流儀
   ・試行錯誤派
   ・一気作りこみ派
  (7)能力レベル
  ・天才クラス
  ・能力高い人
  ・一般技術者
  ・能力落ちる人
  (8)開発期間

被疑者がC#出来るか出来ないかは、少なくともこれぐらいの要因を考慮に入れる必要があろう。
どう関係するかはわかりにくいと思うので、少々説明する。

(1)の種類であるが、「C++を使える」といっても単なるC++VC++では大きな差がある。
ソフト開発は、(2)の「開発環境」をどれだけ使いこなせるかで効率に大きな差が出る。
VC++なら基本的にVisual Studioを使うので、同じVisual Studioを使うVC#への移行はやりやすいといえる。
(なお、C#はVC#として使うのが一般的で、C#でソフト作った例は寡聞にして知らない)
こういう条件があるのだが、被疑者の使ったことがあるというC++が、VC++なのかどうかという点の報道や
議論などは今まで見ていない。
それぞれの人が自分の考えで、C++はこうだと思い込んで、
出来る出来ないの結論や推測を出している可能性がある。

(3)の得意分野1で組込みソフトというのは、主に製品の中のマイクロコンピュータなどのソフトを指す。
この場合は、C言語が使われることが多いが、それを拡張したC++が使われることもある。
パソコンソフトでC++を使う場合はVC++が多くなる。
このように被疑者がこれまでどのような分野を経験したかで、C++でも得意なものが別になる可能性がある。

(4)の得意分野2でWeb・インターネット系ソフトというのは、今回掲示板アクセスなどに必要となった技術である。
制御系というのは、例えば工場の機械を制御したりするソフトの技術である。
では、工場系のソフトは関係ないかというと、今回は犯人が作成したのは、遠隔操作で命令を送って
返ってくる応答で状態を知って又次の命令を送るという動作であり、正に制御そのものである。
iesys.exeには色々な命令や応答がある。
これらの詳細ソフトを作りこむ前に、各命令や応答の定義をきっちり行う必要があり、相応の能力を要する。
制御系の経験者なら手馴れているが、Web・インターネット系は基本的に出来上がった命令応答体系を使う。
逆に、制御系の技術者はWeb・インターネットにつなぐことは少ないので、その辺の知識は乏しいことが多い。
このようにソフト技術者といっても、経験した分野によって得手不得手が異なる。
今回のトロイには色々な分野が必要と考えられ、ソフト技術者なら誰でも出来るというわけではないのである。

(5)の担当業務では、派遣プログラマと云っても動作テストを担当する場合がある。
ずっと主にそればかりという経歴の場合もあり、テストも重要であるが、ソフト開発力は付きにくくなる。
また、プログラムのコーディング(書くこと)をやっている人でも、仕様を上手く作れるかというと話は別になる。
特に今回は、”日本独自の掲示板を使用した日本初=世界初の遠隔操作ソフト」ということになり、
単にC#使えるか使えないかよりも、仕様決定がより大きな要素を占めているとも考えられる。
(トロイの評価が大げさだという人も出てくるであろうが、分かる人には分かると思っている)

(6)の開発の流儀では、自分にとって新たなジャンルのソフト(今回はトロイ)を開発する際に、
少し作りこんではテストするということを繰り返して仕上げていく「試行錯誤」型の人と、
一気にソフトを作りこんでまとめてテストする人がいると思う。
今回のように通信を行うソフトは、試行錯誤型のほうが多いと思われるが、会社で隠れて行うには
会社のPCで通信テストしながら試行錯誤して作り上げていけるのかという疑問が湧くのでこの要因も入れた。

(7)の能力レベルでは、人によっては「C++がある程度出来て、JAVAは仕事で使っているので、C#も(隠れて)
独習してトロイソフトを作れる」という能力を持っているかもしれない。
しかし、そういう人の能力レベルはどの程度と考えられるであろうか。
個人的には(7)で分類した「能力高い」人以上でないと困難と考える。
また、「天才レベル」の人は(6)の項目も一気作り込み型で、会社で仕事の合間にコーディングを仕上げて余りテストも必要とせず動かせる能力があるかもしれない。
しかし、「能力高い」人や、「天才レベル」の人は、普段の仕事にも当然そのレベルが現れてくる。
被疑者は5年程度の実務経験もあるようだし、そのような高いレベルの能力があれば、
周囲は必ず気づくだろう。

(8)の開発期間も重要である。
被疑者がC#出来るか出来ないか、トロイ作れたか作れないかの議論において、
開発期間まで考慮した見解はほとんど見たことがない(当方が少々やったが)。
作れる能力はあっても、どれぐらいの期間でできるかは、仕事上で非常に重要である。
ただ、今回は仕事ではないということで、期間の制限は基本的に不要とか、
実際にどれぐらいかかったかも想定不能なので期間を考えにくいという事情もある。
しかし、仕事と違って幾ら作っても一銭にもならないというソフトなので、犯人としても
興味以外にインセンティブの無いものに極端に長い時間を掛けるとは考えにくいと思う。
(何か別の動機はあるのかも知れないが、犯行予告先の選択を見ても場当たり的で、
 予告文の内容は別として、強い思想的動機などは感じにくい。また、予告文はいわゆる
 左翼の過激派思想のようでもあるが類型的で、単にスタイルを真似ただけとも考えられる。
 犯人の目的が被疑者を陥れると云うことである可能性もゼロではないが、
 それだとその動機が又必要になるので今は考えていない)

なお作成期間に関しては、個人的に横浜市HPにCSRFによる書込を行った前後から、
大阪市HPにトロイで書込を行なった間の約1ヶ月程度ではないかと仮定している。
トロイの構想は以前から持っていたとしても、実際に作りこんだのはCSRFで成功したが、
もっと高機能のものを作ってみたいという動機で作り始め、約1ヶ月で出来たと見る。
もしこの推測が大体合っていて、一ヶ月程度で作ったとすると、(7)と併せて相当レベル高い人でないと
困難という見方が更に強まる。
というのは、ネット上の議論で、相当優秀な技術者と思われる内容を書き込んでる人に、
「今回のトロイは御自分ならどれぐらいで作れると思いますか?」と聞いてみたところ、
「それだけに専念する条件で2~3週間ぐらいと思われる」という答えが得られた。
それ以外には元SEという人から「専念したら約一ヶ月で動くものは作れると思う」という
答えももらった。(当方もこの元SEと云う人と同じような見解であるが、実際はもっとかかるかも)
よって、会社に行きながら一ヶ月で作成できたとしたら、非常に能力高いと云えると思われる。

以上のように当方が挙げてみただけでも多くの要因がある。
しかし、被疑者の周囲の人々に確認していけば、被疑者が各要因でどのような分類やレベルにあるか、
大体判別していくことは可能と思われる。
また今まで被疑者が作った各種資料類も残っているだろう。
本人の事情聴取も併せれば、そう時間掛けずに被疑者のC#に関する能力は充分判定できるであろう。
しかし、当局が周囲に聴取した結果などは殆ど伝わってこないし、被疑者の聴取は依然行われない。
この状態で外野からC#出来る出来ないの判定は困難というのが冒頭近くで述べた結論の理由になる。
(蛇足だが、今回のように「出来ないと言う人が実際には出来る」という立証は難しい。
 しかし、「出来ると言う人が実は出来ない」と見抜くことは、じっくりポイントを絞って検証していけば多くの場合可能。
 だが、実際の仕事上ではそれを事前に判定せず、いきなりやらせて失敗する例が多い)

最後まで読んでいただいた方がいる場合には、「現状では本人しか分からない」という結論で恐縮だが、
検察の捜査のやり方によっては裁判で使えるような推測立証も可能ではないかと思う。
ただし、被疑者がC#出来ない場合、弁護側がそれを立証する方が容易とは云える。

また、C#の話だけでもこれだけ複雑で、検察の詳細情報までは貰えないマスコミが自主取材で
報道するのが困難であろうことの一端も示せたのではないだろうか。
他の「C#出来る出来ない」の議論とはひと味違った観点が出せたのではないかと思う。
内容の出来不出来は別として、今後も客観性や本質を重視した視点を特徴にする予定。

以上