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