制作日記

こういうの作った方が、逃げにくいじゃない

トップ

トップ
※申し訳ないですが、メールでの返信は出来ません。

DTCリターンアドレス改竄テストキャラ(ver0.7xとは別物です)
_reimu_ver181.ico

ESC利用、凍結無しヌルヌル、テストキャラ
_reimu_ver130.ico
↑の記述ミス直して、ついでに親捏造搭載したキャラ
_reimu_ver143.ico

暇つぶしに作ってみた、全領域親変更、邪眼、色々maker 最終更新 2013/05/04
nullver4_4.ico

GUI非対応、CUIソフトなのでコマンドプロンプトから実行して下さい
ダブルクリックして実行しても、全領域親変更生成しか出来ません

MUGEN用プロセスメモリリーダ、memRead 最終更新 2013/11/17
memRead.ico

色々maker同様、CUIアプリです
こっちは、普通にアイコンをダブルクリックでも起動できます

リンクを右クリックして、「対象をファイルに保存」からダウンロード
ファイルの拡張子をrarに変えてから解凍してください

MUGENステコン入力支援マクロ
入力補完、短縮表記機能有り版(取説)
stateControl_2.js
入力補完、短縮表記機能なし版
stateControl_1.js
使い方とかはjsの先頭に書いてあるので、メモ帳で開くなりして読んでください

バグ報告等々コメントして頂けると助かります
公開物とそれらに関する情報の利用は、内容に依らず自由にして頂いて問題ないです

過去verは続きへ追いやられました

続きを読む

プレイヤーIDとか領域IDとか

http://samsara01.blog.fc2.com/blog-entry-16791.html

手元にMUGENないから、おぼろげな記憶で書くけど

領域IDって、プレイヤーの情報の先頭の辺りに入ってるプレイヤーIDじゃない方の番号のことだと思うけど、
あれの特定って、どうやってプレイヤーアドレス取得してるかにもよるけど
単純にリストの何番目からそのプレイヤーアドレス取ってきたのよってだけだから
元々入ってた値を直接取得しなくても、計算できるよね?

プレイヤーアドレスの一覧があって、あのリストというか配列は
本当はP1の一つ手前から始まってて、NULL(0)が入ってるわけだ
そこが要素番号0、次のP1が要素番号1で領域IDも1でしょ、確か
違ったっけ?

ユースケースがわからんから、それで解決できるかどうかは知らんけど

デバッグモード

[0x4b5b4c]+0xc520がdebug
[0x4b5b4c]+0xc524がallowdebugmode
[0x4b5b4c]+0xc528がallowdebugkey

[0x4b5b4c]+0xc518で
debug=1と
debuf=0,allowdebugmode=1を区別

MUGENの解析手段としての8086なんて、
PUSH、POP、MOV、CALL、ADD、RET、CMP、TEST、XOR、LEA
あとはJMP系が分かれば十分だと思うんですけどねー

自分もバグ解析で読むだけだし、armと8086しか知らんけど
初めてarm見た時の何コレ感と比べたら8086は大分マシ



* Possible string reference 4AF800h "Debug"
|
00481247 6800F84A00 push 004AF800h
0048124C 53 push ebx
0048124D E8DE240000 call 00483730h
00481252 83C414 add esp, 14h
00481255 83F8FF cmp eax, FFFFFFFFh
00481258 0F84A6000000 je 00481304h
0048125E 8B0D4C5B4B00 mov ecx, [004B5B4Ch]
00481264 81C120C50000 add ecx, 0000C520h
0048126A 51 push ecx

* Possible string reference 4AF808h "debug"
|
0048126B 6808F84A00 push 004AF808h
00481270 53 push ebx
00481271 E80A2C0000 call 00483E80h
00481276 8B154C5B4B00 mov edx, [004B5B4Ch]
0048127C 81C224C50000 add edx, 0000C524h
00481282 52 push edx

* Possible string reference 4AF810h "allowdebugmode"
|
00481283 6810F84A00 push 004AF810h
00481288 53 push ebx
00481289 E8F22B0000 call 00483E80h
0048128E A14C5B4B00 mov eax, [004B5B4Ch]
00481293 0528C50000 add eax, 0000C528h
00481298 50 push eax

* Possible string reference 4AF820h "allowdebugkeys"
|
00481299 6820F84A00 push 004AF820h
0048129E 53 push ebx
0048129F E8DC2B0000 call 00483E80h
004812A4 A14C5B4B00 mov eax, [004B5B4Ch]
004812A9 83C424 add esp, 24h
004812AC 8B8820C50000 mov ecx, [eax+0000C520h]
004812B2 85C9 test ecx, ecx
004812B4 7421 jz 004812D7h

gametime固定

手元にMUGENがないから、記憶と下記記事から
http://drabs.blog40.fc2.com/blog-entry-1385.html

