2017年02月18日

name依存なしでコード実行

DTCの1037~1040にはDTC出力の先頭アドレスが積まれてるので、そこにRETNアドレスが来るようにすればスタックのDTCtext内でコードを実行できる
てなわけで、espを+8してRETNする既存のコードを探してみた

いくつかのコードが見つかったのでそのうちの一つを1025~1028に代入してRETN先を差し替え、スタックでコード実行できるようにした
ちなみにスタック上ですべて実行するには%cの補助枠が足りないのでやっぱり残像を使うことに
→バイナリエディタで入力することによって00以外の文字を出力出来ることが分かったので%cと残像は必要なくなりました

他の製作者さんのMUGENでも成功したので環境差はないはず...

これでPアド取得がかなり捗りそう
頼むから変なバグとか出ないで欲しいところ
posted by メロンピエロ at 06:25| Comment(0) | MUGEN | このブログの読者になる | 更新情報をチェックする

2017年02月15日

残像は有能(雑記)

afterimageって実際かなり有能よね
1.コードとかの数値代入を広範囲にできる
2.afterimagetimeでピンポイントにも弄れる
3.オバステで参照先変更可能
4.リセットは該当箇所を0にするだけ
5.新MUGENでも多分使える

これだけいろんなことに使えるステコンもそうそう無いのでは
...DTCは別の意味で有能だけども

bindtoとpowerも併用すればコードなくてもなんとかなるレベルやし
posted by メロンピエロ at 10:08| Comment(0) | MUGEN | このブログの読者になる | 更新情報をチェックする

name+DTCtext+残像でコード実行(追記あり)

2/16追記
重大な欠点を発見したので

nameアドレスの1~3byte目が0だと出力が途中で止まってしまうので変なところにcallして落ちる可能性があります

確率は低いですが一応

2/17追記
%4sじゃ4文字出力できませんでした
正しくは%.4sです

追記おわり


スタックには本体のアドレスが保存してあるので%%.4sでそのアドレスをDTCスタックの1025~1028番目に出力する
1025~1028番目には元々RETN先のアドレスが入っていたのでそこの数値([char+0])に飛んでコードを実行できる
この場合は自分のnameがコードとなって実行されるのでそのnameを有意の文字列にすればやりたい放題

ただ、実際にやってみて問題となったのはコードを文字に起こすのが難しいということ
ヌル文字やシステム管理部分の文字は使えないのに加えて、文字が割り当てられていない数値だとnameに取れないのであまり複雑なコードを実行できなかった

そこでnameのコードは出来るだけ最小限にして、別の箇所でコードを実行できる場所を探すことになった

まず考えたのはスタック内にあるDTCのtext
ここなら最大5文字まで%cで好きな文字を出力できる(ヌル文字や%とか以外)
つまり「文字に起こせない数値」でも%cなら出力できる

これなら行けそうかな、と思ってやってみたところ
コードの全てを実行するには%cで補助してもまだ足りないほどの「文字に起こせない数値」が出てきてしまった

そこで、DTCのtext部分を経由してさらに別の箇所に飛ぶことにした

そして思いついたのが残像
ここなら事前にafterimageを実行して、パラメータにコードを埋め込んでおけばどうにかしてそこに飛びさえすれば好きなコードを実行できる

これを使ったら
1.nameでコード実行
2.DTCのtextでコード実行
3.残像のパラメータでコード実行

ステコン数にしてわずか4つ
(コード用の残像とDTC、代入先指定でhitfallset、残像アドレス修復用のDTC)
で自己アドレスを取得できるようになった

nameを任意のものにしておく必要があるのでname変えたくない人にはオススメできないけど、それなりに実用性があるものに仕上がったかなと

暇があったらテンプレみたいなものを公開するかもしれません...時間があれば...
posted by メロンピエロ at 01:12| Comment(0) | MUGEN | このブログの読者になる | 更新情報をチェックする