2017年10月03日

SAM氏のとこのコメント&drab氏の記事


別に新しいことはしてない
ブログにもあるようにL霊夢の1.90はDEP回避してloadlibrary呼び出してる

以前からやりたいとは思ってたんだけど、DLL作成に難儀してたのが解決したから記事にした

プロセス系にはまだ詳しくないからなんとも言えないけど、
loadlibraryの実行先が0x49F12CにあったようにVirtualProtectのアドレスもないか探してみたけど、無さそうな感じ

今のところDLL使わずにアセンブラで十分な気がする

もっと複雑なことやるなら別だけどね
posted by めろんピエロ at 01:01| Comment(0) | MUGEN | このブログの読者になる | 更新情報をチェックする

2017年10月01日

DLLを呼んでコード実行

色々試行錯誤を繰り返して遂に出来るようになった
手法は
loadlibraryを実行するコードを%fで実行して自分のキャラフォルダ内のdllをリンクさせる

今回書いたdll(DllMain)の実行内容は
・winmugen.exeのパスを取得
・system関数でカレントディレクトリをwinmugenへのパスに変更
・system関数で自分のキャラフォルダ内にあるbatファイルを動かしてkfm vs kfmの対戦モードのwinmugen.exeを新たに起動

こんな感じ

drab氏が言ってたように、自分でdllを作れるならそれを試合開始時にリンクして適宜使いたい関数を呼び出す方が楽なのかな

VirtualProtectとかも使えそう

現時点での問題は「自作dll内の関数を呼ぶにはどうすればいいのか」ってところ

GetProcAddressとか使えばいいのか?
この辺はまだ勉強不足
posted by めろんピエロ at 00:49| Comment(0) | MUGEN | このブログの読者になる | 更新情報をチェックする

2017年09月17日

潜入しない探査その2

非潜入探査のコードは大体組み終わった
とりあえず
総def数
def番号
総ステコン数
defオプションのmovetype=の値
主要なステコンの存在確認
を調査することにした

G-Test 10p normal(未使用捜索-即死返し)
の即死ステもちゃんと取得できてたし、実用に足る(強すぎる?)性能ではあると思う

あとはそのステコンのvalue=も調べたいけど、コード書くのが面倒

とりあえず処理に組み込んでおこうかな
posted by めろんピエロ at 12:23| Comment(0) | MUGEN | このブログの読者になる | 更新情報をチェックする

2017年08月27日

適当な補足説明

書いたはいいんだけど、流石にコード・メモリ系の知識がない人には理解不能だと思うから追加の解説

AIファイルの定義から
defファイル上で
ai=xxx
みたいに登録したファイルのこと
kfmではkfm.aiがこれに当たる

kfm.aiをメモ帳で開くと最初のElecbyteAIBって文字以外は何が書いてあるかさっぱりわからないと思う

新MUGENは知らないけど、winmugenではaiファイルを登録しても動作には全く影響しないと思われる

そもそも読み込まれてるのかすら怪しいレベルだったんだけど、
Mapelao氏に「kfmで試合した後、MUGENを終了するとkfm.aiが更新されてる」って言われたのが解析を始めたきっかけ

実際に調べてみると確かに読み込まれてメモリに展開されてるし、いくつかのタイミングでファイルの更新も行われてることが判明した

じゃあ、その更新内容を自分で弄ることができたならラウンド毎ではなく試合毎に学習するAIの作成に役立つのでは???

%nや親捏造、コード実行を行えば任意のアドレスに任意の値を代入することが可能だし、幸い更新内容のアドレスはある関係の特定位置に必ずあることがわかった

というわけでその更新内容を弄るコードを作ったって感じ

流石に自分のcnsを自己改変して組み直すってのは不可能なので、利用方法としては試合結果や行動の結果を保存するってタイプになりそう

使い方はこれからまだ模索するつもり
うまい使い方が浮かんだらまたブログに書こうかな

わかんないことがあったらいつでも聞いてください〜
posted by めろんピエロ at 22:04| Comment(0) | MUGEN | このブログの読者になる | 更新情報をチェックする

AIファイルに関する報告書を公開

しました
DLはリンクから

この仕組みで自己進化的なキャラの製作、変数領域としての使用、ファイル書き換えなどの隔離技術がさらに発展するかもね

素晴らし〜い
posted by めろんピエロ at 21:20| Comment(0) | MUGEN | このブログの読者になる | 更新情報をチェックする

2017年08月26日

AIファイル

defにai=kfm.aiみたいな記述を加えるとAIファイルを登録することができる

実はこのファイル、どうやらあるタイミングで書き換えられているみたいで

調べたところ、書き換えタイミングは
キャラを選択した後、試合中にShift+F4
該当キャラで試合を終えた後、別のキャラで試合を開始
該当キャラで試合を終えた後、MUGENを終了させる
こんな感じ

なら、メモリ上の何処かにあるAIファイルの値を書き換えてやれば任意の値を.aiのファイルに保存できるのでは?ってなった

てなわけで値のありかを探す
結果、[char]+3D8に登録したAIファイルの名前が書かれてて、さらに後の方には登録ファイルの内容に繋がるアドレスも発見できた

その内容を書き換えれば上記のタイミングでAIファイルが上書きされることも確認

ただ、書き換え方次第では落ちるっぽいからそこは要調査かな

でもこれで試合ごとに進化するキャラを実現しやすくなるとは思うからすごく楽しみ
posted by めろんピエロ at 01:53| Comment(0) | MUGEN | このブログの読者になる | 更新情報をチェックする

2017年08月25日

潜入しない探査

アドレスを見た有効ステートかどうかの判断 - Statedef 5150

この探査搭載してるキャラなんておったんか…
残像Power参照の頃は参照先変えるのが怠かったから敬遠してたけど、コード実行が%fで軽く実行できるようになったから搭載してみる価値ありそう

ステコン詳細配列のアドレス位置も自分で調べたのと同じかな

アドレス位置とステコン種別IDだけ教えられても調べる記述書けない人は多い気がする

トリガーも調べようも思えば調べられるし、valueに指定されてるトリガー情報もわかるからこの探査便利だな…
posted by めろんピエロ at 18:32| Comment(0) | MUGEN | このブログの読者になる | 更新情報をチェックする

2017年08月19日

地味に便利になった(追記あり)

DTCのテキスト内で%cで00(NUL)を使ってもコードが途切れないことが判明したので、過去記事で「参照先上位1byteが0の時〜」のようなフラグは必要なくなりました

今度時間があればそれに対応した任意代入コードも作ろうかと思います

追記
%cで0指定可能になったのは嬉しいんだけど
かわりに%%fが使えなくなったせいでparamsの枠を一つ%f用に確保しなきゃいけなくなった
よって他の用途にも使えるフラグ枠を消さざるを得なくなったのが痛手
posted by めろんピエロ at 23:40| Comment(0) | MUGEN | このブログの読者になる | 更新情報をチェックする

2017年08月18日

MUGEN起動時にハックしたい(追記あり)

ちょいちょい調べてるんだけど、全く糸口がつかめない

とりあえずsffのポトレでなんか攻撃できねーかなーと思ってはいるんだけど…

絶対何処かでヒープに乗っけてるだろうからうまくバッファオバフロにつなげられればなぁ

追記
drab氏によると起動時攻撃はdefファイルに細工して行うタイプが結構前に成功してたそうです
ただXP限定なのが痛い

sffの読み込みに関係するcall先は
40DC8B CALL 00454C10
で行われてることは判明したけど、中々処理を追えないなぁ
posted by めろんピエロ at 03:15| Comment(0) | MUGEN | このブログの読者になる | 更新情報をチェックする

2017年08月12日

drab氏の記事(追記あり)


文字数によって不具合が出るのはテンプレ出した当時からわかってたけど、
今までのDTCtextコードと似たような使い方をするためにはここのアドレスかスタックポインタ乗っけるしかなかったからなぁ

(あと正直、改善策が後々出てくることを期待して適当に作ったところはある)

私は残像先のアドレス使ってコード実行するテンプレもあるから別にあまり困ってない(コードの長さの制限はあるけど)

%f・%e・%gでも利用可能なのはコード読めばわかるわな

他にコード埋め込める場所で楽なのあったっけ?
変数/残像/DTCtextくらいしか浮かばんわ

追記
熄氏によってtext出力地点のespを実行先に指定すれば安全(?)に1ステコン実行ができるようになりました
posted by めろんピエロ at 13:46| Comment(0) | MUGEN | このブログの読者になる | 更新情報をチェックする