質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Q&A

解決済

3回答

784閲覧

新規Windows10 PCで実行可能なプログラムの開発言語について

dai3922

総合スコア34

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

0グッド

0クリップ

投稿2019/08/22 05:56

新規のWindows10 PC(64bit)を一律で設定したく、各種設定・プログラムのインストーラを実行する様なバッチファイルを組んでいます。
バッチファイルには重要な設定やパスワードについてソース上に生で書いている部分があります。
バッチファイルから目立たないようにするため、設定ファイルを用意しそれら機密情報を記載しておりますが、バッチファイルではソースが丸わかりなので読み解きながら進めれば設定ファイルにまでたどり着くことが可能です。

今回、セキュリティ向上としてexeなどの実行ファイルを一つ用意し、そこからバッチファイルを呼び出す様に考えております。
以下の条件で実行ファイルが作成可能なプログラミング言語を探しております。

  1. 無償
  2. コンパイルなど暗号化を行い、実行ファイルの意図的に解析させない(会社内なのでそこまで厳密には考えていません)
  3. 新規PCの設定のために使用するので、実行のためにフレームワークやライブラリなどの実行環境を必要としないものが望ましいです。

以上です。
素人考えなので大いに思い違いをしている可能性がありますが、
ご存知の方がいらっしゃいましたらお教え頂けますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

まず順を追って

1.コンパイル言語