必要なとこだけ抜粋
movetypeがAのプレイヤー ステート処理
 ↓
残りのプレイヤー ステート処理
 ↓
全新規ヘルパー ステート処理
 ↓
上処理で新規ヘルパーが発生した場合、上処理へ戻る

ステート処理を行うプレイヤーの選別方法概要
基本的には、
[0x4B5B4C]+0xB950(存在しているプレイヤーの最少番号)から
[0x4B5B4C]+0xB954(存在しているプレイヤーの最大番号)まで、
[0x4B5B4C]+0xB750(全プレイヤーのアドレスリスト)を参照して一人ずつ処理。
行動済みかどうかはプレイヤー個別のgametimeと本来のgametimeを比較して判断。
ステート処理が終わったプレイヤーのgametimeを更新し、movetypeがAのプレイヤーの再行動を防止する。

新規ヘルパーのステート処理は全プレイヤー処理をループさせている。
新規ヘルパーの有無は[0x4B5B4C]+0xBB64(ヘルパー召喚フラグ)で行い、
ループ開始時にこれを初期化、ループ終了時にフラグが立っていれば再度処理、
フラグが立っていなければ、ループ終了。


つまるところ、
1.全プレイヤー見て行って、movetypeがAならステート処理
2.そいつのgametime更新
3.全プレイヤー見て行って、gametime的に行動前なら、ステート処理
ヘルパー召喚してたら、フラグ立てる
そいつのgametime更新
4.ヘルパー召喚フラグ立ってなかったら、終わり
5.ヘルパー召喚フラグ落として、3に戻る

gametime固定しても、1の段階で各プレイヤーのgametime調整すればどうにかなるんじゃね
3で調整してヘルパー召喚するとか、最終ヘルパーで調整するとか

他にプレイヤーのステート処理を制御する要因がないこと前提やけど

常時監視無効化

というか、特定ステート無効化の話

結論から言えば、
ねつ造では厳しい、コード実行なら
L霊夢の0.7xあたりで似たことやってるから、改造すれば良いんじゃね?

以下、手元にMUGENとかがないから記憶で詳細解説
常時監視って言っても、ほかのステートと扱いは変わらない
ただ、ステート番号が負数なだけ、データ上はその他に差異はないはず
無理やり個別ステートで実行させればpersistentとかも動作する

じゃーどうするかってなると、ステート番号とステートの内容(へのポインタ)はそれぞれ配列持ってて
そこに記録してるステート番号を適当な負数に書き換えるしかない
L霊夢で全ステートに対してそれをやってた、だから相手を消したりせずに無力化できてた

ステート番号の配列は1要素が16バイトだったかな?
配列の番号、ステート番号、有効か否かのフラグ、あともう一つ何か
フラグ弄っても行けそうだけど、あれは配列の終端判断用だった気がする
だから、1つ無効にするとそれ以降の配列要素も全部無効になったはず
だから、たぶんフラグ書き換えでは無理

ほかの方法として-1を存在させつつ無効化するのなら
ステコンの数を0に書き換えるか
ステコン毎にある有効/無効のフラグを全部無効にするか
前者は0にしても大丈夫かどうかがわからん、やり方次第だろうけど大丈夫だと思う

そこらへんが具体的にどういう構造にになってるかは、memReadのソース見れ
公開してる分に書くステートのステコン羅列までは入ってたよね?
triggerとかもちょっとややこしいだけで基本的には同じ雰囲気で解析できる
memReadへの実装は途中までやって面倒になって放置してるけど

以下、話は飛んでツールについて
DOS窓で使えるってのは、ツールとしては利点だと思うのよね
せっかくのCLIツールなのに、D&Dでしか使えないとかどうにかした方が良い
iniファイルの読み込みとか、GetPrivateProfileString用の絶対パス取得で躓くのかもしれんけどさ
cns整形ツールとか、いちいちD&Dするよりbatファイルから起動する方が楽でしょ

自分もオプションの解析とかかなり適当だし、人のこと言えんけど

改行コードでCRに対応ってのも意味わからんのよね
その改行コードってmacぐらいでしょ
しかもBSDベースのOS X以降はLFに変わってる
つまるところ、CRが改行コードの環境なんてwindows用ツールで考慮する必要一切なし

取説とかも仕様は明確に書いた方がええよ、目的と仕様は別物やで
一緒くたにせず明確に書いてくれんと、挙動がおかしいと思っても不具合なのか仕様なのかわからん
そのツールが絶対必要でもない限り、わざわざ微妙な報告するのも面倒だし使うの止めるだけ
不具合か否かはっきり分かるようにして頂戴
プロフィール

Author:drab
霊夢改変キャラ
「12 3 ! {V} [_]」
公開中
L霊夢でもl_reimuでも好きなように読んでください

最新記事
最新コメント
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク