• ベストアンサー

【VB6】実行ファイルとした後、コード閲覧は不可能に近いか

お世話になっております。 Visual Basic 6にてあるプログラム(ソフト)を作成し、 動作確認して、安定して使えるようになった後、 実行ファイル(EXEファイル)作成しようとしております。 普通にVB6の機能で実行ファイルを作成予定。 このソフトをいろいろな人に配布する場合を考えます。 この場合、ソフトを受け取った第三者はコードを閲覧することは一般的に言って不可能に近いでしょうか。その点を知りたいと思っております。 おそらく不可能ではないと思いますが、通常のソフト環境で通常の努力では不可能なのかどうかを知りたいのです。 当方でこしらえているツール(プログラム)は特殊なノウハウもなく、見られても問題もないのですが、閲覧ができてしまうのかどうか、見られるというのはあまり気持ちのよいものではないだろうという意味です。 一方では、良いソフトを手に入れた場合、どのようにコード記述しているのか知りたい、容易にコード閲覧できれば便利だろうというのもあります。 つまり、コード閲覧の困難さの程度が知りたいのです。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • elmclose
  • ベストアンサー率31% (353/1104)
回答No.1

コード閲覧といったときの「コード」とは何を言っておられるかによって異なります。 EXEファイル自体のコードは、バイナリエディタやダンプ出力プログラムがあれば、誰でも容易に見ることができます。但し、それの意味がわかるのは、機械語の知識がある人に限られます。機械語の知識がある人が時間をかけてコードを見れば、そのプログラムのアルゴリズムを知ることはできます。ただし、非常に面倒な作業ですので、よほどの価値がなければ、あるいはよほどの好奇心がなければ、そのようなことをする人は非常に限られるでしょう。 元のVisual Basicのコードを見れるかどうかというと、これは、一般論としては、完全に元通りのコードを復元できるとは限りません。 但し、いわゆるリバースエンジニアリングの技術を使えば、ある程度は、そのプログラムのアルゴリズムを高級言語に変換することは可能です。そのコードを読めば、機械語を直接解読するよりはプログラムのロジックを理解することは比較的容易です。 例えば、リバースエンジニアリング技術の具体例は、リバースコンパイラ(日本語では逆コンパイラとも呼ばれる)といったツールです。「逆コンパイラ」で検索すればいろいろ出てきます。 市販ソフトの中には、使用許諾契約においてリバースエンジニアリングの適用を禁じているものもあります。但し、このような契約条項が有効かどうかは法律的に微妙であると聞いたことがあります(このあたりの詳しい法律論まではわかりませんが)。 なお、「見られるというのはあまり気持ちのよいものではないだろうという意味です。」と書かれていますが、コンピュータプログラマの中には、自分の書いたコードを積極的に見せたがる人もいます。プログラムを書くことも、表現活動の一種ですので。

その他の回答 (2)

  • piyo2000
  • ベストアンサー率49% (144/293)
回答No.3

>コード閲覧の困難さの程度が知りたい 一般には#1,#2さんが答えておられるとおりですが 実は、VB6.0にはdecompiler(逆コンパイラ)が存在します。(私が見つけたものは有料ですが) ご丁寧にも、その逆コンパイラでも解読しづらいように改造してくれるツールも存在しますが、これを通しているソフトはそうそう無いでしょうから、意外と簡単に解読できるかもしれません。 サンプルを見る限りだとコメントや変数名などは再現できないようですが、基本的なロジックは再現できているようです。 URLを紹介したいのはやまやまなのですが ・自分で試したわけではない(有料だったので) ・自分もプログラマなので、そういうツールは欲しいけど(笑) あまり人に勧めるのは気が引ける (ソースを見せていいなら同梱するでしょうし) ・質問の内容が「コードが逆引きできるかどうか」 なので、「できる(かも)」という答えで十分・・・と思った ということで、Googleあたりで検索してみてください(^^; ちなみに.NETだと(decomplierを)MS自身で出してたと思います。

  • qKAZp
  • ベストアンサー率47% (71/148)
