制作日記

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

トップ

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

DEP回避して任意コード実行
_reimu_ver191.ico

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は続きへ追いやられました

続きを読む

allegro

mugenで使ってるallegroのライブラリalleg40.dllはmugen-hiに同梱されてるの使ってるけど
試しにallegro公式サイトからソース持ってきて自前でビルドしてみた
ビルド環境はcygwin+mingw(i686-w64-mingw32)
古すぎてビルド通すのも一苦労
特に何か効果があったわけではないけど、patch公開しとく

allegro_patch.ico

手順
$ wget http://download.gna.org/allegro/allegro/4.0.3/allegro-4.0.3.tar.gz
$ wget http://blog-imgs-104.fc2.com/d/r/a/drabs/allegro_patch.ico
$ rm -rf allegro-4.0.3 && tar xf allegro-4.0.3.tar.gz
$ cd allegro-4.0.3
$ ./fix.sh mingw32
$ patch -p0 < ../allegro_patch.ico
$ make
makeはdemo.exeのビルドでこけるけど、この時点でalleg40.dllはビルド終わってるから問題なし

以下、ビルド通るまでの紆余曲折
サイト:http://liballeg.org/
Older vbersionから4.0.3持ってくる
4.0.0でもいいけどpatch当たらない
はじめは4.0.0でビルド通してpatch作って、その後4.0.3用にpatch作り直したから
4.0.3と同じように修正すればビルドは通る

適当なとこに解凍して
allegro-4.0.x\docs\build\mingw32.txt
の Setting up Cygwin to build Allegro
に従って設定していく

dx70_mgw.zip持ってくるのは飛ばした、VC入れてるし無視
入れようと思ったけど止めた、誰か頑張れ
http://download.gna.org/allegro/files/dx70_mgw.zip

makefileでtoolchainをgccとか直で叩いてるから、適当にmingwに書き換え
あとは、ビルドオプションとか諸々をその場しのぎで修正
ソースも一部こけるから修正
それでもこけるとこを、色々試しつつ無難かつお手軽な方法で修正

で、とりあえずビルド通ってmugen起動するとget_dx_verないって怒られる
munge-hiに同梱されてるalleg40.dllはget_dx_verをエクスポートしてるっぽい?
というわけで、lib/mingw32/allegro.defにget_dx_ver追加してmugenとリンクできるようにエクスポートしてやる
これでリンクは成功するけど、次はDXのversionで怒られて起動できない
面倒だから固定値で0x800を返すように変更

長さ修飾子

man page読んでたら目に入ったんやけど
printfの長さ修飾子、あれhでshortやけど%nにも有効なんやな
msdnでは%nに有効とは書いてないけど試してみたら使えた
%nなんて普通の開発で使わんし、これは知らんかった

つーわけで、%hnで書き込みサイズを2byteに制限できるやん
コードなしでも親変更3byte分までは安全に軽量化できるやん
C99ならhhも使えたんやけどな
MSはVCをC99準拠させるつもりないから仕方ないね

見た感じ1byte書き込みは無理、2 or 4 byteのみ
00496C98  |. EB 35          |JMP SHORT winmugen.00496CCF
00496C9A |> 8D45 10 |LEA EAX,DWORD PTR SS:[EBP+10] ; Case 6E ('n') of switch 004969C5
00496C9D |. 50 |PUSH EAX
00496C9E |. E8 1B030000 |CALL winmugen.00496FBE
00496CA3 |. F645 FC 20 |TEST BYTE PTR SS:[EBP-4],20
00496CA7 |. 59 |POP ECX
00496CA8 |. 74 09 |JE SHORT winmugen.00496CB3
00496CAA |. 66:8B4D EC |MOV CX,WORD PTR SS:[EBP-14]
00496CAE |. 66:8908 |MOV WORD PTR DS:[EAX],CX
00496CB1 |. EB 05 |JMP SHORT winmugen.00496CB8
00496CB3 |> 8B4D EC |MOV ECX,DWORD PTR SS:[EBP-14]
00496CB6 |. 8908 |MOV DWORD PTR DS:[EAX],ECX
00496CB8 |> C745 D8 010000>|MOV DWORD PTR SS:[EBP-28],1
00496CBF |. E9 23020000 |JMP winmugen.00496EE7

