プロセスメモリ書き込み操作
選択アドレスへの直接書き込み・選択範囲の一括書き換え
選択アドレス以降に、数値データや文字列データを書き込みます。数値データは入力方式により10進数や16進数で指定可能で、各数値データの書き込みサイズも指定できます。また、数値データは半角スペースで区切ることにより、複数の数値データを一度に書き込むことが可能です。 さらに、選択範囲内に指定した書き込み用データを繰り返し書き込んで、選択範囲を埋めるオプションもあります。 |
●画面説明 ●書き込み範囲(グループボックス) ■開始 書き込みを開始するアドレスを16進数で指定します。 ■終端 書き込み範囲の終端アドレスを16進数で指定します。 ■範囲終端を入力データで決定 書き込み範囲の終端アドレスを、入力されたデータを指定モードで変換した後のデータサイズで決定します。このオプションは書き込み範囲の終端アドレスを意識する必要がない場合に有用です。 ●書き込むデータを入力(グループボックス) ■データ入力用エディットボックス 書き込むデータを入力します。入力方法の詳細については「検索・書き込み・置換での特殊なデータ入力」を参照して下さい。 ●書き込むモードを指定(グループボックス) ■モード指定用ラジオボタン、オプション指定用チェックボックス 書き込むデータの種類を指定します。指定方法の詳細については「検索・書き込み・置換での特殊なデータ入力」を参照して下さい。 ●その他のオプション ■入力データを繰り返して書き込み(指定範囲内で入力データサイズの倍数上限まで) エディットボックスに入力された書き込むデータを指定されたモードで変換し、指定範囲内に繰り返して書き込みます。指定範囲のサイズが、入力されたデータを指定モードで変換した後のバイト数の倍数ではない場合は、端数バイト分は無視して書き込みは行いません。 ■書き込み前に書き込み対象範囲のバイナリデータをコピーバッファに退避(アンドゥ用) 書き込みを行う指定範囲のバイナリデータを、書き込み前に当ソフトウェア独自の記録バッファに退避させておくことで、必要に応じて指定範囲内のバイナリデータを書き込み前の状態に戻すことが可能になります。アンドゥ操作はメニューの[編集]→[貼り付け]で行います。 ●書き込み操作・入力チェック ■書き込み 入力されたデータや設定内容を元にプロセスメモリへの書き込みを行います。 ■入力チェック 入力されたデータと指定されたモードに問題が無いかチェックを行います。チェックのみで書き込みは行いません。 |
10進数入出力(新型32ビット版・64ビット版では「10/16進数表形式入出力」
バイナリデータの表示や書き換えを10進数ベースで行います。表示・書き換えはByte/Word/DWord/QWord/Float/Doubleの各種数値形式に対応しています。新型32ビット版「UsaMimi32.exe」および64ビット版「UsaMimi64.exe」では、10進数の入出力に加えて16進数での入出力にも対応しています。 基本的な表示アドレス変更はマウスホイールで行います。通常のマウスホイールでは表示アドレスを±10h変更し、さらに、Shiftキーを押しながらマウスホイールでは±100h変更、Ctrlキーを押しながらマウスホイールでは選択された数値形式のサイズで±の変更をします。マウスホイールによる表示アドレス変更は、10進表示リストビューにフォーカスがある場合に有効です。このダイアログでの各種操作時には、自動的に10進表示リストビューにフォーカスが設定されるようにしていますが、他の操作によりフォーカスが外れた際は、10進表示リストビューをクリックしてください。 10進数値の入力は、まず10進表示リストビュー上で表示される書き換え対象の数値をクリックし、入力可能な状態にした上で、「整数・実数モード指定」で選択した数値形式での新しい値を入力します。整数の場合は、「-77」「0x77」といった負や16進数での入力も可能です。ただし32ビット版UsaMimi.exeでは、QWORDを16進数での指定時に0x7FFFFFFFFFFFFFFF以上の値は入力しないでください。実数の場合は、「123」「123.456」など通常の数値入力に加え、「7.2499434846656525e+078」といった形式での入力も可能です。さらに、「123 456 789」や「123.45 234.56 345.78」というように、複数の数値を半角スペースで区切って入力することにより、選択アドレス以降に、連続する複数の数値を一括で入力することができます。 数値は必ず半角で入力してください。また、不測の事態を招かないよう、不要なアルファベットや記号の混入などの、入力ミスが無いように十分に注意してください。入力をキャンセルする場合はESCキーを押します。入力後にエンターキーを押すと入力が確定し、入力値でプロセスメモリ上のバイナリデータを書き換えます。 ちなみに、ダンプ表示ウィンドウ上で、16進数ベースでByte/Word/DWord単位の表示と書き込みを行いたい場合は、ダンプ表示ウィンドウにフォーカスがある状態でF1キーを複数回押せば、表示・入力モードを切り替えます。 この機能は、Windows 95上ではOSの仕様により入力とホイール操作が正常に動作しません。 |
●画面説明 ■< 10 > ダイアログ画面の標準・縮小モードを切り替えます。 ■最前面 ダイアログの最前面表示と解除を切り替えます。 ■列幅調整 リストビューの各カラムの幅を、表示文字列の最大幅で調整します。 ●10進表示先頭アドレスを変更(ホイール可) ■表示アドレス(エディットボックス) 10進表示リストビューでの現在の表示アドレスを表示します。このアドレス文字列を手動で変更した場合は、[入力アドレスで変更]ボタンでアドレス変更を反映させます。 ■入力アドレスで変更 表示するアドレスをエディットボックスに直接入力した場合に、このボタンで表示アドレスを変更して再表示します。 ■選択アドレスで変更 ダンプ表示ウィンドウでの選択アドレスを再取得します。なお、このダイアログを表示させた際に、自動的にダンプ表示ウィンドウでの選択アドレスを取得しています。 ■矢印 10進表示リストビューでの現在の表示アドレスを増減させてから再表示します。アドレス増減幅は、「↑↑」ボタンは-0x100h、「↑」は-10h、「←」は-(選択された数値形式のサイズ)hです。同様に、「↓↓」ボタンは+0x100h、「↓」は+10h、「→」は+(選択された数値形式のサイズ)hです。 ●整数・実数モード指定 ■Byte/Word/DWord/QWord/Float/Double 表示・書き換えを行うモードを選択します。書き換えは、選択された数値形式の数値範囲でのみ書き換え可能です。たとえば、Byteなら1バイトで表示可能な数値範囲のみ入力可能です。 ■符号あり整数 表示するモードがByte/Word/DWord/QWordの場合に、表示する整数を符号あり整数と解釈して表示するかを設定します。なお、実数の場合は常に符号ありとして扱います。 ●補助機能 ■式入力演算/進数変換ソフト起動 式入力演算・進数変換ソフトであるUMECを起動します。 ■選択範囲の整数への演算実行 ダンプ表示ウィンドウでの選択範囲への、各種演算を行うダイアログを表示します。この機能はFloat/Doubleの実数モード選択時には使用しないでください。 ■特定アドレス格納値の状況推移を表示(10進) 指定アドレスの格納値の推移を、多段スナップショットで表示するダイアログを表示します。 |
キー入力履歴を元にアンドゥ・リドゥ
ダンプ表示ウィンドウ上で行ったキー入力によるプロセスメモリ書き換えの履歴を元に、書き換えのアンドゥ・リドゥを行います。アンドゥ・リドゥ用ダイアログを表示後、まず書き換え履歴を取得してください。 |
●画面説明 ■書き換え履歴取得・更新 ダンプ表示ウィンドウで行ったキー入力による書き換え履歴を取得してリストアップします。 ■書き換え前に戻す 選択された書き換え履歴の情報を元に、書き換え前の状態になるよう書き戻します。アンドゥ操作です。 ■書き換え再実行 選択された書き換え履歴の情報を元に、書き換え後の状態になるよう再度書き換えます。リドゥ操作です。 ■書き換え履歴(リストボックス) 書き換え履歴の一覧を表示します。履歴の情報は、以下のような構成になっています。表示されるバイナリデータでは、書き換えサイズの範囲外は0x00としています。
|
選択範囲への演算実行
選択範囲内のバイナリデータを数値データとして演算処理を施し、その結果をプロセスメモリに書き込みます。桁あふれ分は無視されます。演算の種類は、アセンブリ言語の命令名で表示しています。演算単位のバイト数を間違わないように注意してください。 演算処理は選択範囲内を演算単位のバイト数毎に連続して行いますので、プロセスメモリ上の複数の格納値を一括処理することも可能です。 |
●画面説明 ■演算範囲アドレス(グループボックス) 演算処理と書き込みを行う範囲の先頭・終端アドレスを16進数で設定します。ダンプ表示ウィンドウ上の選択範囲ではなく、ここで指定された範囲をベースに演算処理と書き込みを行います。また、現在のダンプ表示ウィンドウ上の選択範囲を取得可能です。 ■演算単位(グループボックス) 演算処理と書き込みを行う単位サイズを、1/2/4バイトで設定します。 ■演算処理内容(グループボックス) 演算処理の種類を設定します。
■演算処理用数値/格納アドレス(エディットボックス) 選択範囲のバイナリデータに演算を施すための数値を入力します。NEG、NOT、BSWAPでは数値入力の必要はありません。入力された数値は、演算単位と同じサイズの数値として認識されます。 ■格納アドレス指定(16進) 演算処理用数値を、プロセスメモリ上のその数値が格納されたアドレスで指定する場合は、チェックを入れます。エディットボックスに入力された数値を16進数のアドレスとして認識し、そのアドレスに格納された数値を元に演算を行います。いわゆる「アドレス間演算」です。指定アドレスに格納された数値は、指定した演算単位との演算処理に問題がないものか、事前に確認されることをお勧めします。 ■演算・書き込み実行 指定された演算単位・演算の種類・演算用数値を元に、演算とプロセスメモリへの書き込みを実行します。 |
固定化書き換え
アドレスと書き換え間隔および書き換え用データを指定して、指定した間隔ごとに自動で書き換えを行うことにより、プロセスメモリ上のバイナリデータの固定化を行います。書き換え用データには、数値、文字列、バイト列およびビット列を指定可能です。また、数値の指定は連続した数値の並びを指定可能なシーケンスにも対応しています。 この固定化書き換えの効果を検証した後に、書き換え内容を改造コードとして出力することも可能です。なお、書き換え対象アドレスを単一ポインタあるいは多重ポインタで指定したい場合や、対象アドレス格納値への数値加算といった算術・論理演算処理が行いたい場合は、この機能ではなく、改造コード実行機能あるいはプラグイン自作で対処してください。 Windows Vista以降では、EXEモジュールなどの先頭アドレスをランダム化する、セキュリティ上の脆弱性を緩和する機能「ASLR」が実装されており、本来固定アドレスであるEXEモジュール内のアドレスも変動するケースがあります。そのため、必要に応じてこのASLRを、当ソフトウェアに同梱しているPEエディタ『UMPE』を用いて無効化してください。ASLR無効化の操作手順はリンク先を参照してください。 高頻度の描画処理によるシステムの負荷増を回避するため、この機能での書き換えを行った時点では、ダンプ表示ウィンドウでの表示更新は行いません。必要に応じて、メニューの「編集」以下から開始できる「表示の自動更新機能」を併用してください。 使用するAPI関数の動作上の問題により、この機能はWindows9x/Me/2000では使用できません。 この機能と同様の、プロセスメモリ上のバイナリデータの固定化には、「構造体編集」機能の使用および、「パラサイトルーチン作成」機能で作成した固定化ルーチンをメニューの「デバッグ」→「選択アドレスでCreateRemoteThread関数を実行」で実行させるアプローチがあります。 |
●画面説明 ●固定項目追加・編集 ■アドレス 書き換えを行うアドレスを、半角英数字の16進数で設定します。「0x」は不要です。この固定化書き換え機能の起動時には、ダンプ表示ウィンドウ上の選択アドレスが対象アドレスとして自動で入力されます。アドレスの誤指定を回避するため、このエディットボックスには8文字以上は入力できません。ダンプ表示ウィンドウ上で、バイナリデータの16進表示部分を選択した状態で「/」キーを押し下げすると、選択アドレスが文字列としてコピーされますので、アドレス指定操作の簡易化に活用できます。 ■更新間隔指定(グループボックス) コンボボックスを使って、書き換えを行う間隔を秒単位で設定します。高頻度でのプロセスメモリ書き換え処理はシステムの負荷を高めることになり、対象プロセスの動作に悪影響を及ぼす可能性も生じるため、なるべく控えてください。当機能の起動時に、各更新間隔ごとのタイマーを作成しており、そのタイマーでの更新間隔経過ごとに、該当する更新間隔かつ有効(=チェック)な項目の内容を元に書き換えを行います。それぞれの項目を有効化した時点からの更新間隔ではないことに注意してください。必要に応じて、項目のダブルクリックあるいは選択項目の右クリックから、チェックや指定更新間隔および上記タイマーと関係なく1回だけ動作するテスト書き換えを行ってください。タイマー作成のために使用しているtimeSetEvent関数には新しい代替API関数であるCreateTimerQueueTimer関数がありますが、このAPI関数はWindows XPなど古いOS上での動作上の問題点が指摘されているため、timeSetEvent関数を使用しています。 ■説明(エディットボックス) 指定した固定化書き換え項目についての説明文を入力します。入力上限は32文字です。 ■固定データ(コンボボックス・エディットボックス) 固定化書き換えを行うデータの種類をコンボボックスから選択し、さらにエディットボックスで書き換え用データを指定します。入力上限は64文字です。整数は10進数と16進数(「0x」を付ける)のどちらでも指定可能です。数値を書き込む場合は、「123 0x456 789」や「123.45 234.56 345.78」というように、複数の数値を半角スペースで区切って入力することにより、指定アドレス以降に、連続する複数の数値を一括で書き込むことができます。 数値は必ず半角で入力してください。また、誤作動回避のため、不要なスペースや記号などが入らないように注意してください。 文字列書き込みの場合は上書き用途が多いと考えられるため、文字列終端にNULL終端を付けていません。必要に応じて文字列終端にNULL終端すなわちバイナリデータ0x00(Unicodeなら0x0000)を書き込む、別の項目を追加してください。あるいは、書き込み内容をバイト列書き込みに変換して最後にNULL終端を追加します。Windows ANSIやUnicode(LE)ならば、当ソフトウェア同梱の式入力演算・進数変換ソフト「UMEC」(UMEC.exe)で書き込みたい文字列を入力すれば、その文字列に対応するバイト列がダイアログ下部に文字列で出力されます。なお、この文字列書き込み内容を下記[選択項目を改造コード形式でコピー]ボタンで改造コード形式に変換することでも、NULL終端の追加を簡単に行うことができます。ちなみに、オプションで「クリップボードへコピーするバイナリデータの表示テキスト形式」に「アドレスと連結バイナリデータの改造コード形式」を設定しておくと、ダンプ表示ウィンドウ上で選択範囲のコピーを行った際に、選択範囲内のバイナリデータを、改造コード形式の文字列としてクリップボードにコピーします。 ビット列書き込みの場合は、0と1で1バイト単位(8の倍数)のビット列を指定します。この際、「00110011_01011111-11110011」というように半角記号を使ってビット列を区切ることが可能です。1バイト(8ビット)に満たないビット列は誤入力の可能性があるため無視します。バイト列も同様に半角記号でバイトの並びを区切ることが可能です。 ■上設定で固定項目追加 指定されたアドレス、更新間隔、説明、書き換え用データの設定を使って、固定化書き換えを行う項目を下方のリストビューに追加します。項目数の上限は256項目です。選択かつフォーカスを持つ項目があればその項目の下に挿入し、なければ一番最後に追加します。一番最後の項目が選択かつフォーカスを持つ状態にすれば、挿入処理が実質追加処理となります。リストビュー上でチェックを入れればその項目が有効化され、指定間隔ごとにその項目の内容で書き換えを行います。誤操作防止のため、書き換えの開始は手動で行うようにしました。書き換えを行う更新間隔が経過した際に、この項目追加処理中であった場合は、誤作動回避のため書き換え処理をスキップします。 ■上設定で選択固定項目を編集 リストビューで選択された項目を、指定されたアドレス、更新間隔、説明、書き込むデータの設定を使って上書きします。リストビュー上で選択項目が複数ある場合は、選択かつフォーカスのある項目が編集対象となります。書き換えを行う更新間隔が経過した際に、この項目編集処理中であった場合は、誤作動回避のため書き換え処理をスキップします。 ●固定項目リストの操作 ■クイックセーブ リストビューの全内容を、当ソフトウェアのインストール先フォルダに、セーブデータ「MemFreeze.sav」として保存します。Shiftキーを押しながらこのボタンをクリックすると、セーブデータの名前や保存先を指定できる、通常のセーブ処理を行います。 ■クイックロード 当ソフトウェアのインストール先フォルダにあるセーブデータ「MemFreeze.sav」を読み込んで、リストビューに表示します。Shiftキーを押しながらこのボタンをクリックすると、任意のセーブデータを読み込む、通常のロード処理を行います。また、任意のセーブデータをこのダイアログにドラッグ・アンド・ドロップすることでも、ロード処理を行います。セーブデータをロードすると、それまでリストビューに表示されていた項目は全て破棄されます。 ■選択項目削除 リストビュー上の選択項目を削除します。 ■全項目削除 リストビュー上の全項目を削除します。 ■全項目を一括チェック(有効化)・チェック解除 リストビュー上の全項目に対して、チェックすなわち有効化、あるいはチェック解除すなわち無効化を一括して行います。 ■選択項目を改造コード形式でコピー リストビュー上の全選択項目を、アドレスとバイト列からなる改造コード形式に変換してクリップボードにコピーします。この改造コードは、メニューの「編集」→「改造コード実行」で使用可能です。 ●リストビュー上のクリック ■左クリック 左クリックでリストビュー上の項目が選択された際には、その項目のアドレスを使って、ダンプ表示ウィンドウでの表示アドレスを変更します。複数の項目を選択する場合は、CtrlキーやShiftキーを押しながら左クリックを行います。 ■ダブルクリック リストビュー上の項目がダブルクリックされた際には、その項目の内容を使って、チェックや指定更新間隔とは関係なく1度だけ書き換えを行います。 ●ポップアップメニュー(リストビュー上で右クリック) ■選択された項目を有効化 リストビュー上の全選択項目を、チェックすなわち有効化します。 ■選択されていない項目を有効化 リストビュー上の選択されていない全項目を、チェックすなわち有効化します。 ■選択された項目を無効化 リストビュー上の全選択項目を、チェック解除すなわち無効化します。 ■選択されていない項目を無効化 リストビュー上の選択されていない全項目を、チェック解除すなわち無効化します。 ■選択された項目を1度だけテスト書き換え リストビュー上の全選択項目に対して、それぞれの内容をもとに、チェックや指定更新間隔とは関係なく1度だけ書き換えを行います。 ■選択された項目に栞を設定 リストビュー上の選択された全項目に栞(しおり)を設定し、ダンプ表示ウィンドウ上で簡単に参照できるようにします。 ■すべての項目を選択 リストビュー上の全項目を選択状態にします。 ■すべての選択を解除 リストビュー上の全項目を非選択状態にします。 |