範囲検索(64Bit Mode)
概要と注意点
●基本操作■新型の「範囲検索」について この検索モードは、新型32ビット版(UsaMimi32.exe)および64ビット版(UsaMimi64.exe)では、「範囲検索」と表示しています。これは、旧来の32ビット版(UsaMimi.exe)での「範囲検索(64Bit Mode)」の改良版に相当します。ただし、操作方法に大きな違いはないため、上記の新しい「範囲検索」の使用に当たっても、下記「範囲検索(64Bit Mode)」用の解説を参考にしてください。 ■概要 開始アドレスと範囲サイズで指定したメモリエリア内で、数値や文字列の検索を行います。データの単純比較による通常検索及び、指定したメモリエリア内のデータを保存することで、データ変動箇所の検索を行うことも可能です。検索結果は、該当アドレスのリストとしてリストビューに出力されます。また、オプションの設定により、リストアップされた検索該当アドレスをダンプ表示ウィンドウ上でハイライト表示にすることも可能です。 この64ビット範囲検索では、検索対象メモリエリアのアクセス属性を指定可能にしています。さらに、QWordやDoubleなど64ビットの検索単位への対応や、通常検索・変動検索ともに検索パターンを大幅に増加させたことで、旧来の範囲検索と比較して検索の効率と確実性を大幅に向上させています。 ■解析初心者の方が検索に失敗する原因 過去に頂いた解析初心者の方々からのフィードバックによれば、解析初心者の方が検索に失敗する場合は、特に「2進数や16進数」、「数値表現」および「リトルエンディアン」への理解不足が原因となっています。当ヘルプでは、このようなプログラム解析の基礎用語の解説を用意していますので、解析初心者の方は参照されることを強くお勧めします。 ■検索のヒント 通常検索・変動検索時の検索効率化や、ポインタの検索などについては、基本操作を踏まえた上で「検索のヒント」を参照してください。 ■使用不能時の対処 解析対象アプリケーションのバグによりデスクトップ・アプリケーション・ヒープが不足して当機能が使用不能になっている場合は、システムへの負荷が少ない旧来の範囲検索を使用して下さい。 ■「簡易数値検索」機能の併用 当ソフトウェアの新型32ビット版(UsaMimi32.exe)および64ビット版(UsaMimi64.exe)には、数値の検索に特化した「簡易数値検索」機能を実装しています。もし検索対象が数値のみであれば、簡単かつ確実に検索可能な「簡易数値検索」機能の使用をお勧めします。 新型32ビット版(UsaMimi32.exe)および64ビット版(UsaMimi64.exe)では、この「範囲検索」は文字列やバイト列といったデータの検索に用い、「簡易数値検索」は数値の検索に使うという、検索モードの使い分けをお勧めします。 ■「YARAルールでスキャン」機能の併用 当ソフトウェアは、各種バイナリデータに対する柔軟な文字列・バイト列検索が可能な、「YARAルールでスキャン」機能を実装していますので、必要に応じてこの検索機能と使い分けることをお勧めします。当ソフトウェアの新型32ビット版(UsaMimi32.exe)は32ビットプロセスのプロセスメモリあるいは使用される全ての実行可能ファイル、64ビット版(UsaMimi64.exe)は32ビットおよび64ビットプロセスのプロセスメモリあるいは使用される全ての実行可能ファイルに対する、「YARAルールでスキャン」が可能です。ちなみに、当ソフトウェアに同梱している、汎用ファイルアナライザ『青い空を見上げればいつもそこに白い猫』(AoZoraSiroNeko.exe)では、指定ファイル(群)に対する、「YARAルールでスキャン」機能を実装しています。 ■ホットキーの使用 対象プロセスの画面をアクティブにしたまま検索するならば、この検索機能の各種操作にホットキーを設定するプラグイン「UHPSearchHotkey.dll」を使用してください。メニューの「プラグイン」→「UHPSearchHotkey.dll」で起動します。この検索機能の各ボタンに対応する「なし」と表示されている部分をクリックして選択後に、ホットキーにしたいキー(Ctrl + Shift + Qなど)を実際に押して指定してから、「開始」ボタン押し下げで指定したホットキーが有効になります。また、「解除」ボタン押し下げ、あるいはプラグインのダイアログを閉じると、全ての有効化済みのホットキーが無効になります。 ■検索対象範囲の指定 この検索機能では、検索対象とするプロセスメモリ上の範囲を指定して検索を行います。そのため、指定範囲外のデータは検索できません。初期設定として、範囲の開始アドレスが0x00010000(アプリケーション有効アドレスの先端)、範囲サイズは0x40000000バイトに指定されます。たいていはこの範囲設定で検索可能ですが、対象プロセスの仕様によっては検索対象データがこの範囲の外に格納されることもあります。そのため、必要に応じて、範囲サイズの指定を「40000000」から「7FFE0000」などに変更し、32ビットアプリケーション有効アドレスの終端近くまでカバーできるようにしてください。ダイアログ上部の[検索範囲を最大化]チェックボックスで、現在の検索範囲と最大化した検索範囲を切り替え可能です。この設定変更内容は、ダイアログ上部の[全設定保存]ボタンで保存されます。また、もし対象プロセスのメインモジュール先頭アドレス、すなわち当ソフトウェアで対象プロセスをオープンした際に最初に表示されるアドレスが「00400000」(32ビットアプリケーションの場合)ではないならば、対象プロセスのEXEファイルに対し当ソフトウェア同梱のPEエディタ「UMPE」(UMPE.exe)を用いて、ASLRの無効化を行うと効率的に検索可能となるケースがあります。 新型32ビット版「UsaMimi32.exe」では、32ビットプロセスが特殊な設定かつ64ビット版Windowsでとりうる、有効アドレス終端がFFFEFFFFのケースにも対応しています。ただし、「UsaMimi32.exe」で、有効アドレス終端が7FFEFFFFのプロセスを解析時に設定保存を行うと、有効アドレス終端がFFFEFFFFのプロセスの解析時にも、保存された設定が反映され検索範囲終端アドレスが7FFEFFFFに指定されてしまいます。そのため、「UsaMimi32.exe」では検索範囲終端アドレスをFFFEFFFFで保存しておくことをお勧めします。この場合、有効アドレス終端が7FFEFFFFのプロセスでは設定の読み込み時に検索範囲終端アドレスの自動修正が実行されます。 ■メモリエリアのアクセス属性 この検索機能では、検索対象メモリエリアのアクセス属性を指定して検索対象メモリエリアを絞り込むことが可能です。逆に言えば、適切でないアクセス属性を指定すると、検索しても全くヒットしませんので十分に注意して下さい。アクセス属性に関係なく検索したい場合は、[Commit-All]を指定して下さい。ちなみに、Themidaなど一部のパッカーを使用すると、メインモジュール内にある、各種データ格納メモリ領域のアクセス属性が変更されます。また、一部のPCゲームで、各種データ格納専用のメモリ領域に実行のアクセス属性を設定するケースもあります。 新型32ビット版(UsaMimi32.exe)および64ビット版(UsaMimi64.exe)では、メモリエリアのタイプを検索対象条件とする[Commit-All(MAPPED以外)]や[Commit-All(MAPPEDのみ)]を指定可能です。[Commit-All(MAPPED以外)]は通常の検索シーンでより効率的な検索が見込まれます。また、[Commit-All(MAPPEDのみ)]は特に各種エミュレーター上での検索で効率化に役立つケースが多いといえます。 ■絞り込み検索 通常検索と変動検索ともに、前の検索結果がリストに残っている状態で新たに検索を行った場合は、自動的に絞り込みモードになります。もしも検索結果で該当数過大な場合は、検索条件を変更する操作を行ってから、新しい検索条件で絞り込み検索を行ってください。絞り込みモードで検索を行えば、現在記録されている検索結果の中からさらに新しい検索条件に該当するアドレスをリストアップします。また、検索結果は通常検索と変動検索で共有します。そのため、通常検索と変動検索のどちらを使っても検索結果を絞り込むことができます。絞り込み検索を別の条件でやり直したい場合は、[(結果を)元に戻す]ボタンを押すと、検索結果を一回前の検索時のものに戻します。 ■検索結果記録数 検索結果記録は100万件が上限です。該当件数が100万件を超えている場合は、検索目的のアドレスが、記録された検索結果に含まれない可能性があります。そのため、100万件から絞り込み検索を行っても検索目的のアドレスが見つからない場合は、検索条件あるいは検索開始アドレスや検索範囲サイズを変更して再試行されることをお奨めします。また、検索条件が1バイトデータや「FFFF」等で検索該当件数が100万件を超える場合は、変動検索でのアプローチも試行してみてください。なお、このようなケースでは、「簡易数値検索」機能を使用した方が簡単に検索目的のアドレスを見つけやすいといえます。他には、「グループ検索」機能を用いて関連するデータとグループにして検索することで、当検索機能では該当件数が100万件を超えるような1バイトのデータでも、そのアドレスを容易に絞り込んで探し出せるケースがあります。 ■検索所要時間 検索所要時間はマシンのスペック等に大きく依存します。検索処理は低スペックのパソコンでもなるべくフリーズはしないように処理させています。そのため、動作が停止しているように見えてもすぐに強制終了させずに、しばらく様子をみてください。また、現状では検索結果リストの表示数上限を多く指定していると、検索結果の表示に多大な時間を要することになります(Windowsの仕様)。特に問題が無ければ表示数上限は1000件程度にしておいて下さい。 ■検索結果リスト 「元に戻す」ボタンで1回前の検索後の状況に戻します。出力されたリスト上で右クリックすると、ポップアップメニューから、「選択アドレスをコピー」等の操作を行うことが出来ます。検索結果リストでの「今回検索」・「前回検索」で表示される検索条件は、通常検索と変動検索を組み合わせて使用する場合には、通常検索での指定条件を用います。 ■環境依存型変動アドレス PCゲーム及び家庭用ゲーム機等のエミュレータでは、アプリケーションがヒープから取得したメモリブロックにパラメータ等のデータを格納した場合、そのパラメータのアドレスはOSやメモリ実装容量等に依存する環境依存型変動アドレスとなります。この場合、検索結果のアドレスを直接指定する改造コードを作成して公開しても、解析に用いた環境以外では大抵使用できません。そのため、このような環境依存型変動アドレスに対しては、当ソフトウェア用のポインタ型改造コードやデバッガ用改造コード等で対処してください。なお、このような環境依存型変動アドレスの解析は、基本的にデバッガを用いてパラメータ変動やメモリ領域確保処理を追いかけてポインタを探すことになります。 ■検索結果の保存と再利用 検索結果を保存する場合や、解析対象プロセスを再起動しながら変動内容を確認したい場合は、『特定アドレス格納値の時系列状況推移を表示』を使用して下さい。 |
■Word(ワード)/DWord(ダブルワード)/QWord(クワッドワード)境界ベース 通常検索・変動検索ともに、「境界ベース」チェックボックスにチェックを入れると、検索・比較単位のバイト数ごとにアドレスをずらしながら検索・比較を行います。 検索・比較単位サイズがWord・DWord・QWord・Float・Doubleの場合は検索・比較をWord境界(アドレスが2の倍数)かDWord境界(アドレスが4の倍数)またはQWord境界(アドレスが8の倍数)で行いますが、[境界ベース]のチェックを外すと1バイトごとに検索・比較します。通常、検索対象となるパラメータやフラグの格納アドレスは、32ビットCPUにおけるメモリアクセスの効率等の理由によりプロセスメモリ上のDWord境界に設定されるため、[境界ベース]のチェックを外す必要はありません。しかし、例外的にパラメータやフラグが配列の要素としてプロセスメモリ上に格納されている場合等には、[境界ベース]のチェックを外して1バイトごとに検索・比較する必要があります。なお、上記の「境界上に数値等を配置すること」は、「アラインメント」または「アライメント」といいます。 バイト列や文字列の検索時は、「境界ベース」の設定は無視します。 |
■概要 通常検索では、検索対象となるメモリエリアと、数値や文字列およびバイト列といった検索条件を指定して検索を行います。 |
■概要 変動検索では、まず検索対象となるメモリエリアの内容(バイナリデータ)を記録しておいて、その後、記録時のメモリエリアの内容と現在のメモリエリアの内容を比較することにより、変動あるいは不動箇所を検索します。 ■アクセス属性 変動検索で比較用バッファを確保後は、それを解放するまで検索対象メモリエリアのアクセス属性の指定を変更しないで下さい。もし変更して変動検索を行うと、誤った検索結果が表示されます。 ■検索範囲サイズ 変動検索の検索範囲サイズに指定上限はありません。変動検索の検索・比較範囲はデフォルトで0x40000000(NT系OSの場合)となっており、そのうち指定したアクセス属性の一致するメモリエリアを、確保上限値として指定したMB相当まで比較用バッファを確保して記録します。比較用バッファの確保時には、検索対象アプリケーションのメモリ使用状況を解析して、指定した検索終端アドレスまでに指定した比較用バッファの確保上限値(MB)を超えた場合は、比較用バッファに記録しないメモリエリアのアドレスを表示して警告を行います。 マシンスペックからみて過大なメモリエリア確保上限値を指定すると、システムや解析対象アプリケーションのパフォーマンスに影響を与える場合があります。 ■検索範囲の変更 『VMware』と当ソフトウェアを連携させてフルスクリーンのゲームを解析する場合や、目的のアドレスがDLLモジュール内にある特別なケース以外では、大抵の場合、変動検索の検索・比較開始アドレスと検索・比較範囲サイズはデフォルト設定あるいは検索・比較範囲サイズを0x20000000に絞り込んでも事足ります。しかし、例外として、目的のアドレスが0x40000000を超えるようなケースもあり得ますので、変動検索で目的のアドレスが見つからない場合は、メニューの[移動]→[表示アドレスを指定]のメモリマップを参考にして検索・比較開始アドレスか検索・比較範囲サイズを変更しながら検索してみてください。また、ダイアログ上部の[検索範囲を最大化]チェックボックスで、一時的に検索範囲を最大化させることも可能です。 ■検索範囲の特定 各種ゲーム機のエミュレータでは、まず点数等の、通常検索で簡単に検索可能なアドレスを検索し、そのアドレスが含まれるメモリエリアをメニューの[移動]→[表示アドレスを指定]のメモリマップ表示機能で把握して、そのメモリエリア先頭アドレスとエリアサイズを変動検索の検索・比較開始アドレスと検索・比較範囲サイズに設定して検索すれば、簡単に目的のアドレスを探し出せることがあります。 ■実数の検索 変動検索の値変動と値不動での絞り込み検索は、対象となるパラメータの値が実数(浮動小数点数)ベースでプロセスメモリ上に格納されているケースにも有効です。また、アプリケーション上での表示値にメモリ上の格納値の整数倍を用いているケースにも対処できます。 ■変動検索を行うタイミング 変動検索を効率よく行うために、変動検索を行うタイミングに注意して下さい。例えば検索目的のフラグが変化する直前にメモリ確保・記録で比較用データを作成し、同フラグが変化した直後に変動検索を行えば、検索結果として出力される変動該当箇所は最小限に抑えられ、効率的な変動検索が可能になります。また、対象アプリケーションにおいては変動該当箇所を増加させる不必要な操作を極力避けるようにして下さい。 ■変動検索での最初の絞り込み 変動検索時には、プログラムの実行に伴い常に内容が変化するスタック領域のアドレスが多々ヒットします。そのため、変動検索での最初の絞り込みとして、まず対象アプリケーションのウィンドウをアクティブ(最前面)にして何も操作をせず(スタック内容の変動は生じさせる)、次に当範囲検索ダイアログをアクティブにしてから、[不動]で絞り込みを行うと、スタック領域分のヒットを多く取り除くことが可能になります。 |