雑記

DTCのオバフロの変数化

オバフロは書式指定子展開後の話やし、これでええやん
[state ]
type = DisplayToClipboard
text="%1024c%c%c%c"
params = 108,74,64,75

lea命令の存在意義
フラグレジスタが変わらない
あとはアドレス取るのなんてよくやることだし、少しでもクロック数少なくしたかったんやろ
他の命令で実現できるかどうかは、代替手段を用意しない理由にはならんし
アドレスのロードとmov、add、subみたいな数値計算ではやってることの意味合いが違う

雑記

追記
なんか他でも書いた気がしないでもないが、もうちょい丁寧に書くわ

stetedefのラベル名を読み込む領域がスタック上に一定量しか用意しないことを利用して
ラベル名をそれ以上の長さにすることでオーバーフローを発生させる
この時点でcnsがヒープに展開済みで、そのアドレスはスタック上に存在している
RET命令を実行したときにそこがリターンアドレスになるような
良い感じにesp弄ってRET叩くコードが既存のコード中に存在するので
オーバーフローでリターンアドレスをそこに差し替えると
そこに飛んで良い感じにespが弄られて、RETでcnsに埋め込んだコードに飛ぶ
あと、試合中のコード実行と違って、オーバーフローするのはサブスレッドだった気がするわ

正直、ステコン介さずコード埋め込むなら、cnsにこだわる必要性を感じない
自前のライブラリかexe動かせばええやん、そっちのほうが自由よ?

追記ここまで

cns内に埋め込んでおいたアセンブラを実行させる


def buffer overflowはこれぐらいしか書いてないな
http://drabs.blog40.fc2.com/blog-entry-1427.html#comment473

overflowについてだけならもっと前にも書いてるけど
cnsに埋め込んだコード実行する方法まで言及したのはここぐらい?

少なくとも、試合中にちょろっとコード実行するのに比べたら大分難易度高いと思うし
原理を聞いたら後は自分で出来ますってぐらいじゃないと、目的に合ったコードを完全自作するのは厳しいんじゃねーかな

他にちらっと見かけた疑問だと
%1021c%c%c%cJ@K
これの意味ぐらい?原理は十分すぎるぐらい書いてんだけどなぁ
http://drabs.blog40.fc2.com/blog-entry-970.html

> スタック上に数か所同じ文字列がぶち込まれてるから、そこのはみ出した分の補修が必要
実際に動作見てみたら補修必要なかったから、この1文だけは嘘だけど

以下、一応解説

%1021c%c%c%c
ここは1024文字ぴったり出力できれば、何でも良い
後ろ3つの%cは何の意味もない、色々弄ってた時のが残ってるだけ

J@K
は必須、アドレスの低いほうから順に0x4A,0x40,0x4B,0x00を書き込んで
リターンアドレスを0x004A404Bに差し替えてる

だから、DTCでコード書き込むときに先頭が0x4B404A=4931658なわけ
ここの書き込み場所をずらしたら当然J@Kも変える必要がある
0x4B404BならK@K
0x4B4030なら0@K
みたいに

def buffer overflowはクラック用途で言えば
キャラ選択が必要な時点で他と大して変わらんやろ
試合中でも良いからDEP回避のほうが有用?やし、あんま興味ない
読み込んだ瞬間にクラックとかだと良いね、sff辺りでできないかなー
ヒープ破壊ネタならあるけど、Windows10だと攻撃はキツイ
Windows XP以前とかみたいにガバガバならどうにかできるかもだが
XPなんて何年も前に捨てたよ
プロフィール

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

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