PEダンパー兼PEエディタ 「UMPE」
PEダンパー兼PEエディタ 「UMPE」 目次
●概要と基本操作●機能補足と基本注意事項
■ASLRの無効化
●各コントロールの説明(PEダンパー)
●各コントロールの説明(PEエディタ・カテゴリ別)
概要と基本操作
●概要
●基本操作
|
機能補足と基本注意事項
●プロセスの解析
●PEファイル編集機能
●PEiD互換機能
●16Edit FX
●うさみみハリケーンとの連携解析
●ASLRの無効化
●ソフトウェアの動作不具合に対処するPEヘッダ書き換え
●特殊なインポート関数
●Windows 8の仕様
|
各コントロールの説明(PEダンパー)
●画面説明 ●プロセス ■プロセスリスト更新 実行されているプロセスの一覧を更新します。Windows Vista以降では、管理者権限でこのソフトウェアを起動していない場合は、一部のプロセスが表示できません。また、32ビット版のUMPEならば、64ビット版OS上で表示されるのは、基本的に32ビット版ソフトウェアのプロセスのみです。なお、.NETフレームワーク対応のソフトウェアでは、64ビット版OS上において、実行ファイルは32ビット版でもプロセスが64ビット版になることがあります。プロセス一覧上でプロセスを選択すれば、選択プロセスが使用するモジュールの一覧を表示します。 Windows 8や10の64ビット版上では、32ビットプロセスが使用するモジュールのパスを取得する際に、自動的にパスの修正(「C:\Windows\syswow64\」→「C:\Windows\system32\」など)が行われますが、32ビット版UMPE.exeはその修正分を元に戻して表示しています。これは下記「全プロセスでDLL検索」機能も同様です。ちなみに、この64ビット版Windowsでは、「C:\Windows\syswow64\」には32ビット版のシステムDLLが格納され、「C:\Windows\system32\」には64ビット版のシステムDLLが格納されます。また、32ビットプロセスから、64ビット版システムDLLが格納されたフォルダにアクセスするには、Wow64DisableWow64FsRedirection関数による操作が必要です。 ■うさみみハリケーンで解析 選択されているプロセスをうさみみハリケーンで解析します。うさみみハリケーンは起動後に自動でこのプロセスを選択します。あらかじめ、このボタンの下にあるコンボボックスで、うさみみハリケーンの実行可能ファイルを選択してください。64ビット版のUMPE(UMPE64.exe)では、うさみみハリケーンの64ビット版(UsaMimi64.exe)を使用します。 ■全プロセスでDLL検索 DLL名を指定して検索し、そのDLLをロードしているプロセスを一覧表示する、検索用ダイアログを表示します。検索するDLL名は部分指定も可能です。検索時には大文字小文字を区別せずに検索します。検索結果は、32ビット版のUMPE.exeでは32ビットプロセスのみ、64ビット版のUMPE64.exeでは64ビットプロセスのみ表示します。検索結果リスト上で項目をクリックすると、PEダンパーの画面での該当プロセスおよび該当モジュール選択を行います。この機能を使用する際には、取得済プロセス一覧との不整合を避けるため、上記「プロセスリスト更新」を行っておくことをお勧めします。 ●選択モジュール ■エクスプローラのメニュー 選択されたモジュールに対する、エクスプローラのコンテキストメニューを表示します。本来エクスプローラ上で表示されるものであるため、一部のメニュー項目は使用できません。このコンテキストメニューにPEファイル対応のプログラム解析ツールを登録しておけば、同ツールの起動を簡易化できます。当ソフトウェアを非管理者権限で起動した場合など実行環境により、この機能が正常に動作しないことがあります。 ■モジュールをダンプ 選択されたモジュールをプロセスメモリ上からダンプし、ファイルとして保存します。基本的に、この機能はアンパック時に使用します。パッカーによっては、ダンプ対策としてモジュールサイズを異常値に書き換えることがありますので注意が必要です。また、他のダンプ対策を施しているモジュールや、一部のシステムDLLなどはダンプに失敗することがあります。ダンプ時には「pe_unmapper.exe」を使って、作成されたファイルをPEファイルとして解析しやすいように内部構成の修正を行います。これはIAT再構築ではありません。ダンプ時にShiftキーを押し下げておくと、pe_unmapper.exe による修正をスキップします。 ■PEエディタを起動して編集 このボタンの下にあるオプションで指定した内容に沿って、PEエディタを起動します。[モジュールのコピー]を選択していると、選択されたモジュールがあるフォルダにコピーを作成し、そのコピーをPEエディタでオープンします。[モジュール(読取専用)]の場合は、選択モジュールをそのまま読み取り専用モードでオープンします。モジュール一覧で対象PEファイルを指定する必要がない場合は、ラジオボタンは初期設定の[モジュール指定なし]のままで「PEエディタを起動して編集」ボタンを押します。 ■(モジュールリスト上で左クリック) モジュール一覧リスト上で左クリックを行えば、カーソル直下の文字列を取得してクリップボードにコピーします。 ●その他設定・バージョン情報 ■PEiDを使用 選択モジュールのパッカー/コンパイラ情報を取得して表示するかを設定します。 ■最前面表示 表示されているダイアログの最前面表示を行うかを設定します。 ■カラム幅調整 プロセスリストとモジュールリストのカラムの幅を、そのカラムの項目に含まれる文字列の最大字数に合わせて変更するかを設定します。 ■UMPEのバージョン情報 UMPEのバージョン情報と、UMPEが使用したPEiD、PEiDLL.DLL、16Edit FXのクレジットを表示します。PEiD、PEiDLL.DLLは過去のバージョンで同梱・使用していたものであり、現バージョンでは使用しません。 |
各コントロールの説明(PEエディタ・カテゴリ別)
●画面説明 ●各カテゴリ共通項目 ■(カテゴリ) ダイアログ左上にあるツリービューで、対象PEファイルに行う操作のカテゴリを選択します。PEダンパーでモジュールを指定せずにPEエディタを起動した場合は、最初に[PEファイル]カテゴリで、対象とするPEファイルをオープンする必要があります。 ■最前面表示 表示されているダイアログの最前面表示を行うかを設定します。 ■縮小表示 表示されているダイアログの縮小表示と通常表示を切り替えます。 ■終了 PEエディタを終了させ、PEダンパーの画面に戻ります。 ■カラム幅を最大字数で調整 リストビューのカラムの幅を、そのカラムの項目に含まれる文字列の最大字数に合わせて変更します。 ●PEファイル ■開く 解析・編集対象のPEファイルをオープンします。PEファイルをダイアログにドラッグ・アンド・ドロップでオープンすることもできます。Shiftキーを押したままオープンすることにより、読み取り専用モードでオープンすることが可能です。 ■閉じる オープンしたPEファイルを閉じます。この時点で、PEファイルに行った書き換え内容が確定します。PEエディタのダイアログを閉じた際には、その時点でオープンしていたPEファイルは自動的に閉じられます。 ■バックアップ作成 PEファイルをオープンした際に、対象PEファイルと同じフォルダにバックアップを作成します。 ■バージョン情報詳細 オープンしたPEファイルの詳細なバージョン情報等を表示します。表示内容に文字化けが生じたならば、文字セットを変更して適切に表示できるか試してみてください。 ■Web検索 このボタンの左側にあるコンボボックスで選択された、MD5/SHA-1/SHA-256いずれかのハッシュを、Web上で検索します。 ■PEiD(チェックボックス) PEファイルをオープンした際に、対象PEファイルのパッカー/コンパイラ情報を取得するかを設定します。 ■解析対象を起動して解析開始 オープンしているPEファイルを起動し、さらにうさみみハリケーンで解析します。うさみみハリケーンは起動後に自動でこのPEファイルのプロセスを選択します。あらかじめ、このボタンの下にあるコンボボックスで、うさみみハリケーンの実行可能ファイルを選択してください。64ビット版のUMPE(UMPE64.exe)では、うさみみハリケーンの64ビット版(UsaMimi64.exe)を使用します。 ■起動済み オープンしているPEファイルがすでに起動している場合は、このチェックボックスをオンにしてください。対象PEファイルの起動は行わず、そのままうさみみハリケーンで解析します。64ビット版のUMPE(UMPE64.exe)では、うさみみハリケーンの64ビット版(UsaMimi64.exe)で解析します。 ■解析対象の実行オプション(エディットボックス) 必要に応じて、対象PEファイルを起動する際のコマンドラインオプションを設定します。 ■親フォルダを開く 対象PEファイルがあるフォルダをエクスプローラで開きます。 ■エクスプローラのコンテキストメニューを表示 対象PEファイルに対する、エクスプローラのコンテキストメニューを表示します。本来エクスプローラ上で表示されるものであるため、一部のメニュー項目は使用できません。このコンテキストメニューにPEファイル対応のプログラム解析ツールを登録しておけば、同ツールの起動を簡易化できます。ただし、当ツール側で当該PEファイルをすでにオープンしているため、ファイルオープン処理の競合が生じる可能性があります。当ソフトウェアを非管理者権限で起動した場合など実行環境により、また、対象PEファイルを読み書き可能モードでオープンした場合は、この機能が正常に動作しないことがあります。 ●ヘッダ・フラグ・ディレクトリ・その他 ■基本操作 各設定値を16進数で書き換え、あるいは一覧から選択してから、[書き込み実行]ボタンを押します。「ヘッダ」カテゴリのバージョン項目のみ10進数で入力します。[元の値に戻す]ボタンで書き込んだ内容を元に戻して書き込みます。これらのカテゴリで不適切な数値を書き込むと、対象PE ファイルは起動できなくなります。 ヘッダ内の計算項目欄にある「TimeDateStamp」は、UTC(協定世界時)で表示しています。これを9時間進めると、JST(日本標準時)になります。なお、この「TimeDateStamp」は本来、コンパイラでPEファイルをコンパイルした日時の情報が格納されるのですが、コンパイルした日時ではなく「一意のID」の値が格納されるケースもあります。 ASLRなど一部フラグの書き換え結果が、対象PEファイルの実行時に反映されているかは、うさみみハリケーンのメニューで「ファイル」(新型32ビット版・64ビット版では「プロセス」)→「プロセスの各種情報を表示」から、カテゴリ「実行状況」選択で確認することが可能です。 ●インポート・遅延ロード・エクスポート ■一覧の並び替え インポート関数・遅延ロードによるインポート関数・エクスポート関数一覧で、「インポート関数名」、「サンクオフセット」といったカラムを横方向にドラッグすることで、カラムの並び順を変更可能です。また、カラムをクリックすれば、「インポート関数名」といったそのカラムの内容でリストの並び替えを行います。同じカラムを連続してクリックすれば、並び替えの昇順・降順を切り替えます。カラムのクリックで指定された並び替え順は、PEエディタを表示している間は保持するようにしており、開いているPEファイルを閉じてから別のPEファイルを読み込んでも、指定済みの並び替え順で表示します。 ■異常値の表示 表示内容のオフセットなど数値に異常な値が見つかった場合は、数値にアスタリスクを付けて表示します(例:00001234*)。たいていの場合、この数値は使用することのない、ファイル上のオフセットに変換できないRVAを指します。 なお、エクスポート関数の表示において、名前とプログラムコードが存在しない、序数のみの関数は表示しません。 ■修飾除去 インポート関数やエクスポート関数に施された関数名の修飾(マングリング)を除去(デマングル)します。修飾除去の例は以下のようになります。もし、Shiftキーを押しながらこの[修飾除去]ボタンを押し下げれば、修飾除去後の関数名だけではなく、関数の型の情報も併せて表示します。GCC等一部のコンパイラが施した関数名の修飾は除去できないことがあります。 ??2@YAPAXI@Z -> operator new ??_Eexception@@UAEPAXI@Z -> exception::`vector deleting destructor' ■全コピー リスト上に表示されている、インポート関数あるいはエクスポート関数の情報全てをクリップボードにコピーします。リストビューのカラムの区切りはタブ文字に変換しています。このコピー機能は、いったんテキストエディタ上で内容を貼り付けて、用途に応じた整形や抽出などの編集を行うケースを想定しています。 ■選択関数名を検索 このボタンの右にあるコンボボックスで指定したWebサイトで、選択関数名を検索します。Microsoftの技術資料を対象とする検索は、そのURLが頻繁に変更されリダイレクトは不十分なことから、「Microsoft(日)」の検索に対して、設定保存用「UMPE.ini」と「UMPE64.ini」のテキストファイルで任意の検索用URLを指定できるようにしました。必要に応じてこれらのテキストファイルを作成し、下記の形式で検索用URLを指定してください。 [Setting] WebSearch=https://****.jp/ ■(リスト上で左クリック) リスト上で左クリックを行えば、カーソル直下の文字列を取得してクリップボードにコピーします。 ●リソース ■全てのアイコンを抽出 対象PEファイルのリソースに含まれる全てのアイコンを検索し再構築してから出力します。指定した保存先のフォルダに、連番のアイコンファイルを出力します。複数のイメージを格納したアイコンや、Windows Vista以降で使用できる画像サイズが巨大なアイコンの出力にも対応しています。 ■選択リソースをダンプ 選択されたリソースデータをそのままバイナリデータとしてファイルに保存します。初期設定の保存ファイル名にはこのリソースデータの先頭オフセットを使用します。うさみみハリケーンにはリソース文字列ビューアのResStrView_DotNET35.exe/ResStrView_DotNET40.exeを同梱していますので、リソース文字列取得あるいは画像リソースなどのダンプには、このツールを併用されることをお勧めします。ただし、1つのPEファイルに対して、このツールとUMPEを同時に使用するならば、UMPE側では対象PEファイルを読み取り専用モードでオープンしておく必要があります。 ■異常値の表示 表示内容のオフセットなど数値に異常な値が見つかった場合は、数値にアスタリスクを付けて表示します(例:00001234*)。たいていの場合、この数値は使用することのない、ファイル上のオフセットに変換できないRVAを指します。 ■(リスト上で左クリック) リスト上で左クリックを行えば、カーソル直下の文字列を取得してクリップボードにコピーします。 ●デジタル署名 ■署名の有効性確認 対象PEファイルにデジタル署名が存在する場合に、その有効性を確認します。この処理は実行環境によっては数分を要するため、デジタル署名の内容表示とは別処理にしました。Windows 8以降では、Windowsによる制約が原因で、システムDLLなどのデジタル署名の有効性確認に失敗する、すなわち「不正なファイル」と判断することがあります。 ■証明書選択・詳細ダイアログ表示 Windows の機能を使って、対象PEファイルのデジタル署名の詳細を表示します。実行環境が原因で当ソフトウェアがデジタル署名の詳細を表示できない、あるいはデジタル署名の有効性確認に失敗する際には、このWindowsの機能を使用してください。 ●デバッグ情報 ■デバッグ情報詳細(エディットボックス) 対象PEファイルにデバッグ情報が存在する場合に、その詳細を表示します。 ●その他 ■TLS Callback関数 対象PEファイルに実装されている、エントリーポイントよりも先に実行される特殊な関数「TLS Callback関数」を一覧表示します。この関数の詳細については、以下の解説を参照されることをお勧めします。 参考:「エントリーポイント以前に実行される解析対策について知りたい」 https://digitaltravesia.jp/VA028184/qands.html#D38 ●セクション ■選択セクションをファイルにダンプ セクションリスト上で選択したセクションをバイナリデータのファイルとして保存します。 ■ダンプファイルのセクション情報を修正 プロセスメモリ上からダンプしたモジュールに生じる、セクション情報の不整合を修正します。 ■カラム幅調整 セクションリストのカラムの幅を、そのカラムの項目に含まれる文字列の最大字数に合わせて変更します。 ■名前(エディットボックス) 追加するセクションの名前を半角英数で設定します。最大字数は8文字です。 ■サイズ(エディットボックス) 追加するセクションのサイズを設定します。このサイズはセクションアラインの倍数に設定してください。 ■追加セクションにファイルを書き込み(チェックボックス) このオプションを有効にすると、セクションを追加し、さらに指定したファイルを追加セクションに書き込みます。追加セクションのサイズは指定ファイルのサイズを元に自動で設定されます。 ■参照 追加セクションに書き込むファイルのパスを指定します。指定されたパスはこのボタンの下のエディットボックスに表示されます。 ■セクション追加 指定された名前、サイズ、ファイルパスを元にセクションを追加します。元のPEファイルにセクションアラインの不整合があれば、自動で修正してからセクションを追加します。この処理はOverlayへの影響を考慮していません。 ■追加取消 最後に追加されたセクションを消去します。 ■フラグ変更 選択されたセクションの属性と内容のフラグを、このボタンの上にあるチェックボックスで指定されたもので変更します。DEPに対処するためコードを含むセクションには必ず「実行」の属性を付加してください。なお、フラグと併せて表示される「エントロピー」は、選択セクション内の「バイナリデータの構成や状態」を、データ内容の乱雑さとして対数ベースの式に当てはめて演算し、数値で表現した参考情報であり、変更することはできません。 ■(リスト上で左クリック) リスト上で左クリックを行えば、カーソル直下の文字列を取得してクリップボードにコピーします。 ●補助ツール ■ファイルサイズ変更実行 16進数で指定された値でファイルサイズを変更します。ファイルサイズの増加・減少の両方に対応しています。 ■アドレス/オフセット(エディットボックス) アドレス⇔オフセット変換を行うアドレスまたはオフセットを16進数で入力します。 ■入出力アドレスをVAとして処理 入力されたアドレス、あるいは出力されるアドレスを、RVAにImageBaseを加算したVAとして扱います。 ■変換実行 このボタンの上部のラジオボタンで設定されたモードでアドレス⇔オフセット変換を行い、変換結果を出力します。 ■仲介DLL(Proxy DLL)ソースコード出力 オープンしているDLLファイルのエクスポート関数情報を元に、仲介DLL(Proxy DLL)を製作するためのソースコードを出力します。仲介DLLについては、解説「仲介DLL(Proxy DLL)ソースコード出力機能について」を参照願います。 ●バイナリエディタ(ヘキサエディタ、日本での通称は「バイナリエディタ」) ■「へきさにゃん」の併用 「うさみみハリケーン」には、ヘキサエディタ「へきさにゃん」を同梱していますので、状況に応じた当機能との併用をお勧めします。 ■基本操作 ダイアログで表示される、ヘッダやセクションなどのオフセットを示すツリービューで項目を選択することで、バイナリエディタの初期表示オフセットを指定します。次に、バイナリエディタの表示に使用する文字コードやフォントサイズを指定してから[バイナリエディタ起動]ボタンを押します。文字コードはバイナリエディタ上で動的に切り替え可能です。 ■バイナリエディタの操作 操作はツールバーのボタンで行います。ツールバーのボタンにカーソルを重ねると、そのボタンの機能の説明文が表示されます。16進データ表示部と、文字列データ表示部の両方で、16進データあるいは文字列データの直接入力が可能です。文字列データの直接入力は、選択されている文字コードを基準にして行います。漢字・かな入力モードすなわち、IMEが有効になっている場合は、誤入力防止のため16進データ表示部での入力は無視します。必要に応じ、左クリックで任意のオフセットを指定したり、ドラッグで選択範囲を指定します。 バイナリデータ書き換え結果を対象ファイルに反映させるには、ツールバーの[書き換え内容を保存]ボタンを押します。 このバイナリエディタで、ツールバーの左から5番目のボタンを押すと、選択範囲のバイナリデータを下記の文字列形式に変換してクリップボードにコピーし、さらに選択範囲のバイナリデータを別途ファイルとして保存します。このボタンを押す代わりにCtrlキー+Dキーでも同じ処理を行います。クリップボードへの文字列コピーのみ行いたい場合は、Altキーを押しておく(Ctrl+Dキー併用不可)か、ファイル保存をキャンセルしてください。 ▲クリップボードへコピーするバイナリデータの表示テキスト形式(例) unsigned char aData[] = { 0x44, 0x65, 0x62, 0x75, 0x67, 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3A, 0x92, 0x6C, 0x91, 0x9D, 0x89, 0xC1, 0x83, 0x7B, 0x83, 0x5E, 0x83, 0x93, 0x82, 0xAA, 0x89, 0x9F, 0x82, 0xB3, 0x82, 0xEA, 0x82, 0xDC, 0x82, 0xB5, 0x82, 0xBD, 0x00 }●逆アセンブラ ■基本操作 逆アセンブルの開始オフセットとして、エントリーポイントあるいは任意のオフセットを指定してから[逆アセンブル実行]ボタンを押します。任意のオフセットを指定する場合は、かならずニーモニックの先頭となるオフセットを指定する必要があります。ニーモニックの先頭かが不明確な場合は、1バイトずつオフセットを前後にずらしながら逆アセンブルを行い、適切に逆アセンブルできるオフセットを探ってください。 逆アセンブルコードリスト表示後、任意の逆アセンブルコードを選択して[先頭→選択行まで]ボタンで、逆アセンブルコードリストの先頭から選択行までのバイナリデータでPEiD用シグネチャ文字列を生成してクリップボードにコピーします。生成したシグネチャは、当ソフトウェア同梱の「UserDB.txt」あるいは「UserDB64.txt」に取り込むことで当ソフトウェアから使用可能です。 逆アセンブルコードリスト上で左クリックを行えば、選択列のオフセット文字列を取得してクリップボードにコピーします。同様に右クリックを行えば、選択列の全項目をタブで区切った文字列としてクリップボードにコピーします。左クリック時には、画面左上にある、「逆アセンブル開始オフセット」の指定オフセット入力欄も書き換えます。 ■注意事項 この逆アセンブラは、プログラムコードのバイト列を適切に逆アセンブルできないケースがあります。これは実装した逆アセンブルエンジンの仕様によるものです。 例えば、バイト列「4A8D0420」が、本来の「LEA RAX, QWORD PTR [RAX+R12]」ではなく、「LEA RAX, QWORD PTR [RAX]」と表示されます。 ●簡易ヘルプ ■簡易ヘルプ(エディットボックス) 操作上の重要注意事項など、簡易的なヘルプを表示します。 |