RPGツクール製ゲームのデバッグモード

RPGツクール製のゲームにはデバッグモードがあり、コマンドラインパラメータを
与えることで有効にすることが出来ます。その方法をまとめてみました。

デバッグモードにはテストプレイとバトルテストがあり、テストプレイは
スイッチ(フラグなど)の変更や壁抜けなどができるようになります。
バトルテストはどうも制作環境でないと動作しなさそうですので、
ここではテストプレイをデバッグモードとして扱います。

tkool01.jpg
F9キーでスイッチ(S)や変数(V)の変更ができます。

tkool02.jpg
Ctrlキーを押しながら移動すると壁抜けができるようになります。


コマンドラインパラメータは以下のようになっています。
■RPGツクールVX Ace
Game.exe [test/btest] [console]

test テストプレイ
btest バトルテスト
console コンソールの表示


■RPGツクールVX
Game.exe [test/btest]

test テストプレイ
btest バトルテスト


■RPGツクールXP
Game.exe [debug/btest]

debug テストプレイ
btest バトルテスト


■RPGツクール2000/2003
RPG_RT.exe [TestPlay/BattleTest] [HideTitle] [Window]

TestPlay テストプレイ
BattleTest バトルテスト
HideTitle タイトル非表示
Window ウィンドウモードで起動

ショートカットを作成し、リンク先の末尾にパラメータを追加すると簡単です。
tkool03.jpg

tkool04.jpg
RPGツクール2000/2003製のゲームはデフォルトでフルスクリーン起動しますが
このようにパラメータを与えることで最初からウィンドウモードで起動できます。
2000/2003では第1、2引数を省略できないので適当な文字を入れておいて下さい。
例)RPG_RT.exe NULL NULL Window



残念ながらRPGツクールXP以降の多くのゲームは、デバッグモードで起動すると
「スクリプトの読み込みに失敗しました。」と表示され終了してしまいます。
(どうやらスクリプトが暗号化されているとこのように表示されるみたいです)
このような起動時のチェックであれば、チェックを回避するよう改造したり、
後から改造コードでメモリ上のデバッグモードフラグを入れることで対処できます。
しかし、対策としてスクリプトでデバッグモードフラグを常時チェックしている
ものには、これらの方法では回避することができません。


起動時チェック用に改造コードを記載しておきます。
改造コードの使い方はこちらを参照して下さい。
■RPGツクールVX Ace
*デバッグモード
FILENAME Game.exe
00000FA6: 32 14


■RPGツクールVX
*デバッグモード
FILENAME Game.exe
00001964: 23 1C


■RPGツクールXP
*デバッグモード
FILENAME Game.exe
0000160E: 14 06

制作者としては見てほしくない部分かもしれませんが、ユーザーとしては興味深い
ですよね。昔のRPGでどうしても行けない場所にやきもきした思いをした方は
特にそう思うのではないでしょうか。



デバッグモードフラグのチェックを回避する改造コードをテスト公開します。
上の改造コードは使用せず、こちらのコードのみを使用して下さい。
改造コードはうさみみハリケーンやスペシャルねこまんま等で実行できます。
ゲームが使用するdllによってコードが異なりますので、「Game.ini」の「Library」
の項目を確認しておいて下さい。
■RPGツクールVX Ace
;デバッグモード(RGSS301.dll)
*00410004>19E550-8B018B500485D2750B83FB08740583FB18750142C3
*00410004>0635F4-E857AF1300

;デバッグモード(RGSS300.dll)
*00410004>19E700-8B018B500485D2750B83FB08740583FB18750142C3
*00410004>0633E4-E817B31300


■RPGツクールVX
;デバッグモード(RGSS200J.dll)
*0040BCC0>0FBBE0-8B018B500485D2750D85DB750985F6750585FF750142C3
*0040BCC0>088534-E8A7360700

;デバッグモード(RGSS202J.dll)
*0040BCC0>0FBC00-8B018B500485D2750D85DB750985F6750585FF750142C3
*0040BCC0>088554-E8A7360700
デバッグモードの改造コードをSSGにしてみましたのでこちらもどうぞ。

■2012/4/28更新
RPGツクールVX Ace製ゲームのデバックモードについて追加しました。
■2012/7/17更新
デバッグモードのチェックを回避する改造コードをテスト公開しました。
2011-10-26 20:24 | Comment(70) | その他改造 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
参考にさせていただきます。
ありがとうございました。
Posted by へんり at 2012年04月29日 02:12
デバッグモードのチェック回避コードいいですね!
ぜひVXaceも公開してもらえればと思います。
Posted by ぽんた at 2012年07月20日 16:05
VX Aceのコードも追加しておきました。
ちゃんと動作してますかね?何かおかしなところがあればコメントにお願いします。
Posted by niL at 2012年07月21日 16:06
ちゃんと動作しました
ありがとうございました!
Posted by ぽんた at 2012年07月22日 23:40
いつも参考にさせていただいてます。
質問なのですが、VXのゲームをデバックチェックによってollydbgで実行できないのですが、その回避方法について知っていれば教えてもらえないでしょうか?

デバッグモードのチェック回避のコードで実行でできるのかとも思いましたが、うさみみハリケーンで実行しても終了後にはチェック回避のコードが無効になってしまうのでollydbgでの起動はできませんでした。

初心者すぎる質問かと思いますが、お暇がある時に是非ご教授お願いします。
Posted by セプ at 2012年09月14日 17:32
http://hp.vector.co.jp/authors/VA028184/OllyDbgQA.htm#B8A
こちらを参考にしてください。
私は「Olly Advanced」というプラグインを使用しています。
http://www.openrce.org/downloads/details/241/Olly_Advanced

