これまでキーロガーを作成する方法やMacからリモートでPowershellコマンドを実行するPowershellスクリプトの解説をしてきました。今日はそんなPowershellスクリプトをexeに変換する方法のひとつであるIExpressの使い方について解説します。
IExpressとは
IExpressを使うと自己解凍形式といって圧縮する際に付与された解凍用のプログラムを使い、指定したファイル(batやps1)を実行するexeを作成することができます。このIExpressはWindowsに標準搭載されているのでセキュリティの制約をほとんど受けることなく使用できる特徴があります。ただbatやpowershellをexeに変換しなければならないような機会はそこまで多くなく、実際に使用する機会はあまりありません。しかしサイバーセキュリティに関する学習をしていると、自分で作成した疑似マルウェアを使って解析の練習をしたり、悪意のあるexeファイルを仮想の被害者に送ってペネトレーションテストのような演習がしたいといった局面が出てくることもあるでしょう。ニッチなニーズかもしれませんがそういった方に向けて基本的な使い方を解説していきます。
今回の記事はサイバーセキュリティに関連する業務に従事している人を対象とした内容ですが悪用すると法律に問われる可能性があります。くれぐれもペネトレーションテストの練習やマルウェア解析等、正当な目的で参考にしてください。
Powershellスクリプトをexeに変換してみよう
では実際に使い方に入っていきます。今回は以下の記事で紹介したキーロガーのPowershellスクリプトをexeファイルに変換していきます。
1.IExpressを起動する
「Win+R」を押下し以下のダイアログを起動後、iexpressを入力し「OK」を押下

2.Wizardが起動したら「Create new SelfExtraction Directive file」をクリック

IExpressは以下のようなSEDという拡張子のファイルでパッケージに関する設定情報を保持します。ここではパッケージの設定情報を新規で作成するのか、既存のSEDファイルの設定を読み込むのかを聞いてきています。今回は新規で作成するので「Create~」の方を選びます。

選択肢 | 意味 |
Create new SelfExtraction Directive file | 新規でSEDファイルを作成 |
Open existing SelfExtraction Directive file | 既存のSEDファイルの読み込み |
3.「Extract files and run an installation command」をクリック

パッケージの利用目的を選びます。選択肢毎の意味は以下の通りです。
選択肢 | 和訳 |
Extract files and run an installation command | ファイルを解凍しインストールコマンドを実行するexeを生成 |
Extract files only | ファイルの解凍のみ行うexeを生成 |
Create compressed files only (Active X installs) | 圧縮ファイルを作成 |
2つ目、3つ目の選択については最近のWindowsであれば右クリックからの圧縮・解凍で事足りるので使う機会はほぼなさそうです。
4.Package titleを入力

パッケージのタイトルを入力します。この後exeファイルを実行するときに表示される以下のようなダイアログの設定を行いますが、このダイアログの上部に表示されている「Test」と書かれている部分がPackage titleで入力した内容になります。今回はプロンプトを表示する設定を行わないので特に拘らず「test」などと入力します。

5.実行前のメッセージを表示するか設定する

作成したexeファイルを実行した際、実行前に4.の図1のようなダイアログを表示する設定が行えます。今回は「No prompt.」を選択します。
選択肢 | 意味 |
No prompt. | インストール前のプロンプトを表示しない |
Prompt user with: | ダイアログを表示する、その際に表示するメッセージを記入 |
6.ライセンスの同意画面を表示するか設定する

ライセンスの同意画面を表示するか設定します。今回は表示しませんので「Do not display a licence」を選択します。
7.exeに変換するスクリプトを選択する

「Add」ボタンを押下しexeに変換したいPowershellスクリプトを指定します。
8.exeクリック時に実行するコマンドを記載する

以下のコマンドを入力します。私の環境ではKeyLogger.ps1は「C:\Users\owner\Desktop\Others\学習\Powershell\KeyLogger\KeyLogger.ps1」のパスに置いてるのでこれをフルパスで指定します。
PowerShell.exe -ExecutionPolicy Bypass -File "C:\Users\owner\Desktop\Others\学習\Powershell\KeyLogger\KeyLogger.ps1"
他サイトではPowershellスクリプトのファイル名だけ(KeyLogger.ps1のみ)を-Fileに指定するケースが多いようですが、何故か上手くいかなかった(作成したexeをクリックしてもコンソールが一瞬表示され、実行されないまますぐ消える)ので今回はフルパスで指定しました。
9.実行中のコンソールの表示設定を行う

プログラム実行中コンソール画面の表示をどうするか設定を行うことができます。英語の説明そのままでMinimizedは最小化、Maximizedは最大化、Hiddenは表示しない、Defaultは最小化も最大化もしない状態で表示します。
10.プログラム実行終了時のメッセージを設定

作成したexeのプログラム実行が完了したり強制終了した場合に表示されるメッセージの設定を行います。設定すると「Display message:」に入力した文字が4.の図1のようにダイアログに表示されます。
11.作成するexeの名前とオプションを設定

作成するexeファイルの場所と名前、そして解凍する際のアニメーションを非表示にする設定を行います。Optionsの「Hide File Extracting Progress Animation from User」にチェックを入れることで、exeファイルを実行する際に一瞬表示される解凍のウィンドウを非表示にすることができます。
12.exe実行時に再起動するか設定

今回作成するexeでは再起動を行う必要はありませんので「No restart」を選択します。
13.Packageの設定状態の保存

ここまで設定してきた内容を保存する場合「Save SelfExtraction Directive(SED) file:」にチェックを入れ保存する場所とSEDのファイル名を指定します。特に保存する必要がないのであれば「Don't save.」で問題ありません。
14.exeを作成


exeファイルを作成する準備が整ったので「次へ」「完了」を押下し作業を終了します。以下の通り指定したKeyLoggerのPowershellスクリプトがアプリケーションファイル(exe)に変換されていることが確認できました!

実際に動かしてみよう
それでは作成したexeファイルを動かしてみましょう。クリックすると一見何も起きていないように見えますが実際はプログラムは動作しています。以下のようにChromeの検索欄で「This is a test message.」と入力後しばらくしてからEnterを押下すると、入力したキーの値が以下のようにGmailに送られてきており、Powershellスクリプトが動作していることが確認できました。


終了する場合はタスクマネージャーの画面から以下の「Windows PowerShell」プロセスを終了すればOKです。