回答No.2

一般に、実行コード(EXEやCOM)から、BASICやCなどの高級言語のソースを取り出すことは不可能です。 コンパイラは、高級言語で記述されたロジックを、もっとも効率よく(とは言ってもコンパイラのでき次第ですが)実行できるよう、組み直しをしています。 ただし、デバッグ情報を埋め込んだ実行コードでは、ある程度のソース情報が確認できるかもしれません。 デバッグバージョンの場合、あまり最適化を行うと、エラー箇所の特定がむつかしくなるため、ソースのロジックにわりと忠実にコンパイルするため、元の計算ロジックを推測できるかもしれません。 ただし、コメントや、マクロ文(VBにもあったっけ?)などは、残りません。コメントは削除されますし、マクロ文は展開されてしまいます。 この状態で、元のソースを復元できるわけはありませんので、安心していいと思います。 その昔、プログラムがアセンブラで書かれていた時代、逆アセンブラというのがあって、これを使うと元のアセンブラコードが解ったりしました。このころでも、コメントは削除されていましたので、解析は容易ではなかったと思います。

関連するQ&A

  • 実行ファイルについて

     OSはWinXPでコンパイラはVC++を使用しています。  作成したプログラム等がVisual Studio Projectsフォルダに保存されて、Debugの中にある実行ファイルが私の場合「program.exe」と保存されています。 その実行ファイルprogram.exeをcmdまでドラッグして実行すると問題なく実行できるのですが、program.exeそのものをクリックして実行すると、プログラムが終了したと同時に画面が消えるようになってしまいます。これを勝手に消えなくするにはどうすればよいのですか?教えてください。 *プログラム自体は問題ありません。

  • UWSファイルを VBで実行させたい

    VB まったくの初心者です。 先輩が作った マクロ?ソフト (UWSCというものを使って処理するもの)を 新たにVBで 一括管理したくて VBというソフトを使って作成しようとしています。 先輩が亡くなりそのソフト(uwsc)の事が全くわからないのですが VBで作った一括ソフトでそのまま UWSファイルというものを読み込み実行させたいのですが どう コードを打ち込めばいいかわかりません。 UWSCで作られたマクロファイルはVBで実行させれないのでしょうか。 もし可能でしたら 処理させるコードを教えてください。 【やりたい事】 VBで作ったソフト内のメニュー に  営業処理 経理処理 があり その中で 中間処理 月間処理等の項目があります。 その項目ごとのUWSファイルがあります。 その項目に合わせたUWSファイルをあてがって実行処理させたい。 補足: 今までは UWSCというソフトを起動し UWSファイルを読み込んでの処理でした。 UWSCを起動せずに VB内での処理は無理ですか? 説明不足だと思います。説明下手で申し訳ありませんが ソフトを実行させれるよう教えてください

  • 実行環境

    現在Visual Studio .Netで、VBを使用してあるソフトを開発しています。 初心者です。 作成されたexeファイルは、Visual Studioがインストールされていないパソコンでも実行できますか??

  • Visual Studio > ユーザ配布ファイル

    これまでVisual Studioのソフトを作成したことがなかったのですが、Visual Studio Community Editionが利用可能となった機会に、作成をしてみようかと思います。 Visual Studioでは.NET Framework上に.NETプログラムを作るという認識なのですが、ファイル配布の点でよくわかりません。 以前は、Borland c++ builderなどでソフトを作っていたことがあり、その時は.exeファイル単体で配布できるようでした。Visual Studioでも同様な方法で (1つの実行 .exeファイルとして )配布することは可能でしょうか? あるいは、.NETフレームワーク関連のファイルインストールをソフト利用者にしていただく必要があるのでしょうか? または、インストーラの形を用意する必要があるのでしょうか?

  • VB2005 Express Edition 実行ファイルの作成方法について

    Visual Basic Express editionにてプログラムを作成しました。 プロジェクトフォルダー内にできる、実行ファイル(exe)だけを、別のPCに移動させて実行したのですが、移動先のPCには .net frameworkはインストールされてないので、実行できませんでした。 .net frameworkをインストールしなくても、実行することのできるexeファイルの作り方はあるのでしょうか?

  • vb2005で作成したプログラムはどこに?

    vb2005で作成したプログラムはどこに? vb2005で作ったプログラムをビルド後に、 他のPCにsetup(インストール)したとします。 その場合、実行ファイル(.exe?)はどこにあるのでしょうか  また、コマンドプロンプトで実行ファイルを起動することは可能でしょうか

  • VBで作成した実行形式の戻り値を作成したい

    VBで作成した実行形式の戻り値を作成したいと考えています. たとえば,A.exeという実行形式をVBで作成します. このA.exeを別のプロジェクトでshell関数などで起動します. 処理が終了した時に, A.exeの処理が成功した場合に1 A.exeの処理が失敗した場合には0を返すようにしたいと考えています. 可能でしょうか? 環境:Windows2000+SP3 Visual Basic 6.0+SP5

  • 実行時にVBのモジュールファイルを読み込んで実行する方法

    VB.netで作成したプログラムで、実行時に、ユーザが作成した*.vbファイル(VB.netのモジュールファイル)を読み込んで実行するというものを見たことがあります。 モジュールファイルにはいろいろな関数が記述されておりました(関数名等は決まりがあるのかもしれません)。どのように処理しているのかさっぱり見当がつきません。自分で調べた範囲では「リフレクション」というキーワードが出てきましたがいまいちピンときませんでした。これができればプログラムを再コンパイルしなくても動作(の一部)を換えることができ便利です。参考になるようなサイトなどご存知でしたら教えてください。

  • VBで「ファイル名を指定して実行」と同様の動きを再現

    VB6、WindowsXP VBのプログラムからあるフォルダを開きにいく単純なプログラムを作成しています。 通常のローカルフォルダであれば、Shell関数でExplorer.exeにパスを渡すだけで問題ないのですが、うまくいかないのは、 開きにいくパスがネットワークパス(\\[サーバ名]\[共有名])の場合で、サーバーにアクセスするのに認証が必要となる場合です。 ファイル名を指定して実行に「\\[サーバ名]\[共有名]」を打ち込んで実行した場合は、Windowsが出してくる認証ダイアログ(ユーザ名、パスワードを聞いてくる)が表示されて、ユーザーが正しいID、パスワードを入力すれば、エクスプローラで共有フォルダが開きます。 この動きがまさにやりたいことなのですが、 Shell関数を使用した場合、引数に「Explorer.exe \\[サーバ名]」と指定した場合はファイル名を指定して実行と同じなのですが、 「Explorer.exe \\[サーバ名]\[共有名]」を指定した場合、認証ダイアログが表示されずにエラー(ディレクトリが無効というような)となってしまいます。おそらく先にサーバ認証を行わずに直接共有を見に行ってしまって存在が掴めないのだと思います。 VBでファイル名を指定して実行と同様の動きを再現する方法をどなたかご存知ないでしょうか? 尚、shellexecuteやVB.NETでprocess.startなどでもやってみましたがshell関数と同じ動きでした。

  • VBで作成した実行形式をASPを用いて実行したい

    VBで作成した標準EXEをWEBサーバ上で実行しようと考えていまして現在苦悩しています。 BASP21を使用してEXEを実行したところ、PROCESSには起動したEXEが表示されているので実行はされてはいるのですが処理が適切になされていない状況です。 VBで作成した実行形式をASPを用いて実行する場合には、何か方法があるのでしょうか? よろしくおねがいします。 [動作環境] OS:Windows2000 ServerSP3 ブラウザー:IE6.0 VB6.0+SP5 実行形式の処理内容 SUB MAINを起動関数に設定し、OPEN関数でFILE書き込みを行う。 なお、このファイルはサーバー上に作成される。

専門家に質問してみよう