大抵のデバッガチェックは回避できますし、バグの修正もできるので
ollydbg1を使うなら入れておくといいと思いますよ。
Posted by niL at 2012年09月14日 22:01
なんと!こんなプラグインがあったんですね。
英語で訳がわらないのでとりあえずHELPの画像通りにチェックしてみたところ、読み込んだ瞬間終了してしまいました。

後日英訳しながらやってみます^^;

とりあえずの目標はVXのゲームでお金が減らないようにしてみたいですw

ご教授ありがとうございました!
Posted by セプ at 2012年09月14日 23:05
とりあえずは、「Bugfixes」のKill〜Bugの3つと、
「Anti-Debug」のProcess32Next、FindWindow、IsDebuggerPresent
にチェックを入れておきましょう。
後は状況に合わせてでいいかと思います。

Scramble Export Table、GetTickCountあたりは不具合を起こす可能性が
高いと思うので注意が必要です。
Posted by niL at 2012年09月15日 00:24
無事起動することができました!
しかしVXのゲームを起動するとエントリーポイントがコードセクション外〜〜と出て、お金の格納アドレスが変わってしまっいブレークポイントがうまく設定できませんでした;;

これが自己変異型というやつなのでしょうか?
解説サイトと照らしあわせてやってるだけなので自分では手に余りそうです^^;
Posted by セプ at 2012年09月15日 08:42
どうやらパラメータは「値×2+1」という形でメモリに格納されているようですよ。

ただ、RPGツクールの実行ファイルはスクリプトのプレーヤーなので
プログラムを書き換えるような改造は、かなり難しいかもしれません。
Posted by niL at 2012年09月16日 21:14
パラメータが2n+1というのはググって知っていたのでお金の格納アドレスを特定できはしたのですが・・・。

もしかしてメモリのパラメータ全てが2n+1なんでしょうか?
だとするとニーモニックも全然違う表記されますよね・・・。
Posted by セプ at 2012年09月17日 08:26
ニーモニックは変わったらゲーム起動すらできなくなってしまいますね^^;

ということでパラメータの値だけ2n+1ですね。
DANAの部屋さんのHPでアドレス可変型の改造方法を参考にやってみましたが、ポインタの特定には至りませんでした;;

しかしポインタの特定をしたとしても、減算処理がスクリプトのプレーヤーで処理されているのなら○○減らないはできないのでしょうか?ねこまんまなどのコード自動更新で値が減ったら戻す、というのを繰り返せば出来はするんでしょうが・・・。
Posted by セプ at 2012年09月19日 10:29
実際確認してないのでどうなってるかわかりませんが、スクリプトで減算処理を
しているのであれば、ブレイクしたプログラムコードは様々なパラメータを
呼び出し、書き込みしているルーチンになるかと思うので、書き換えてしまうと
他の値にまで影響が出てしまいます。

私が公開しているデバッグモードフラグのチェックを回避する改造コードも
そうなのですが、特定の値以外には影響が出ないようにフィルタリングする
プログラムを書くことになるので、かなり大変です。
Posted by niL at 2012年09月19日 22:08
なるほど・・・。手に余ることが理解できました^^;
まぁ減らない処理ができないにしても増やすことは容易いので今のところそれでも十分なのでそれでいいかな、と思います。
色々ご教授いただいて本当にありがとうございました!
Posted by セプ at 2012年09月21日 07:08
VXAce(RGSS300.dll)のデバッグモードチェック回避コードをVXAce(RGSS301)のデバッグモードチェック回避コードをを参考にサーチしてみました。ねこまんまのコードは使い慣れていないのでSSG用のコードを書きます。(便宜上カンマ手前で改行あり)

[subject]デバッグモード:b_toggle,_[:0x410004:]
,ssl->debug_chn,offset

[group]debug_chn
0x19E340,8B018B500485D2750B83FB08740583FB18750142C3
,000000000000000000000000000000000000000000
0x0633E4,E857AF1300,8B018B5004
[/group]
Posted by リック at 2013年05月05日 21:07
動作確認してみましたが、私の環境では

[group]debug_chn
0x19E700,8B018B500485D2750B83FB08740583FB18750142C3
0x0633E4,E857AF1300,8B018B5004
[/group]

にしないと、元からあるコードを塗りつぶしてしまいました。
環境によってズレがあるんでしょうか?
よろしければご確認お願いします。
Posted by niL at 2013年05月12日 23:34
当方の環境はWindows7 Professional 64bitです。
確かに元からあるコードを塗りつぶしていました。

[group]debug_chn
0x19E700,8B018B500485D2750B83FB08740583FB18750142C3
0x0633E4,E857AF1300,8B018B5004
[/group]

上のコードだとフリーズしたため、[:0x410004:]+0x0633E4
に当たる部分の書き換え後のコードををうさみみで確認すると

CALL 101A1A80

という命令でした。
0x101A1A80は、_[:0x410004:]+0x19E340と同値でした。

改めて塗りつぶしを回避しつつ動作するコードを作ったら次のようになりました。

[group]debug_chn
0x19E700,8B018B500485D2750B83FB08740583FB18750142C3
0x0633E4,E817B31300,8B018B5004
[/group]

変更点としては、[:0x410004:]+0x0633E4の命令を

CALL 101A1E40

に書き換えるようにしました。
0x101A1E40は、_[:0x410004:]+0x19E700と同値です。



Posted by リック at 2013年05月14日 23:48
すっかりCallを修正するのを忘れていました…
動作確認せずに書いて申し訳ないです。

せっかくなのでRGSS300.dllの回避コードも記事に掲載したいと思うのですが
よろしいですかね?


ところで、リックさんはこちらでSSGを公開なさっている方しょうか?
http://www.necocan.info/supb2/x/topics.cgi?mode=res&no=14064
私のブログにもRPGツクール系ゲームの改造リクエストを頂いているので
汎用的な改造SSGの作成を陰ながら応援しています。
私の方でも何かご協力出来ればいいのですが…
Posted by niL at 2013年05月15日 00:57
>>nil氏

>>せっかくなのでRGSS300.dllの回避コードも記事に掲載したいと思うのですがよろしいですかね?

構いません。むしろ何故無いのだろうと思って掲示板に書かせてもらいました。

>>ところで、リックさんはこちらでSSGを公開なさっている方しょうか?

そうです。RICKとハンドルネームで公開しています。
自分がサーチした中気づいた点を書いています。

所持金はモジュール部分を変更すれば使えるみたいです。(当然他の項目のモジュール部分も書き換える必要あり)

ステータスは「status_info」をレベルやHP・MPの末端の領域と同一の領域の数値を書き換えれば使えると思います。3人目以降のアクターのデータがセーブデータに反映されると(?)ポインタが変動するようです。それに対応するため[14]のざくざくアクターズのssgは最近こっそり更新していたりします。ユニットリストがハオまであればそれが最新版です。

アイテムエディタは例のサイトに書いてあるとおり謎の16進数の解析ができなければ先に進めない状況です。謎の16進数はアイテム番号と関係有りそうですが、自力では無理そうなので断念しています。

XP,VX,VXAceのアイテム等のリストの取得はRPGツクールVXリーダー(とEXCELとサクラエディタ)が便利です。コピペしたあとちょっといじればアイテムの名前だけを取り出せます。(評価版の場合武器は除く)

長文失礼しました。


Posted by リック at 2013年05月15日 10:24
ありがとうございます。
RGSS300.dllの回避コード掲載させて頂きました。

また、沢山の情報もありありがとうございます。
参考にさせて頂きたいと思います。
Posted by niL at 2013年05月17日 01:04
掲載お疲れ様です。
提案ですが、回避コードのssgも公開されてはいかがでしょうか?
自分は回避コードというより、いつでもデバッグモードがon/offできるコードというように使ってますので(もちろんSSGでの話)。また、当コードがonの状態だとF12リセット(勝手にこう呼んでる)が使用できないゲームも多いので。

RGSS200J.dllの場合のssgのコードを参考までに書いておきます。
(便宜上カンマ手前で改行あり)

[subject]デバッグモード:b_toggle,_[:0x0040BCC0:]
,ssl->debug_chn,offset

[group]debug_chn
0x0FBBE0,8B018B500485D2750D85DB750985F6750585FF750142C3
,0000000000000000000000000000000000000000000000
0x088534,E8A7360700,8B018B5004
[/group]

RGSS202J.dllのoffの文字列はRGSS200J.dllと共通です。
RGSS301.dllのoffの文字列はRGSS300.dllと共通です。

前のコメントはVXAceについてでした。ご存知かも知れませんが、
VX作品は猫缶INDEXのkn氏作の最新の「らんだむダンジョン」のssgがリストを書き換えるだけで使えるようになることが多いです。このssgで所持金が書き換えられたらビンゴといえるでしょう。(「らんだむダンジョン」が標準的な暗号化を施してあるため?)そうでなければ、ポインタ探索しつつ構文中のXXXX=>key;のXXXXを書き換えていけば使えるようになると思われます。

http://www.necocan.info/supb2/x/topics.cgi?mode=res&no=13298

上記サイトの[18]の添付ファイルにポインタ探索履歴等を書いたssgをアップしています。ぜひ参考にしてみてください。
XPも構文はそのまま使える模様です。キーの書き換えは必須ですが。

長文失礼しました。

Posted by リック at 2013年05月17日 08:28
いつも情報ありがとうございます。
ssgの件考えてみます。
回避コードだけでなく汎用的な所持金などのの変更も出来ると便利そうですね。

シリーズが多いので大変かもしれませんが、時間があればやってみたいです。
その際は色々と参考にさせて頂きたいと思いますのでよろしくお願い致します。
Posted by niL at 2013年05月20日 01:26
RGSSAD/RGSS2A Decrypterを使えばスクリプトの読み込みに失敗しましたは解決するかも
Posted by ああ at 2013年05月24日 21:19
そんなツールがあるんですね。
確認していませんが情報ありがとうございます。
Posted by niL at 2013年05月26日 22:32
RPGツクールXP(RGSS104J.dll)のデバッグモードのデバッグモードフラグのチェックを回避するコードを自力で探そうと思いましたが、OllyDbgを使ったことがないのでわけが分からず断念しました。自分が知るRGSS104J.dllを使用するゲームは「おっさん or die」です。起動時チェックのバイナリ改造は通用しませんでした。できれば対応お願いします。ちなみにrgssadファイルを展開したらゲームは動きますが、デバッグモードは動きませんでした。

ちなみにRGSS103J.dllの(ここでいう)回避コードのssgは猫缶INDEXの「投稿データ掲載所」にあります。

一部おかしな(?)RGSS103J.dllを同梱したゲームもありますが。(例:FANTASY WORLD ver.1.20)
Posted by リック at 2013年05月27日 00:07
RPGツクールVX(RGSS202J.dll)で回避コードを使用したのですが・・・
確かに、ゲーム自体は稼働したのですが・・・どういうわけか
デバックモードが機能しないようです。

ゲーム自体はフリーで配布されてる物なんですが。。。orz
Posted by   at 2013年05月27日 11:41
>>1つ上の方
原因と思われる可能性と思いつく限りの対処法を書いてみます。

@Game.exeが改造済みである。
(対処法)再度そのゲームをDLし直す等で対応

Aそのゲームがランタイム(RGSS202J.dll)を同梱していて、更にそのファイルが通常とは違うものである
(対処法1)ゲームタイトルを書いた上で報告
(対処法2)自力で探す。

自分なりの探し方を書いてみます。
@ねこまんまの16進数検索で
8B018B50048B
を検索。自分の環境&通常のdllでは1008AE64がヒット。

