2017年04月23日

最近

最近やったこと

残像と併用したらステコン数増えちゃうのでコピペ可能な変数仕様型1ステコードを組んだ
それだけかなー

だんだんとMUGENのやる気がなくなりつつある…一通さん作りたいとは思ってるのに手が進まんなー

そういえばdrab氏が%hnを見つけたそうですね、あれは便利そう

私も%Zの処理解析をしてたんですが途中で詰まったから放置してる…
誰か解析して(他力本願)
posted by めろんピエロ at 10:03| Comment(0) | MUGEN | このブログの読者になる | 更新情報をチェックする

2017年04月09日

捏造補助親変更

親捏造でparentvarset利用するの面倒じゃない?
というか親捏造自体が時代遅れ

​それは置いといて、parentvarset使うよりは別途アドレス取得しといて%nで弄ったほうが効率いいよね

ちなみに方法は
本体化
影のid調整
親アドレス修復
rootアドレス修復
ヘルパー化
だったかな

もっと効率いいのはafterimagetimeとpowersetで影のidだけ弄る方法かなー
まあ特に説明もいらないでしょ

結論:コードでやって

posted by めろんピエロ at 18:42| Comment(0) | MUGEN | このブログの読者になる | 更新情報をチェックする

2017年03月26日

残像併用コード実行の注意点

今までコード実行後にP+1394(残像アドレス)の中身を0にしていたんですが、コード実行を連発する時に落ちることが発覚したので修正案をば
どうやら残像はパラメータのtimeが0だと表示されないみたいなので、コード代入の残像のtimeを0にするかafterimagetimeでtime=0にすれば安全に終了出来そうです
posted by めろんピエロ at 15:21| Comment(0) | MUGEN | このブログの読者になる | 更新情報をチェックする

2017年03月04日

コード実行をまた改良(追記あり)

よく考えたらわざわざ毎回DTCのtextでコードを文字コード変換してバイナリエディタで入力するよりも、最初に自己アドレスだけ取得して%sで引数を変数領域にして変数をコードに見立てた方が楽やわ

敵でもアドレスさえわかってればできるし

文字コード変換の問題点って、メモ帳とかで保存するとコードが崩れちゃうことなのよね
それを解決できる方法の一つはこれかなー、と

ここから追記
この手法、意外と変数領域が必要だし、敵の変数弄りたくないならバックアップ必要って事が判明した
そしてこれ残像利用でいいや
posted by めろんピエロ at 20:13| Comment(0) | MUGEN | このブログの読者になる | 更新情報をチェックする

2017年02月24日

飛び道具完全反射再現したい@

自分のアーマーに当たったprojを敵にそのまま返すシステムを作りたいなと
projメモリの位置はわかってるので、懸念としては
・自分に当たったprojの判別
・どうやって「そのまま」反射するのか
がある

まず一つ目のproj判別から
自分に当たったprojを引数として参照出来ればよかったんだけども、そんなトリガー情報はなさそう
gethitvar()で情報を取得した後に存在するprojと比較して判別するというのを思いついたが、多段ヒットに対応できなさそうなのでちょっと微妙

次に考えたのは敵のnumprojid()の引数を検索、保存しておいて、毎フレームprojcontacttime()で参照する
これなら多段ヒットにも対応できる(誤感知する?)
毎フレーム全projを参照してるので重くはなるかもしれんが、大したことは無いと信じたい

てなわけでこれから感知システムを組む予定
2番目の懸念に関してはまた他の記事で
posted by めろんピエロ at 23:23| Comment(0) | MUGEN | このブログの読者になる | 更新情報をチェックする

2017年02月20日

DEP回避したい(素案)

DEPを回避してコードを実行したい

DEPとは・・・コード実行可能領域でない場所でコードを実行した時にプログラムを強制終了するオプション(デフォルトはオフ)

これがあるとスタックやヒープでコードが使えなくなるので
・先日のスタック内コード
・4B0000周辺のコード
・自分の変数領域でのコード
とかもダメ

回避するにはdrab氏が既にやっているように、既存のコードでちょうどいいのを使ってLoadlibraryを呼ぶ
そして事前に用意したdllを読み込ませてコード実行する
詳しくはdrab氏のブログを見てください

で、他にもないかなーと考えたら
・VirtualProtectを呼ぶ
・VirtualAllocとかを呼ぶ

前者は指定した領域の保護種類を変更するというもの
これを使えば任意の領域をコード実行可能領域に変更できるのでDEPに引っかからなくなる

後者は新たにメモリ領域を確保するというもので、その際に好きな保護種類を選択できる

どちらの関数もメモリ上に展開はしてあるのできちんとした引数を積んだ上でそこに飛べば実行可能
ここで問題なのがきちんとした引数を積むこと

スタックに積まなきゃならん以上、スタックをある程度書き換えられなくてはならない
私が知ってる中でスタックを広範囲に書き換えられるのはdisplaytoclipboard(あとappendtoclipboard)しかない

DTCを実行してスタックを書き換えた後に関数を呼ぶ必要があるのでespを自分が任意に書き換えられる位置に変更する必要がある
既存のコードで
add esp,38
RETN
があったのでスタックバッファオバフロでRETN先を書き換えた上で38byte先のスタックを関数の引数とRETN先に書き換える
自分の環境だと38byte先は自分の出力したDTCtextの文字列があった(たぶん環境差はないと思う)のでそこの位置に当たるように文字を指定した

これで関数は呼べるようになったのだが、更に問題点があって
「引数に0がある」
こと

DTCでは文字列の終端判別にヌル文字を使っているので、textに00を入れてしまうとその後は出力されない

現状そこで詰まってて、解決するには既存のコード利用するしかないんだけど...
果たしてあるのだろうか

参考までに、VirtualProtectの引数は4種類

@保護の種類を変える領域の先頭アドレス
A何byte分変更するのか
B変えた後の保護の種類
C以前の保護の種類が入っている変数へのポインタ

まず、@とCについて
変更する領域が4B0000とかなら少なくとも4byte目に00が確実に入ってしまう
それより高位ならなんとかなるかも

次にA
ここは適当でいいと思う

最後にB
変更するのはPAGE_EXECUTE_READWRITEなので引数は0x40
確実に0が入っちゃうので困る

うまいことpushしてくれるコードがあればいいんだけど...

間違ってるかもしれないので何かあったら教えていただけると幸いです

posted by めろんピエロ at 01:19| Comment(0) | MUGEN | このブログの読者になる | 更新情報をチェックする

2017年02月19日

前記事の続き

var(0)に参照先のアドレス
var(1)に代入先のアドレス
を事前にセットしておいた上で、
前記事の技術を使うとアドレスがわかってる任意の位置で代入や参照が出来るようになった

変数は2個使わざるを得ないけど、1ステコンで参照と後ろ巻き込み無しの代入ができるんだったらデメリットなんてないようなもの

今まではpowerで参照してたんだけど、この方式に変えてみる価値もあるかもしれない
posted by めろんピエロ at 15:23| Comment(0) | MUGEN | このブログの読者になる | 更新情報をチェックする

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 | このブログの読者になる | 更新情報をチェックする