DBOAメモ

CATEGORYmugen記述
COMMENT3
いい加減覚えるかーってことで改めて調べてたら理解した
参考になりそうな記事が見つからなかったんで実行手順をメモっとく
ついでに意味もなく解析手順も書いとく

http://drabs.blog40.fc2.com/blog-date-201701.html
statedef番号をオーバーフローさせてリターンアドレス書き換えるんやなってのはここ読んで理解できる
ってことでdsrugal見てみる

20180616124235.png
リターンアドレスを0x402d76に書き換えてるっぽいのでその部分のコード読んでみる

20180616124427.png
esp+0x10してリターンすれば読み込んだstatedefの文字列に移動できると判明

次は、実際にどんな感じで移動するのかを確認してみる

20180616125204.png
…と思ったものの0x402d76は毎フレーム(?)実行される場所っぽい
なんで適当に呼ばれづらいと思われる場所に変えておく

20180616130451.png
OllyDbgの使い方わからんのでうさみみでリターン実行箇所(0x415C79)にブレークポイント貼る
適当にctrl+shift+F4で再リロード

20180616130859.png
実行時のスタックが表示される
0x1ba48012にリターンするっぽいんでその場所に飛ぶ
(この手順の前に色々調べて読み込んだstatedefの場所は変動しないことを確認してたけど省略)

20180616131145.png
なるほどこんな感じになってるらしい
ってことでさっそくコード読んでみる

20180616131353.png
0x1ba48085にジャンプしてるっぽい
その部分のコード読む

20180616131800.png
ステコンの記述とnopをすっ飛ばしてるらしい
ってことで逆アセ開始位置を0x1ba48085に変更

20180616132027.png
まともに読めなかったコードが無事読めるように
実際のcnsと比較してみる

20180616132326.png20180616132335.png
改行が0x00に置き換わってる = 0x00はnull文字が割り当てられるようにしないとダメらしいと察せられる

20180616132657.png
リターン時はesp-0x18して0x47eb31に移動すればいいことを確認


情報が出そろったので手順をまとめると
・esp+0x10してリターンする場所にリターンアドレスを書き換える
・ステート番号(とステコン)をjmpで回避して任意コードを実行
・任意コードに存在する0x00は改行に置き換え、null文字が割り当てられるようにする
・コード実行後はesp-0x18した後に0x47eb31へリターンする


以上、解析完了
DTCのtextにコード埋め込む方式より早いタイミングで実行できるものの開幕1回しか呼ばれないっぽい
使い勝手の観点で見るなら微妙かな
わざわざ0x00発生しないようにコード調整しなくてもいいのは楽だけど
実行手順は書いたんだし別にテンプレ作る必要ないよね?

3 Comments

There are no comments yet.
sinoha

sinoha  

> 対策のテンプレなら需要ありますあります!(食い気味)
>
> けどティアディフェンス見るに完全には無理なのかな
結局のところDTCより早く任意コードを実行してるだけみたいなんですよね
対策と言っても実行してるコード読んで書き換えられた値を復元するしかなさそうです
そもそも私はコード実行手順以外あまり興味なくてDBOA勢が実行してるコードの調査してないので…

> ティア・ディフェンスって隔離対策だけに部分的に使用できる技術であれば大会に出せる幅が広がりますねえ…
4CA式コードは無効化できないらしい?とは聞きましたね
調査進んでないので予想ですが、ティアディフェンス単体で完全な隔離対策は不可能と思われます

2018/06/16 (Sat) 21:13 | EDIT | REPLY |   

-  

ティア・ディフェンスって隔離対策だけに部分的に使用できる技術であれば大会に出せる幅が広がりますねえ…

2018/06/16 (Sat) 20:23 | EDIT | REPLY |   

SAMSARA  

対策のテンプレなら需要ありますあります!(食い気味)

けどティアディフェンス見るに完全には無理なのかな

2018/06/16 (Sat) 19:35 | EDIT | REPLY |   

Leave a comment