ARGSS202J.dllを逆アセンブル。Hexダンプが
0000・・・・
というように00が続いている領域を探す。
自分の環境&通常のdllでは100FE510をコードの先頭アドレスに選択。

B1008AE64の命令を書き換え。
自分の環境&通常のdllでは
CALL 100FE510
バイト列は
E8A7360700
になりました

Cコード作成
1008AE64-E8A7360700
100FE510-8B018B500485D2750D85DB750985F6750585FF750142C3








Posted by リック at 2013年05月28日 00:31
リックさんお答えいただいてありがとうございました。

RGSS104J.dllの「おっさん or die」のデバッグについて簡単に解析してみましたが
通常であればあるはずのデバッグモードフラグへのアクセスが全くないので
(デバッグメニューは常時、壁抜けは移動時にフラグを読み取っている)
デバッグ機能自体が削除されているか、無効化されているのかもしれません。
(そういったことが出来るのかわかりませんが…)
現状のところさっぱりといった感じです。


ちなみに猫缶INDEXのRGSS103J.dllのSSGはデバッグフラグのONOFFのみのようです。
RGSS103J.dllにも新旧があるようですね。その2種類に対応されていました。
(FANTASY WORLD ver.1.20のが古いもの)



↑↑のRPGツクールVX(RGSS202J.dll)でデバックモードが機能しないという方も
デバッグの無効化がされている可能性がありそうですので
タイトルを教えてもらえるとありがたいです。
Posted by niL at 2013年05月28日 22:36
RPGツクールVX(RGSS202J.dll)でデバックモードが機能しないゲームのタイトルですが。
どろっぷふぁくとりーってやつです。

ちなみに、この他に幾つか・・・
RPGツクールVXで作られて販売されているRPGがありますね。
同様に、デバックモード自体機能しないみたいですね。
あと、VXAce作られた物でも同様の現象の物が存在するようです。

Posted by 774 at 2013年05月28日 23:35
デバッグモードが無効化されている・・・そんなことがあるんですね。VX以降の回避コードはかなり長いから無理やり引きずりだしているのかと思ってました。

質問。メモリパッチや回避コードでポインタを使っている理由は何ですか?ポインタで飛んだ先も起点となる(同じ)モジュール内にあるのだからポインタを使わなくてもよさそうなのですが。

あと、細かいことですが、VX Aceのモジュール名に「J」は不要です。

「おっさん or die」をRPGツクールVXリーダーで覗いてみたら、アイテム名が謎の文字列に置き換わっていました。RPGツクールXP セーブデータ改造ツール Pro(最近フリーウェア化)では正常に表示されました。

2000や2003も解析してみました。データはそのままなんの変換もなく格納サれており、多重ポインタも最大3(ssgの[:と:]のセットで1と数えると)という程度でした。
アイテムリストの取得方法は自分の知る限りRPGツクール2000/2003 セーブデータ改変ツールのアイテムリストを丸写しするくらいです。ちなみにjoydel(joykeyの付属ソフト)でパッドを無効化しても起点は変わらない模様です。
Posted by リック at 2013年05月29日 00:02
>どろっぷふぁくとりーについて
ついさっき落として検証してみました。自分の環境では普通にデバッグモード(回避コード)を使えました。多分Game.exeが改造されているのが原因だと思われます。
Game.exeを改造すると多少はRGSS202J.dllの領域に影響を及ぼすみたいです。(XPの「おっさん or die」ではそうだった。)

自分が使ったコードを一応書いてみます。(ssg用、便宜上カンマで改行あり)

[subject]デバッグモード:b_toggle,
_(MName::RGSS202J.dll),ssl->debug_chn,offset

[group]debug_chn
0x0FE510,8B018B500485D2750D85DB750985F6750585FF750142C3
,0000000000000000000000000000000000000000000000
0x08AE64,E8A7360700,8B018B5004
[/group]

ついでにいうと、このゲームは猫缶Indexのkn氏作のらんだむダンジョンのssgがリストを変更すればそのまま使える模様です。
Posted by リック at 2013年05月29日 10:50
>>774さん

どろっぷふぁくとりーを私の方でも確認してみましたが、掲載している回避コードで
問題なくデバッグモードに出来ました。
例えば管理者として起動していないだとか、既に改造済みのGame.exeだとか
何か別の問題で改造出来ていないのかもしれません。



>>リックさん

回避コードは上の方のコメントにもあるように様々なデータを読み出している
ルーチンにデバッグメニュー、壁抜けからフラグへのアクセスのみONにする
というプログラムを追加して、それをコード化したものです。

「おっさん or die」だとそもそもフラグへのアクセス自体がないので
この方法ではどうしようもない状態です。


質問のポインタを使っている理由ですが、環境によってズレが起きないよう
基本的に元々のプログラム通りそのままコードにしています。
回避コードはSSGなら↑の_(MName::RGSS202J.dll)のようにDLLを起点にするのが
良さそうですね。

それと「J」のご指摘ありがとうございました。修正しました。
Posted by niL at 2013年05月29日 23:01
>nil氏
2000や2003の場合はデバッグモードのアドレスへのポインタもデバッグモードのアドレスもモジュールRPG_RT.exe内にありますが、それでも環境によりズレが生じたりするのでしょうか?あるいは、全ver.のRPG_RT.exeに対応するためのものなのでしょうか?
Posted by リック at 2013年05月29日 23:30
>nil氏
1つ上の問題は自己解決しました。お騒がせしました。最近ツクールXP以降のssgばっかり作っていたので(1度構文を作ればほとんど流用可能&プログラム見なくても感覚でポインタ探索できるようになった)逆アセンブラのプログラムを逆に辿るという基本を忘れていました。.exeの中に入ってもまだ安心できないことを思い出しました。

ツクールのssgで思い出したのですが、
www.necocan.info/supb2/x/topics.cgi?mode=res&no=3237
の[153](No.9314)にRPGツクールシリーズ(2000〜VXまで)ある程度汎用性のあるssgがありました。これが自己解決の鍵になりました。

連投すみませんでした。





Posted by リック at 2013年05月30日 03:38
いえいえ、仰る通りに2000/2003のデバッグフラグは.bssセクションにあり
未初期化のグローバル変数や静的変数の領域ですので
アドレスが変動したり、ズレることもないとは思います。

本当に念のため、元々のアセンブラのプログラム通りにしたという感じです。
Posted by niL at 2013年06月02日 17:58
確かに.bssセクションでもいいのですが、.dataセクションまで引っ張ったほうが、いろんなゲームに対応できるようになるみたいです。

例えば.bssセクションまでポインタ探索したRPGツクール2003のゲーム「POKEMON FANTASY」用に作ったSSGは同じツクール2003のゲーム「どらえもんのび太のFINAL FANTASY」では使える気配がありませんでしたが、.dataセクションまでポインタ探索したものは「どらえもんのび太のFINAL FANTASY」でも使えそうでした。

ちなみに、アリスソフトのSystem3.xのいくつかのゲームも解析したことがあるのですが、やはり起点が.exeなら.dataセクションを起点とするのが正解のようです。

追伸:
最近SRPGツクール95の「メイドさんと最低の野郎ども」に手を出してみました。デバッグモードで何ができるのかに興味があるので、時間があったらでいいので対応お願いします。
Posted by リック at 2013年06月02日 20:05
ああ、なるほど
環境で変動は無くても、ゲーム事に変動してしまうんですね。

.dataセクションは初期化されたデータの領域なので、ゲームが変わっても
同じデータですが.bssセクションはどこにどの値が入るかが
わからないってことですか。

汎用システムですもんね。ようやく見えて来ました。


SRPGツクール95の件了解です。
今やってる解析が終わったら取り掛かろうと思います。
Posted by niL at 2013年06月02日 22:46
SRPGツクール95の件ですが
「SRPGEXEC.EXE」を見てみましたがそれらしい文字列は見つからず
よくわかりませんでした。

検索すると「デバックでスイッチのオンオフ確認はできても変更ができない」
とあるので、一応デバッグ機能はありそうですが…
Posted by niL at 2013年06月13日 02:28
検討ありがとうございました。

2013年05月30日 03:38に書いたURLの場所にSRPGツクール95用のプログラム改変系のssgがありまして、そのSSGで十分楽しむことができました。

上記URLには思わぬ掘り出し物があることが多いのでたびたび覗いてみるのもよさそうですね、更新は止まっていますが。
Posted by リック at 2013年06月16日 18:51
http://homepage2.nifty.com/MJHS/soft/tool/crypt2k_kai/index.htm

上記のツールで暗号化したツクール2000シリーズ製のゲームをデバッグできるようにできますか?
Posted by ノネム at 2013年06月26日 16:41
>>ノネムさん
ちらっと目を通しただけなので、はっきりとは言えませんが
デバッグ機能自体が無いように思えます
Posted by niL at 2013年06月26日 23:28
>nilさん
なるほど
デバッグしたい時は暗号化ツールを無効化してRTPで動かせるようにしないとできないということですね
Posted by ノネム at 2013年06月28日 18:09
お待たせしてすいませんでした。
デバッグモードのSSGを公開しました。
ゴールドの改造なんかもいずれ入れていきたいですね。
しばらくは時間が取れそうもないですが…
Posted by niL at 2013年06月30日 22:40
更新お疲れ様です。デバッグモードのssgが来たと思ったら
2000/2003のデバッグモードのメモリパッチ版が消えてますね。何か問題でもあったのでしょうか?ssgではアドレス補正版になってるみたいですし。

ここで一つ質問です。VXACEの回避コードをONにした時のCALL命令のジャンプ先はRGSS300.dllの場合は
_(MName::RGSS300.dll)+0x1A1E40から
MOV EAX,[ECX] (8B01)
MOV EDX,[EAX+4] (8B50 04)
(以下略)
という意味で書かれていると思いますが、
うさみみでは
_(MName::RGSS300.dll)+0x1A1E3F
から
ADD [EBX+4508B01],CL (008B 018B5004)
(以下略)
というように認識されていますが大丈夫なのでしょうか?
RGSS301.dllの場合も同様の現象が見られます。
ちなみに使用はできますが、違和感を感じたので質問させて頂きました。
Posted by リック at 2013年06月30日 22:52
2000/2003の「RPG_RT.exe」はVerの違いによって複数存在するようなので
改造コードでの公開をやめ、全てに対応できるようSSGのサーチを
利用することにしました。

質問についてですが、「code cave」と呼ばれるコードの無い空間(00のところ)
にコードを書き込むと、デバッガが誤認識してしまうことがあります。
プログラム上は全く問題ないので大丈夫ですよ。
Posted by niL at 2013年07月01日 01:06
古いものになるのですが、ロマンス・オブ・ファンタジーでは・・・
フラグ回避コードVX用(デバッグモード(RGSS202J.dll))のを使用しても
確かに正常には可動はするのですが、デバックモードへ入れないようです
※ゲーム自体は最新版を使用しました。
Posted by at 2013年08月13日 20:28
ロマンス・オブ・ファンタジー(v1.55)ですが
自分はここで公開されているデバッグモードのSSGのコードで
問題なくデバッグモードに出来ました。
例えば管理者として起動していないだとか、既に改造済みのGame.exeだとか
何か別の問題で改造出来ていないのかもしれません。
Posted by リック at 2013年08月14日 07:41
リックさんいつもありがとうございます。

有料のゲームのようでしたので、私の方では確認していないのですが
以前にもRGSS202J.dllでデバッグモードにならないというものがあったので
何か問題があるのかもしれませんね。
念のためRTPの再インストールをお願いします。
Posted by niL at 2013年08月14日 21:11
改造コード使わせて頂きました。

適当にツクール作品(すべてvx)で試したところ、
できるのとできないのがありました。
本気でデバッグモードのチェックを行っている作品のは回避できないみたいです。
Posted by カンニング at 2013年10月29日 03:30
質問ですが、壁抜けだけ有効、デバッグモード(F9)だけ有効
というコードを作るのは不可能でしょうか?
Posted by リック at 2013年10月31日 17:12
>>リックさん

可能だと思います。
VX Aceのほうは既存のコードを弄るだけで簡単に出来そうですが
VXのほうは片方だけをフィルタリングしないとなので
区別するための値を見つけるのが面倒かもしれません。
Posted by niL at 2013年10月31日 22:09
返答有難うございます。
壁抜けはバイナリエディタでセーブデータをいじるだけで実現でき、
また、デバッグモードのコードをONにしたまま、うっかりF12リセット
してしまうとバトルテストに必要だと思われるファイルがない
という旨のエラーが出て強制終了してしまうので、
それぞれ分離できないのかなと思って質問させて頂きました。
Posted by リック at 2013年10月31日 22:38
現状の「デバッグモードフラグのチェックを回避する改造コード」では、
テストプレイ(Ctrlで壁抜け&F9でスイッチ・変数表示)と、
バトルテストの両方が有効になっている模様です。
記事に書いてある通り、バトルテストは制作環境でないと動作しないので、
できれば、テストモードのみ有効するコードを時間があるときで良いので対応お願いします。

P.S.
Ollydbgは使ったことはあまりないのですが最新バージョンの日本語化は期待しています。
Posted by リック at 2013年11月10日 01:32
F12キーでのバトルテストエラーは、F9のデバッグメニューをONにすると
出てしまうようで、切り離しできませんでした。
壁抜けのみでしたら問題ないみたいですね。
F12を押してもエラーが出ないようにする方向で解析してみます。
Posted by niL at 2013年11月11日 01:55
書き込んだつもりですけど消えていて、伝わってるのかわからないのでもう一度送ってみます、すでに送られてたらすいません。

レベル300以上にしたいのですけど
SSGでもやるとスクリプトGameActor353行目でnomethodErrorがでるんです。
udefined method>for nil:nilClassとでます、多分300以上の上限解除の値が無くNULLとなって無いものと比べようとしてバグが出たんだと思いますデバッグでそこの変数を変えれればどうにかなるかと思いデバッグしたく。
スペシャルねこまんま57号でおっさんordieのデバッグしようと思い
*デバッグモード
FILENAME Game.exe
0000160E: 14 06
を実行しようと思ったんですけど。
指定ファイルをオープンできませんと出てきましたと言われましたけど、その後ファイル書き換え処理を完了しましたとでました。
ですけどF9でデバッグモードでないです、ちなみにエディターでも0000160E: 14 のところを06にしてます。
セーブデータ書き換えるにも暗号化されていてversion error code:2とでてお手上げです。

デバッグモードなんとかできる方法ないのでしょうか?
Posted by KAOSU at 2014年01月12日 15:32
ここのコメントの少し上に書いてあるのですが
おっさん or dieはデバッグモードの対策をしているようで
プログラムを弄るのでは無理っぽいです。
Posted by niL at 2014年01月12日 21:40
申し訳ないんですが、
SSGとはどんなものなのか、
どうやって使うのか教えていただけないでしょうか。
どこにも載ってなくて困ってます
Posted by take at 2014年01月25日 19:40
SpoilerALというツールで使用するメモリパッチスクリプトです。
選択するだけで改造コードが実行できるというスグレモノなのです。
http://wcs.main.jp/index/software/spal/
詳しくはこちらか、「SpoilerAL」で検索してみて下さい。
Posted by niL at 2014年01月27日 22:15
RPGツクールXP・VX・VXAceにおいて
-1073741824〜1073741823までは2n+1で求まるのですが、
その範囲外はどうなっているのか

また、VX AceのTPはどのように格納されているのか教えていただければ幸いです。

また、F12バトルテストエラーについてもお願いします。

追伸
http://www.necocan.info/supb2/x/topics.cgi?ode=res&no=14064
に公開しているVX Ace製ゲーム用のSSGがアイテムエディタ以外
ほぼ完成&おそらくステータス以外ほぼ汎用であるものが出来ました。また、壁抜けのみのコードは自力でなんとかなりました。
Posted by リック at 2014年03月25日 12:33
>>リックさん
だいぶお待たせしていたF12キーのバトルテストエラーについてのみ
解析してみましたが、リセットと切り離してエラーのみ回避するのは
難しそうです。
とりあえずSSGにはF12キーを無効化するようにしておきました。

新しいデバッグ対策も出てきているようですね。
今回いくつかのゲームを見てみましたが
F9キーを押してデバッグメニューを出した途端
固まってしまうものがありました。

ツクール汎用のSSGお疲れ様でした。
現在多忙のため何もお手伝いできず申し訳ないです。
Posted by niL at 2014年06月02日 01:18
デバッグモードのSSG更新お疲れ様でした。
F12リセットを無効化したとのことですが、
ゲームによってはゲーム終了->タイトルでも発生しますが
それも無効化したのでしょうか?

XPやVXやVXAceでは
ON(True) = 0200000
OFF(false)= 00000000
nil = 04000000
で格納されていて

すり抜けやセーブ禁止等のフラグも上記の値で格納されていました。

また、VXの場合、該当アドレスの8バイト前から4バイトのバイト列が2回続けて存在しています。

(例)すり抜けONの場合
6A 2C 00 00 6A 2C 00 00 02 00 00 00

デバッグモードのフラグももこんな感じでモジュールの領域外のメモリ領域に格納されていてポインタをたどるのが面倒だからプログラムコードで対処されているのでしょうか?

