Copyright: Copyright (C) 2001-2003 うさぴょん  ALL RIGHTS RESERVED


目次
スペシャルねこまんま５７号のヘルプ

目次

●概要

●インストール・アンインストール

●ユーザーの方へのお願い

●操作上の基本事項

基本的注意事項（必ずお読み下さい）

スクリーンショットと機能マップ（必ずご覧下さい）

●機能の概要（選択プロセスへの操作）

各種プロセス操作

プロセスメモリ編集

改造コード実行

改造コード書式及び使用例

起動時改造コード自動実行

＜補足＞２進ビットパターン・OR・AND・XOR

＜補足＞符号付き整数・符号なし整数

＜補足＞プロセスメモリ上の未使用領域

＜補足＞リトルエンディアン

ユーザー入力エミュレート型コード

キーフック・全画面最前面表示のゲームへの対処法

プロセスメモリへのファイルアップロード

プロセスメモリからのダンプ

PeRdr実行(逆アセンブルコードリスト出力)

プロセスメモリ検索・変動検索

＜補足＞プロセスメモリ検索関連の追加補足

＜参考＞通常検索によるメモリ解析・改造の基本的アプローチ

●主な機能の概要（メニューから呼び出せるもの・以下メニュー項目順）

「ファイル｣

ファイルを指定してMD5/CRC-32生成

簡易バイナリファイル書き換え

PEファイルを指定して再構築

ファイルを指定して各種データ抽出

｢解析｣

プロセス一覧更新

デバッガ兼APIトレーサー

＜参考＞デバッガ用改造コード

進数変換及び整数－実数変換

ニーモニックジェネレータ

フェイク

｢アプリ｣

簡易ランチャー

｢システム｣

起動・終了関連操作

稼動アプリケーションの制御

カーソル位置取得及び同位置ウィンドウ操作

現在のメモリ使用状況他

システム監視・タイマー設定

｢Alt｣＋｢Tab｣(｢Esc｣)キー無効化・有効化

ディスプレイ省電力モード

ディスプレイ設定復旧

アイコン・フォントキャッシュ削除

デスクトップアイコン文字背景を透明化

スクリーンセーバー無効化・有効化

画面のプロパティ

ビープ音ON/OFFトグル

｢メディア｣

マルチメディア再生

｢表示その他｣

緊急退避・ウィンドウサイズ変更・最前面トグル・自己透明化・ホットキー

｢ヘルプ｣

バージョン情報

●主な機能の概要（その他）

圧縮ファイルの解凍

●注意事項（必ずお読み下さい）

●使用許諾契約書（必ずお読み下さい）

●連絡先・更新履歴

●更新履歴詳細

●謝辞


概要

●概要

【タイトル】スペシャルねこまんま５７号

【Version#】1.10

【ファイル】Neko57.lzh（左記にバージョンを付加します）

【作成月日】2003/10/07

【カテゴリ】プログラム開発支援・ゲーム解析及び改造他

【製作者名】うさぴょん(同梱UsaHook2.DLLは必殺！！ねこまんま(はぐはぐ)さん)

【ﾀｲﾄﾙ考案】必殺！！ねこまんま(はぐはぐ)さん

【ｱｲｺﾝ提供】Let's現実逃避さん

【動作環境】Windows95/98/Me/2000/XP　ランタイム一切不要

【動作確認】日本語版Windows95(OSR1)/98(SE)/Me/2000(Pro)/XP(Home)

【開発言語】アセンブリ言語(同梱UsaHook2.DLLも同様)

【 E-Mail 】usapyon_usapyon@hotmail.com

【配　　布】製作者のサイト｢Digital Travesia｣にて告知

【転　　載】事前に作者の承諾を得て下さい。無断転載は禁止します。

【２次配布】事前に作者の承諾を得て下さい。無断配布は禁止します。

【著作権等】Copyright (C)2001-2003  うさぴょん　ALL RIGHTS RESERVED

●概要補足

このソフトウェアは、システムで実行されている任意のプロセスに対し、情報取得やプロセスメモリ編集等を行うことが可能です。主な使用目的としてプログラミング過程での開発支援や、ゲームの解析・改造等を想定しています。また、他にも色々な付加機能を実装しています。

まずは当ソフトウェア画面最上部にあるプロセス一覧リストから目的のプロセスを選択し、｢確認｣ボタンを押してみて下さい。

このソフトウェアは、プログラム開発やゲーム解析の｢支援ツール｣であることから、当ソフトウェアが原因となるリソースの減少やシステムへの負担を極力回避するよう設計しています。そのため、グラフィカルなインターフェイス、省略可能な別スレッドでの処理等はもちろん、アセンブラレベルでみて実行ファイル肥大化（メモリ過大消費）に繋がるプロパティシートコントロール等は使用していません。

さらに、ユーザーが指定しない限りタイマーによるシステム監視も行いません。　ちなみに、タイマーによる頻度の高いシステム監視を行っている場合、一部のゲームで動作に不具合を生じるケースが過去にネット上で報告されています。


インストール・アンインストール

●基本操作

インストールはNeko57.lzhを解凍し同梱ファイルを適当なフォルダに展開するだけです。また、アンインストールは同梱ファイルを削除すれば完了です。当ソフトウェアは実行ファイルを含むフォルダと異なるフォルダに設定ファイルを作成したり、レジストリに当ソフトウェアの設定に関する情報を書き込むことはありません。

●INIファイル使用について

当ソフトウェアが設定情報をレジストリでなくINIファイルに保存するのは以下の理由によります。

・フロッピーディスクに当ソフトウェアを格納した上で、複数環境における機動的な使用を想定

・実行ファイルのサイズ低減を図るため、レジストリ操作処理でなくプライベートINIファイル操作処理を選択(アセンブル後の該当箇所バイト数で比較してください)

ちなみに、Microsoft側はこの様な設定情報はレジストリに保存することを推奨しています。

また、レジストリ操作に伴うレジストリの肥大化とその最適化(再構築)の必要性について、ネット上で資料が公開されていますので、一読されることをお奨めします。レジストリの不要キーの削除がレジストリ肥大化を抑制するとは限りません。

●｢PSAPI.DLL｣補足

当ソフトウェアに同梱されている「psapi.dll」は、Microsoft社が開発及び再配布規定を明示している再配布可能DLLです。当ソフトウェアはこのDLLをWindowsNT系OS上で使用します。このＤＬＬが標準で添付されているWindows2000及びXPにおいては、必ずしもこのDLLを導入する必要はありません。しかし、このDLLはアンチウイルスソフトでも多用されるため、コンピュータウイルスがシステムフォルダ内の「psapi.dll」に操作を加える事態に備え、当ソフトウェア実行ファイルと同じフォルダに同梱「psapi.dll」を導入されることをお奨めします(注)。また、同梱の「psapi.dll」を使用する限り、今後の新しいOSに付属するであろう「psapi.dll」で同DLL内部仕様が変更されても対処可能です。

（注）ウイルス自体はそのリソースに圧縮した独自の「psapi.dll」を保持し、活動時に同DLLを展開して使用することが可能です（実例あり）。

●フェイク起動モード

当ソフトウェアのアイコンやウィンドウタイトル名がお気に召さない場合は、このモードをお使い下さい。このモードでは、当ソフトウェアのウィンドウ左上隅やタスクバーに表示されるアイコンを、Windowsの標準アプリケーション用アイコンに変更し、さらに、当ソフトウェアのウィンドウタイトルを｢ProcessMemoryEditor｣に変更した上で起動します。このモード使用に加えて、ランチャー等で当ソフトウェア用に、お好みの｢ノーマルな｣アイコンを登録すれば、外見上｢ノーマルな｣ソフトウェアにすることが可能です。

このモード使用時は、起動時のコマンドラインオプションに半角小文字の"f"を指定して下さい。

コマンドラインオプション例：

C:\Windows\Neko57.EXE f

●その他

当ソフトウェアのバージョンアップ時には、簡易ランチャーやマルチメディア再生用の登録ファイルリストが書き込まれている｢SN57.ini｣及び、マルチメディア再生リスト｢NekoPlay.txt｣を上書きしないよう注意して下さい。

同梱した｢UPX_UsaTest.exe｣は、メモリ検索テスト及びPEファイル再構築テスト用プログラムです。本体同様にレジストリは使用しません。


ユーザーの方へのお願い

当ソフトウェアは正規バージョン公開にあたり必ず動作確認を行っています。しかし、特定の処理の組み合わせによる不具合発生や、新規実装機能が同機能と関連のない既往実装機能の動作に悪影響を与える等、製作者の想定していない不具合が生じることがあります。もしも当ソフトウェア使用にあたり何らかの不具合が生じた場合は、お手数ですが当方までお知らせ頂ければ幸いです。

当ソフトウェアのデバッグにご協力頂ける方のために、製作者のサイト｢Digital Travesia｣にてデバッグ補助用ソフトウェア「うさみみハリケーン」を配布していますので、お使い頂ければ幸いです。なお、「うさみみハリケーン」もレジストリを使用しません。

当ソフトウェアではインターフェイス等仕様の変更にあたり、ユーザーの方から頂いたご意見をなるべく反映させるように努力しています。また、ヘルプ文書の記述についても同様です。当ソフトウェア及びヘルプ文書に何らかの改善すべき点があれば、遠慮なく当方までお知らせ頂ければ幸いです。

なお、不具合修正依頼や機能追加依頼等にはなるべく対応したいと考えていますが、色々な事情により必ずしもご期待に添えることができるとは限らないこと、ご了承願います。

当方の連絡先はこちらです。


基本的注意事項（必ずお読み下さい）
当ソフトウェア使用に関する基本的注意事項

当ソフトウェアは以下のケースでは起動しません。

１.『SoftICE』が起動している場合(プロセス操作処理の競合を回避するため)※1

２.当ソフトウェア実行ファイルがウイルス等により改竄された場合

３.当ソフトウェアが既に起動されている場合(2重起動不可)

４.当ソフトウェアの仮想アドレス空間にウイルスまたは類似ソフトウェアが侵入している場合※2

※1　『SoftICE』はWindows起動時に起動するか否かを選択できるようにしておくことをお奨めします。

※2　アンチウイルスソフト程のウイルス認識能力はありません。

汎用プロセスメモリエディタを用いたゲームの解析・改造を初めて行う方向けに、｢通常検索によるメモリ解析・改造の基本的アプローチ｣例を用意しましたのでご覧下さい。

各エディットボックスでは、右クリックから｢元に戻す｣、｢貼り付け｣や｢コピー｣等の文字列編集機能が使用できます。なお、プロセスメモリの内容等を表示するメインエディットボックスは読み取り専用です(内容が見易いように背景色を変更しています)。

数値を指定する各エディットボックスでは、数値は必ず半角で入力して下さい。また16進数値はなるべく１バイトを2文字で入力して下さい（誤入力防止のため）。

プロセスメモリ上で特定数値を検索する場合は、その数値を16進数のリトルエンディアンに変換する必要があります。ただし、対象プロセスがエミュレータ等特殊なソフトウェアの場合は、必ずしもその限りではありません。

ヒープエリア開始アドレスや検索結果の該当アドレス等、各種アドレスを表示するリストボックス総てにおいて、そのリスト中の特定のアドレスをクリック等で選択することにより、そのアドレスをアドレス指定用エディットボックスに貼り付け、さらにメインエディットボックスの表示内容を新しいアドレスで更新します。

プロセスメモリ上の指定したアドレスや書き換えにより更新する範囲が、保護された領域にかかる場合は警告します。この保護された領域の内容(バイナリデータ)は、該当メモリエリアのアクセス属性を変更することで書き換え可能になることもあります。アクセス属性の変更は｢各種プロセス操作｣の｢モジュール一覧及びメモリマップ表示｣で可能です

バイナリデータ編集用エディットボックスや、アドレス指定及び進数変換用等他のエディットボックスを含め、当ソフトウェアの一部のエディットボックスでは誤入力防止のため入力文字数を制限しています。そのため、既に入力文字数上限まで表示されているエディットボックスに入力するには、既に表示されている文字を入力する字数分削除する必要があります。面倒ではあるのですが、当ソフトウェア操作ミスのうち特に大きな割合を占めるとみられる、誤入力による改造対象の暴走等を防止するためにこのような仕様にしました。なお、このようなエディットボックスの入力時には、シフトキーとカーソルキーの同時押しによる範囲選択が役立つこともあります。

Windows9x/Meでは、当ソフトウェアの各コントロールに対するOSの内部処理やシステムの状況等複数の要因が重なることで、当ソフトウェアが強制終了されるケースがあります。これを回避するためには、当ソフトウェアに一度に多くの各種処理を行わせず、目的の処理を複数段階に区切って、段階ごとに当ソフトウェアを再起動させて行うと効果的です。また、Windows9xで、プロセスリスト中の終了済みプロセスを選択すると、OSの問題により後々不具合が生じることがありますので、プロセス選択前にはプロセスリストを更新することをお奨めします。

｢モジュール・スレッド一覧・メモリマップ｣、｢プロセスメモリ検索｣、｢デバッガ兼APIトレーサー｣、｢進数変換及び整数－実数変換｣、｢システム監視・タイマー設定｣、｢改造コード入力補助｣及び｢リアルタイム書き換えパネル｣のいずれかのウィンドウが既に表示されている状態で、再度メインウィンドウから同ウィンドウの呼び出し操作を行うと、既に表示している同ウィンドウを最前面に表示します。この機能は、上記いずれかのウィンドウが他のウィンドウで隠れている場合に有用です。なお、メインウィンドウはホットキーで最前面に呼び出すことが可能です。

当ソフトウェアが操作を行う実行ファイルのファイル名が半角英数字でない場合に、実行ファイル名やパスの取得を誤る可能性があります。プログラムとしては対処可能なのですが、所要コード量から見て当ソフトウェアの実行ファイル肥大化に繋がるため、対処を保留しています。


スクリーンショットと機能マップ（必ずご覧下さい）
スクリーンショットと機能マップ

下は当ソフトウェアメインウィンドウのスクリーンショットです。

詳細を知りたい箇所をクリックして下さい。

なお、タイトルバーのメモリ/CPU/時刻の表示は、拙作｢うさくりーん｣が行っているものです。

●特にヘルプ文書で頻出する箇所（上の番号に対応）

１：改造コード入力エディットボックス

２：メインエディットボックス

３：アドレス保持用エディットボックス

４：バイナリデータ保持用エディットボックス

５：アドレス指定用エディットボックス

６：バイナリデータ編集用エディットボックス

●その他注意点

｢自動更新｣ボタンが２つありますが、｢コード実行｣ボタンの右にあるのは改造コード実行を指定秒数毎に自動で行うためのボタンで、｢UNDO｣｢AtoO｣ボタンの下にあるのは、バイナリデータ編集用エディットボックスの内容を元に、プロセスメモリ更新を指定秒数毎に自動で行うためのものです。


HLP000049
稼動プロセスの一覧です。

●操作補足

このリストから解析・改造対象プロセスを選択して下さい。ただし、システム関連プロセスへの各種操作は深刻な事態を招く可能性が高いため注意して下さい。

Windows2000/XPでは、安全対策として一部のシステムプロセスを非表示にしています。

この稼動プロセス一覧は自動更新されません。一覧を再取得したい場合は｢(プロセス一覧)更新｣ボタン等を使用して下さい。

プロセスを選択すると、その実行ファイルのパスをクリップボードに転送します。


各種プロセス操作

メインウィンドウ最上部のプロセス一覧リストから目的のプロセスを選択した上で、メインウィンドウ上部左側の｢操作｣ボタンを押すと、専用メニューがポップアップします。

●プロセスの強制終了

選択したプロセスを強制的に終了させます。この機能は｢Ctrl｣+｢Alt｣+｢Del｣キーの同時押しを使用するよりも強力に終了させることが可能です。

総ての｢エクスプローラ｣プロセスを強制終了させれば、後述のシェル変更ほどではないものの、｢軽い｣ゲーム実行環境が可能になります。当ソフトウェアの簡易ランチャーでエクスプローラの再起動を行うこともできます。

●モジュール一覧及びメモリマップ表示

選択したプロセスが使用しているモジュール一覧とメモリマップを表示します。また、スレッドの一覧とその優先度も併せて表示します。モジュール一覧とメモリマップのリストボックスで特定の項目をクリックすると、その項目に含まれるアドレスをアドレス指定用エディットボックスに貼り付け、さらにメインエディットボックスの表示内容を新しいアドレスで更新します。

「インポート関数」・「エクスポート関数」ボタンで選択モジュールの参照関数表示を設定します。｢PeRdr｣ボタンで選択モジュールの逆アセンブルコードリストを当ソフトウェア実行ファイルと同じフォルダに出力します（｢実行ファイル名．DAS｣）。この際、「軽」ボタンを有効化しておくと、バイナリデータを省いて軽量化された逆アセンブルコードリストを出力します。「フォルダ」ボタンで選択モジュールのあるフォルダをエクスプローラで開きます。

メモリマップは、基本的にアクセス可能なエリアのみ表示しています。この一覧表でのエリア属性は以下の通りです。また、｢属性を読み書き可能に変更｣ボタン或いは選択メモリエリアのダブルクリックで、選択メモリエリアの属性を読み書き可能に変更します。ただし、システムが使用しているメモリエリアは属性変更に失敗することがあります。

E=実行可能

R=読み取り可能

W=書き込み可能

C=書き込みコピー

●セクション一覧表示

選択したプロセスの実行ファイルにおけるセクション(プログラムが使用するコード、文字列及びダイアログリソース等を、格納するデータの種類毎に分けた、格納領域のこと)の一覧を表示します。

｢Characteristics｣に論理和で80000000hが加算されていないセクションは、書き込み不可のフラグが設定されていることになります。

●対象プロセス仮想アドレス空間内にメモリ領域を確保

