疑問! クラッキングできないようにする、ソフトを作るのは可能ですか?
どうしても、バグって、できちゃいますよね?
あと、セキュリティソフトは、何言語でつくったらいいと思いますか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
クラッキングできないようにする、ソフトを作るのは可能ですか?
可能かどうかと問われれば不可能と答えるしかないですね。クラッキングといってもいろいろな手法がありますが、たとえば、実行モジュールを逆アセンブルしてプログラムの仕組みを解析するなどということは防ぎようがありません。あるいは通信のパケットを監視して挙動を観察する(そしてパケットを書き換えて挙動を変える)などということは、技術的には難しいものではありません。
ただ、クラッキングしても無駄と思わせることならできなくはないでしょう。暗号化技術がその一つですね。たとえプログラムを解析されてアルゴリズムが知られたとしても、パスワードあるいは解除キーがなければデータが読めないといった仕組みは様々なシステムで用いられています。
とはいえ、ソフト開発者としては割り切りも必要ですね。ガチガチに防衛策を施そうとすればコストがかさみますし、そのせいで使い勝手が悪くなったらソフトの価値が落ちてしまいますし。まぁ、高度な技術を持ったクラッカーなら、そのソフトにクラックする価値があるかどうかを冷静に見極めることでしょう。
どうしても、バグって、できちゃいますよね?
できちゃいますね……。もちろんソフトの規模にもよります。それなりのプログラマーが「Hello world!」ごときでバグを出すなど考えられません。
可能な限りバグを減らす努力は当然必要ですが、そのためにもバグが出たときにどう対処するかが重要な課題となっています。いち早くバグを発見し、その原因を追跡できるような仕組みを設計段階から意識して取り入れる必要があります。
製品開発における社内テストを「バグ出し」と呼ぶことがあります。その名の通り、テスト担当者が様々な状況を想定してソフトを動かし、「とにかくたくさんバグを発見」して出荷前につぶしてしまおうということです。ただ、それでも漏れはあるわけで、出荷後に見つかった(あるいは出荷までにつぶせなかった……)バグに対しては「パッチ」などとも呼ばれる修正モジュールをネットなどで配布するということはよく行われていますね。
あと、セキュリティソフトは、何言語でつくったらいいと思いますか?
このセキュリティソフトというのが、市販されている○○アンチウィルスとか○○インターネットセキュリティのようなものを指しているのであれば、OSと密接に連携する必要があるので、いわゆるシステムコール(OSが提供する機能)を直接呼び出せる言語ということになります。WindowsやLinuxならCあるいはC++、MacOSならObjective-Cといったところでしょうか。
とはいえ、そういうソフトを1から作るとなると多岐にわたる深い知識が必要ですし運用にも細かいサポートが要求されますから「ハードルはかなり高いですよ」と申し上げておきます。
投稿2015/11/06 04:10
総合スコア5938
0
情報セキュリティ屋さんじゃありませんが回答します.
バグのでない「小さなソフトウェア」を作ることは可能です.
ここで「小さなソフトウェア」は全ての入力パターンに対して,網羅的にテストが行えるものを指すことにします.
極端な例に,AボタンとBボタンのみが存在する入力装置で,入力を一回だけ行うことができるソフトウェアをあげましょう.ボタンが押されたら入力装置は破壊され,二度目の入力はありません.これならば,取り得るすべてのAボタン, Bボタンを入力してテストを行い(入力装置が破壊される前提では,テストにも2台必要です),正当性が確認されれば,バグのないソフトウェアになります.
int型しか入力できないソフトウェアならば,43億回ほどテストをすれば,バグのない完全なソフトウェアが作れるでしょう.
しかし,最近のソフトウェアはそんなに小さくありません.AndroidやiOSなどのように,ボタンがクリックされたから~を実行しようといった,イベント駆動型プログラミングではテストケースが膨大になりがちです.その他,Windowsソフトウェアならば,Windows(親)のバグはほぼどうしようもないでしょう.
今日では,バグのない完全なソフトウェアより,バグの出たときに安全なソフトウェア作りが望まれているようです.穴のないソフトウェアは無理だから,穴を突かれたときに情報を外に出さないようにしていこうという形ですね.
使用言語はOSによって異なるでしょう.Windows向けならば,OSのイベントを取れるC++,C#,.NET当たりですね.OSのイベントを取れない言語をメインにしたとしても,イベントを取るためにどこかで使うことになりそうです.
自分で作るなら,型安全性の高いJavaをメインに,C++をJNI呼び出しで作るでしょうか.WindowsにもJavaにも左右されたくないというときは,思い切ってアセンブリにしましょうかね.
投稿2015/11/05 18:54
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/11/06 09:44
退会済みユーザー
2015/11/09 05:01
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/11/06 07:28
2015/11/06 09:12