追伸:
(主に)RPGツクールのゲームのSSGを投稿していく自分用(?)のスレを作成いたしました。全シリーズの汎用(標準仕様)の
SSGもそこに置いています。

http://www.necocan.info/supb2/x/topics.cgi?mode=res&no=19628
Posted by リック at 2014年06月04日 00:37
F12キーの無効化のみです。
ゲーム上でのリセットは駄目だと思います。


今回のはスクリプトでのフラグチェックを回避するために
プログラムをいじっています。

確かにこういった汎用システムだとポインタをたどるのは
非常に難しいので、できれば避けたいですね。
やるとしたら、以前グリーフシンドロームでやったような
プログラムをいじってポインタを空き領域に書き出して
そこを参照するような感じでしょうか。
Posted by niL at 2014年06月05日 01:07
すみません、突然なのですが海外のツクールでデバッグモード使いたいものが出ました。
当方あまり改造については詳しくなく、上記のコードをしてもエラーが出てしまいます。(既に開いてるプログラムがあるとかで・・・。)
なのでコードを教えてください、お願いします。
VXのRGSS202J.dllであることは確かなのですが・・・。
Posted by ラグナス at 2014年06月28日 22:44
>>ラグナスさん
最低でもゲームタイトルくらいは書かないと伝わりにくいと思いますよ。

仮にもし、Vitamin PlusならばここにあるSSGの
「(MName::RGSS202J.dll)」を「(MName::RGSS202E.dll)」に
置換すれば使えましたのでここで報告しておきます。(v1.6で確認)

もし使えなければRPGツクールVXのランタイムの再インストールをおすすめします。

>>nilさん
F12リセットの無効化のみですか。
F12リセットの無効化は別の意味で役に立つと思います。
F12リセットを使うとスタック関連のエラーが出るゲームがちらほらありますが(主にRPGツクールVX)、これを有効にすればうっかりF12を押しても大丈夫になりますね。

デバッグモードON時のF12リセットエラー完全回避は難しいみたいですね。SSGの場合はON/OFFができるのが幸いです。ON/OFFの状態に注意して扱うよりなさそうです。

最近のテストモード無効化はテストモードが起動するボタンを「なし」にしているものを見かけます。言い換えればテストモードに関する定義の中身を空っぽにしているとも言えますが。そういったものに対し対応することは可能なのでしょうか?

あと、余力があり、かつ可能ならば、獲得経験値n倍、獲得金n倍(シフト命令でも掛け算でも可)、アイテム必ずドロップをお願いしたいです。

P.S.
ついにRPGツクールVX Aceの標準仕様用のSSGにアイテムエディタを実装することが出来ました。中身見ても笑わないでください(笑)。
投稿先はPosted by リック at 2014年06月04日 00:37に記載のリンク先です。
Posted by リック at 2014年06月29日 00:23
いつもご苦労さまです。
VXとVX Aceのテストモードとバトルテストのフラグのアドレスの特定に成功しました。対策されると落ちるタイプなので実用性はなさそうなのでアドレスのみ。回避コードにおけるテストモードのみの分離化の参考になればと思い書き込ませていただきました。

//VX
//テストモード
[group]address_test
0x3B4B=>key;
[:(((MName::RGSS200J.dll)|(MName::RGSS202J.dll))+0x18B018):]=>tmp;
[:$tmp+0x04:]=>modulo;
($modulo!=0)*$modulo=>modulo1;$modulo==0=>modulo2;
$modulo1|$modulo2=>modulo;
($key%$modulo)*4=>cns;
[:$tmp+0x0C:]=>base;
[:$base+$cns:]=>tmp0;([:$tmp0:]==$key)=>mul0;
[:$tmp0+0x0C:]=>tmp1;([:$tmp1:]==$key)=>mul1;
[:$tmp1+0x0C:]=>tmp2;([:$tmp2:]==$key)=>mul2;
[:$tmp2+0x0C:]=>tmp3;([:$tmp3:]==$key)=>mul3;
[:$tmp3+0x0C:]=>tmp4;([:$tmp4:]==$key)=>mul4;
[:$tmp4+0x0C:]=>tmp5;([:$tmp5:]==$key)=>mul5;
[:$tmp5+0x0C:]=>tmp6;([:$tmp6:]==$key)=>mul6;
[:$tmp6+0x0C:]=>tmp7;([:$tmp7:]==$key)=>mul7;
[:$tmp7+0x0C:]=>tmp8;([:$tmp8:]==$key)=>mul8;
[:$tmp8+0x0C:]=>tmp9;([:$tmp9:]==$key)=>mul9;
($tmp0*$mul0)|($tmp1*$mul1)|($tmp2*$mul2)|($tmp3*$mul3)|($tmp4*$mul4)|($tmp5*$mul5)|($tmp6*$mul6)|($tmp7*$mul7)|($tmp8*$mul8)|($tmp9*$mul9)=>base;
[:[:$base+0x08:]+0x00:]+0x04
[/group]