選択されたプロセスの仮想アドレス空間内に、任意サイズの読み書き可能なメモリ領域を確保します(実際には、OS側のメモリ領域確保サイズの単位規定により、1000hの倍数で確保）。この機能はWindows2000/XPでのみ使用可能で、それ以外のOSではメニュー項目を非表示にしています。

●プロセス使用メモリ最適化

選択されたプロセスの使用メモリを最適化させます。この機能はWindows2000/XPでのみ使用可能で、それ以外のOSではメニュー項目を非表示にしています。

●指定アドレスでCreateRemoteThread関数を実行

メインウィンドウのアドレス指定用エディットボックスで指定されたアドレスを、実行可能なプロシージャ先頭アドレスとしてCreateRemoteThread関数を実行します。スレッド使用スタックサイズは、対象プロセスのプライマリスレッドのスタックサイズと同サイズに設定します。もし指定アドレス以降に実行可能なプロシージャが存在しなければ、対象プロセスはクラッシュしますので注意が必要です。

この機能はWindows2000/XPでのみ使用可能で、それ以外のOSではメニュー項目を非表示にしています。

この機能により、改造対象プロセス内にコードを埋め込んで作成したパラサイトルーチンを、新しいスレッドとして実行可能です。

●プロセス実行優先度変更

｢操作｣ボタンの上部に表示している、選択したプロセスの実行優先度を変更可能です。ただし、｢最優先｣に変更した場合、OSの動作に支障を与えかねないので注意が必要です。そのため、｢通常｣から｢高優先｣への変更をお奨めします。なお、｢最低｣はスクリーンセーバーと同程度の優先度になります。この機能は、比較的処理の重いゲームや解析用アプリケーションへの対処等を想定しています。

なお、正確には、優先順位は他の色々な要素により20段階以上に分類されます。

●実行ファイルのあるフォルダを開く

エクスプローラで実行ファイルのあるフォルダを開きます。


プロセスメモリ編集

プロセスメモリ編集関連のボタンやエディットボックスはメインウィンドウ中央部にまとめてあります。以下の説明を読む前に、「スクリーンショットと機能マップ」でプロセスメモリ編集用ボタンやエディットボックスの位置を把握しておいてください。

●プロセス情報表示

メインウィンドウ最上部のプロセス一覧上で目的のプロセスをクリックすると、表示されている実行ファイルのバージョン情報、作成/最終更新日時、32ビットCRC、ファイルサイズ及び｢EntryPoint｣(プログラムのコード実行開始アドレス)等をメインエディットボックスに表示します。この際、クリックされた実行ファイルのパスをクリップボードに転送します。

なお、プログラマによっては、バージョンアップしても実行ファイル内のバージョン情報を変更しないケースがあるので注意が必要です。

●ヒープ情報の表示

プロセス一覧リスト上でプロセスが選択されると、そのプロセスのモジュールエリア情報及びヒープ情報をメインエディットボックス右のリストボックスに表示します。モジュールエリアについては開始アドレスと終端アドレスを、ヒープについては開始アドレスを表示します。

なお、ゲーム等における書き換え対象アドレスが、例えばWindows98ではHeap2にある場合でも、WindowsMeで同様にHeap2にあるとは限らないので注意が必要です(同OSではヒープナンバーは大抵同一になります)。

また、このリストボックス上で任意のアドレスをクリック等で選択すれば、同アドレスをアドレス指定用エディットボックスに貼り付け、さらにメインエディットボックスの表示内容を新しいアドレスで更新します。

●プロセスメモリ(バイナリデータ)表示

プロセス一覧から目的のプロセスを選択した上で、アドレス指定用エディットボックスに目的のアドレスを入力して｢確認｣ボタンを押せば、同アドレスから70hバイトのプロセスメモリ(バイナリデータ)と対応する文字列をメインエディットボックス内に表示します。

また、同時に同アドレスから16バイトのプロセスメモリ(バイナリデータ)をバイナリデータ保持用と同編集用エディットボックス内に表示します。アドレス指定用エディットボックスに表示するアドレスの初期値は、メモリ上に読み込まれたプログラム中のコードセクション先頭に対応するアドレスです。

なお、プロセスメモリ(バイナリデータ)表示範囲は、アプリケーションがWindows上で使用可能なアドレスの範囲に設定しています。安全性の問題から、システム領域の表示及び編集は不可にしました。

このメインエディットボックスでは、一般的なテキストエディタ同様にその表示内容をコピーすることが可能です。これは改造コードの記述簡易化に役立ちます。

もしコードセクション先頭アドレス(大抵401000)周辺に｢Boolean｣という文字列が確認された場合は、プログラムが｢Object Pascal｣という言語で開発されており、プログラム中で使用される文字列等のデータはコードセクションの方に格納されている可能性があります。

●文字列非表示モード

｢Adr/文字消｣ボタンを押すと、メインエディットボックス上でのバイナリデータに対応する文字列部分表示・非表示を切り替えます。この機能はメインエディットボックス上で同文字列部分が不要な際に有用です。

この機能も改造コード作成の簡易化に役立ちます。

●10進表示機能

「Adr/文字消」ボタンの右にある「+0h/10進」ボタンを押すと、現在の指定アドレスのバイト/ワード/ダブルワードの１０進数値を表示します。さらに、指定アドレス以降の4バイトの2進ビットパターンも表示します。これは、ビットフラグの視認性を高めるためのもので、このビットパターンはアドレス順で表示しています(リトルエンディアンではありません)。

指定アドレスを調整する場合は、メインウィンドウがアクティブな状態で、｢Ctrl｣キーを押しながらマウスホイールを上下させれば、指定アドレスを1バイト変更してバイナリデータを再表示させることが可能です（アドレス簡易移動の詳細はこのページの最後にあります）。

また、指定アドレスがポインタの可能性があり格納アドレスがアクセス可能ならば、そのアドレスのバイト/ワード/ダブルワードの１０進数値も表示します。

なお「ポインタで指定アドレス変更」は目的の値が(再)取得されていないとアドレス補正値を反映しません。アドレス補正値入力後にその補正されたアドレスがアクセス可能か必ず確認(値再取得)して下さい。

●リアルタイム書き換えパネル

｢+4h/入力｣ボタンを押すと、バイナリデータをリアルタイムで書き替えるためのウィンドウを表示します。この際メインウィンドウのアドレス指定用エディットボックスに入力されているアドレスをベースにしてバイナリデータを表示します。また、表示先頭アドレスが読み取り可能かつ書き込み不可の領域である場合は、｢書き込み不能領域｣であることを明示します。

ここでは、表示されたバイナリデータをエディットボックス上で書き換えると、その書き換え結果を即プロセスメモリ該当アドレスにも反映させます。入力には半角の数字とAからFまでの半角アルファベット（小文字可）のみ使用して下さい。それ以外の文字入力や、表示されているバイナリデータ対応文字列またはスペースの位置が変更された場合は｢書式エラー｣と判断し、プロセスメモリの書き換えを行いません。

操作にあたり、｢Insert｣キーを押すことにより上書き/挿入モードの切り替えが可能です。また、通常のエディットボックス同様に右クリックから各種文字列編集機能が使用可能です。例えば右クリックから｢コピー｣と｢貼り付け｣により、選択メモリ範囲の内容を別のメモリ箇所にコピーすることが簡単に行えます。さらに、Windows2000/XPにおいては、｢Ctrl｣キーを押しながらマウスホイールを操作することにより、リアルタイム書き換えパネルの表示内容を拡大・縮小可能です。

この表示されているバイナリデータはあくまで読み込んだ時点のものです。そのため、書き換えを行う前に一度メニューの｢リロード｣で最新のバイナリデータを再表示させることをお奨めします。なお、デフォルト設定では、リアルタイム書き換えパネルと他のウィンドウの切り替え時に自動で再読み込みします(オートリロード機能)。

表示するアドレスは画面右側のスクロールバーで変更可能です。また、メニューの｢アドレス再取得｣でメインウィンドウのアドレス指定用エディットボックスに入力されているアドレスを再取得してバイナリデータを表示します。

このウィンドウを表示している状況で対象プロセスを変更しないで下さい。

●基本的なプロセスメモリ(バイナリデータ)の書き換え

アドレス指定用エディットボックスで目的のアドレスを指定して｢確認｣ボタンを押すと、バイナリデータ編集用エディットボックス内にバイナリデータ対応文字列を表示します。この文字列を書き替えて｢更新｣ボタンを押せば、その書き換えた内容を使ってプロセスメモリを更新します。この際、各エディットボックスには4バイト分(半角数字や半角A～Fで8文字)入力して下さい。もし文字数が足らなければ、若いアドレスから値00hで埋めて補完します。この入力時に、各エディットボックスには既に表示文字数上限まで表示されていますので、まず変更したい字数分を既に表示されているバイナリデータ対応文字列から削除する必要があります。

なお、操作ミスを防ぐため、｢確認｣ボタンを押さないまま｢更新｣ボタンを押した場合は警告を表示し、プロセスメモリは更新しませんので注意して下さい。

｢確認｣｢更新｣ボタンの右側にある｢Clear 0h～Fh｣｢0h｣｢4h｣｢8h｣｢Ch｣ボタンはバイナリデータ編集用エディットボックスの内容をクリアさせるためのものです。｢Clear 0h～Fh｣ボタンは16バイト分総て、他のボタンは各バイナリデータ編集用エディットボックスをクリアします。このクリアした状態即ちバイナリデータ編集用エディットボックスに何も入力されていない状態で｢更新｣ボタンを押すと、値00hで埋める形でプロセスメモリを更新します。

指定アドレス以降を広範囲に簡単な操作で書き換えたい場合は、｢改造コード入力補助機能｣を使うことをお奨めします。例えば｢401000-｣の後に書き換えたいバイナリデータ（対応文字列）を繋げて改造コードとして実行すれば、一度にプロセスメモリを書き換えることが可能です。

●＜参考＞書き込み不可時の対処について

プロセスメモリ編集時に、対象プロセスが終了していないにも関わらず書き込み不可と表示された場合は、｢モジュール一覧及びメモリマップ表示｣でメモリマップを表示し、書き換え対象アドレスを含むメモリエリアの属性を書き込み可能に変更することで対処可能です。また、Windows2000/XP上で書き換え対象アドレスがコードセクション内ならば、予め対象プロセスの実行ファイルを｢PEファイルを指定して再構築｣で｢全セクションに書き込み可能属性を付加｣しておく方法が最も効果的です。他の対処法としては、改造コードを用いて特定メモリエリアのプロテクト属性を｢読み書き可能｣に変更することも可能です。

●文字列ベースでのプロセスメモリ(バイナリデータ)の書き換え

｢文字列更新使用｣ボタンを押してから｢更新｣ボタンを押した場合は、｢文字列更新使用｣ボタン右側のエディットボックスの文字列情報を元に、対応するバイナリデータを使ってプロセスメモリを更新します。この際、エディットボックスには書き込みたい文字列だけを入力し、不要な文字列(特にスペース)は削除して下さい。そうしない場合、不要な文字列もスペースで強制的に連結した上でプロセスメモリを更新することになります。エディットボックス上での右クリックから｢すべて選択｣で余計なスペースを簡単に確認できます。

なお、プログラム上ではバイナリデータの値00hを文字列終端として認識しますので、必要に応じて値00hを更新した文字列対応バイナリデータの終端に追加して下さい。

●プロセスメモリ置換

｢+8h/置換｣ボタンが押されると、選択プロセスの指定メモリ領域内でプロセスメモリ置換を行うためのダイアログを表示します。ここで検索・置換開始アドレスと検索・置換範囲、さらに検索する置換元バイナリデータと置換に用いる置換先バイナリデータや置換先バイナリデータを書き込むアドレスの補正値を入力して「検索・置換実行」ボタンを押すと、置換元バイナリデータを検索し、総ての該当アドレス（補正値が設定されていれば補正したアドレス）に置換先バイナリデータを書き込みます。効率的な置換のため、指定された検索・置換開始アドレスと検索・置換範囲は1000h単位で設定し、1000h未満の部分は切り捨てます。

検索・置換開始アドレスと検索・置換範囲、置換元バイナリデータと置換先バイナリデータ及び補正アドレスは、16進数で指定して下さい(1バイトを必ず半角英数字2文字で表記)。また、検索・置換範囲は必要最小限にとどめて下さい。不必要な箇所を置換した場合、対象プロセスのクラッシュ等不具合を招くことがあります。

「自動更新」ボタンを有効化した上で「検索・置換実行」ボタンを押すと、「自動更新」ボタン右のエディットボックスで指定された秒数毎に置換処理を繰り返します。もう一度「自動更新」ボタンを押すと自動更新を解除します。

文字列に対応するバイナリデータを知りたい場合には、「文字列－16進バイナリデータ変換」機能が有効です。文字列を入力すればリアルタイムで対応バイナリデータを表示します。

検索・置換内容設定ファイルは、D&Dで読み込むこともできます。

＜置換設定例＞

プロセスメモリ上の文字列「うさ●ょん」を「うさぴょん」に置換する場合

置換元：82A482B3819C82E582F1

置換先：82A482B382D282E582F1

●表示アドレスのリストアップ

｢+Ch/栞（しおり）｣ボタンが押されると、アドレス指定用エディットボックスで指定されたアドレスを「確認」・｢更新｣・｢クリア｣ボタン下のコンボボックスに追加していきます。このコンボボックス上で任意のアドレスをクリックすれば、同アドレスをアドレス指定用エディットボックスに貼り付け、さらにメインエディットボックスの表示内容を新しいアドレスで更新します。

●アンドゥ（やりなおし）

｢UNDO｣ボタンを押した場合、書き換え不可にしているアドレス・バイナリデータ保持用エディットボックスの内容を元に、プロセスメモリを更新します。

なお、このアドレス・バイナリデータ保持用エディットボックスは、｢確認｣ボタンが押されるとその内容が更新されてしまいアンドゥ不可になりますのでご注意下さい。

●プロセス自動更新

｢自動更新｣ボタンを押してから｢更新｣ボタンを押した場合、更新処理を｢自動更新｣ボタン右にあるエディットボックスに入力された秒数(1～9)毎に繰り返します。このエディットボックスに何も入力されていない、あるいは数字以外が入力された場合は、2秒間隔で更新処理を行います。｢自動更新｣ボタンを再度押せば、自動更新処理を中止します。なお、上記の通り、自動更新機能は設定後｢更新｣を一度行わない限り作動しませんので注意して下さい。

●アドレス－オフセットコンバート

｢AtoO｣ボタンを押すと、アドレス指定用エディットボックスで指定されたアドレスに対応する、実行ファイル中のオフセットを表示します。当然ながら、プロセスメモリ中の実行ファイルがロードされた箇所以外のアドレスを指定した場合は警告します。

●指定アドレスの変更

　｢確認｣｢更新｣ボタンの左側にあるスクロールバー及び大矢印ボタンで指定アドレスを変更してバイナリデータを再表示させることができます。

スクロールバーは押し続けることで連続してアドレスを変更させることが可能です。スクロールバーでは±10ｈまたは±100ｈ、大矢印ボタンでは±1000ｈの指定アドレス変更を行います。

もし変更後のアドレスがアクセス不能アドレスであった場合（警告表示あり）は、｢Ｃｔｒｌ｣キーを押しながら大矢印ボタンの「↑」｢↓｣いずれかを押して下さい。これにより、指定アドレスを直近のアクセス可能メモリエリア先頭アドレスに変更してバイナリデータを再表示します。

●キー併用による指定アドレスの変更

このソフトウェアでは、｢確認｣ボタンのクリックと特定キーの同時押しにより、指定アドレスを簡単に変更することも可能です。詳細は以下のとおりです。このキー配列は、キーボードの左手ホームポジションをベースに設定しています。慣れれば極めて高速なアドレス移動が可能になりますので、是非お試し下さい。キーを押した状態で｢確認｣ボタンをクリックすると操作し易いと思います。また、マウスホイールを用いた操作も便利ですので、是非お試し下さい。なお、マウスホイール使用時はメインウィンドウがアクティブであることが必要です。

上記操作にあたりシステムのビープ音が鳴る場合は、ビープ音トグル機能(メニューの｢システム｣→「ビープ音ON/OFFトグル」)で対処して下さい。

｢A｣キーを押しながら｢確認｣ボタン・・・指定アドレスに0x100000 加算

｢S｣キーを押しながら｢確認｣ボタン・・・指定アドレスに0x10000　加算

｢D｣キーを押しながら｢確認｣ボタン・・・指定アドレスに0x1000　加算

｢F｣キーを押しながら｢確認｣ボタン・・・指定アドレスに0x100　加算

｢E｣キーを押しながら｢確認｣ボタン・・・指定アドレスに0x10　加算

｢R｣キーを押しながら｢確認｣ボタン・・・指定アドレスに0x01　加算

｢Z｣キーを押しながら｢確認｣ボタン・・・指定アドレスから0x100000 減算

｢X｣キーを押しながら｢確認｣ボタン・・・指定アドレスから0x10000　減算

｢C｣キーを押しながら｢確認｣ボタン・・・指定アドレスから0x1000　減算

｢V｣キーを押しながら｢確認｣ボタン・・・指定アドレスから0x100　減算

｢G｣キーを押しながら｢確認｣ボタン・・・指定アドレスから0x10　減算

｢スペース｣キーを押しながら｢確認｣ボタン・・・指定アドレスから0x01減算

｢Q｣キーを押しながら｢確認｣ボタン・・・指定アドレスに0x70 加算(ページダウン)

｢W｣キーを押しながら｢確認｣ボタン・・・指定アドレスに0x70 減算(ページアップ)

｢Shift｣キーを押しながらマウスホイールダウン・・・指定アドレスに0x70 加算(ページダウン)

｢Shift｣キーを押しながらマウスホイールアップ・・・指定アドレスから0x70 減算(ページアップ)

｢Ctrl｣キーを押しながらマウスホイールダウン・・・指定アドレスに0x01 加算

｢Ctrl｣キーを押しながらマウスホイールアップ・・・指定アドレスから0x01 減算


改造コード実行

●基本操作

当ソフトウェアには改造コード実行機能も実装しています。改造コード入力エディットボックスにコードを入力して｢コード実行｣ボタンを押して下さい。現在対応している改造コード書式はこちらです。

また、改造コード用｢自動更新｣ボタンを押してから｢コード実行｣ボタンを押せば、改造コード実行処理を改造コード用｢自動更新｣ボタン右にあるエディットボックスに入力された秒数(1～9)毎に繰り返します(未入力なら2秒設定)。この改造コード用｢自動更新｣ボタンをもう一度押せば自動更新は解除されます。なお、上記の通り、自動更新機能は設定後｢コード実行｣を一度行わない限り作動しませんので注意して下さい。

コードが実行されると、改造コード入力エディットボックスの下にあるコンボボックスに、実行されたコードがリストアップされていきます。このコンボボックス上で目的の改造コードを選択すると、そのコードを改造コード入力エディットボックスに貼り付けます(コード履歴機能)。なお、自動更新時はリストアップの重複を避けるためリストアップを行いません。

●改造コード入力補助機能

メインウィンドウの｢コード実行｣ボタンの下にある｢補｣ボタンで呼び出します。

ここではスクリプトファイルをＤ＆Ｄまたはファイルを指定して読み込んで、そのスクリプトファイルに書き込まれている個々の改造コードを簡単に選択・編集した上で実行可能です。もちろん改造コードの手入力も可能です。読み込むスクリプトファイルに名前・拡張子の制限はありませんが、拡張子を｢.txt｣にしておけばテキストエディタでの編集が容易です。

この機能は、アイテムリスト等、多数の改造コードから一部を選択して実行したいケースに特に有用です。個別・一括実行するコードサイズには後述サイズ制限がありますが、読み込むスクリプトファイルのサイズには制限はありません（正確にはエディットボックスコントロールの制限がありますが、一般的なスクリプトファイルがその上限に達することはまず無いと考えられます）。

さらに、アドレス指定用エディットボックスの内容を取り込んだり、Windows付属の電卓から、その表示値をそのまま或いは16進リトルエンディアンに変換して取り込むことも可能です。ただし、この電卓連携機能のWindows98（非SE）上での動作は未確認です。

●改造コード実行に関する基本的な注意事項

一度に読み込むコード文字数は最大半角10240文字(改行含む)で、一つの非連続型コードの書き換えサイズは1024バイトが上限です。ただし、ダンプ型及びアップロード型コードには書き換えサイズの制限はありません。

各コードに用いる値は16進ベースすなわち１バイトを半角２文字で記述して下さい。｢01｣を｢1｣等、１バイトを半角１文字で入力した場合は、当ソフトウェア側でコード入力ミスか否か正確に判断できません。

各コードを改行で区切ることにより、複数コードの一括実行が可能です。また、各コードの後にスペースを入れないで下さい。複数コード中の改行のみの行は無視します。

改造コード実行時に、まず書き換え範囲を特定してダンプ型改造コードか当ソフトウェアのダンプ機能でダンプを行っておけば、後にそのダンプファイルをプロセスメモリ上にアップロードすることで、必要個所だけのアンドゥが可能になります。また、コード履歴機能を使ってのリドゥも可能です。なお、ダンプ及びアップロードするファイルにはファイル名や拡張子の制限はありません。

改造コードに問題があれば、改造対象のフリーズや青画面等不具合を招くこともあります。当ソフトウェアである程度エラートラップを設定してはいますが、改造コードの入力ミスにはくれぐれもご注意下さい。

●＜参考＞書き込み不可時の対処について

改造コード実行時に、対象プロセスが終了していないにも関わらず書き込み不可と表示された場合は、まず改造コードで指定したアドレスに問題がないか｢プロセスメモリ編集｣で確認して下さい。問題がなければ、特定メモリエリアのプロテクト属性を｢読み書き可能｣に変更する改造コードを使用して下さい。

また、｢モジュール一覧及びメモリマップ表示｣でメモリマップを表示し、書き換え対象アドレスを含むメモリエリアの属性を書き込み可能に変更することでも対処可能です。さらに、Windows2000/XP上で書き換え対象アドレスがコードセクション内ならば、予め対象プロセスの実行ファイルを｢PEファイルを指定して再構築｣で｢全セクションに書き込み可能属性を付加｣しておく方法が最も効果的です。


改造コード書式及び使用例

●改造コード書式一覧

各コードに用いる値やバイナリデータは１バイトを半角２文字で記述して下さい（1A4→01A4等）

＜プロセス自動指定＞

＜書式＞

PROC:D:\Win2KDevelop\DevelopNeko\UsaTest.EXE

→プロセスの実行ファイルのフルパスを指定して下さい

→プロセスリストから対象プロセスを選択する場合は不要です

＜注意事項＞

このコードを使用する場合は、必ず複数コードの中の最初の行のコードにして下さい

このコード使用時は、指定プロセスの詳細情報取得をスキップします(プロセス再選択で取得可)

＜基本的な改造コード＞

＜書式＞

;コメント

→｢;｣以降改行までをコメントとして無視します

450000-0F27

→アドレス450000から2バイトを｢0F27｣で書き替えます

450000$うさぴょん

→アドレス450000から10バイトを文字列｢うさぴょん｣に対応する16進値で書き換えます

＜注意事項＞

文字列型コード使用時は、プロセスメモリ編集の「文字列更新使用」の場合同様、書き込む文字列対応バイナリデータの終端に必要に応じて値00hを追加して下さい。この場合、メインエディットボックスで文字列対応バイナリデータの書き込み結果を表示させれば、文字列終端アドレスが簡単に確認できますので、その次のアドレスに値00hを書き込むコードを追加します。

＜連続型・等差級数型・断続型改造コード＞

＜書式＞

450000>4500FF-01000000

→アドレス450000から4500FFまでを｢01000000｣の連続で書き換えます

450000>4500FF-050003FF{02

→「050003FF」(値FF030005h)に値02hを加算しながら連続で書き換えます

450000>4500FF-FFFFFF000500E703}30

→アドレス450000を起点として、30hごとに｢FFFFFF000500E703｣を書き込みます

｢{｣ではなく｢}｣ですので注意して下さい

＜使用例（等差級数型）＞

指定した書き換え内容の先頭４バイトをダブルワードの値とみなして、指定した等差を加算していきます。

ゲームの改造では複数アイテム情報の一括書き換え等に有用です。

450000>4500FF-0100FFFF{02

→書き換え結果は｢0100FFFF 0300FFFF 0500FFFF...｣

450000>4500FF-01{01

→書き換え結果は｢01020304 05060708 090A0B0C...｣

450000>4500FF-00000303FFFF0000{10

→書き換え結果は｢00000303 FFFF0000 10000303 FFFF0000 20000303 FFFF0000...｣

＜注意事項＞

連続型コードや等差級数型コードでは、指定範囲サイズが書き換え内容として指定したバイナリデータのバイト数の倍数でない場合、指定範囲内で安全と考えられる上限まで書き替えます（範囲指定ミスの可能性があるため）。

＜算術演算型改造コード＞

＜書式＞

450000-03E7+

→アドレス450000以降の4バイトをダブルワードの値とみなして｢03E7h｣を加算

450000-FFFFFC19+

→アドレス450000以降の4バイトをダブルワードの値とみなして｢03E7h｣を減算(符号付き整数)

450000-03E7-

→アドレス450000以降の4バイトをダブルワードの値とみなして｢03E7h｣を減算

450000-64*

→アドレス450000以降の4バイトをダブルワードの値とみなして｢64h｣で乗算

450000-64/

→アドレス450000以降の4バイトをダブルワードの値とみなして｢64h｣で除算し商で書き換え

＜注意事項＞

算術演算コードでは値をダブルワードとして扱います。算術演算コードを使用した結果、桁あふれ等でダブルワードの範囲を超えた場合は、その超過分を無視します。

なお、和と差を扱う場合は符号付き整数、積と商を扱う場合は符号なし整数で演算を行うようにしました。ただし、論理演算型改造コードで「２の補数」を演算することで正負符号の反転も可能です。また、値00hでの除算は無視します。

乗算或いは除算で、かつ演算対象の値がダブルワードでない場合の対処は、アドレス間演算型コードの使用例を参考にして下さい。

＜論理演算型改造コード＞

＜書式＞

450000-00F477CFo

→アドレス450000以降の4バイトをダブルワードの値とみなして｢00F477CFh｣でOR処理

450000-0F0FFF7F&

→アドレス450000以降の4バイトをダブルワードの値とみなして｢0F0FFF7Fh｣でAND処理

450000-FEFFFF7Fx

→アドレス450000以降の4バイトをダブルワードの値とみなして｢FEFFFF7Fh｣でXOR処理

450000-7Fx

→アドレス450000以降の1バイトをバイトの値とみなして｢7Fh｣でXOR処理

450000-FFFFFFFFx

450000-01+

→この２つのコードを組み合わせてアドレス450000のダブルワード値の正負符号を反転させます(｢2の補数｣といいます)

＜使用例＞

アドレス46300のバイトでビット5とビット2のビットフラグをセット

00463000-24o

アドレス46300のダブルワードでビット31とビット2のビットフラグをセット

00463000-80000004o

アドレス46300のバイトでビット5とビット2のビットフラグをクリア

00463000-FFFFFFDB&

→対象がバイトでもダブルワード単位で演算する必要があることに注意して下さい

アドレス46300のダブルワードでビット31とビット2のビットフラグをクリア

00463000-7FFFFFFB&

アドレス46300のバイトでビット5とビット2のビットフラグを反転

00463000-24x

アドレス46300のダブルワードでビット31とビット2のビットフラグを反転

00463000-80000004x

＜注意事項＞

論理演算コードでのOR処理及びXOR処理は主にビットフラグ操作用で、AND処理は主にビットマスク用です。対象となる値や演算後の値はリトルエンディアン方式で格納されることに注意が必要です。なお、値FFh（FFFFh、FFFFFFFFh）でのXOR処理でビット反転を行うことができます。ビットフラグの操作にあたっては、まず２進ビットパターンを覚えてください。

＜アドレス間演算型改造コード＞

＜書式＞

450000-451000[+

→アドレス450000以降の4バイトと451000以降の4バイトをそれぞれダブルワードの値とみなして、前者に後者の値を加算

→演算に用いる値が4バイトのダブルワードで無い場合の対処は使用例を参照してください

＜使用例＞

アドレス間演算に用いる値がダブルワードではない場合は、必要に応じて演算に不要なアドレスのバイナリデータを一時退避させます

アドレス463000以降の2バイトとアドレス463500の1バイトでの演算例

00463002<c:\dump1.dat>02

00463002-0000

00463501<c:\dump2.dat>03

00463001-000000

00463000-00463500[*

00463002<c:\dump1.dat

00463501<c:\dump2.dat

または、セクションの空き領域該当箇所等の、プロセスメモリ上の未使用領域に値をコピーして演算

→アドレス500000はプロセスメモリ上の未使用領域

→ポインタ型コード併用でなければ、ダンプ型コード以外にコピー型コードでも対処可能

00463000<c:\dump1.dat>02

00500000<c:\dump1.dat

00463500<c:\dump2.dat>01

00500004<c:\dump2.dat

00500000-00500004[*

00500000<c:\dump1.dat>02

00463000<c:\dump1.dat

ポインタ型コードとの併用例

→アドレス500000はプロセスメモリ上の未使用領域

*463000>1000<c:\dump1.dat>04

00500000<c:\dump1.dat

00500000-02*

*463000>1008-500000[+

＜注意事項＞

アドレス間演算型コードは、上記算術演算および論理演算型コード総てに適用可能です

＜ダンプ型・アップロード型改造コード＞

＜書式＞

450000<dump.dat>70

→アドレス450000から70hバイトをファイル名｢dump.dat｣で当ソフトウェア実行ファイルがあるフォルダにダンプ

450000<c:\dump.dat>70

→アドレス450000から70hバイトをファイル名｢dump.dat｣でダンプ

→ダンプ先及びダンプファイル名は自由に指定可能で、制限はありません

450000<c:\dump.dat

→アドレス450000以降にファイル｢dump.dat｣のバイナリデータをサイズ分書き込み

450000<c:\dump.dat<20

→アドレス450000以降にファイル｢dump.dat｣のバイナリデータを先頭から20hバイト分書き込み

＜使用例＞

複数キャラクターのステータス(LEVEL、攻撃力、HP、その他フラグ)等を書き替えるケース等に有用です。

最初に一人のステータスを書き替えて雛型を作成します。

450000-FF

450004-E703

450008-E703

45000C-FFFF

450010-FFFF

450014-03

これをダンプ或いはプロセスメモリ上の未使用領域に雛型としてコピーします

450000<c:\dump.dat>15

他のキャラクターのステータス格納アドレスにアップロード或いはコピーして書き替えます。

最初に書き替えたキャラクターのステータスを直接コピーする方法もあります。

450100<c:\dump.dat

450200<c:\dump.dat

450300<c:\dump.dat

＜条件分岐型改造コード＞

＜書式＞

450000=<S64

→アドレス450000のバイトの値が64hより小なら次のコードから実行

→条件に適合しないなら、次の次のコードから実行

450000==M270F

→アドレス450000のワードの値が270Fhなら次のコードから実行

→条件に適合しないなら、次の次のコードから実行

450000=>L01869F

→アドレス450000のダブルワードの値が01869Fhより大なら次のコードから実行

→条件に適合しないなら、次の次のコードから実行

450000=!L270F

→アドレス450000のダブルワードの値が270Fhでなければ次のコードから実行

→条件に適合しないなら、次の次のコードから実行

450000-00+

450000-FFFFFFFF&

;コメント

→条件適合時または条件不適合時用ダミーコード（プロセスメモリを変化させない）

＜使用例＞

フラグ状況に応じて特定パラメータの値を変化或いはそのままの状態で別のパラーメータにコピー

00463070=>S07

00463100-64

00463070==S00

00463100-32

00463070=<S08	；本当はなくてもよいが処理をわかりやすくするため追加したコード

00463100-00+	；同上、条件適合時になにもしない例

%00463100>463104-01	；最終的にパラメータの値をコピー

＜注意事項＞

条件分岐型コードの使用は、複数コードの一括実行が前提となります。また、条件分岐する以上、指定条件適合時と不適合時の両方の処理が存在することを想定しています。そのため、条件分岐型コードの後に、２つ以上のコードがなければ警告します。もちろん、条件不適合とは関係ない別のコードでも、指定条件適合時コードの次にあれば条件不適合時のコードとみなして警告は行いません。

条件適合時或いは条件不適合時のコードが一切不要な場合は、コードとして意味をなさないコメント、値00h加算や値FFFFFFFFhでのAND処理コード等をダミーとして追加して下さい。条件分岐型コードの判定用値は符号なしの値としました。なお、条件分岐型コードの書式はC言語を参考にしています。

条件分岐型コードの条件判定数値のサイズは、必ず記号｢S,M,L｣で指定して下さい。

＜コピー型改造コード＞

＜書式＞

%450000>450100-08

→アドレス450000から8hバイトのバイナリデータをアドレス450100以降にコピー

＜注意事項＞

コピー型コードは、目的のアドレスに格納された値を一旦別の場所に退避させる用途で用いることも可能です。コピーされた値をバックアップとして、コピー元の目的のアドレスに格納された値に対し、算術演算や、AND処理によるビットマスク等を施し、更に条件分岐判定させた上で、必要に応じてバックアップから値を書き戻すこと等に使えると思われます。もちろん、上に挙げた例に限らず、広範囲のバイナリデータバックアップや複数箇所にコピーするための雛型作成等にもコピー型コードは有用です。

なお、このような一時退避用コピー先には、メモリ上にプログラムの本体が展開された（厳密には異なる）モジュールエリア内各セクションの空き領域を指定するのが適切です。

コピー範囲が広範囲かつ退避用途で空き領域が見つからない場合は、ダンプ型及びアップロード型コードの使用がお奨めです。

＜キャンセル型改造コード＞

＜書式＞

450000=>L01869F

Quit

450000-9F860100

→条件分岐型コード他複数コード実行時に使用します。｢Quit｣でコード実行をキャンセルします。

＜スクリプトファイル読み込み＞

＜書式＞

#C:\game\code.txt

→｢code.txt｣に書き込まれた改造コードを一括実行(ファイル名・拡張子制限なし)

＜注意事項＞

このコードは、他のコードと排他的に動作しますので、他のコードとは併用不可です。

スクリプトファイルのパスは、同ファイルが当ソフトウェア実行ファイルと同じフォルダにある場合はファイル名のみでも可能です。ファイル名のみ指定時に外部要因により不具合が出た場合はフルパスで指定して下さい。

＜特定メモリエリアのプロテクト属性を｢読み書き可能｣に変更＞

＜書式＞

A00401000S00005000

→アドレス401000を先頭とするサイズ5000hのメモリエリアを指定して書き込み可能にします

＜注意事項＞

アドレスとサイズは４バイトでの入力必須で、アドレスは必ず指定メモリエリア先頭、サイズは必ず指定メモリエリアのサイズ以下にして下さい。

●特殊改造コードの書式と使用例

＜ポインタ型改造コード使用例＞

開始アドレスを「*ポインタアドレス>アドレス補正用数値(負の値可、16進数)」に置き換えてください。ポインタ指定は上記の書き換えを行うコードすべてに適用可能です。

連続型改造コードとコピー型改造コードはその性格上書式が変更されます。

ポインタアドレス450000のダブルワードの値に100h加算した値を開始アドレスとして書き換え

*450000>0100-0F27

ポインタ使用時の連続型改造コード。開始アドレスから50hバイトを「01000000」の連続で書き換え。等差級数型改造コードも同様です。

*450000>0100>50-01000000

→開始アドレスは、ポインタアドレス450000のダブルワードの値に100h加算した値です。

ポインタ使用時のコピー型改造コード。コピー元アドレスから20hバイト先に10hバイト分をコピー

*%450000>0100>20-10

→コピー元アドレスは、ポインタアドレス450000のダブルワードの値に100h加算した値です。

アドレス補正用数値とコピー先アドレス指定に負の値を指定したケース

*%450000>FFFFFFE0>FFFFFFE0-10

→コピー元アドレスは、ポインタアドレス450000のダブルワードの値から20h減算した値です。

ポインタアドレス450000の値が982000hで目的のアドレスがその4000h先にある場合

*%450000>4000>012000-04

→アドレス986000のダブルワード(4h)の値をアドレス998000にコピー

＜ゲーム等の多重ポインタ対処例＞

*450000>20/01A0/4000/0280/0280-E703

→アドレス450000の格納値に20h加算した値を次のポインタのアドレスとし、そのポインタの格納値に01A0hを加算してさらに次のポインタ．．．というように繰り返します。

＜演算結果を対象アドレスとする場合＞

→アドレス500000はプロセスメモリ上の未使用領域

500000-04000000

500000-0F*

500000-450000+

*500000>100<ParasiteCode.dat

＜｢改造コード入力補助｣でのアイテム選択例＞

以下のコード例を書き込んだスクリプトファイルを改造コード入力補助機能で読み込めば、個別アイテムを選択して該当コードを実行可能です。

;スクリプトファイル名は｢CodeSample.txt｣等

;アイテムリスト例

;拳(レベルMAX)

450000-0100FF00

;短刀(レベルMAX)

450000-0200FF00

;棍棒(レベルMAX)

450000-0300FF00

;槍(レベルMAX)

450000-0400FF00

;弓(レベルMAX)

450000-0500FF00

;刀(レベルMAX)

450000-0600FF00

;長刀(レベルMAX)

450000-0700FF00

＜サーチ結果を使って環境依存型変動アドレスに対処する場合＞

→アドレス403FFCはプロセスメモリ上の未使用領域

;アドレス403FFCにHPサーチ結果のHP格納アドレスをリトルエンディアン方式で入力

403FFC-

*403FFC>00-E703E703

*403FFC>10-24o

*403FFC>1C>20-FF

＜参考＞DLLモジュールに属するアドレスの書き換えについて

この場合は、デバッガで解析対象が当該DLLをロードしてそのDLL内の関数アドレスを取得するルーチンを把握し、その関数アドレスを格納した変数をポインタとしてポインタ型改造コードで対処して下さい。もしもこの変数がグローバルでない場合は、パラサイトルーチンを打ち込んでプロセスメモリ上の未使用領域に取得された関数アドレスをコピーした上で、そのコピー先をポインタにしてポインタ型改造コードを使用して下さい。このアプローチにあたり、DLL(ダイナミックリンクライブラリ)、LoadLibrary関数及びGetProcAddress関数についてプラットフォームSDK等の資料に目を通されることをお奨めします。

＜参考＞プレイステーションのエミュレータ｢ePSXe｣用のPARコードについて

当ソフトウェア用改造コードとの変換については、以下のコードを参考にして下さい。また、他のエミュレータでもポインタ型コードで同様に対処できるケースがあると考えられますので、試行されることをお奨めします。

;ePSXe Ver1.6.0 スペシャルねこまんま５７号用改造コード

;鉄拳３

;１Ｐ体力最大

;300AAAB6 008C

*41CC69>0AAAB6-8C

;全キャラ/全３Ｐカラー使用可能

;800992C8 FFFF

;800992CA 001F

;800992CC 03A2

;800992CE 0005

*41CC69>0992C8-FFFF1F00A2030500

●改造コードの投稿

当ソフトウェア用に製作された改造コードについては、以下の改造系サイトに投稿されることをお奨めします。

｢DANAの部屋｣

http://www.geocities.co.jp/Playtown/8052/

｢ＧＡＭＥなページ｣

http://p16.aaacafe.ne.jp/~sinzan/index.html


起動時改造コード自動実行

●概要

バージョン1.08b1以降の当ソフトウェアを起動すると、設定ファイル｢SN57.ini｣に｢CheatFileOnStart=｣というキーを追加作成します。このキーでスクリプトファイルのパスを指定すると、当ソフトウェア起動時にそのスクリプトファイルを自動実行します。スクリプトファイルが当ソフトウェア実行ファイルと同じフォルダにある場合はファイル名だけの指定も可能です。もしも外部要因によりファイル名だけの指定で不具合が生じた場合は、フルパスで指定して下さい。

●注意事項

この自動実行の際には、対象プロセスの詳細情報取得・表示処理をスキップします。そのため、必要に応じて当ソフトウェアのメインウィンドウ最上部にあるプロセスリストから対象プロセスを再選択して下さい。

ここで指定するスクリプトファイルの最初の行のコードは、必ず｢PROC:｣コードを使って対象プロセスの実行ファイルをフルパスで指定して下さい。｢PROC:｣の前に改行のみの行がある場合でもエラーとなります。フルパス指定にしたのは、同名プロセスが存在するケースに対処するためです。ちなみに、当ソフトウェアメインウィンドウのプロセスリストでは、項目選択時にプロセスの実行ファイルのフルパスをクリップボードにコピーします。

改造コード入力用エディットボックスに入力した複数の改造コードを一括実行する場合や、｢#｣のスクリプトファイル読み込みコードを使う場合も、上記同様に｢PROC:｣コードを使用する場合は必ず最初の行のコードで使用して下さい。

●参考

キーの指定例

CheatFileOnStart=D:\Win2KDevelop\DevelopNeko\UsatestCheat.txt

スクリプトファイルの内容例（上記キー指定例では｢UsatestCheat.txt｣）

PROC:D:\Win2KDevelop\DevelopNeko\UsaTest.EXE

;｢PROC:｣コードはパスの大文字・小文字を区別しません

004020FC-E703

*00402100>1000-64


＜補足＞２進ビットパターン・OR・AND・XOR

●２進ビットパターン（１６進数と２進数の対応表）

以下を覚えてしまうことをお奨めします。PCゲームの解析において２進ビットパターンの知識は、CGその他フラグのオン・オフを各ビットの状態で格納しているケースの解析等に役立ちます（CGALLが｢7FFF...FFFE｣等のケース）。

各ビットには1または0のいずれかの値が格納され、その組み合わせで特定の値を表していることに注目して下さい。１バイトは８ビットで構成されます。同じパターンで数値を表す上位４ビットと下位４ビットを分けて考えると分かりやすいと思います(上位４ビットと下位４ビットの間にスペースを入れてみました)。

00h=0000 0000   01h=0000 0001   02h=0000 0010   03h=0000 0011

04h=0000 0100   05h=0000 0101   06h=0000 0110   07h=0000 0111

08h=0000 1000   09h=0000 1001   0Ah=0000 1010   0Bh=0000 1011

0Ch=0000 1100   0Dh=0000 1101   0Eh=0000 1110   0Fh=0000 1111

例えばA4h=1010 0100となります。この２進ビットパターンでの最下位ビット（ここではもっとも右）の0が格納されている場所を「ビット0」と呼び、逆に最上位ビット（ここではもっとも左）の1が格納されている場所を「ビット7」と呼びます。その間は右から順に「ビット1」から「ビット6」です。ダブルワードなら「ビット0」から「ビット31」となります。

●論理演算について

算術演算と異なり、２進ビットパターン上での演算が行われていることに注目して下さい。16進の値を一旦2進ビットパターンに変換して論理演算後に16進に戻します。

論理演算では本来"∀"等の論理演算記号を用いますが、以下ではわかりやすくするために、算術演算記号の"+"と"X"を用いました。また、当ソフトウェアの改造コードでは、コードとして記述する際にORとXORの記号を記述し易くするために、別の記号を用いています。なお、論理演算を表す記号は、プログラミング言語では本来の論理演算記号とは別の記号を用いるケースがあります。

以下はBlueAshさんが寄稿された「ExGAME」Vol５の記事を参考にさせて頂きました。

●＜OR(論理和)＞

論理和におけるビット演算パターン

0+0=0

0+1=1

1+0=1

1+1=1

OR演算例。２進ビットパターン上で「ビット0」なら「ビット0」同士で上の演算パターンを適用します。

14hと35hのORを演算する例

14h(00010100)・・・ビット0(一番右側)は0

35h(00110101)・・・ビット0(一番右側)は1

-------------------

35h(00110101)・・・ビット0では0+1で1、ビット１では0+0で0、ビット2では1+1で1、ビット3では0+0で0、ビット4では1+1で1、ビット5では0+1で1、ビット6では0+0で0、ビット7では0+0で0。

●＜AND(論理積)＞

論理積におけるビット演算パターン

0X0=0

0X1=0

1X0=0

1X1=1

AND演算例。

上の演算パターンを見ればわかるように、特定ビットの中身が0ならば、その演算対象となるビットの中身が1か0かに関わらず演算結果は0となります。この性質を利用して、例えば0Fh(00001111)で1バイトの値にAND演算を行えば、演算対象の値の下位４ビットには影響を与えずに上位４ビットの各ビットを0にしてしまうことが可能です。このような操作を「ビットマスクをかける」や「ビットのフィルタリングを行う」ということがあります。なお、実際には「上位4ビット」ではなくダブルワードの値に対するバイトやワード単位でのマスクが一般的です。

14hと35hのANDを演算する例

14h(00010100)

35h(00110101)

----------------------

14h(00010100)

●＜XOR(排他的論理和)＞

排他的論理和におけるビット演算パターン

0+0=0

0+1=1

1+0=1

1+1=0

XOR演算例。

上の演算パターンの下２例を見ればわかるように、特定ビットの中身が1ならば、その演算対象となるビットの中身は0から１またはその逆へと反転します(ビット反転)。また、同じ値で２度XOR演算を施せば演算対象は元の値に戻ります。この性質を利用して、ゲーム等でデータの簡単な暗号化と復号化に用いられることがあります。さらに同じ値同士でXOR演算を施せば演算結果は00hとなるため、ソフトウェアの内部処理上でレジスタ（CPU内にある特殊なメモリのこと）や特定メモリアドレスに格納された値のクリアに用いられることもあります。

なお、ゲーム等でセーブデータやシナリオデータの簡単な暗号化と復号化に用いる場合は、１バイトの値(FFh等)で全データに対しXOR処理を行うケースが頻用されます。このようなケースでは、ヘキサ（バイナリ）エディタでバイナリデータを見れば、元々のデータで00hであった箇所は総てXOR処理を施す値（FFh等）になりますので、視覚的に分かり易いと思います。

なお、｢簡易バイナリファイル書き換え｣機能ではバイナリファイルに対し1バイトや4バイトベースの範囲指定XOR処理が可能です。

14hと35hのXORを演算する例

14h(00010100)

35h(00110101)

-------------------

21h(00100001)


＜補足＞符号付き整数、符号なし整数
＜補足＞符号付き整数・符号なし整数

●符号付き整数

符号付き整数とは、CPUアーキテクチャにおいては符号付き2進数を指します。基本的な格納単位はバイト（１バイト）、ワード（２バイト）及びダブルワード（４バイト）で、以下の値の範囲となります。

バイト：-128 ～+127

ワード：-32,768 ～+32,767

ダブルワード：-2,147,483,648～+2,147,483,647

符号付き整数は、負の値を格納するために2進ビットパターン上での最上位ビットを「符号ビット」と定め、この最上位ビットが1の場合は負の値としています。そして、最初に最上位ビットが1となる値が負の値の最大値となります。

バイト：-128=80h=10000000(2進)

ワード：-32,768=8000h=1000000000000000(2進)

ダブルワード：-2,147,483,648=80000000h=10000000000000000000000000000000(2進)

この負の値の最大値から、負の値の最小値である-1までの範囲の値を格納できることになります。-1は以下のようになります。

バイト：-1=FFh=11111111(2進)

ワード：-1=FFFFh=1111111111111111(2進)

ダブルワード：-1=FFFFFFFFh=11111111111111111111111111111111(2進)

ちなみに正の数の最大値は以下のようになります。

バイト：+127=7Fh=01111111(2進)

ワード：+32,767=7FFFh=0111111111111111(2進)

ダブルワード：+2,147,483,647=7FFFFFFFh=01111111111111111111111111111111(2進)

以上により、正負符号を反転させるには、まず2進ビットパターン上で全ビットをビット反転させ、さらに1を足せばよいということがわかります。これを「2の補数」と呼びます。

●符号なし整数

符号なし整数には符号ビットの観念はありません。符号なし整数は序数と呼ばれることもあります。

バイト：0 ～255(FFh)

ワード：0 ～65,535(FFFFh)

ダブルワード：0～4,294,967,295(FFFFFFFFh)

●＜参考＞

注：以下の説明は「かなり」簡略化しています。あくまで参考程度と考えてください。

C/C++言語においては、上に挙げたアーキテクチャ面からみたバイト、ワード及びダブルワードという名称とは別に、「SHORT」や「LONG」等の独自の名称(定数を格納する変数の型)もあります。また符合なしを英語の「unsigned」と表記します。


＜補足＞プロセスメモリ上の未使用領域

●概要

実行ファイルの各セクション終端近辺には大抵未使用領域があり、その実行ファイルがメモリ上にロードされたモジュールエリア内では、上記未使用領域に対応するメモリエリアは｢プロセスメモリ上の未使用領域｣となります。この未使用領域のバイナリデータは00hなので容易に視認できます。また、このメモリエリアのアドレスはOS等の環境で変化することはありません。

この｢プロセスメモリ上の未使用領域｣は、パラサイトルーチンの埋め込みや新規作成変数の格納、さらに改造コード使用時に書き換え前の値の退避先等、色々な用途に用いることが可能です。

なお、アプリケーションが使用する変数等を格納する｢DATA｣や｢.data｣等データセクションに対応するメモリエリアでは、バイナリデータが00hの連続である場合も変数格納用に確保されていることがありますので注意が必要です。

●未使用領域の確認

まず、対象プロセス選択後｢各種プロセス操作｣の｢セクション一覧｣で対象プロセスの各セクション該当エリア先頭アドレスを取得します。次に、同先頭アドレス以降のバイナリデータをメインエディットボックスに表示させ、指定アドレスを変更して各セクション終端近辺にある未使用領域を確認します。

●未使用領域の確保

｢PEファイルを指定して再構築｣機能で対象実行ファイルに新規セクションを追加すれば未使用領域を作成可能です。また、Windows2000/XPでは｢各種プロセス操作｣の｢対象プロセス仮想アドレス空間内にメモリ領域を確保｣機能でも一時的な未使用領域を作成できます。

●未使用領域が書き込み不能領域の場合の対処

対象未使用領域のメモリエリアが書き込み不可の場合は、｢PEファイルを指定して再構築｣機能の｢全セクションに書き込み可能属性を付加｣オプションを使用して下さい。また、｢各種プロセス操作｣の｢モジュール一覧及びメモリマップ表示｣で対象メモリエリアのアクセス属性を一時的に変更可能です。


リトルエンディアン
複数バイトの数値データをメモリに格納する際の方式の１つです。

●概要

データを格納する記憶装置であるメモリは、１バイト(８ビット)ごとに区切られ、そのひとつひとつに番地が設定されています。そのため、２バイト以上の複数バイトの数値データをメモリに格納する際には、その数値データを１バイト単位に分解して格納することになります。

ここで、１バイト単位に分解された数値データをメモリに格納していく順序をバイトオーダー（エンディアン）と呼びます。

リトルエンディアンとは、１バイト単位に分解された数値データを最下位のバイト（LSB）から順番にメモリに格納していく方式です。これとは逆に、最上位のバイト（MSB）から順番にメモリに格納していく方式をビッグエンディアン、また、この２つのデータ格納方式の両方を使用可能なバイエンディアンという方式もあります。

リトルエンディアン方式は、いわゆる「パソコン」に用いられているPentium等ｘ８６系プロセッサや、Alphaプロセッサで使用されています。一方、ビッグエンディアン方式はMotorolaのプロセッサや一部のゲーム機のプロセッサ等で使用されています。MIPSのプロセッサはバイエンディアンです。

なお、エンディアン方式はデータ送信におけるデータ送信順序を指す意味もあります。

●＜数値「0x12345678」をリトルエンディアン方式でメモリに格納する例＞

まず、この数値を１バイト単位に分解すると「0x12,0x34,0x56,0x78」となります。

最下位バイトの「0x78」から最上位バイトの「0x12」まで順番にメモリの各番地に格納していくと、

「0x78,0x56,0x34,0x12」というように格納され、プロセスメモリエディタ等で確認することができるバイナリデータとしては「78563412」となります。


ユーザー入力エミュレート型コード

●概要

当ソフトウェアでは、キー入力・マウスクリック・カーソル移動及び入力待機を、改造コードの形式でエミュレートさせることが可能です。この機能は、ゲームやアプリケーションの自動実行等を想定して実装しました。

●注意事項

キー入力をエミュレートする場合は、必ず押下と押上をセットにしてコードを記述して下さい。そうしないとハードウェア側でキーが押し続けられていると誤認され不具合が生じます。

実際の手動によるユーザー入力処理においては、連続する入力処理の間には若干の空き時間が生じます。

そのため、コードを用いてマウスクリックやキー入力を連続させるケースでは、個々のマウスクリック型コードやキー入力型コードの間に短時間の入力処理待機型コードを入れておかないと、連続する入力処理の間が殆ど無いためにハードウェア側がマウスクリックやキー入力として認識しないことがあります。

このユーザー入力エミュレートは、DirectInputを使用したゲーム等では正常に機能しない可能性があります。

仮想キーコードはプラットフォームSDKや開発者向けサイト等でその一覧表を見ることができます。

カーソル移動型コードと改造コード｢自動更新｣機能を併用するケースでは、キーフック機能も併用してコード自動更新をリモート操作で解除できるようにして下さい。

●コード書式一覧

S****

→入力処理待機型コード。｢****｣部分は１６進数でミリ秒を入力して下さい

→入力されたミリ秒の間コード実行処理を中止します

C********

→カーソル移動型コード。｢********｣部分は16進数でのカーソル移動先X・Y座標(ワードの値)を指定します。

→当ソフトウェアのカーソル位置取得及び同位置ウィンドウ操作で、簡単にカーソル移動型コードを作成することができます

M01

→マウスの左クリック

M02

→マウスの右クリック

M04

→マウスの中ボタン（ホイールボタン）クリック

→WindowsAPIをベースにしているため03でなく04にしました

KD**

→特定キーの押下。｢**｣は仮想キーコード

KU**

→特定キーの押上。｢**｣は仮想キーコード

●コード使用例

;以下でカーソルをX：300、Y：500に移動させ、その後全ウィンドウを最小化させます。

C012C0190

S100

;5Bは左Windowsキーの仮想キーコード

KD5B

;52はMキーの仮想キーコード

KD4D

S100

KU4D

KU5B


キーフック・全画面最前面表示のゲームへの対処法
キーフック

＜参考：全画面最前面表示のゲームへの対処法＞

●概要

メインウィンドウ上部右側の｢キーフック｣ボタンを押すと、目的のアプリケーションをキーフック対象に設定できます。キーフック設定後は、目的のアプリケーション上で以下のキーを用いて当ソフトウェアを操作可能になります。再度｢キーフック｣ボタンを押せばキーフックを解除します。

この機能は、特にDirectX排他モード等、全画面最前面固定(フルスクリーン)表示で実行されるゲームでの解析・改造に有用です。

この機能を使用するには、同梱の「UsaHook2.dll」が必要です。このDLLは｢スペシャルねこまんま５７号｣の使用バージョンに同梱しているものを使用して下さい。

●キーフック操作関連の注意事項

キーフックによる強制終了は、｢Ctrl｣+｢Alt｣+｢Del｣キーの同時押しを使用するよりも強力に終了させることが可能ですので、(特にDirectX排他モードで動作する)キーフック対象アプリケーションがフリーズした場合に有用です。状況によっては、｢Ctrl｣キーと｢Pause｣キーの同時押しを数回要することもあります。

アプリケーションを新たに起動してキーフック対象にする場合は、目的のアプリケーションをエクスプローラやランチャー上から即起動できるようにしておくことをお奨めします。

キーフック中はコード実行関連や変動検索関連（一部）のエラーメッセージの表示を行いません。

キーフックによる操作が不要または対象アプリケーションが終了した場合は、速やかにキーフックを解除して下さい。

キーフック機能はメインウィンドウ、検索ウィンドウ及びデバッガウィンドウのウィンドウタイトルを変更しても使用可能です。

キーフックの設定は当ソフトウェアのタイマー機能で任意のタイミングで行うことも可能です。

●キーフック操作一覧

｢Print Screen｣キーで改造コード実行

｢Scroll Lock｣キーで改造コード用｢自動更新｣設定と解除をトグル

｢Ctrl｣キーと｢Pause｣キー同時押しで、キーフック対象アプリケーションを強制終了

｢Insert｣キーでキーフック対象アプリケーションの最前面表示解除及び｢Alt｣＋｢Tab｣(｢Esc｣)キー使用制限解除

｢Home｣キーでキーフック対象アプリケーションのウィンドウを最小化

「Page Up」キーで通常検索実行（事前に検索ウィンドウ表示と検索条件等の設定が必要）

｢Shift｣キーを押しながら「Page Up」キーで検索結果出力リストの上位10件を｢NekoList.txt｣として｢Neko57.exe｣と同じフォルダに出力

「Delete」キーで変動検索用比較メモリの確保・記録（事前に検索ウィンドウ表示と比較範囲等の設定が必要)

「End」キーで変動検索実行（事前に変動検索用比較メモリの確保・記録が必要）

「Page Down」キーで変動検索用比較メモリの開放（事前に変動検索用比較メモリの確保・記録が必要）

「Num Lock」キーでハードウェアブレークポイントを設定（事前にデバッガウィンドウ表示とハードウェアブレークポイントでのアプローチを指定してのターゲット起動が必要）

｢Shift｣キーを押しながら「Num Lock」キーで、デバッガウィンドウのハードウェアブレークポイント用アドレス入力欄に、｢Neko57.exe｣と同じフォルダにある｢NekoBP.txt｣の内容を貼り付け（事前にデバッガウィンドウ表示が必要)


全画面最前面表示のゲームへの対処法
DirectX排他モード等全画面最前面表示ゲームに対する、画面切り替えや解析等対処には以下の方法が考えられます。

１．「Alt」＋「Esc」キー同時押しで画面切り替え

２．「Alt」＋「Tab」キー同時押しで画面切り替え

３．「Alt」＋「Enter」キー同時押しで画面切り替え（一部のゲーム等でフルスクリーンとウィンドウモードの切り替え可）

４．当ソフトウェアのタイマー機能で「メッセージ（最前面）」をゲームのバックグラウンドから行って画面切り替え

５．当ソフトウェアのキーフック機能でバックグラウンドから対象ウィンドウを強制的に最小化

６．LANリモート機能つきプロセスメモリエディタを使用し、解析対象を起動させた別のマシンに接続して解析

７．『VMWare』等仮想マシン構築ソフトを使用し、解析対象を起動させた仮想マシン（構築ソフト）ごと解析

８．リモートデバッガを使用して、解析対象を起動させた別のマシンに接続して解析

９．『SoftICE』等カーネルモードデバッガで解析

なお、全画面最前面表示ゲームの改造には、当ソフトウェアのキーフック機能やプロセス編集・改造コード用｢自動更新｣機能が有用です。


プロセスメモリへのファイルアップロード

●操作補足

まず、目的のプロセス及びアドレスを指定した上で、メインウィンドウ下部中央の｢D&Dファイルのアップロード許可｣ボタンを押します。次に、当ソフトウェアのメインウィンドウへファイルをドラッグ・アンド・ドロップです。これにより、そのファイルのバイナリデータでアドレス指定用エディットボックスの指定アドレス以降をファイルサイズ分書き替えます。

この際｢同左アップ範囲を指定｣ボタンが押された状態ならば、ファイルサイズ分ではなくファイル先頭から｢D&Dファイルのアップロード許可｣ボタンの下にあるエディットボックスで指定された16進バイト数分を書き替えます。さらに、｢終端指定｣ボタンが押された状態ならば、上記エディットボックスで指定された値を書き換え終端アドレスとして書き換えを実行します。

指定されたアップロード範囲内にアクセス不能エリアが含まれる場合は、メッセージボックスを表示してアクセス属性を無視してアップロードするか選択可能になります。

このアップロード機能はゲームの各種フラグ書き換え等、書き換えたい箇所が広範囲あるいは複数箇所ある場合に有用です。

アップロード処理時は、事前に書き換えの妥当性を一切チェックしないため注意が必要です。


プロセスメモリからのダンプ

●通常ダンプ

まず、目的のプロセス及びアドレスを指定した上で、ダンプサイズをメインウィンドウ下部中央の｢ダンプ実行｣ボタン左のエディットボックスに16進の値で入力します。そして｢ダンプ実行｣ボタンを押せば、アドレス指定用エディットボックスで指定したアドレス以降の指定サイズ分のバイナリデータをファイルとして出力します。また、｢終端指定｣ボタンが押された状態ならば、上記エディットボックスで指定された値をダンプ終端アドレスとしてダンプを実行します。

ダンプされたファイルは当ソフトウェア実行ファイルと同じフォルダ内に、ダンプした時間情報を元に｢SN月日_時分秒.dat｣というファイル名で作成されます。各ダンプファイルは別名となるため連続ダンプが可能です。

指定されたダンプ範囲内にアクセス不能エリアが含まれる場合は、メッセージボックスを表示してアクセス属性を無視してダンプするか選択可能になります。

このダンプ機能を使用すれば、ゲームでプロセスメモリの特定エリアをダンプしておくことで、改造アンドゥが可能になります。また、ゲームでプレイ中のシーン情報を格納するエリアをダンプしておき、後にシーン情報を丸ごと入れ替える(アップロードする)ことにより、シーン非依存セーブ・ロードが可能になるケースもあると考えられます。

●ＰＥダンプ

メインウィンドウ下部右側の｢PEダンプ｣ボタンを押すと、選択しているプロセスのモジュールエリアを｢Dumped.exe｣固定名で当ソフトウェア実行ファイルと同じフォルダに出力します。｢PEファイルを指定して再構築｣機能でこの出力した｢Dumped.exe｣を実行可能にすることができます。なお、改造コード｢PROC:｣を使用した場合は指定プロセスの詳細情報取得がスキップされるため、その詳細情報を元にダンプを行う｢PEダンプ｣処理はエラーになります。


PeRdr実行（逆アセンブルコードリスト出力）
PeRdr実行

●操作補足

メインウィンドウ下部右側の「PeRdr」ボタンを押すと、現在選択されているプロセスの実行ファイルを、PeRdr.exeを用いて逆アセンブルし、当ソフトウェアの実行ファイルと同じフォルダ内に逆アセンブルコードリスト（「実行ファイル名．DAS」）を出力します。

当ソフトウェアの実行ファイルと同じフォルダ内にPeRdr.exe（｢Digital Travesia｣で配布しています）を導入しておいてください。

｢軽｣ボタンを押して有効にしてから「PeRdr」ボタンを押すと、バイナリデータ省略により軽量化された逆アセンブルコードリストを出力します。

なお、DOSプログラムで実行させるため、出力ファイル名が短く変更されることがあります。


プロセスメモリ検索・変動検索

●通常検索と注意点

まずメインウィンドウ最上部のプロセス一覧で目的のプロセスを選択します。次にメインウィンドウ下部左側の｢メモリ検索｣ボタンを押して検索ウィンドウを表示します。その上で検索開始アドレス、検索範囲(16進バイト数)を各設定エディットボックスに入力します。入力された検索開始アドレスの下３桁は切り捨てて設定します（効率的な検索のため）。検索範囲はアプリ有効アドレス上限まで指定可能です。次に検索対象として｢16進(バイナリデータ)｣または｢文字(列)｣を選択し、更に検索対象バイナリデータまたは文字列を検索条件入力エディットボックスに入力してから｢通常検索実行｣ボタンを押して下さい。なお、通常はデフォルトで設定している検索開始アドレス及び検索範囲で事足ります。また、メインウィンドウの｢アドレス転写｣ボタンを押すと、アドレス指定用エディットボックスに入力されているアドレスで、通常検索と変動検索の検索開始アドレスを書き換えます。

検索開始アドレス及び検索範囲はヒープリストやメモリマップを参考に絞り込んで設定することが可能です。

｢16進(バイナリデータ)｣の右にある｢10｣ボタンを押して有効化すると、検索時には16進検索条件入力エディットボックスに入力された内容を10進数値として認識し、当ソフトウェア側で16進リトルエンディアンに変換して検索します。この際入力された値は符号付き整数とみなし、この値を16進数で表示するのに最低限必要なバイト数を検索単位とします。入力された10進数値がダブルワードの符号付き整数の範囲を超えている場合はエラーになります。さらに｢10｣ボタンと｢F｣ボタンの両方を有効化すると、入力された内容を10進整数値として認識し、当ソフトウェア側で16進リトルエンディアンの単精度実数(4バイト表示の浮動小数点数)に変換して検索します。

文字列検索時に｢Uni｣ボタンを押して有効化しておくと、検索条件の指定文字列をUnicodeに変換して検索します。また、｢Uni｣ボタンが有効化されていれば、メインエディットボックスのバイナリデータ対応文字列表示もUnicodeで行います。ただし、｢文字列更新使用｣機能はUnicode変換を行いません。

検索結果は100万件を上限に記録され、検索条件入力用エディットボックス右下側のリストボックスへアドレス上位1000件(32000件にまで変更可)をリストアップします。この検索結果表示用リストボックス上で任意のアドレスをクリックすれば、同アドレスをメインウィンドウのアドレス指定用エディットボックスに貼り付け、さらにメインエディットボックスの表示内容を新しいアドレスで更新します。なお、前の検索結果がリストに残っている状態で新たに検索を行った場合は、自動的に絞込みモードになります。もしも検索結果で該当数過大な場合は、検索条件を変更する操作を行ってから、新しい検索条件で絞込み検索を行ってください。絞込みモードで検索を行えば、現在記録されている検索結果からさらに新しい検索条件に該当するアドレスをリストアップします。

｢結果を元に戻す｣ボタンを押すと、リストボックスに出力されている検索結果を1回前の検索の出力結果に置き換えます。この機能は検索条件を間違えて絞込み検索を行った場合等に有用です。

該当件数が100万件を超えている場合は、検索目的のアドレスが、記録された検索結果に含まれない可能性があります。そのため、100万件から絞込み検索を行っても検索目的のアドレスが見つからない場合は、検索開始アドレスや検索範囲を変更して再試行されることをお奨めします。また、検索条件が１バイトデータや｢FFFF｣等検索該当件数が100万件を超えることが予想される場合は、変動検索でアプローチすることをお奨めします。

検索対象として｢16進(バイナリデータ)｣を選択してから検索を実行すると、16進検索条件入力エディットボックスのリスト部分（同エディットボックス右端のボタンでリストを表示します）へ、検索に使用した条件を最高30件までリストアップしていきます。30件を超えると古い条件を削除して新しい条件を追加します。このリストから検索条件を再利用することが可能です。

検索所要時間はマシンのスペック等に大きく依存します。検索処理は低スペックのパソコンでもなるべくフリーズはしないように処理させています。そのため、動作が停止しているように見えてもすぐに強制終了させずに、しばらく様子をみてください。

●変動検索と注意点

通常検索同様に検索ウィンドウを呼び出します。変動検索用比較開始アドレスは、デフォルトでアプリ有効アドレス下限に設定していますが変更可能です。この場合、入力された比較開始アドレスの下３桁を切り捨てて設定します（効率的な比較のため）。プロセスメモリの特定のエリアを変動検索対象としたい場合は、そのエリアの先頭に比較開始アドレスをあわせると効率的です。また、検索範囲も同範囲指定エディットボックスの入力値で設定します。この検索範囲サイズに指定上限はありませんが、指定値相応の比較バッファ用メモリ確保を行いますので注意して下さい。

ここでまず比較用データを得るために｢確保・記録｣ボタンでメモリ確保・記録を行います。その後対象アプリケーションに前後比較を行うアクションを起こさせます。次にバイトやワード等比較単位を選択し「変動検索実行」のいずれかのボタンを押して下さい。比較結果(値変動箇所のアドレス)は100万件を上限に記録され、そのアドレス上位1000件(32000件にまで変更可)を検索結果出力リストボックスに出力します。リスト出力後は自動的に絞込みモードになり、記録済みの比較結果からさらに絞込みます。なお、｢値変動｣で絞込みを行う場合は、あらかじめ対象アプリケーションで検索対象の値変動が生じるアクションを起こす必要があります。また、値増減での変動検索と絞込み時には、比較単位の設定に注意して下さい。｢指定値の増減｣に用いる値には符号付き10進数を指定してください（｢+｣は不要）。

通常検索同様、該当件数が上限の100万件に達している場合は、検索目的のアドレスが、記録された比較結果に含まれない可能性を考慮して下さい。

変動検索を効率よく行うために、変動検索を行うタイミングに注意して下さい。例えば検索目的のフラグが変化する直前にメモリ確保・記録で比較用データを作成し、同フラグが変化した直後に変動検索を行えば、検索結果として出力される変動該当箇所は最小限に抑えられ、効率的な変動検索が可能になります。また、対象アプリケーションにおいては変動該当箇所を増加させる不必要な操作を極力避けるようにして下さい。

変動検索にあたり、比較単位がワードやダブルワードの場合には１～３バイトの比較基点補正が可能です。これにより、比較単位を１バイトずつずらして比較する手法の、検索該当件数が膨大な数になる問題を回避しています。大抵の場合、検索対象となるパラメータやフラグの格納アドレスは、プロセスメモリ上のダブルワード境界に設定されるため、比較基点補正は必要ありません。しかし、パラメータやフラグが配列の要素としてプロセスメモリ上に格納されている場合等には比較基点補正が必要となるケースもあります。

比較結果として出力されたアドレスをリストボックス上でクリック等により選択すれば、そのアドレスの記録時と現在の値をバイト/ワード/ダブルワード単位で10進数の符号なしの値で表示します。また、通常検索同様、同アドレスをアドレス指定用エディットボックスに貼り付け、さらにメインエディットボックスの表示内容を新しいアドレスで更新します。

●検索機能の活用

プロセスメモリ検索・変動検索により、ゲームでの各種フラグやパラメータの格納アドレス等を探し出すことが可能です。特に能力値等各種パラメータはゲーム画面で表示された値を16進数に変換してリトルエンディアン方式にして検索すれば、簡単にその格納アドレスを見つけることが可能なケースも少なくありません。この際、パラメータ格納アドレスが主たる操作用と表示用等の２箇所以上見つかるケースや、環境依存型の変動アドレスであるケースに注意して下さい。後者の場合はアドレスを直接指定する改造コードではなく、ポインタ型改造コードやデバッガ用改造コード等を用いて対処します。

ゲームのCGフラグ等各種フラグのアドレスを探し出す場合は変動検索の使用が効果的です。1Byte、２Byte、４Byteそれぞれの比較単位で、フラグのオン・オフを値変動と値不動での絞込み検索を繰り返して絞り込んで下さい。また、このようなフラグ検索の場合は、最初に出力した比較結果から値01h（オン）または値00h（オフ）での通常検索による絞込みが有効なケースも少なくありません。

CGフラグがビットフラグ(1バイトの８つのビットそれぞれを使ってCG８枚分のCGフラグオン・オフ情報を格納)の可能性がある場合は、新たなCGフラグを立てた上で値が増加した場所を検索してみて下さい。この場合、さらにCGフラグを立てて、その結果をCGモード上で確認して、新たに立てたCGフラグがその前に立てたCGフラグと近接していると推測される場合は、さらに値が増加した場所を絞り込むと効果的です。

また、CGフラグ等が格納されるメモリエリアは、音声オン・オフ等のゲームシステムフラグ格納メモリエリアと同一になることもありますので、ゲームシステムフラグのオン・オフを変動検索で検索してそのアドレスを特定し、そのアドレスが含まれるメモリエリアを｢各種プロセス操作｣のメモリマップ表示機能で把握して、そのメモリエリア先頭アドレスとエリアサイズを変動検索の検索・比較基点と検索・比較範囲に設定して検索すると効率的に検索できるケースもあります。

なお、CGフラグ等が格納されるメモリエリアを簡単に探し出すためには、セーブデータの最初の数バイトをメモリ上で検索或いは、セーブデータの未使用箇所に目印用文字列（またはバイナリデータ）を書き込んで、セーブデータを読み込み後に目印用文字列（またはバイナリデータ）をメモリ上で検索するというアプロ－チもあります。ただし、必ずしもセーブデータが読み込まれたメモリエリア上でCGフラグ等を管理するとは限りません。

さらに、変動検索の値変動と値不動での絞込み検索は、対象となるパラメータの値が実数（浮動小数点数）ベースでプロセスメモリ上に格納されているケースにも効果があります。

なお、通常検索と変動検索はリスト出力された検索結果を共有します。そのため、まず通常検索でリストを出力し、次に変動検索を有効にして値変動で絞り込むこと（或いはその逆)も可能です。


＜補足＞プロセスメモリ検索関連の追加補足

このページは、ユーザーの方が検索機能をより有効的に活用して頂くための補足説明です。

●検索条件の進数変換について

検索条件に整数値を指定する場合に、符号の有無や表示バイト数等の詳細を指定したい場合は、進数変換ウィンドウで目的の値を変換後、｢表示値を指定エディットボックスへ転写｣用ボタンをお使い下さい。

●浮動小数点数の小数の値を検索条件にしたい場合

ゲーム等でパラメータの値に小数が使用されている場合は、そのパラメータは浮動小数点数でメモリ上に格納されている可能性があります。この様なケースでは、変動検索でアプローチして下さい。その理由は、

ゲーム上で表示されている値：10.5

メモリ上に格納されている値：10.51250000

という様になっていることが多く、ゲーム上で表示されている値を元に検索しても該当しない可能性が高いためです。

なお、パラメータの値の表示に小数を用いていても、実際にはメモリ上に格納されている整数値を10分の1にしたものを表示しているというケースも考えられます。

●変動検索の範囲指定について

変動検索の検索・比較範囲はデフォルトで04000000hすなわち64MB相当となっています。この範囲を通常検索のデフォルトと同一にすると、10000000hすなわち256MBのメモリ確保を行うことになります。指定する変動検索の検索・比較範囲に上限はありませんが、マシンスペックからみて過大な範囲設定(とメモリ確保)を行うと、システムや解析対象のパフォーマンスに影響を与えかねないため注意して下さい。

なお、｢VMware｣と当ソフトを連携させてフルスクリーンのゲームを解析する場合や、目的のアドレスがDLLモジュール内にある特別なケース以外では、大抵の場合、変動検索の検索・比較基点と検索・比較範囲はデフォルト設定で事足ります。しかし、例外として、目的のアドレスが0x04000000を超えるようなケースもありますので、変動検索で目的のアドレスが見つからない場合は、検索・比較基点か変動検索範囲を変更しながらアドレス0x10000000まで検索してみてください。

なお、各種ゲーム機のエミュレータでは、パラメータやフラグの格納アドレスが0x0F123450というように0x04000000を超えるケースが少なくありません。このようなケースでは、まず点数等の、通常検索で簡単に検索可能なアドレスを検索し、そのアドレスが含まれるメモリエリアを｢各種プロセス操作｣のメモリマップ表示機能で把握して、そのメモリエリア先頭アドレスとエリアサイズを変動検索の検索・比較基点と検索・比較範囲に設定して検索すれば、簡単に目的のアドレスを探し出せることがあります。

●予測分岐型高速検索モードについて

検索ウィンドウで｢通常検索｣の枠内にある｢予測分岐型高速検索モード｣ボタンを有効にすると、通常検索・変動検索の両方で極めて高速な検索が可能になります(レイアウト上｢通常検索｣の枠内にボタンを配置していますが、変動検索にも有効です)。

このモードでは、検索対象となるバイナリデータがある可能性が高い箇所を予測して検索します。当方で色々環境を変えながら検索テストを行った限りでは、予測分岐精度は100%でした。

このモードを使えば、たとえ低スペックなパソコンでもストレスなくメモリ検索を行うことが可能です(Pentium 100MHz、Memory48MB、Windows95 の環境で確認)。また、アプリ有効アドレス範囲(Windows2K/XP:00010000～7FFEFFFF)等の広範囲の検索を一度に行いたい場合にも役立ちます。

高スペックなパソコン上では、このモード使用時・非使用時での検索速度にさほど違いが現れないことがあります。

●検索対象プロセスの切り替え(引継ぎ)について

ゲーム解析時に異なるセーブデータを読み込んで変動検索を行う等で、一旦検索対象プロセスを終了・再起動する必要がある場合には、以下の手順を行って下さい。

1.通常の場合と同様に通常検索で検索結果をリストに出力させるか、変動検索で比較用メモリを確保或いは検索結果をリストに出力させる

2.検索対象プロセスを終了

3.｢通常検索実行｣或いは｢変動検索実行｣用のいずれかのボタンを押下する

4.検索対象プロセスがオープンできないという警告メッセージが表示される（出力した検索結果や確保した比較用メモリはそのまま保持します）

5.検索対象プロセスを再起動し、メインウィンドウのプロセスリストを更新して再選択する

6.通常の場合と同様に検索を続行する

●デバッガを用いた検索結果の精度向上について

検索時に当デバッガの「実行一時停止・実行再開」機能を用いて任意のタイミングで検索対象プロセスを停止させることにより、検索対象プロセスの不必要なメモリ変動を抑制することが可能です。これにより検索結果の精度を向上させ、よりスムーズに目的のアドレスを得ることが出来ます。


＜参考＞通常検索によるメモリ解析・改造の基本的アプローチ
通常検索によるメモリ解析・改造の基本的アプローチ

ここでは、ゲーム解析を始めたばかりの方向けに、通常検索によるメモリ解析・改造の基本的アプローチの手順と基本的な注意点を紹介します。

●基本的アプローチ

当ソフトウェアの各部分名称についてはこちら

数値表現についてはこちら

リトルエンディアンについてはこちら

1.メインウィンドウ最上部のプロセスリストから目的のプロセスを選択します。  目的のプロセスが当ソフトウェアより後に起動された場合は、メインウィンドウ上部右側の｢更新｣ボタンを押してプロセスリストを更新させる必要があります。次に、メインウィンドウ下部左側の｢メモリ検索｣ボタンを押して検索ウィンドウを表示します。

2.目的のゲームで表示されているHP等パラメータの値を、16進数に変換します。当ソフトウェアでは、10進数値で入力した検索条件を内部で16進リトルエンディアンに変換して検索することも可能です。その場合は検索ウィンドウ上部の｢16進｣という文字列の右にある｢10｣ボタンを押して有効化したうえで、さらにその右にある検索条件入力欄に10進数値を入力して下記５以降の操作を行ってください。当ソフトウェアの進数変換機能を使う場合は以下の操作を行います。

まず、メインウィンドウのメニューから｢解析｣→｢進数変換及び整数－実数変換｣で進数変換ウィンドウを表示します。次に｢10進数値を変換｣下の入力欄にパラメータの値を入力して下さい。入力欄の右にある出力欄に16進数に変換された入力値が表示されます。

3.さらに｢リトルエンディアン方式で表示｣ボタンを押して、上で得られた16進数値をリトルエンディアン方式に変換します。

4.16進リトルエンディアン方式に変換したパラメータの値を、検索ウィンドウ上部の｢16進｣という文字列の右にある検索条件入力欄に入力して、検索用バイナリデータに設定します。例えば目的のパラメータの値がゲーム上で10000ならば、16進リトルエンディアンでは値のプロセスメモリ上での格納サイズにより｢1027｣あるいは｢10270000｣で検索することになります。まず最初はより少ないバイト数の検索条件で試して見てください。この例では｢1027｣の方を検索条件として設定します。

5.検索ウィンドウ上部の｢通常検索実行｣ボタンを押します。大抵の場合、検索開始アドレスと検索範囲はデフォルトのままで変更する必要はありません。

6.検索実行により検索ウィンドウ下部右側にあるリストボックスに検索該当アドレスがリストアップされます。もしここで該当件数が多い場合は、ゲーム上で目的のパラメ－タの値を変化させてから、変化後の値を使って上記2以降の操作を繰り返します。これにより検索結果が絞り込まれていきます。

ここで検索該当件数が100万件に達している場合は、目的のパラメータ格納アドレスが、記録された検索結果に含まれない可能性があります。その場合は検索条件あるいは検索範囲を変更してみてください。

7.リストアップされた検索該当アドレスのひとつをクリックします。これにより、｢アドレス指定用エディットボックス｣へメモリエディット時に必要なアドレスが転送され、さらにメインエディットボックスの表示内容を新しいアドレスで更新します。｢アドレス指定用エディットボックス｣の位置は｢スクリーンショットと機能マップ｣内で目印をつけています。

8.この時点で｢アドレス指定用エディットボックス｣で指定されたアドレス以降のバイナリデータが、メインウィンドウ中央のメインエディットボックスに表示されている筈です。このメインエディットボックスには書き込みできません。

9.この時点で、｢バイナリデータ編集用エディットボックス｣にも、｢アドレス指定用エディットボックス｣で指定されたアドレス以降のバイナリデータが4バイト区切りで16バイト(10hバイト)分表示されます。｢バイナリデータ編集用エディットボックス｣は｢アドレス指定用エディットボックス｣の右にある4つのエディットボックスで、既述｢スクリーンショットと機能マップ｣内で目印をつけていますので分かりやすいと思います。

10.｢バイナリデータ編集用エディットボックス｣内をクリックしてフォーカスを移した上で、変更したい箇所のバイナリデータ表示文字列を｢Delete｣キーまたは、ドラッグで範囲選択後右クリックからメニューの｢削除｣で削除します。その後、削除した箇所に新しいバイナリデータ表示文字列を削除した字数分入力します。

(注)ここでバイナリデータ表示文字列と書いているのは、｢バイナリデータ編集用エディットボックス｣内で表示・入力される半角英数文字列(16進数のバイナリデータを文字列で表示したもの)のことです。

11.｢確認｣ボタンの下にある｢更新｣ボタンを押します。これにより、｢バイナリデータ編集用エディットボックス｣内で変更されたバイナリデータを元に、プロセスメモリに書き込みを行います。この後ゲーム上でパラメータを再表示するアクションを起こして、プロセスメモリ書き換え結果が反映されるか確認します。もしゲーム上で値が変化しない場合は、｢更新｣ボタンの右下にある｢UNDO｣ボタンを押して、｢更新｣ボタンによるプロセスメモリへの変更を元に戻します。そして、上記７から別のアドレスで再度書き換えを行います。

12.プロセスメモリ書き換え結果が反映された場合は、再利用できるように改造コードの形式で保存して下さい。作成した改造コードはゲーム改造系サイトへ投稿されることをお奨めします。

13.なお、上記9以降で、｢バイナリデータ編集用エディットボックス｣の上方にある｢+4h/入力｣ボタンを押すと、ユーザー入力をそのままプロセスメモリに反映させることが可能な、｢リアルタイム書き換えパネル｣を表示します。パラメータが広範囲に並んでいる場合等はこちらの方が使いやすいと思われます。

｢リアルタイム書き換えパネル｣使用時は、まず｢Insert｣キーを押して上書きモードにしておくと入力が容易になります。

●通常検索における基本的注意点

1.目的のパラメータのサイズと、プロセスメモリ上での格納サイズの違いについて。

例えば１つのパラメータの値が10進数で1000ならば、16進リトルエンディアンでは｢E803｣となります。この値がプロセスメモリ上で2バイトで格納されているならば｢E803｣、4バイトで格納されているならば｢E8030000｣となります。

また、2つの異なるパラメータの値が10進数でそれぞれ100、80となっている場合は、各パラメータの値は16進数で1バイトに収まりますが、プロセスメモリ上ではこれらのパラメータが並んで格納されている場合｢6450｣、｢64005000｣、｢6400000050000000｣と格納サイズが異なるケースがあります。検索時にはこのようなプロセスメモリ上での格納サイズに注意が必要です。

2.PCゲームでは、パラメータの値は大抵16進リトルエンディアン方式でプロセスメモリに格納されていますが、一部の家庭用ゲーム機ではメモリ上で10進数値でパラメータを扱うこともあるため、そのエミュレ－タ上でのパラメータ検索は16進数値だけでなく10進数値でも試す必要があります。

3.PCゲーム及び家庭用ゲーム機等のエミュレータでは、HEAPエリアにパラメータ等のデータを格納した場合、そのパラメータのアドレスはOSやメモリ実装容量に依存する環境依存型変動アドレスとなります。この場合、公開されている改造コードがアドレスを直接指定しているタイプならば、解析に用いた環境以外では大抵使用できなくなります。このような環境依存型変動アドレスに対しては、当ソフトウェア用のポインタ型改造コードやデバッガ用改造コードで対処可能です。


ファイルを指定してMD5/CRC-32生成

●操作補足

MD5生成には同梱の「UsaMD5.dll」が必要です。なお、MD5生成時は対象ファイルを分割して読み込むため、対象ファイルサイズのメモリ確保は行いません。これにより、パソコンのスペックに関わらず、巨大なサイズのファイルのMD5も生成可能です。ただし、MD5生成はパソコンのスペックや対象ファイルサイズに相応して数分から十数分要することもあります。


簡易バイナリファイル書き換え

●基本的注意事項

｢簡易バイナリファイル書き換え｣ウィンドウでは、各エディットボックスがそれぞれ独立してＤ＆Ｄを受け付けます。

複数コード処理中にコード等に問題が生じた場合、書き換えは途中で中断されます。この場合は書き換え対象ファイルをバックアップから復旧して下さい。不測の事態に備えてバックアップは必ず作成して下さい。

コードを表示するエディットボックスでは、必要に応じてコードを編集可能です。

読み込み及び一括実行可能な改造コードのサイズは半角32767文字が上限です（改行含む）。当機能はコードを編集しながらバイナリファイルを書き換えることに重点をおいているため、あまりにも巨大なサイズの改造コードは想定していません。

●コード書式一覧

１．改造コード型

＜注意事項＞

複数コード実行時は、各コードを改行で区切ってください

複数コード中の改行のみの行は無視します

連続書き換え型コードでは、指定範囲サイズが書き換え内容として指定したバイナリデータのバイト数の倍数でない場合、指定範囲内で安全と考えられる上限まで書き替えます（範囲指定ミスの可能性があるため）

書き換え内容に指定するバイナリデータのサイズは1024バイトが上限です

バイナリデータは必ず１バイトを半角英数2文字で指定してください(1→01等)

コード中に余計なスペースがあるとエラーになります

＜書式＞

010000-E703

→オフセット010000から2バイトを｢E703｣で書き替えます

0100>01ＦＦ-E703E7030001007EFFFFF80000000000

→オフセット0100から01FFを指定バイナリデータ｢E703E7030001007EFFFFF80000000000｣で埋めます

10$ねこまんま

→オフセット10以降に文字列｢ねこまんま｣対応バイナリデータを書き込みます

0200>02ＦＦxAA

→オフセット0200から02FFを、1バイト毎に値AAhでXORして書き換えます

0200>02ＦＦX12345678

→オフセット0200から02FFを、4バイト毎に値12345678hでXORして書き換えます

;コメント

→セミコロン以降改行までをコメントと判断し無視します

＜使用例＞

;環境フラグセット

0080-010300FFFF

;CG・回想モードフラグALLON

0100>01C7-01

01D0>01DF-FF

２．差分書き換え型

＜注意事項＞

複数コード実行時は、各コードを改行で区切ってください

複数コード中の改行のみの行は無視します

｢FILENAME｣での指定は無視します（書き換え対象ファイルを当ソフト実行ファイルと同じフォルダに配置させる必要が生じるため）。

オフセットは必ず8桁で指定してください

コード中のコロンやスペースの位置は、以下の書式と厳密に比較します

コード中に余計なスペースがあるとエラーになります

＜書式＞以下では分かりやすいようにスペースをアンダーバーで表示しました

00002054:_74_EB

→オフセット2054のバイナリデータが｢74｣ならば｢EB｣に書き換えます

*コメント

→アスタリスク以降改行までをコメントと判断し無視します

＜使用例＞

*Ver7.4用

FILENAME_Target.exe

00002054:_74_EB

000051AC:_55_C3

●差分型パッチコード作成

書き換え前と書き換え後のファイルを指定して比較することで、書き換え箇所を差分書き換え型コードとして出力します。

この差分型パッチコード作成は、ソフトウェアの日本語化等の書き換え箇所が極端に多いケースは想定していません。書き換え箇所が2000箇所を超えるケースには用いないでください。


PEファイルを指定して再構築
PE(Portable Executable)ファイルを指定して再構築

●PEファイル再構築の基本的注意点

当ソフトウェアのPEファイル再構築機能は、主にパックした自作ソフトウェアのアンパックを通してPEファイルの仕組みを学ぶためのものであり、他人が製作したソフトウェアのアンパックを目的とするものではありません。

当機能の実用的な用途としては、プロセスメモリ上でコードセクション内を広範囲に書き換えたPEファイルをダンプして、そのまま実行可能にするための再構築が挙げられます。この場合は、PEファイル再構築時のオプション設定で｢セクション情報の修正(ダンプファイル用)｣と｢IAT(インポートアドレステーブル)再構築｣を必ず選択する必要があります。

また、｢全セクションに書き込み可能属性を付加｣により、Windows2000/XPで対象プロセスのコードセクション該当箇所が書き込み不可のケースに対処可能です。

他にも｢セクション追加｣機能を使うことで、このPEファイルがロードされた改造対象プロセスメモリ上に、自由に使用可能な読み/書き/実行可能なメモリエリアを確保することができます。これにより、改造対象プロセスメモリ上でパラサイトルーチンや新規作成変数を分かりやすい位置に埋め込むことが可能です。さらにエントリーポイントを、プロセスメモリ上の追加したセクション内に書き込んだコードの先頭アドレス対応値（ImageBaseからの相対値）に書き換えて、対象実行ファイル起動時に特定の処理を実行させることも可能です。プロセスメモリ上のセクション先頭アドレス等のセクション情報詳細については、「各種プロセス操作」の｢セクション一覧表示｣機能で確認できます。

●PEファイル再構築の基本的な操作の流れ

１．当ソフトウェアのメインウィンドウ最上部のプロセスリストで対象プロセスを選択後、メインウィンドウ下部右側の｢PEダンプ｣ボタンでモジュールエリアをダンプします。

ダンプファイル名は｢Dumped.exe｣固定で当ソフトウェア実行ファイルと同じフォルダに出力します。

次に、メニューから｢ファイル｣→｢PEファイルを指定して再構築｣でPEファイル再構築ウィンドウを表示します。

２．まず、再構築対象PEファイルが実行されているならば必ず終了させてください。

再構築対象PEファイルに上記｢Dumped.exe｣或いは『OllyDump』等によりダンプされたPEファイルを指定して、オプション設定後に｢PEファイル再構築実行｣ボタンです。圧縮等、実行ファイルに操作が加えられている場合は、エントリーポイントにはOEP（オリジナルエントリーポイント）を指定する必要があります。OEPは対象PEファイルを『OllyDbg』等で解析して導きます。

同梱｢UPX_UsaTest.EXE｣をダンプした｢Dumped.exe｣の場合のオプション設定例は下記。

オプション全選択(｢All｣ボタン押下)

｢エントリーポイント変更｣：00001000

『｢Base of Code｣変更』：00001000

●IAT再構築の注意事項

当ソフトウェアのIAT再構築ルーチンはオーソドックスなものです。現在公開されている殆どのパッカーはPEファイルに対しアンパック対策を含む複雑な操作を行うため、当ソフトウェアが実装しているような基本的なIAT再構築機能ではアンパックは困難です。また、パックされていないPEファイルを、プロセスメモリ上から単にダンプしたものの再構築でも、インポートテーブルの構造の特殊性等により正常にIAT再構築が行えないことがあります。

当ソフトウェアのIAT再構築の性質上、IAT再構築時のOSと異なるOS上では、再構築されたPEファイルは正常に動作しません。

当機能のテスト例としてUPXで圧縮されたものを用意しましたが、当機能はUPX用に最適化されたものではありません。そのため、必ずしもUPXで圧縮されたPEファイルのアンパックが可能とは限りません。

●補足

殆どのパッカーに対しそれぞれ個別のアンパッカーが存在するのは、オーソドックスなIAT再構築ルーチンで対象PEファイルを読み込んで再構築する静的な手法では、対処できないケースが多いことが主因と考えられます。

ただし、対象PEファイルをデバッガでステップ実行しながらOEPを検出し、OEP実行時で取得されたIAT関連情報を元にIATを再構築する動的な手法を用いれば、オーソドックスなIAT再構築ルーチン使用でも汎用アンパッカーになりえます。


ファイルを指定して各種データ抽出

●概要

この機能は、ゲーム等で用いられる画像データや音声データ等をひとつのファイルにまとめた、いわゆるアーカイブファイルから、個々のデータを抽出・出力するためのものです。この機能により得られた各種データは、著作権侵害行為にならぬよう、個人の範囲において使用して下さい。

●基本的な操作の流れ

1.抽出対象アーカイブファイルを指定

2.抽出データの種類を指定

3.抽出データの出力に関するサイズ制限等を指定

4.抽出データの出力先フォルダを指定

5.抽出実行

●補足

BMP、PNG、JPG、WAV、MID、OGG、AVIについては、抽出パターンを当ソフト側で設定済みであり、ユーザーが特に抽出パターンを指定する必要はありません。この7種のデータは、ファイルフォーマットを元に個々の抽出するファイルのサイズを取得しています。検索条件のバイナリデータ検索結果だけを元に抽出しているわけではありません。

上記BMP等7種以外のデータ抽出時には、検索条件等の抽出パターンをユーザー側で指定して下さい。なお、検索条件に｢??｣は使用できません。

抽出処理中に指定した総出力サイズを超えた場合は、その時点で抽出対象の検索及びカウントを中止します。

●ユーザー指定形式の設定例

MPGファイルの抽出を行うときは、ユーザー指定形式で以下のように抽出パターンを指定します。

先頭検索条件：000001BA21000100

終端検索条件：000001B9

終端検索条件指定時は「抽出終端の検索条件を指定する」ボタンを押して有効化してください。

●注意事項

この機能使用時は当ソフトウェアに多大な負荷がかかるため、当ソフトウェアの他の機能との併用はお奨めしません(不具合を生じる可能性があります)。


プロセス一覧更新

●操作補足

プロセスリストを更新させると、アドレスやバイナリデータの保持・指定・編集用エディットボックスの内容もクリアされます。プロセスリスト右側の｢更新｣ボタンも同じ処理を行います。


デバッガ兼APIトレーサー

●基本的な注意点

デバッガは通常のアプリケーションと異なる極めてアクロバティックな操作を行います。そのため、操作が適切でない場合システムに重大な悪影響を及ぼす可能性がありますのでご注意ください。

当デバッガ使用にあたり、レジスタ、オペコード、スタック、例外及びAPI関数等の基本的な事項について理解しておいてください。例えば、EIPレジスタ（命令ポインタ）は次に実行される命令のアドレス（正確にはコード・セグメント内オフセット）を格納すること等です。

当デバッガでのアプローチにおいて、デバッグターゲットの動作安定性を優先する場合は、「ブレークポイント（ハードウェア）｣でのアプローチを使用してください。

当デバッガではデバッグターゲットへのアタッチも可能です。まずメインウィンドウのプロセス一覧でアタッチするプロセスを選択し、次に、デバッガウィンドウで、アプローチ選択後「Shift」キーを押しながら｢起動｣ボタンを押します。これにより、選択プロセスへのアタッチを実行し、アタッチに成功したか否かをエディットボックスに出力します。アタッチ成功後の操作は通常のデバッグと同様です。なお、ブレークポイント（メモリアクセス）でのアプローチとアタッチの組み合わせは、デバッグターゲットの動作が不安定になる可能性があるため、使用不可にしました。

デバッガ対策として、デバッガから起動されたりブレークポイントが設定されると、それを検出して即終了するアプリケーションが実在しますので、注意して下さい。ちなみにコ－ド実行ブレークポイント、メモリアクセスブレークポイント及びハードウェアブレークポイントに関しては、リバースエンジニアリング対策としてのブレークポイント検出手法が確立されています。

デバッグターゲットを実行停止させている状態では、メインウィンドウでのプロセス一覧更新は行わないでください。デバッグターゲットのプロセスメモリを操作したい場合は、デバッグターゲット起動直後にプロセス一覧更新を行ってデバッグターゲットを選択しておくことをお奨めします。

現バージョンでは、デバッグターゲット起動前に、｢ブレークポイント(コード実行)｣、｢ブレークポイント(メモリアクセス)｣、｢ブレークポイント(ハードウェア)｣または｢WriteProcessMemory関数呼び出しをトレース｣の３つのアプローチから、いずれか１つを選択する必要があります。

現バージョンでは、ブレークポイントは常に１つだけ設定可能です。設定されたブレークポイントはデバッグターゲット起動後に変更(再設定)可能です。なお、｢ブレークポイント(ハードウェア)｣は対象プロセスに属するスレッドそれぞれに１つづつブレークポイントを設定可能です。

ブレークポイントでブレークすると、当デバッガはレジスタの情報等を取得してエディットボックスに表示し、さらにデバッグターゲットへ制御を戻した上で再度ブレークポイントを自動的に設定しなおします。これにより、最前面全画面固定ゲームのような、ブレーク時にデバッガがデバッグターゲットの制御を奪ったままだと実質OSフリーズ状態になってしまうケースにも対処可能です。

｢ブレークポイント(コード実行)｣、｢ブレークポイント(メモリアクセス)｣の場合、｢ブレーク件数｣で設定された回数以上のブレークがあった場合は、ブレークポイント設定を自動的に解除します。これは、デバッグターゲットのタイマー制御等により、１秒間に数十回ブレークしてしまうようなケースに対処するものです。｢ブレークポイント(ハードウェア)｣では1回ブレークした時点でブレークポイントを自動的に解除します。

エディットボックスに出力される文字列は、エディットボックス中の現在のカーソル位置に挿入されていきます。ユーザーが変更しない限り、エディットボックス中のカーソル位置は常にエディットボックス内表示文字列末端になるよう設定しています。

デバッグターゲットがバグ等により本来ありえないメモリアクセスを行った場合は、そのアクセスを試みたアドレスとEIPレジスタの値を表示し、例外処理を選択可能になります。この場合、適切な例外処理を選択することでデバッグを継続可能です。また、その他の例外発生時にも同様に例外処理を選択可能です。

デバッガウィンドウを閉じると、その時点でデバッグを行っているデバッグターゲットのプロセスも閉じます（OSの仕様）。

デバッグ対象実行ファイルまたはプロセスのことを一般に｢デバッギー｣と呼びます。

●ブレークポイント設定(コード実行)

基本操作としては、まず｢ブレークポイント(コード実行)｣を選択してデバッグターゲットを起動します。この際、デバッグターゲット起動前にコード実行用ブレークポイントのアドレスを入力しておくことにより、デバッグターゲット起動時に自動的にブレークポイントを設定可能です(最前面全画面固定ゲーム用)。この場合、プログラムエントリーポイントにもコード実行用ブレークポイントを設定可能です。

コード実行用ブレークポイントのアドレスを入力せずにデバッグターゲットを起動した場合は、デバッグターゲット起動後に同アドレスを入力して｢設定（上書き可）｣ボタンでコード実行用ブレークポイントを設定します。また、既にブレークポイントが設定されている場合にコード実行用ブレークポイントを再設定すると、既に設定されていたコード実行用ブレークポイントは自動的に解除されます。

設定されたブレークポイントは｢解除｣ボタンで解除可能です。

コード実行用ブレークポイントは、必ずメモリ上に展開された実行ファイルのコードセクション内に設定して下さい。ただし、特殊なケースに対応するためコードセクション外にも設定は可能です（警告あり）。

コード実行用ブレークポイントは、必ずニーモニック先頭アドレスに設定して下さい。コード実行用ブレークポイントに設定するアドレスが、メモリアクセスのブレークでＥＩＰレジスタの値として得られたアドレス以外ならば、逆アセンブルコードリスト上でニーモニック先頭アドレスか確認することをお奨めします。

●ブレークポイント設定(メモリアクセス)

基本操作としては、まず｢ブレークポイント(メモリアクセス)｣を選択してデバッグターゲットを起動します。

デバッグターゲット起動後、メモリアクセスブレークポイントのアドレスを入力してから｢設定｣ボタンでブレークポイントを設定します。既にブレークポイントが設定されている場合は、自動的にブレークポイントを再設定し、既に設定されていたブレークポイントは解除します。また、｢解除｣ボタンを使って、再設定を行わずに既に設定されていたブレークポイントの解除だけ行うことも可能です。

ブレーク条件としてデフォルトでは書き込みと読み取り両方のメモリアクセスを設定していますが、｢書き込みのみ｣ボタンを有効化させることで書き込みのメモリアクセスにブレーク条件を絞ることが可能です。

メモリアクセス用ブレークポイントを既述コードセクション内に設定すると、デバッグターゲットがクラッシュする可能性があります。

●ブレークポイント設定(ハードウェア)

基本操作としては、まず｢ブレークポイント(ハードウェア)｣を選択してデバッグターゲットを起動します。

デバッグターゲット起動後、ハードウェアブレークポイントのアドレスを入力し、さらにブレークオプションを｢実行｣、「書込」及び「読/書」のいずれかを選択して下さい。なお、｢実行｣選択時にはブレークポイントのアドレスを必ずニーモニック先頭アドレスに設定する必要があります。

次に、ハードウェアブレークポイント設定対象スレッドIDを指定して下さい。デフォルトではメインスレッドIDを設定対象スレッドIDに指定します。もし、他のスレッドにブレークポイントを設定したい場合は｢取得｣ボタンを押してスレッドID一覧をスレッドID表示用コンボボックスに出力したうえで、目的のスレッドIDを指定して下さい。ここで出力されるスレッド一覧はスレッド作成順でソートしています。Windows95では指定したスレッドIDに関わらずメインスレッドにもブレークポイントが設定されます（OS仕様）。また、オプションで全スレッドにハードウェアブレークポイントを一括設定することも可能です。

ブレークポイントのアドレス、オプション及びスレッドIDを設定後｢設定｣ボタンでブレークポイントを設定します。

ブレークポイントの解除は｢解除｣ボタンで行いますが、この場合にもスレッドIDを指定する必要があります。

ハードウェアブレークポイント使用時にはステップ実行が可能です。｢ブレーク時に実行一時停止｣のオプションが有効の場合にのみ、ブレークして実行停止後、実行を再開するかステップ実行を行うか選択可能になります。

このステップ実行はCPU処理ベースで行います。そのため、オペコードがCALL命令の場合は、ステップ実行すると呼び出すルーチンの先頭へ移動します（例外あり）。また、｢REP MOVSD｣のような、リピートプリフィックス命令がオペコードの場合は、カウンタのECXレジスタが0になるまで同じ命令を繰り返します。

デバッグ結果を出力するエディットボックスは、Windowsの仕様により32KB相当まで表示できます。そのため、ステップ実行を約100回行うと、出力結果がその制限に達してしまいますので、解析したいコードを絞り込んでステップ実行を行ってください。

●WriteProcessMemory関数呼び出しをトレース

この機能は他のアプリケーションで行ったプロセスメモリ書き換え操作を、当ソフトウェア用の改造コードに変換します。

この機能は『OllyDbg』と当ソフトウェアの連携操作用に実装しました。当デバッガから『OllyDbg』を起動して、さらに『OllyDbg』からプロセスメモリ書き換えを行う対象となるアプリケーションを起動またはアタッチして下さい。

｢同関数によるプロセスメモリ書き換えを無効化｣ボタンを押して有効化させると、デバッグターゲットが行うWriteProcessMemory関数呼び出しを総て失敗させます。ただし、関数呼び出しをスキップする訳ではないので、プロセスメモリ書き換え操作のトレースは問題なく行えます。これにより、デバッグターゲットにプロセスメモリの書き換えを一切行わせずに、そのプロセスメモリ書き換え処理内容だけを取得することが可能になります。

●デバッグオプション

｢ブレーク時に実行一時停止｣ボタンを押して有効にしておけば、ブレーク時にターゲットプロセスの実行を停止します。実行停止中にはメインウィンドウからプロセスメモリ書き換えを行うことが可能です。

｢Faults Off Mode｣は、デバッグ中に不測の深刻な事態が生じた場合に、その対処をＯＳ側に任せるものです。ただし、必ずしもＯＳ側が対処できるとは限りません。

｢障害発生時にメッセージボックス非表示｣は、最前面全画面固定ゲームでのデバッガ使用時に使用して下さい。このボタンが有効になっていれば、特に深刻な事態が生じた場合に警告メッセージボックス表示をスキップして速やかにターゲットプロセスを閉じます。

●デバッグターゲット操作

｢実行一時停止｣及び｢実行再開｣は、ターゲットプロセスを完全に停止・再開させます。

何らかの特殊な原因で、当デバッガがターゲットプロセスの終了を検出できなかった場合は、｢強制終了兼リセット｣ボタンを押して当デバッガをリセットして下さい。


＜参考＞デバッガ用改造コード

●概要

まずメモリ検索機能でＣＧ閲覧フラグや各種パラメータフラグの格納アドレスを探し出します。次に同格納アドレスにデバッガでメモリアクセスのブレークポイントを設定し、特定動作でブレークさせます。これにより上記フラグの参照あるいは書き換えを行うコードのアドレスを特定可能です。さらに特定した同コードのアドレスを逆アセンブルコードリスト上で参照してニーモニックを得ます。以上により、ＯＳのバージョン・メモリ実装容量等に一切影響を受けない環境非依存型改造コードを作成することが可能になりますので、環境依存型の変動アドレスに簡単に対処できます。

なお、上記｢コード｣は、プロセスメモリに展開された実行ファイルのコードセクション上のコードです。

ちなみに、メモリアクセス用ブレークポイント設定からパラメータ減少でブレークさせて、逆アセンブルコードリスト上でのパラメータ減算処理を行うコードが特定できれば、パラメータ減少回避(無敵化)コードを作成することも可能です。

デバッガ用改造コードのユーザーは、同改造コードで指定されたアドレスにブレークポイント(コード実行)を設定して、さらに指定された特定の動作を行ってブレークさせるだけです。これだけで、ユーザーの環境に依存する変動アドレスか否かに関わらずターゲットアドレスを得ることが可能になります。デバッガ用改造コードの書式例は下記。このコードはBlueAshさんが寄稿された「ExGAME」Vol6の記事を参考にさせて頂きました。

●デバッガ用改造コード書式例：

ターゲット：「ののぴょんは今日も元気！！」(うさソフト)

対象：ＨＰ現在値(環境依存型変動アドレスに格納)

ブレークポイントアドレス(コード実行)：401234

ブレークに必要なゲーム上の動作：戦闘時のＨＰ現在値減少

ブレーク時ニーモニック：MOV WORD PTR [EBX],AX

ターゲットアドレス：ＥＢＸレジスタに格納

補足：ターゲットアドレス以降+4h毎に他のパラメータが格納されている

(注)ブレーク時ニーモニックはデバッガ用改造コードに必ずしも必要ではありません。上のケースは参考用です。


進数変換及び整数－実数変換

●機能呼び出し

メニューの｢解析｣→｢進数変換及び整数－実数変換｣です。

●概要

16進数または10進数変換用エディットボックスに変換したい数値を入力すれば、リアルタイムで変換後の数値を表示します。負の数値を取り扱い可能な10進数と16進数の相互変換及び、2進数や実数（浮動小数点数）への変換機能を実装しています。また、ビット反転操作を施した値も表示します。

なお、プロセスメモリに書き込みを行う際にはリトルエンディアンに気をつけて下さい。また、この進数変換機能では、16進数でダブルワードを超える値は変換できません。

●注意事項

当ソフトウェアでは、入力した整数を補正することで、小数の実数変換に対応しています。しかし、実数に変換した小数の値を実際の解析に用いる際は注意が必要です。詳細については｢浮動小数点数の小数の値を検索条件にしたい場合｣をご覧下さい。

●付属機能

｢電卓を起動｣ボタンを押すと、Windows付属の電卓を起動します。また、変換後の表示値をメインウィンドウのバイナリデータ編集用エディットボックスや検索ウィンドウの検索条件指定用エディットボックスに転写することが可能です。


ニーモニックジェネレータ

●概要

ジャンプ命令やコール命令を用いてプロセスメモリを書き替える際に役立つよう、選択された各命令のオペコードと開始アドレス・目標アドレスから得られるオペランドを結合してニーモニックを作成します。なお、通常使用することはない条件ジャンプ命令については、使用不可にしています。

●操作補足

オペコードを知りたい命令を選択し、開始・目標アドレスを入力してから｢ニーモニック生成実行｣ボタンを押して下さい。

ちなみに、8ビット相対アドレスとは目標アドレスへの距離が-128～+127の場合に、その相対的な距離を１バイトで表示するものです。相対ショートジャンプは、8ビット相対アドレスを用いる、相対ニアジャンプの一種と考えれば分かり易いと思います。なお、このジャンプ距離計算の基点は、開始点ジャンプ命令実行後のEIPレジスタ現在値、つまり次の命令の開始アドレスになっていることに注意して下さい。


フェイク

●概要

この機能により、当ソフトウェアのウィンドウタイトルを変更し、他ソフトウェアのウィンドウの｢ふり｣をすることが可能になります。更に当ソフトウェアを｢Ctrl｣+｢Alt｣+｢Del｣キーの同時押しで表示される、プログラム一覧上で非表示にします(Windows2000/XP不可)。

なお、当ソフトウェア自身はクラス名を設定しないため、当ソフトウェアにはダイアログベースの標準クラス名が適用されます。そのため、このフェイク機能を使用すると、Windows内部処理上でも他のソフトウェアと区別がつきにくくなります。更に、実行ファイル名を｢ふり｣をしたいソフトウェアと同一になるよう変更すれば、より効果的です。


簡易ランチャー

●操作補足

メニューから登録済みの任意のアプリケーション等を起動する場合の登録方法は下記で、実行ファイルやフォルダ或いはアプリケーションに関連付けられたファイルを登録可能です。また、コントロールパネル、レジストリエディタ等を呼び出すことができます。ただし、クリップボードビューア等はインストールされている必要があります。スクリーンセーバーは「画面のプロパティ」で設定されている場合に、それを起動します。

●ランチャーメニューへの登録方法

当ソフトウェアのメインウィンドウへのドラッグ・アンド・ドロップを使用します。

｢Q｣キーを押しながら登録したいファイルのドラッグ・アンド・ドロップ・・・・・メニューの1番目に登録

｢W｣キーを押しながら登録したいファイルのドラッグ・アンド・ドロップ・・・・・メニューの2番目に登録

｢E｣キーを押しながら登録したいファイルのドラッグ・アンド・ドロップ・・・・・メニューの3番目に登録

｢R｣キーを押しながら登録したいファイルのドラッグ・アンド・ドロップ・・・・・メニューの4番目に登録

｢T｣キーを押しながら登録したいファイルのドラッグ・アンド・ドロップ・・・・・メニューの5番目に登録

｢Y｣キーを押しながら登録したいファイルのドラッグ・アンド・ドロップ・・・・・メニューの6番目に登録

｢U｣キーを押しながら登録したいファイルのドラッグ・アンド・ドロップ・・・・・メニューの7番目に登録

●＜参考＞有用なショートカットキー

｢Windows｣キーを押しながら｢D｣キー・・・・・全ウィンドウの最小化と復元(OSのバージョンに依存)

｢Windows｣キーを押しながら｢M｣キー・・・・・全ウィンドウの最小化(一部制限有り)

｢Windows｣キーと｢Shift｣キーを押しながら｢M｣キー・・全ウィンドウの最小化の復元

｢Windows｣キーを押しながら｢E｣キー・・・・・エクスプローラ起動

｢Windows｣キーを押しながら｢F｣キー・・・・・検索ウィンドウ呼び出し

｢Windows｣キーを押しながら｢Pause｣キー・｢システムのプロパティ｣呼び出し


起動・終了関連操作

●Windowsの終了操作

｢強制再起動｣ボタンを使用すると、システムを強制的に再起動させます。これは通常用いる｢Windowsの終了｣よりも強力で、Windowsが深刻な状況に陥ったケースを想定してこの機能を追加しています。現在処理中のデータ等は保存されないため、非常時以外の使用はお奨めしません。

●シェル変更

シェル変更機能は、Windows2000/XPでは操作にトラブルが生じた場合の復旧が煩雑であることから、Windows9x/Me専用としました。

シェルを｢重い｣エクスプローラからファイルマネージャ等に変更し、必要最小限の機能でWindowsを起動することで、極めて｢軽い｣ソフトウェア実行環境を得ることができます。この環境は、処理の重いゲーム実行やCD-R書き込み時のエラー回避、MO等外付けリムーバブルメディアドライブからのデータ読み込みエラー回避等に適しています。

なお、この処理を行う前に必ずファイルマネージャやタスクマネージャが正常動作することを確認し、さらにWindows起動ディスクを作成済みか確認しておいてください。何らかの原因でこの処理が正常に行われなかった場合、Windowsが起動しなくなります。この場合は起動ディスクからWindowsを起動し、EDITコマンドでSYSTEM.iniの｢boot｣セクションの｢shell｣キーを｢explorer.exe｣に書き替えることで復旧可能です。また、このシェルを変更した状態でエクスプローラを起動すると、シェルを変更した意味がありませんので注意して下さい。

●次回起動時のみ有効なオプション

これは、当ソフトウェアや指定したソフトウェアを次回シェル起動前に排他起動させるものです。これにより、排他起動したソフトウェアを終了させないとシェルは起動しません。また、排他起動に指定した当ソフトウェアと他の指定したソフトウェアの同時起動はできません。

この機能もシェル変更同様、必要最小限の機能でWindowsを起動したソフトウェア実行環境を得ることができます。また、この設定は一回実行されればクリアされます。

当ソフトウェアをシェル起動前に排他起動させると、簡易ランチャーに登録したソフトウェア等を記録している設定ファイル(SN57.ini)が読み込めません。ただし、「ファイル名を指定して実行」は可能です。

排他起動に指定したソフトウェアが作業フォルダ認識不能により正常に起動できない場合は、当ソフトウェアを排他起動させて「ファイル名を指定して実行」から同ソフトウェアを起動させてください。


稼動アプリケーションの制御

この機能は稼動中のアプリケーションに対し｢本来ありえない状況｣を作り出す｢強引な｣操作を行うため、対象アプリケーションやOSのフリーズを招くこともあります。また、たとえ操作に問題がなくとも、OSの状況他、外部からの影響により当ソフトウェアが不正終了となるケースもあります。そのため、この機能を使用する際は、必要最小限の操作に留めることをお奨めします。

操作対象ウィンドウに属する総ての子ウィンドウを一括処理したい場合は、「カーソル位置取得及び同位置ウィンドウ操作」機能の使用をお奨めします。

●操作補足

親ウィンドウリスト及び子ウィンドウリストで、リストから項目を選択すると、その項目内容文字列をクリップボードに転送します。これにより、ウィンドウタイトルや子ウィンドウ(ダイアログ上の文字列、ボタン文字列他)の各文字列を簡単に取得できます。

この機能は、特に本来コピーできない｢システムのプロパティ｣や｢バージョン情報｣等の子ウィンドウ文字列を取得する際に有用です。同様に、メッセージボックスのエラーメッセージもコピーすることが可能です。

●親ウィンドウの各種操作

このウィンドウでは稼動している親ウィンドウの一覧を表示し、その親ウィンドウの表示状況やサイズ等を変更可能です。この機能は、本来非表示となっているゲームのデバッグ用ウィンドウを表示させることや、ゲームの最前面固定表示解除等にも役立ちます。

｢全表示モード｣ボタンを有効にしてから｢リスト更新｣ボタンを押すと、タイトルの無いものを含む全ての親ウィンドウをリストアップします。

なお、｢破棄｣ボタンではユーザーによる終了入力が可能なウィンドウのみ破棄（終了）できます。システムに関連するアプリケーションのウィンドウ（特にバックグラウンドで動作する非表示ウィンドウ）を破棄した場合はOSの動作に悪影響を与えることもありますので注意が必要です。

　＜可視ウィンドウの一括終了＞

「可視全破棄」ボタンを押すと、最小化状態やタスクトレイに格納されているものを含む、総ての｢ユーザー入力可能な可視かつタイトルバーを持つ｣ウィンドウを閉じます(終了させます)。ただし、終了処理において終了確認ダイアログを表示するケースや、タスクトレイに格納されたアプリケーションで、当ソフトウェアがシステムの処理に関わると判断したものは終了させません。

この機能は、｢外部から無理やり終了させる｣操作である以上、不具合を招くケースが十分あり得ます。特に、システムに負荷を与えるような何らかの処理を行っている最中のアプリケーションが存在する場合には、終了対象アプリケーションの不正終了やWindowsのフリーズを招く可能性があるため、この機能の使用はお奨めできません。

●子ウィンドウの各種操作

親ウィンドウ選択後、更に子ウィンドウを選択して各種操作を行うことが可能です。

なお、総てのトップレベルウィンドウが子ウィンドウを有している訳ではありません。また、特殊な仕様のボタンやエディットボックス及びリストビュー等については対応できません。ちなみに、子ウィンドウとは、いわゆるフォームだけを指すのではなく、エディットボックスや各種ボタン等の各コントロールも子ウィンドウの一つです。

なお、当ソフトウェアにはカーソル位置直下の親ウィンドウに属する総ての子ウィンドウを、一括して操作する機能を実装しています（カーソル位置取得及び同位置ウィンドウ操作）。子ウィンドウを個別に操作する必要が無い場合は、こちらの機能を用いることをお奨めします。

主な子ウィンドウ（コントロール）例。表示形態が異なるケースもあります。

以下の｢各種子ウィンドウ（コントロール）｣や｢ツールバー｣のように、説明文字列と線で囲むものを｢グループボックス｣といいます。

　＜読み取り専用属性の解除＞

｢読取専用解除｣ボタンで、選択したエディットボックスの読み取り専用属性を解除します。

　＜子ウィンドウの表示兼有効化＞

｢表示兼有効化｣ボタンで、選択したボタン、チェックボックス、ラジオボタン、コンボボックス、リストビュー等の無効化(淡色表示)を解除します。さらに、有効化は子ウィンドウの通常表示化も兼ねており、非表示設定にされている子ウィンドウに対処できます。

　＜クリックエミュレート＞

｢模擬クリック｣ボタンで、選択したボタンやチェックボックス等の子ウィンドウに対するクリックをエミュレートします。なお、ボタンのクリックエミュレートは、複数回行わないと効果が無い場合があります。

　＜パスワード表示属性の解除＞

『｢＊｣表示解除』ボタンで、選択したエディットボックスのパスワード(｢＊｣表示)属性を解除できます。なお、パスワード表示属性の解除については、OSを含め対策が施されているケースが少なくありませんのでご注意ください。

　＜文字化け修正＞

「文字化け修正」ボタンで、選択した子ウィンドウにシステムの標準表示用フォントを適用します。この機能は特に外国語版アプリケーションにおけるダイアログの文字化け解消に有効です。この場合は文字化けをおこしているコンボボックス等を選択して下さい。

　＜ツールバーの有効化＞

「ToolBar有効化」ボタンは選択したツールバーの全ボタン有効化を図りますが、MFCによる独自のツールバーには対処できません。また、現在のMicrosoftのコンパイラで開発されたアプリケーションのツールバーは、大抵の場合有効化してもすぐに再描画により元の状態に戻されます。そのため、実際にこの機能が有効なケースはさほど多くはありません。

●その他のウィンドウ操作

　＜メニュー強制有効化＞

｢(メニュー)強制有効化｣ボタンを押せば、選択した親ウィンドウにあるメニューバーのメニュー項目総てを有効化します。また、メニューバーのメニュー以下に表示されるプルダウンメニューを強制有効化時に表示させておけば、そのプルダウンメニュー中の総てのメニュー項目を有効化します。この際カーソルを目的のメニュー項目上に合わせないとメニュー項目は淡色表示のままです。

なお、この機能は対象アプリケーションのプログラムそのものを書き替える訳ではないので、対象アプリケーション側でメニューを再描画されると元の状態に戻ります。そのため、常にメニューを再描画するようなアプリケーションには効果がありません。また、動的に生成されるポップアップメニューには対応していません。

なお、あらかじめメニュー一覧を取得する方法では、深い階層にあるメニューに対応できないケースがあるため、このような仕様にしています。

　＜タイマー停止＞

親ウィンドウを選択して「(タイマー)停止」ボタンを使用すれば、指定したIDのタイマを停止させることが可能です。指定するタイマIDは、対象アプリケーションをデバッガ等で解析しSetTimer関数で作成されたタイマのIDを指定して下さい。

この操作によりOSを巻き込んでフリーズすることもありますので、この機能の使用は慎重に行ってください。

　＜コマンド強制入力＞

「模擬実行」ボタンは、選択した親ウィンドウに対し各種コントロールIDやメニューIDを指定してコマンドメッセージを送ることで、外部からの各種操作を行うものです。この操作では｢模擬クリック｣と異なり、クリックの結果だけを行うよう試みます。

例えば、リソースエディタで本来使われていないデバッグ用メニュー項目のIDが判明すれば、この機能を使って同メニュー項目が選択された状況を作り出すことが可能です。当然ながら、｢本来ありえない状況｣を作り出している以上、青画面等の深刻な状況を招くこともあります。

　＜エラーコード翻訳＞

「翻訳」ボタンはWindows内部処理上のエラーコードをその説明文に翻訳するものです。エラーコードは通常GetLastError関数で取得します。

例えば｢047E｣と入力した場合は、Windowsバージョン関連エラーメッセージを表示します。


カーソル位置取得及び同位置ウィンドウ操作

操作対象親ウィンドウや属する子ウィンドウを個別に処理したい場合は、「稼動アプリケーションの制御」機能の使用をお奨めします。

●操作補足

カーソル位置を取得するウィンドウを表示します。このウィンドウでは、ユーザー入力エミュレート型コードのカーソル移動型コードを簡単に作成することが可能です。

また、カーソル位置直下にある親子ウィンドウハンドル取得と子ウィンドウの表示兼有効化等が可能です。目的のウィンドウ上にカーソルを合わせて｢Shift｣キーを押して下さい。この際、カーソルは、子ウィンドウを説明文と線で囲むグループボックスの外側に合わせてください。グループボックス上や内部では、使用ＡＰＩ関数の仕様によりウィンドウハンドルが取得できず処理に失敗します。


現在のメモリ使用状況他

●物理メモリの最適化

｢物理メモリの最適化｣とは、物理メモリ上の不要な占有箇所を仮想メモリ上に退避させ、高速処理が可能な空き物理メモリを確保することです。

ここでは必ず適切な最適化メモリ割合を指定して下さい。メモリを大量に消費するアプリケーションが稼動していなければ、概ね、Windows起動直後の空き物理メモリ割合が適切な最適化メモリ割合といえます。最適化メモリサイズ選択時に、「+５％」ボタンを併用して各％のラジオボタンをチェックすれば、選択したパーセンテージに５％加算して最適化メモリサイズを算出します。

もし、適切でない過大メモリ割合を最適化した場合、OSの動作に悪影響を与える可能性があります。

また、この物理メモリ最適化では、実装メモリサイズやメモリ使用状況によっては、処理に10数秒要することもまれにあります。特にIE使用後は、IEの全ウィンドウを閉じてもプロセスが保持される（当ソフトウェアでプロセス確認から強制終了可能）ことがあるため、IEの使用メモリが開放されずメモリ最適化の障害となり得ます。

●CPU情報表示

CPU機能フラグはCPUID命令(EAX初期値1)から返された情報です。ビット23がMMX、ビット25はSSEのサポート状況を示します。また、AMDの拡張CPUID命令を用いて3DNOW!とE3DNOW!のサポート状況も確認しています。なお、CPU周波数は高精度で計測していますが、計測結果はOS仕様の影響を受けますのでご注意ください。

●リソース残量情報表示

リソース情報の表示にはWindows9x/Me付属の｢リソース メーター｣がインストールされている必要があります。

●自己使用メモリ最適化

当ソフトウェアが確保しているメモリエリア内の開放可能な箇所を開放するものです。


システム監視・タイマー設定

●操作補足

空きメモリやシステムリソース残(Windows9x/Me)及びカーネルのスレッド数(Windows9x/Me)の状況をリアルタイムで表示します。

また、指定した時刻にメッセージ表示やシステム電源断等を行うことも可能です。

「最上位ウィンドウをキーフック対象にセット」を行う場合は、メインウィンドウのプロセス一覧を無選択状態にしておいてください。或いは、メインウィンドウのプロセス一覧で対象プロセスを選択したうえで、指定時刻に必ず同プロセスのキーフック対象ウィンドウを最上位に配置してください。


｢システム｣その他の項目

●｢Alt｣＋｢Tab｣(｢Esc｣)キー無効化

この機能を使うと、｢Alt｣＋｢Tab｣(｢Esc｣)キーだけでなく｢Ctrl｣＋｢Alt｣＋｢Delete｣キーやWindowsキーも使用不可になります。

Windows95では正常に動作しません。また、Windows2000/XPでは正常に動作しないため、メニューを無効にしました。

●ディスプレイ省電力モード

ディスプレイの電源を一時的にオフにする省電力モードに移行します。省電力モードはマウスの動き等ユーザー入力で解除されます。

なお、WindowsXP以外のOSでは、この機能で不具合が生じる可能性があるためメニューを無効にしました。

●ディスプレイ設定復旧

ゲーム等で強制的にディスプレイ設定を変更された後に、同ゲーム強制終了等でディスプレイの設定が変更されたままになった場合等に、この機能を使用して下さい。

●アイコン・フォントキャッシュ削除

DirectXを使用するゲーム等に伴いアイコンの表示に問題が生じた場合に、アイコンのキャッシュを削除してアイコン表示の正常化を図ります。キャッシュ削除後に総ての｢エクスプローラ｣プロセスを一旦総て強制終了させ、エクスプローラを再起動すればアイコン表示の不具合は解消します。

なお、レジストリのアイコンサイズ一時変更とシステム情報更新の組み合わせでは、アイコン表示の不具合を解消できないケースがあるため、アイコンキャッシュ削除を用いました。

また、Windows9x/Meではアイコンキャッシュと同時にフォントキャッシュも削除し、表示をリフレッシュさせるようにしています。

●デスクトップアイコン文字背景を透明化

この機能をWindowsXPで使用するには、以下の操作でデスクトップアイコン名の影表示設定オフが必要です。

※コントロールパネル→システム→詳細設定タブ→パフォーマンスの設定

また、｢Ctrl｣キーを押しながらこのメニュー項目を選択すると、デスクトップアイコン文字色を黒色に変更します。

●スクリーンセーバー無効化・有効化

この機能は、CD-R書き込み時のエラー回避他に有用です。

また、WindowsXPでは無効化のみ可能です。

●画面のプロパティ

コントロールパネルの「画面のプロパティ」を呼び出します。ここでは、スクリーンセーバーの設定や、システム使用フォントサイズの変更等を行うことができます。

システム使用フォントサイズの変更方法

Windows95では｢ディスプレイの詳細｣タブ→｢フォントサイズ｣で変更

Windows98/Meでは「設定」タブ→「詳細」ボタン→｢全般｣タブ→｢ディスプレイ｣の｢フォントサイズ｣で変更

Windows2000では「設定」タブ→「詳細」ボタン→｢全般｣タブ→｢画面｣の｢フォントサイズ｣で変更

WindowsXPでは「設定」タブ→「詳細設定」ボタン→｢全般｣タブ→｢画面｣の「DPI設定」で変更

●ビープ音ON/OFFトグル

システムのビープ音のオンとオフをトグルさせます。この機能は一部のゲームでキーボードによる操作時のビープ音回避等に有用です。


マルチメディア再生

マルチメディアファイルの再生機能はシステム及び当ソフトウェアに相当な負荷を与えるため、当ソフトウェアの他の機能との並行操作はお奨めしません。特に多数の改造コードを自動更新で実行させている場合等、当ソフトウェアに負荷がかかっている状況でのマルチメディアファイル再生は避けてください。また、複数メディアの同時再生は当ソフトウェアの強制終了を招く可能性があるため、なるべく行わないでください。

●概要

この機能では、OSがデバイスを有する全種類のメディアファイルが再生可能です(WindowsMeならavi、mpg、mp3、wav、mid、asf、wmv、wma等)。ただし、メディアフォーマットのバージョンによってはデバイスが未対応で再生できないケースがあります。また、一部の特殊なコーデックが必要となるケースには対応していません。

さらに、音楽再生CDドライブの強制指定及び簡易CD再生も可能です。両機能とも、全OSでの動作確認は行っていませんので注意して下さい。

●操作と注意事項

通常のメディアファイル再生は、メインウィンドウの｢確認｣ボタンの右方にある以下のキーで操作することもできます。

｢Alt｣キーを押しながら｢0h｣ボタン同時押し・・・・・最初から再生

｢Alt｣キーを押しながら｢4h｣ボタン同時押し・・・・・一時停止

｢Alt｣キーを押しながら｢8h｣ボタン同時押し・・・・・一時停止位置から再生

｢Alt｣キーを押しながら｢Ch｣ボタン同時押し・・・・・停止及びデバイスのクローズ

｢Ch｣ボタンの下方にある｢自動更新｣間隔設定エディットボックスに｢2｣を入力・・・・・リピート再生

リピート再生で無い場合は、再生終了時にデバイスをクローズします。また、当ソフトウェア終了時にも全デバイスのクローズを行います。デバイスをクローズすると、再生していたメディアファイルに対する｢最初から再生｣や｢一時停止｣は使用不能になります。

なお、一部のメディアファイルでは状況によりWindowsが再生終了を検出できないことがあるため、再生終了時に自動でデバイスをクローズすることやリピート再生ができません。また、動画ウィンドウの｢X｣ボタンでは、ウィンドウを隠すのみでデバイスのクローズは行われません。

ちなみに、｢自動更新｣間隔設定は｢2｣がデフォルトの値で、本来はエディットボックスに入力する必要はありません。

●メディアファイルのメニューへの登録

当ソフトウェアのメインウィンドウへのドラッグ・アンド・ドロップを使用します。

｢1｣キーを押しながらメディアファイルのドラッグ・アンド・ドロップ・・・・・メニューの1番目に登録

｢2｣キーを押しながらメディアファイルのドラッグ・アンド・ドロップ・・・・・メニューの2番目に登録

(以下7番目まで)

テンキーは使用できません。

●メディアファイルの連続再生

メニューから「マルチメディア連続再生」を選択した場合は、再生リストで指定されたマルチメディアファイルのリスト再生を行います。この機能は、当ソフトウェアの他のマルチメディア再生機能とは併用しないでください。

再生リストはファイル名｢NekoPlay.txt｣固定で、当ソフトウェア実行ファイルがあるフォルダ内で読み込みと保存を行います。再生リストへのファイル追加は、マルチメディアファイルをＤ＆Ｄ、あるいは｢NekoPlay.txt｣の直接編集で行います。Ｄ＆Ｄによる追加後は、｢保存｣ボタンで｢NekoPlay.txt｣を上書きしてください。有効なメディアファイルがリストアップされていない状況では、｢メディア操作｣の各ボタンは絶対に押さないでください。

リストボックス中のマルチメディアファイルのパスをダブルクリックすると、そのマルチメディアファイルの再生を行います。

再生時間が１秒に満たないマルチメディアファイルは再生終了を認識できないため、連続再生はできません。

｢再生｣、｢前｣、｢次｣ボタンを極端に早いスピードで連打すると、2重再生等の不具合が生じますので注意して下さい。

このマルチメディアファイル再生機能はMCIを用いていますが、一部の動画コーデックはOSのバージョンによっては、MCIによる再生時に不具合を生じることがあります。この様なコーデックと使用OSに原因があるケースは、当ソフトウェアでは対処できません。

●コントロールモード

メニューから「同上コントロールモード」を選択した場合はメディアファイルを独立したウィンドウ上で再生します（複数メディアファイルの同時再生も一応可能）。この場合は（各）ウィンドウを閉じればデバイスはクローズされます。

なお、WMV等一部のメディアフォーマットは、再生速度を変更すると再生不可になるものがあります。

このモードは、CD－AUDIO再生には用いないでください。デバイスがクローズ不可になります。

また、このモードを使用している場合は、メニューから「ファイル名を指定して再生」や登録メディアファイルの再生を併用しないでください（不具合が生じます）。


緊急退避・ウィンドウサイズ変更・最前面トグル・自己透明化・ホットキー
表示関連項目

●緊急退避機能

総ての可視ウィンドウを最小化します。この機能は、何らかの事情によりデスクトップの状況を即隠す必要が生じた場合を想定して実装しました。ウィンドウサイズの復旧は、｢Windows｣キーと｢Shift｣キーと｢M｣キーの同時押しで行います。なお、当ソフトウェアのメインウィンドウ上のボタンやエディットボックス等がない部分での、マウス中央ボタンクリックでも同様の操作を行います。

●ウィンドウサイズ変更

当ソフトウェアのメインウィンドウのウィンドウサイズを変更します。ゲーム等のシステム解像度変更等に伴い、メインウィンドウの一部が非表示になるケース他、何らかの原因でメインウィンドウのウィンドウサイズを強制的に変更された場合の復旧にも使用可能です。

メインウィンドウ｢小｣モードでのメインエディットボックスにバイナリデータを表示するアドレスの変更は、マウスホイールと｢Shift｣または｢Ctrl｣キー同時押しで行うことが可能です。

●最前面トグル

最前面表示と通常表示を切り替えます。

●自己透明化

メインウィンドウを見失わないように、安全策として完全な透明化は不可にしました。透明度の増減は10段階刻みです。この機能はWindows9x/Meでは使用できません。

●ホットキー

｢Ctrl｣+｢Shift｣+｢Z｣キーを押すと、（他のウィンドウで隠れている）当ソフトウェアのメインウィンドウを最前面に表示します。最前面固定表示ではありません。ただし、このキーの組み合わせが既に別のソフトウェアでホットキーとして設定されている場合は、当ソフトウェアのホットキー設定は無効になります。


バージョン情報

●概要

当ソフトウェアのバージョン情報を表示します。バージョンがベータ版やプレリリース版の場合は、新しい正規版がリリースされていないか確認されることをお奨めします。


圧縮ファイルの解凍

●概要と注意事項

当ソフトウェアのメインウィンドウに圧縮ファイルをドラッグ・アンド・ドロップすることにより、その解凍を行います。現在対応しているのはLZH、ZIP、CAB、RAR、GCA形式圧縮ファイルで、拡張子がlzh、zip、cab、rar、gca、LZH、ZIP、CAB、RAR、GCAのファイルを圧縮ファイルと判断して解凍します。そのため、拡張子がCabやrAr等大文字と小文字が混在する場合は解凍処理を行いません。

なお、一度にドラッグ・アンド・ドロップするファイルは１つだけにして下さい。現バージョンでは、複数ファイルのドラッグ・アンド・ドロップはサポートしていません。

解凍を行う際に｢D&Dファイルのアップロード許可｣ボタンがチェックされていれば、解凍でなくプロセスメモリへのアップロードが行われますので注意が必要です。

ちなみに、ファイルヘッダでなく拡張子で判断しているのはコードサイズ低減のためです。

●解凍に必要なDLLや実行ファイル

以下をシステムフォルダあるいは当ソフトウェア実行ファイルと同じフォルダに導入して下さい。

LZH形式・・・UNLHA32.DLL

ZIP形式・・・UNZIP32.DLL

CAB形式・・・CAB32.DLL

RAR形式・・・UNRAR.DLL、UNRAR32.DLL

GCA形式・・・gcac.exe

｢gcac.exe｣は｢gca_v***.exe｣(アプリケーションセット)や｢GcaSDK｣(GCA形式のデータを扱うプログラム開発用ライブラリセット)に含まれています。

｢gcac.exe｣入手先：http://www.emit.jp/

｢UNRAR.DLL｣、｢UNRAR32.DLL｣は両方とも最新版を導入してください(特定バージョンの組み合わせに不具合があります)。

｢UNRAR.DLL｣の入手先：http://www.rarlab.com/(サイトメニューの｢RAR｣直下の｢extras｣で｢UnRAR.dll (for Windows)｣)

その他のDLLの入手先：http://www.csdinc.co.jp/archiver/index-j.html

●｢UnGCA32.dll｣について

｢UnGCA32.dll｣は私のアセンブリ言語での開発環境でエラーが生じましたので、｢gcac.exe｣を使用しています。GCA形式圧縮ファイルの解凍は、無警告の上書きモードで行われますので注意が必要です。


注意事項（必ずお読み下さい）
注意事項

当ソフトウェアを用いた｢ユーザーの利便性向上のみを目的としたゲーム解析・改造｣に対する、ゲーム製作ソフトハウス様からのご意見は、基本的に当方のサイトで全文公開します。全文公開を拒否するのであれば、そのご意見は無視します。

私が知る限り、ゲームの改造コードやフル化済セーブデータの公開に対し、ケースによっては積極的に公開中止を求めるソフトハウスが数社実在します。公開した改造コード等が他のプレーヤーに迷惑を及ぼすケースならば公開中止は当然です。しかし、そのようなケース以外で、公開した改造コード等に対して公開中止を求められた場合は、絶対に一人で対応すべきではありません。その公開中止要請の内容をネット上で閲覧可能にし、多くのゲーマー及びリバースエンジニアに意見を求めることをお奨めします。いうまでもありませんが、ゲームのユーザーはゲーム製作ソフトハウスに隷属すべき存在ではありません。

当ヘルプ記載の｢Windows｣は米国Microsoft Corporationの米国及びその他の国における登録商標です。

その他の製品名については登録商標か否か調査不足のため明記できませんが、商標権侵害の意図はありません。


使用許諾契約書（必ずお読み下さい）
使用許諾契約書

本契約書は｢スペシャルねこまんま５７号｣(以下｢当ソフトウェア｣といいます)に関して、本契約書取得者である貴方と当ソフトウェア製作者（うさぴょん）との間に締結される法的な契約書です。以下の使用許諾条件に同意されない場合は、当ソフトウェアの使用は許諾できません。当ソフトウェアを使用することで、下記使用許諾条件を承諾したものとみなされます。

a.当ソフトウェアの著作権及び、当文書に規定されていない総ての権利はうさぴょんに帰属します。

b.当ソフトウェアは何ら保証もない状態で瑕疵を問わない条件で提供しています。法律上の請求原因に関わらず、当ソフトウェア製作者は当ソフトウェアの使用若しくは使用不能に関し保証を一切致しません。

c.当ソフトウェアに関する不具合修正等サポートについては、製作者の技術或いは工数その他の条件において、製作者が自ら可能な範囲と判断した場合には、出来うる限りでサポート要請に応じるものとします。

d.法律上の請求原因に関わらず、当ソフトウェア製作者は当ソフトウェアの使用若しくは使用不能に伴う一切の損害(使用結果、ウイルス存在、その他金銭的損失を含み且つこれらに限定されない)について一切責任を負わないものとします。使用において損害が生じる可能性を当ソフトウェア製作者が知らされていた場合でも同様です。

e.デバッガ、逆アセンブラ或いは逆コンパイラ等を用いた当ソフトウェアのリバースエンジニアリング及び、その結果を用いる場合を含めた当ソフトウェアの改変を禁止します。

＜上記条件eの設定理由＞

これは、当ソフトウェアの原型は実質3日で製作したものであり、動作に問題は無いものの、｢恥ずかしくてとても人には見せられないほど乱雑な｣コーディングとなっているためです。当ソフトウェアはランタイムの類を一切用いていないとはいえ、実行ファイルのサイズが200Kバイトを超えています。このようにアセンブリ言語で開発されたソフトウェアとして、実装機能からみて｢信じられないほど｣巨大なサイズなのは、最適化を殆ど行っていない極めて冗長なコードが原因です。なお、当ソフトウェアはUPX(http://upx.sourceforge.net/)等による実行ファイルの圧縮は行っていません。


連絡先・更新履歴

●連絡先

usapyon_usapyon@hotmail.com

http://gamereverserz.cjb.net/

http://scripterz.usaweb.nu/（非常用ミラー）

●更新履歴(中間バージョンであるベータ版公開分は省略)

03/10/07    Ver1.10公開。デバッガでのアタッチやステップ実行機能等追加。

03/05/17    Ver1.09公開。メモリ検索機能強化及び機能追加。

03/02/15    Ver1.08公開。起動時のコード自動実行やバイナリファイル書き換え機能等追加。

02/08/30    Ver1.07公開。メモリ検索機能強化及び機能追加。

02/07/07    Ver1.06公開。デバッガ実装他機能追加。

02/04/04    Ver1.05公開。インターフェイスの大幅見直しや機能追加。

01/12/25    Ver1.04公開。Windows2000/XP対応。機能追加。

01/11/09    Ver1.03公開。機能追加・ヘルプ作成。

01/10/04    一般公開開始(Ver1.02)

01/08/10    限定公開開始

01/08/10    キーフック機能追加。キーフック用DLL提供：必殺！！ねこまんま(はぐはぐ)さん

01/08/06　　完成

01/08/04　　色々な方に奨められて再度製作開始

98/??/??　　初公開。その後ハードディスクのクラッシュによりソースコード及び開発意欲消失。


更新履歴詳細

●Ver1.02(一般公開)

・簡易プロセスメモリ編集（アンドゥ及び自動更新可、マウスホイール対応）

・一般的なプロセスメモリ用改造コード及び算術和、ＸＯＲ、ＡＮＤ、ポインタ型の改造コードをサポート

・キーフックによる、リモート改造コード実行(自動更新トグル可)及び対象アプリケーションのリモート強制終了

・プロセスメモリへのファイルのアップロードと、プロセスメモリからファイルへのダンプ

・アドレス－オフセットコンバート

・ジャンプ系ニーモニック生成

・バイナリデータ及び文字列の検索

・ヒープブロックリスト表示

・プロセス優先順位変更及びプロセス強制終了

・空きメモリ、ＣＰＵ利用率、ＣＰＵ機能フラグ等の情報表示

・他アプリケーションのメニュー強制有効化

・対象実行ファイルの３２ビットＣＲＣ、エントリーポイント及びデータセクション関連のモジュールエリア情報等を表示

・強制再起動(通常の再起動より強力)

・進数変換（１０進－１６進相互）

・等々

●Ver1.03

(改造コード関連)

・複数改造コードの一括実行(改行区切り)

・プロセスメモリからのメモリダンプ

・プロセスメモリへのバイナリファイルアップロード

・数値条件判定及び分岐

・プロセスメモリ内でのバイナリデータのコピー

・スクリプトファイル読み込み及びコード実行

・ポインタ型改造コード書式を改良

・コード入力容量と書き換え用データサイズの上限を拡大

・キーフック対象ウィンドウのリモート最前面解除とリモート最小化

(その他プロセス関連)

・選択プロセスをリフレッシュせずに優先順位だけ変更できるようにした

・ニーモニックジェネレータをモードレスダイアログにした

・連続ダンプを可能にするようダンプ出力ファイル名に出力時間(月日時分秒)を組み込み

・一部システムメニューの同時押しキーを｢Ｚ｣から｢Ctrl｣キーに変更(左手でマウスを操作するケースを想定)

・プロセスリストで選択したアプリケーションのアイコンと実行ファイル名を表示するようにした

・１６進－２進変換

(その他)

・物理メモリ最適化

・簡易ランチャー

・マルチメディアファイルの再生

・圧縮ファイルの解凍

・アプリケーションの各種動作制御(モードレスダイアログ)

→強制一時停止、ウィンドウ一覧表示と各ウィンドウサイズや最前面の設定及び解除、子ウィンドウの各種制限解除等

・シェル変更

・｢Alt｣＋｢Tab｣キー無効化及び有効化

・ディスプレイ設定強制復旧

・ＧＤＩ／ＵＳＥＲリソースの表示

・Ｅ３ＤＮＯＷ！、ＳＳＥ対応表示

・ヘルプを作成しました

・等々

●Ver1.04

Windows2000/XP対応(XPは動作未確認)

(改造コード関連)

・改造コードの全形式をポインタ型コードと併用可能にした

・条件分岐型コードの判定用数値にバイト・ワード・ダブルワードの指定を可能にした

・条件分岐型コードの条件判定を符号なしの値で行うようにした

・差、積、商を扱う算術演算コード追加

・論理和を扱う論理演算コード追加

・アップロード型コードでサイズ指定可能にした

・ダンプ型及びアップロード型コード使用時に、Windowsがパス認識を誤るケースに対処

(その他プロセス関連)

・変動サーチ(比較単位指定型、増減状況表示、記録値及び現在値表示機能つき)

・選択プロセスのメモリ使用量を表示(Windows2000/XP)

・メインエディットボックスにアドレスとバイナリデータのみで対応文字列非表示のオプション追加

・指定アドレスのバイト・ワード・ダブルワードでの１０進数値表示(ポインタ対応)

・逆アセンブルコードリスト出力(ＰｅＲｄｒ使用)

・ダンプ機能使用時にWindowsがパス認識を誤るケースに対処

(アプリ制御)

・選択ウィンドウの非表示

・総ての可視ウィンドウの一括クローズ

・フォント変更

・ツールバー有効化

・タイマー強制停止

・コマンド強制入力

・エラーコード翻訳

(その他)

・自己透明化機能(Windows2000/XP)

・物理メモリ最適化機能で表示項目改良及び最適化メモリサイズ選択を5％刻みにした

・Windowsからのシステムメモリ不足の警告を表示

・ＳＳＥ２対応表示

・｢Windowsの終了｣ダイアログ呼び出し

・システム(強制)終了及び(強制)再起動の簡易操作

・シェル変更機能を改良

・シェル起動前に任意のソフトウェアを排他起動

・デフラグ及びスキャンディスクの簡易操作

・スクリーンセーバー無効化及び有効化

・簡易ランチャーにスクリーンセーバー起動項目追加

・同上エクスプローラ起動項目

・メディアファイルを指定して再生

・空き物理メモリ、システムリソース(Windows9x/Me)及びカーネルのスレッド数(Windows9x/Me)のリアルタイム表示

・指定時間にメッセージ表示やシステム電源断

・将来的なWindowsのプロセス関連処理仕様変更に対処するための別途処理ルーチン実装

・各種処理安定化及びコード最適化

・ＣＰＵ利用率表示機能削除

・Windowsのバージョン情報表示機能削除

・ヘルプ加筆多数

・等々

●Ver1.05

(改造コード関連)

・一度に実行可能な改造コードのサイズ上限を半角10240文字に引き上げ

・改造コード入力補助ウィンドウを実装（アイテムリストからの読み込み等も可能）

・コメント型コード

・等差級数型コード（単純なインクリメントは勿論、等差の指定も可能です）

・ダンプ型コードでポインタ型コードを併用しかつアドレス補正値がFFh超のケースで起こりうる不具合を修正

・コピー型コードでコピーサイズがFFh超のケースで起こりうる不具合を修正

・カーソル移動やキー及びマウス入力等ユーザー入力を改造コード形式でエミュレートさせるユーザー入力型コード

・カーソル移動型コードを簡単に作成するためのマウス座標取得・コード変換ダイアログを実装

・処理待機型コード

(その他プロセス関連)

・プロセス関連のエラー認識を強化

・解析対象キーフックによるバックグラウンドからの検索及び変動検索

・バイナリデータ表示用指定アドレスを簡単に変更するためのボタンやスクロールバーを実装

・バイナリデータ表示用指定アドレスがアクセス不能時に、直近のアクセス可能アドレスをサーチして変更

・リアルタイムでプロセス書き換えを行うウィンドウを実装

・プロセスメモリへのバイナリファイルのアップロードでサイズ指定可能にした

・モジュールエリア及びヒープエリアのリスト表示を改良

・Win2K/XPでの特殊なヒープ領域を認識できるようにした

・選択プロセスの使用メモリ最適化(Windows2000/XP)

・選択プロセスの仮想アドレス空間内にメモリ領域を確保(Windows2000/XP)

・選択プロセスの使用モジュール及びスレッド一覧表示

・選択プロセス実行ファイルのセクション一覧表示

(その他)

・メインウィンドウ他インターフェイスをWindows使用フォントサイズ等に関わらず見やすく表示するようにした

・当ソフトウェア各ウィンドウのサイズ変更時に、取得した各ウィンドウの表示状態を元にサイズ変更が適切に行えるようにした

・右クリックでもシステムメニューを表示するようにした

・WindowsXPではスクリーンセイバー制御メニューを非表示にし、｢画面のプロパティ｣をメニューに追加(WindowsXP不具合対策)

・デスクトップアイコンの文字列背景透明化(WindowsXP不可)

・｢日付と時刻のプロパティ｣表示

・｢最近使ったファイル｣の削除

・書庫解凍時のエラー認識を強化

・｢メディアファイル名を指定して再生｣に、再生速度や音量等を変更できるコントロールモードを実装

・｢起動終了｣で｢Ｗｉｎｄｏｗｓの終了｣ダイアログ呼び出しルーチンを改良(WindowsXP不具合対策)

・｢アプリ制御｣で、起動したアプリケーションの一時停止時に汎用レジスタの内容を表示するオプション追加（Windows9x/Me）

・｢アプリ制御｣で親ウィンドウを選択すると即子ウィンドウリストを表示するようにした

・｢アプリ制御｣で｢可視全破棄｣時の安全性を高めた

・｢メモリ｣でCPUの周波数を表示

・｢メモリ｣に自己使用メモリ最適化機能を実装(Windows2000/XP)

・｢16進-２進｣ボタンでクリップボードビューアを起動できるようにした

・各種処理安定化及びコード最適化

・ヘルプを読みやすいように大幅書き換え

・アイコンの萌え度を向上させた

・等々

●Ver1.06

(改造コード関連)

・選択メモリエリアのプロテクト属性変更型コード

・多重ポインタ型コード

・断続書き換え型コード

・｢改造コード入力補助｣でWindows付属の電卓から表示値をそのままあるいは１６進リトルエンディアンに変換して取り込めるようにした。Windows98（非SE）での動作未確認。

・一部の改造コードの型を誤認識しうるケースに対処

(その他プロセス関連)

・｢指定アドレスの数値変換(10進)｣ダイアログで、数値変換をリアルタイムで行うようにした

・各種アドレス表示用リストボックスのダブルクリックでメインエディットボックスの内容も更新するようにした

・指定アドレス変更用スクロールバーを改良

・リアルタイム書き換えパネルのインターフェイスを改良

・プロセス選択時に表示する基本情報の内容を変更した

・Windows2000/XPでのプロセスリスト表示で一部のシステムプロセスを非表示にした（安全対策）

・メインエディットボックスでのバイナリデータ表示時のビープ音を無しにした

・メインエディットボックスでのバイナリデータに対応する文字列表示について、タブや改行を無視及び値00hをドット表示するようにした

・通常検索に10進数値入力モード実装

・通常検索に検索条件の履歴保存機能を実装

・通常検索及び変動検索でサーチ結果からの各種絞込み検索を実装した

・通常検索及び変動検索で処理の安定性を高めた

・変動検索で検索範囲を指定できるようにした

・通常検索及び変動検索を高速化した

・変動検索の設定を予約できるようにした（キーフック用）

・文字列検索で入力文字列をUnicodeに変換して検索するオプション追加

・「モジュール・スレッド一覧」と共にメモリエリアマップを表示し、選択メモリエリアのプロテクト属性を｢読み書き可能｣に変更できるようにした

・「モジュール・スレッド一覧・メモリエリアマップ」でモジュール一覧のアドレスを昇順ソートするようにし、他のアドレス表示用リストボックス同様に項目のダブルクリックに対応させた

(その他)

・デバッガ兼APIトレーサーを実装

・基数変換ダイアログを実装

・プロセスリストや｢アプリ制御｣の親子ウィンドウ表示用リストボックス等に水平スクロールバーを付けた

・｢現在のメモリ使用状況他｣でCPUのベンダーとバージョン情報を表示するようにした

・WindowsXPで現ユーザー用のアイコンキャッシュを削除できるようにした

・｢非常用モード｣を削除（同梱｢psapi.dll｣の導入で対処可能にした）

・当ソフトウェア仮想アドレス空間へのウイルス及び類似ソフトウェア侵入に対処

・ユーザーの方々からのご意見を元にメインウィンドウのインターフェイスを改良しヘルプを補記

・全ウィンドウを最小化する｢緊急退避｣ボタン実装

・｢PeRdr｣での逆アセンブルコードリスト出力に軽量出力モード実装

・WindowsNTのサポートを中止（同OS専用コードによる実行ファイル肥大化を回避するため）

・各種処理安定化及びコード最適化

・等々

●Ver1.07

(改造コード関連)

・複数コード実行時に以降の処理を中断するキャンセル用コード｢Quit｣実装

・｢コード入力補助｣に単一コードを複数コード欄にコピーする機能を追加

・改造コード実行時に、実行コードに合わせてメインエディットボックス等の内容を更新するようにした

(その他プロセス関連)

・検索機能を再コーディングし、通常検索と変動検索で検索結果を共有できるようにした

・通常検索と変動検索の検索オプションを追加(注：｢F｣(Float)ボタンは｢10｣ボタンとの併用のみ)

・通常検索の指定範囲をアプリ有効アドレス上限まで自由に設定できるようにした

・検索該当件数上限を100万件に引き上げ

・メインウィンドウのアドレス指定エディットボックスの内容を検索開始アドレスに指定できるようにした(アドレス転写)

・メインウィンドウでアドレス指定エディットボックスへの入力アドレスをリストアップする栞作成機能実装

(キーフック関連)

・｢UsaHook2.dll｣を機能追加及び他フックプログラムとの連携のため再コーディング(協力：必殺！！ねこまんま(はぐはぐ)さん)

・最上位ウィンドウをキーフック対象とする際にヘルパーアプリケーションを対象と誤認識しないよう改良

・｢タイマー｣で指定時間に最上位ウィンドウをキーフック対象に指定できるようにした

・｢Shift｣＋｢Page Up｣キーで、検索ウィンドウ検索結果リストの上位10件を｢NekoList.txt｣として｢Neko57.exe｣と同じフォルダに出力するようにした

・｢Num Lock｣キーで｢デバッガ｣でハードウェアブレークポイントを設定(事前にデバッガからの起動が必要)

・｢Shift｣＋｢Num Lock｣キーで、｢デバッガ｣のハードウェアブレークポイント用アドレス入力欄に、｢Neko57.exe｣と同じフォルダにある｢NekoBP.txt｣の内容を貼り付けるようにした

・メインウィンドウ、検索ウィンドウ及びデバッガウィンドウのタイトルを変更してもキーフックが使えるようにした

・｢Home｣キーによるキーフック対象ウィンドウの最小化機能を強化した

(その他)

・｢デバッガ｣でターゲット起動時の引数を指定可能にした

・｢デバッガ｣でハードウェアブレークポイントを全スレッドに一括設定可能にした

・｢デバッガ｣のハードウェアブレークポイントでブレーク時にビープ音を鳴らすようにした

・メインウィンドウに加え、検索ウィンドウ及びデバッガウィンドウのタイトルを変更可能にした

・｢アプリ制御｣での各種ウィンドウ操作時の安全性を高めた

・スクリーンセイバーの無効化をWindowsXPに対応させた(システムメニュー)

・アプリ起動時に引数等詳細を指定できるようにした(アプリ起動用メニュー)

・指定ファイルのCRC-32及びMD5生成機能実装(アプリ起動用メニュー)

・音楽再生CDドライブ指定及び簡易CD再生機能実装(マルチメディア再生用メニュー)

・デスクトップアイコン文字を黒色に出来るようにした(｢Ctrl｣キーを押しながらアイコン文字背景透明化)

・｢カーソル位置取得｣でカーソル位置の親子ウィンドウハンドル取得と子ウィンドウの表示兼有効化等が出来るようにした

・｢基数変換｣の変換ルーチンを改良

・｢基数変換｣に表示値をメインウィンドウのバイナリデータ編集用エディットボックスに転写する機能を追加

・ホットキー(Ctrl+Shift+Z)を設定してメインウィンドウを即最前面に表示できるようにした

・既に表示されている｢モジュール・スレッド一覧・メモリマップ｣、｢プロセスメモリ検索・変動検索｣、｢デバッガ兼APIトレーサー｣、｢基数変換｣、｢タイマー｣、｢改造コード入力補助｣及び｢リアルタイム書き換えパネル｣のいずれかのウィンドウを、メインウィンドウ上で再度呼び出す操作を行うことで、最前面に表示するようにした

・各アドレス表示リストボックスでのダブルクリック時の動作をシングルクリックで行うように変更

・｢アプリ制御｣で子ウィンドウのフォント変更をボタンクリックのみで行うようにした

・各種処理安定化及びコード最適化

・等々

●Ver1.08

(改造コード関連)

・当ソフトウェア起動時に指定スクリプトファイル自動実行(設定キーは｢SN57.ini｣に自動作成)

・対象プロセス指定コード｢PROC:｣実装

・アドレス間演算コード実装

・｢改造コード入力補助｣でバイナリデータ編集用エディットボックスから値を転写

・｢改造コード入力補助｣で各エディットボックスの使用フォントを変更した

・複数コード一括実行の際に改行のみの行を無視するようにした

・自動更新時にはコード実行履歴に追加しないようにした

(その他プロセス関連)

・ヒープエリアの数が64を超えるケースに対応

・メモリ検索で変動検索範囲の上限を撤廃

・メモリ検索時に自己プロセス処理優先順位を変更可能にした

・対象プロセスのモジュールエリアをダンプする｢PEダンプ｣機能実装

(その他)

・Windows9x/Me上でOSの内部メモリ操作不具合に伴う当ソフトウェア強制終了を防止

・｢PEファイルを指定して再構築｣機能実装

・｢簡易バイナリファイル書き換え｣機能実装

・デバッガでコードセクション外にもコード実行ブレークポイントを設定可能にした(警告あり)

・対象プロセスのモジュール一覧でプロパティ表示と｢PeRdr｣での逆アセンブルコードリスト出力

・｢詳細を指定して実行｣で作業フォルダを自動指定するようにした

・メインウィンドウのボタン等が無い場所でのマウス中ボタンクリックで｢緊急退避｣

・｢カーソル位置取得及び同位置ウィンドウ操作｣で｢強制表示｣と｢強制有効化｣の処理を分けた

・自己透明化の解除機能実装

・ディスプレイ省電力モードに対応

・｢ファイルを指定してMD5/CRC-32生成｣や｢詳細を指定して実行｣等使用時にメインウィンドウを最小化

・｢ファイルを指定してMD5/CRC-32生成｣で出力したMD5の値を比較用に転写できるようにした

・｢稼動アプリケーション制御｣でタイトルなしを含む全ウィンドウの情報を取得可能にした

・｢稼動アプリケーション制御｣で選択ウィンドウのスタイル取得や領域サイズの取得と変更を可能にした

・｢稼動アプリケーション制御｣のエラーコード翻訳で入力値を16進数にした

・｢進数変換及び整数－実数変換｣で2進ビットパターンを16進数や10進数に変換

・｢現在のメモリ使用状況他｣の物理メモリ最適化で｢＋５％｣ボタン押下を即反映させるようにした

・｢音楽再生CDドライブ設定・簡易CD再生｣ダイアログとメインウィンドウの親子関係を解除

・「デスクトップアイコン文字背景を透明化」をWindowsXPに対応させた

・プロセス関連以外の機能をメインウィンドウのメニューから呼び出すようにした

・プロセスメモリへのアップロードとダンプで範囲指定を終端アドレスでも指定できるようにした

・｢システム監視・タイマー設定｣で表示処理の改良

・メインウィンドウのボタン等の表示形態を統一した

・各種処理安定化及びコード最適化

・ヘルプを読みやすいように大幅書き換え

・等々

●Ver1.09

(改造コード関連)

・改造コード実行履歴をコンボボックスに格納するようにした

(その他プロセス関連)

・ヒープリスト選択時のエリア名選択を可能にした

・メモリ検索機能のコードを最適化

・メモリ検索機能に｢予測分岐型高速検索モード｣を実装した

・｢リアルタイム書き換えパネル｣で画面切り替え時に自動で再読み込みするようにした

・｢リアルタイム書き換えパネル｣で再読み込み時にカーソル位置を保持するようにした。

(その他)

・｢アドレス－オフセット変換｣でPEヘッダが特殊なケースに対応

・プロセス選択時及びデバッギー起動時の対象PEファイル解析速度を向上させた

・各種データ抽出機能実装(メニューの｢ファイル｣→｢ファイルを指定してデータ抽出｣)

・各種マルチメディアファイルの連続再生(メニューの｢メディア｣→｢マルチメディア連続再生｣)

・アイコンとウィンドウタイトルを偽装する｢フェイク起動モード｣を実装した

・指定アドレスでCreateRemoteThread関数を実行(Win2k/XP用、｢選択プロセス｣の｢操作｣ボタン)

・10進数の進数変換及び整数－実数変換結果を検索ウィンドウに転写できるようにした

・指定アドレスの数値変換機能を改良し、ビットパターン表示機能を追加

・その他コード最適化

・等々

●Ver1.10

(プロセス関連)

・プロセスメモリのダンプ・アップロードで指定範囲のアクセス属性を無視できるようにした

・｢指定アドレスでCreateRemoteThread関数を実行｣で確認メッセージを表示

・モジュール・スレッド一覧表示で、モジュール参照数表示等の改良

・プロセス使用モジュールのインポート関数及びエクスポート関数一覧表示機能追加

・メモリマップで対象エリアのダブルクリックによる属性変更を可能にした

・プロセスメモリ置換機能を実装(メインウィンドウの｢+8h/置換｣ボタン)

・メモリ検索で予測分岐型高速検索モードを初期設定にした

・メモリ検索を若干高速化

・検索条件履歴保持を30件まで、検索結果リスト出力を32000件まで可能にした

・変動検索の検索範囲初期値を04000000hにした

(その他)

・｢進数変換及び整数－実数変換｣で小数部分を持つ数値の実数変換等の機能追加

・システム監視タイマーで各種ファイル実行に対応

・メインウィンドウの位置と表示サイズを強制復旧可能にした(システムメニュー)

・デバッガでデバッギーの各種例外発生時の処理を選択可能にした

・デバッガでメインウィンドウでの選択プロセスにアタッチ出来るようにした

・デバッガでハードウェアブレークポイント使用時にステップ実行が出来るようにした

・データ抽出でOggファイル抽出時にフォーマット上問題があるファイルも抽出可能にした

・その他コード最適化

・等々


謝辞

当ソフトウェアをお使い頂いた総ての方々。

当ソフトウェアのコーディングに協力して頂いたBlueAsh氏。

当ソフトウェア用にUsaHook.DLL及びソースを提供して頂いた、必殺！！ねこまんま（はぐはぐ）氏。

当ソフトウェアのデバッグに協力して頂いた匿名希望の方々。

PeRdr.EXEを作成されたFrediano Ziglio氏。

UNLHA32.DLLを作成されたＭｉｃｃｏ氏。

UNZIP32.DLLを作成されたshoda T.氏。

UNRAR32.DLLを作成された亀井哲弥氏。

UNRAR.DLLを作成されたEugene Roshal氏。

CAB32.DLLを作成された宮内邦昭氏。

gcac.exeを作成されたSYN氏。

以上の方々に心より感謝します。

当ソフトウェアが、少しでも多くの方のお役に立てば幸いです。