選択肢としては.NET系(C#/F#/VB)、C、Goがいいでしょう。それぞれ注意点だけ述べます。

  • .NET系(C#/F#/VB): Windowsのバージョンによってプレインストールされている.NET Frameworkのバージョンが異なります。今回はWindows 10のみ対象のようですが、同じWindows 10でも1809とか1903といったアップデートのバージョンによっても異なるときがありますので、注意が必要です(特に企業などでLTSBを用いているときは古いままがあり得る)。後方互換がありますので、対象となるWindows 10のうち一番低いアップデートの物にあわせると良いでしょう。最新版や.NET Coreは使わないようにして下さい。
    なお、無償のVisual Studio Communityは大企業だと商用利用はできない(OSSとして公開するなら大企業でもOK)ので、コンパイラであるBuild Tools for Visual Studio 2019だけを使って、エディタはVisual Studio Code等を使って下さい。

  • C: 標準Cライブラリ関数のみを使ってMinGW GCCでコンパイルすれば、Windowsにプリインストールされているライブラリ(msvcrt.dll等)のみに依存するプログラムを作ることができます。しかし、C++は別途標準C++ライブラリに依存するため、C++にしてはいけません。また、Visual Studio C++を用いる場合も、そのままコンパイルするとそのバージョンのVisual Studio C++ランタイムに依存してしまうため、使ってはいけません(依存を外す方法はあります)。

  • Goは単体exeを作る方法として、もっとも効果的です。注意事項は特にないと思います。

2.難読化だけが目的

単に見られるのだけを防ぎたいというのであれば、JScriptを難読化する方法があります。JavaScript難読化ツールはたくさんあるので、好きな物を選ぶと良いでしょう。ただし、JScriptはJScriptであって厳密にはJavaScriptでは無いことに注意してください。どんなに難読化しても解析すればパスワードなどはわかります。

私は知りませんが、VBScript等もそういうツールがあるかも知れません。

3.本当に見させたくない場合

本当の意味での暗号化をする以外ありません。作業が少し手間になっていても、exe実行、復号するためのパスワードを入力とする必要があります。いろいろな方法がありますが、手軽に行える方法を私は知りません。

4.ローカルに残らなければ良い

パスワードなどが書かれた設定ファイルは全てファイルサーバー上に置き、一般ユーザーには見えないようにします。作業者はサーバー接続のためのパスワードだけ入力する必要があります(バッチファイルにパスワードを書いてしまうと、バッチを消し忘れたときに大問題になる)。

個人的にはこの方法をオススメします。この方法の利点は、後から設定内容に変更があったとき、ファイルサーバー側のファイルを変えれば良いだけという点です。また、最後に実行ログをサーバー側にアップロードし、集計することで、作業の進捗などを管理できるというのもあります。10年以上前にそうやって端末展開したことがありましたが、特に大きな問題は起きませんでした。

投稿2019/08/22 12:55

raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dai3922

2019/08/26 07:52

@raccy様 詳細にご教授頂きありがとうございます。 勉強になります。 なるほど、gentaro様も言及されていましたがGoが有力ですね。 述べた様に社内用途を想定(説明漏れでしたが管理者の私か副管理者が手動実行します)していますので、難読化で十分だと思います。 しかし、新規PCで実行するため実行ファイルはファイルサーバ上(権限設定など行っていない場所)に設置せざるを得ません。このことから、とても敷居の高い内容でなければよりセキュアにしたいという欲もあります(より安心したい、という本能だと思います)。 そのため、仰るように長期的な管理面からも④などは魅力的なのですが会社から任命されている手前、副管理者にパスワードを解析される恐れをなくしたいと考えております。 ひとまずGoにて管理ユーザ作成ロジックを見えないように行えるか確認したいと考えております。 多くの方法をご提示頂きありがとうございます。
guest

0

ベストアンサー

エディタで見えなければ良いのであれば、バッチファイルのEXE化ツールでいいのでは?
ググると、複数あるようです。

投稿2019/08/22 06:05

otn

総合スコア84505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dai3922

2019/08/26 06:51

いつもご回答頂きありがとうございます。 VisualBatを一時期エディターとしてしましたが、このソフトでexeにコンパイルが出来るようです。 仰るとおり、こちらで事足りそうです。
guest

0

コンパイルなど暗号化を行い、実行ファイルの意図的に解析させない(会社内なのでそこまで厳密には考えていません)

コンパイルと暗号化は違うんですが、要はバイナリ形式で配布したいってことですねたぶん。

新規PCの設定のために使用するので、実行のためにフレームワークやライブラリなどの実行環境を必要としないものが望ましいです。

メジャーどころのコンパイル型言語だと意外と選択肢が限られるんで、ぱっと思いつくところではGoとか。

ランタイムライブラリ等が不要で、ポータブルなEXEが作成できて、でスクリプト言語ではない、という条件なら満たしている気がします。(自分はほぼ使ったことがないけど)

あとはDelphiとか。(コメントで指摘ありましたが、無償版の利用条件が厳しいのでたぶん候補から外れますね)

言語選びに困ってる人にメジャーじゃない言語を勧めるのもアレなんで、意外と難しい。

投稿2019/08/22 10:12

編集2019/08/22 21:25
gentaro

総合スコア8949

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2019/08/22 10:40

Windows 10 なので .NET 系の言語は使えますね。C/C++ も大丈夫だし、msi という手も。だけど、この質問者さんに使えなければ意味がないので、バッチの exe 化が一番現実的かもしれません。
gentaro

2019/08/22 10:49

バッチのEXE化はもう一つの方の回答と重複しちゃうのと、.NET系は難読化まで言及しないとILSpyとかでソース簡単に覗けるじゃないか、というツッコミが嫌だったので避けてました。(この質問者さん「厳密に考えていない」って書いてるからそこまで問題にならんとは思うけど)
gentaro

2019/08/22 11:00 編集

あと.NETは何も考えずに作り出すとOSに入ってるのより新しいバージョンでビルドしちゃう懸念もすげーあったり。
Zuishin

2019/08/22 11:21

Nim とか Rust とかもありますが、タグからしてバッチのことしか視界に無さそうな気がしたので、よけいなことを言いました。
pepperleaf

2019/08/22 11:48

> 会社内なのでそこまで厳密には なので、難読化まで考慮する必要は無いのでは?
Zuishin

2019/08/22 11:57

社内なら USB ストレージや CD にでもバッチファイル入れて刺していけばいいだけの気もするし、セキュリティーも気にしてるのか気にしてないのか要領得ないし、何かよくわかりませんね。
pepperleaf

2019/08/22 13:05 編集

上司に見られたとき、コードがそのまま、見えると説明が面倒とか? 質問者さんの環境が分かりませんので勝手な推測ですが。 あっと、簡単なカギでもあると無いとでは、違うとの事。こっちか。
raccy

2019/08/22 12:23

無償のDelphi Community Editionは年間売上げ5000US$以上の企業では使えませんよ。安易に無料で使えるとは言わない方が良いですよ。
gentaro

2019/08/22 22:36 編集

@pepperleafさん > なので、難読化まで考慮する必要は無いのでは? えぇ、「質問者さん(中略)問題にならんとは思うけど」と書いてます。 ただ、この質問者さんはそれで良くても、質問の趣旨は「意図的に、かつ手軽に解析される事を防ぎたい」だと思うので、第三者が同様の考えで検索してきた場合に、難読化に触れずに.NET勧める回答を目にするのはむしろ有害なんじゃないかと。 ツールの存在さえ知ってれば、ブラウザの開発者ツールでJavaScript読むのと同じぐらい手軽に読めるんで。 そういう意味ではバッチファイルのEXE化のツールも、ファイルの内容をそのまま読める状態で取り込むようなツールだったら、エディタで丸見えかもしれないんで良くないのかもなぁ、とか、まぁ考え出すと色々ありますけど。 @raccyさん あぁ、それは確かに。ご指摘ありがとうございます。 コミュニティ版の利用条件にひっかかるなら、今回トライアル版で30日以内に作って試してみて、継続利用するならご購入ですねぇ。.NETもそうだけど、統合開発環境まで全部入りはそりゃタダにはならんか…。
Zuishin

2019/08/22 22:18 編集

.NET じゃなくても逆コンパイルしたり、あるいはバイナリエディタで見るだけで機密とやらはダダ洩れなので、セキュリティー面においてはそんなに変わらないと思います。 見られてはいけない人に機密の入ったファイルを渡すこと自体が気持ち悪いですが、「社内なので」と軽く扱っているところがよくわからないところです。じゃあ「見ないでね」でいいじゃない、と思います。 そこまで気にするなら、何かあった時に社員を疑わなくて済むよう、CD を持って回って自分で刺して行くのが一番すっきりするんじゃないでしょうかね。一般社員に「ファイルここにあるから自分で実行してね」と言っても忘れたりするので。
gentaro

2019/08/22 22:55

@Zuishinさん まぁ「.NETの逆コンパイルもテキスト埋め込んだバイナリをメモ帳で開くのも大差ないぐらい手軽だな」という主観が大いに入った意見ですので、その点については特に異存ありません。多少の手間の差はあっても、本質的には別の言語でも同じ話ですし。 じゃあどこまでやれば、みたいな話になるのが目に見えていたから.NETを意図的に避けて回答してました。 本来は秘匿情報を扱うなら言語が云々じゃなくてちゃんとした暗号化をしなさい、で終わるんですけど。(鍵の管理の問題とかも含めて)
dai3922

2019/08/26 07:34

皆様、ご回答頂きありがとうございます。 また、状況や環境の説明が至らず混乱を招いてしまい申し訳ありませんでした。 今更ですが実行環境をご説明します。 新規セットアップしたクライアントPCからファイルサーバ上のbatファイルを実行して初期設定を行っています。 その際、管理用ユーザをAdministrator権限で作成しているのですが、これまではパスなど私が手入力していましたが、今後は「次点の者でも作業が行える様にしたい」「でも管理用ユーザのためパスワードは教えたくない(私が事故などに遭った場合に限り金庫からパスワードを開示)」という事情がありました。 管理用ユーザ作成後は、タスクスケジューラからそのユーザでファイルサーバ上(管理用ユーザからのアクセスのみ許可)の管理用プログラム(Windows Update実行、セキュリティソフトバージョン収集、などの管理機能)をバックグラウンドで実行しています。 @gentaro様 ご回答頂きありがとうございます。 私の提示した条件が悪い意味で単純なためにかえって難題と化してしまっておりましたが、コンパイル型言語のご案内を頂いてありがとうございます。 実態のbatファイルはそのままに、呼び出し元さえコンパイルされていればひとまずのセキュリティを確保出来ると考えていました。 本来はやはりきちんと暗号化を事前に行うことが鉄則ですよね。 @Zuishin様 ご指摘の部分、ごもっともです。 言葉足らずでしたが、基本的には管理者の私または次点の者で展開するプログラムのため「本格的な逆コンパイルは想定しない」という意味合いで「会社内」と表現してしまいました。 もちろん、利便性を損なわない中でセキュリティは可能な限り最大限確保したいのですが私の軽率な表現のせいで甘くお伝えしてしまい申し訳ありませんでした。 「私以外に副管理者でも作業できるようにしたい」 「バッチファイル内のパスワードは副管理者を含め絶対に見られたくない」 「ファイルサーバ+イントラネットを使用して配信するほどの利便性は極力残したい(現場作業メインの仕事のため各PCの管理者が不在のことが多いのと、マンパワーがあまりないので…)」 「(仰るとおり実行忘れがあるため)社員にはやらせたくない」 矛盾する点もあるかもしれませんが、上記が意図でした。 @raccy様 ご指摘頂きありがとうございます。
dai3922

2019/08/26 07:37

@pepperleaf様 ご回答頂きありがとうございます。 私の説明が足りず申し訳ありませんでした。 コードを隠したかったのは「社内の管理用Windowsユーザのパスワードを記載したかった」からです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問