//バトルテスト
[group]address_btest
0x3B53=>key;
[:(((MName::RGSS200J.dll)|(MName::RGSS202J.dll))+0x18B018):]=>tmp;
[:$tmp+0x04:]=>modulo;
($modulo!=0)*$modulo=>modulo1;$modulo==0=>modulo2;
$modulo1|$modulo2=>modulo;
($key%$modulo)*4=>cns;
[:$tmp+0x0C:]=>base;
[:$base+$cns:]=>tmp0;([:$tmp0:]==$key)=>mul0;
[:$tmp0+0x0C:]=>tmp1;([:$tmp1:]==$key)=>mul1;
[:$tmp1+0x0C:]=>tmp2;([:$tmp2:]==$key)=>mul2;
[:$tmp2+0x0C:]=>tmp3;([:$tmp3:]==$key)=>mul3;
[:$tmp3+0x0C:]=>tmp4;([:$tmp4:]==$key)=>mul4;
[:$tmp4+0x0C:]=>tmp5;([:$tmp5:]==$key)=>mul5;
[:$tmp5+0x0C:]=>tmp6;([:$tmp6:]==$key)=>mul6;
[:$tmp6+0x0C:]=>tmp7;([:$tmp7:]==$key)=>mul7;
[:$tmp7+0x0C:]=>tmp8;([:$tmp8:]==$key)=>mul8;
[:$tmp8+0x0C:]=>tmp9;([:$tmp9:]==$key)=>mul9;
($tmp0*$mul0)|($tmp1*$mul1)|($tmp2*$mul2)|($tmp3*$mul3)|($tmp4*$mul4)|($tmp5*$mul5)|($tmp6*$mul6)|($tmp7*$mul7)|($tmp8*$mul8)|($tmp9*$mul9)=>base;
[:[:$base+0x08:]+0x00:]+0x04
[/group]

//VX Ace
//テストモード
[group]address_test
0x3D23=>key;
[:(((MName::RGSS300.dll)|(MName::RGSS301.dll))+0x2AC044):]=>tmp;
[:$tmp+0x04:]=>modulo;
($modulo!=0)*$modulo=>modulo1;$modulo==0=>modulo2;
$modulo1|$modulo2=>modulo;
($key%$modulo)*4=>cns;
[:$tmp+0x0C:]=>base;
[:$base+$cns:]=>tmp0;([:$tmp0:]==$key)=>mul0;
[:$tmp0+0x0C:]=>tmp1;([:$tmp1:]==$key)=>mul1;
[:$tmp1+0x0C:]=>tmp2;([:$tmp2:]==$key)=>mul2;
[:$tmp2+0x0C:]=>tmp3;([:$tmp3:]==$key)=>mul3;
[:$tmp3+0x0C:]=>tmp4;([:$tmp4:]==$key)=>mul4;
[:$tmp4+0x0C:]=>tmp5;([:$tmp5:]==$key)=>mul5;
[:$tmp5+0x0C:]=>tmp6;([:$tmp6:]==$key)=>mul6;
[:$tmp6+0x0C:]=>tmp7;([:$tmp7:]==$key)=>mul7;
[:$tmp7+0x0C:]=>tmp8;([:$tmp8:]==$key)=>mul8;
[:$tmp8+0x0C:]=>tmp9;([:$tmp9:]==$key)=>mul9;
($tmp0*$mul0)|($tmp1*$mul1)|($tmp2*$mul2)|($tmp3*$mul3)|($tmp4*$mul4)|($tmp5*$mul5)|($tmp6*$mul6)|($tmp7*$mul7)|($tmp8*$mul8)|($tmp9*$mul9)=>base;
[:[:$base+0x08:]+0x00:]+0x04
[/group]

//バトルテスト
[group]address_btest
0x3D2B=>key;
[:(((MName::RGSS300.dll)|(MName::RGSS301.dll))+0x2AC044):]=>tmp;
[:$tmp+0x04:]=>modulo;
($modulo!=0)*$modulo=>modulo1;$modulo==0=>modulo2;
$modulo1|$modulo2=>modulo;
($key%$modulo)*4=>cns;
[:$tmp+0x0C:]=>base;
[:$base+$cns:]=>tmp0;([:$tmp0:]==$key)=>mul0;
[:$tmp0+0x0C:]=>tmp1;([:$tmp1:]==$key)=>mul1;
[:$tmp1+0x0C:]=>tmp2;([:$tmp2:]==$key)=>mul2;
[:$tmp2+0x0C:]=>tmp3;([:$tmp3:]==$key)=>mul3;
[:$tmp3+0x0C:]=>tmp4;([:$tmp4:]==$key)=>mul4;
[:$tmp4+0x0C:]=>tmp5;([:$tmp5:]==$key)=>mul5;
[:$tmp5+0x0C:]=>tmp6;([:$tmp6:]==$key)=>mul6;
[:$tmp6+0x0C:]=>tmp7;([:$tmp7:]==$key)=>mul7;
[:$tmp7+0x0C:]=>tmp8;([:$tmp8:]==$key)=>mul8;
[:$tmp8+0x0C:]=>tmp9;([:$tmp9:]==$key)=>mul9;
($tmp0*$mul0)|($tmp1*$mul1)|($tmp2*$mul2)|($tmp3*$mul3)|($tmp4*$mul4)|($tmp5*$mul5)|($tmp6*$mul6)|($tmp7*$mul7)|($tmp8*$mul8)|($tmp9*$mul9)=>base;
[:[:$base+0x08:]+0x00:]+0x04
[/group]
Posted by リック at 2014年08月30日 11:55
貴方に感謝します!!
Posted by とくめぇ〜 at 2014年11月20日 21:41
まじでリックさんは神だな
何年も一方的にお世話になってます
Posted by パル at 2014年12月13日 18:26
サイトを見て興味が湧き連絡しました
もし
スマホゲーム
ドラゴンポーカーに可能でしたら有料で構わないので
ご指導頂けましたらうれしいです
Posted by マキマコト at 2015年08月11日 19:56
猫缶が閉鎖してしまっているためssgをDLすることができません。
以前に利用させていただいて非常に便利だったため今一度手元にほしいのですが、別所で再配布とかないですかね?
身勝手な申し出で申し訳ないですがお願いします!
Posted by よくいる村人 at 2015年11月01日 00:06
>>よくいる村人さん
別サイト(と言うかブログ)で配布中です。
2つサイトがありますが無難な方のリンクを貼っておきます。
「一般向け同人RPG改造館」
http://www.dojin-rpg-cheat.com/
Posted by RICK at 2015年12月09日 02:51
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

×

この広告は1年以上新しい記事の投稿がないブログに表示されております。