「eXploit」を含む日記 RSS

はてなキーワード: eXploitとは

2008-12-31

http://anond.hatelabo.jp/20081231173837

Exploit系のバグなのか、わざとやっているのかが外部ツールで判別付かない場合がある

ツールにひっかかるから、ですらないと思う。単にそういう技が必要なくなっただけ。 そもそもexploitに晒されるほどポピュラーでかつOSの動的リンク機能が使えるほど近代的な環境になってさえ、動的コードセグメントを使ってまで最適化スピードアップしなきゃいけないような変態的ケースは今じゃ殆ど無いんじゃねーの。ゲームPC DEMOくらい? ひょっとしてケータイでもそういうことをやるのだろうか。 そもそもそれ以前にアルゴリズム改善とかアーキテクチャの見直しとかできることは山ほどあるような気もするが。 というかツールで監視するくらいならCPU保護機能でオフにするんじゃないのという気もする。

人工知能的なことをやりたいのであればCは圧倒的に不向きで、そもそもevalがある言語(Python/Ruby/etc..)使えばいいんじゃねーの、という話になる。もちろん Lisp/Schemeもそうだけど。。。

(追記に対してレス…)

void *(*psrc)(void *);
void *pdst = (void *)psrc;
究極
printf("%x\n",(int)psrc);

そーいうのは曖昧と呼ぶの? どちらもC言語的には未定義動作で、単にコンパイラがこういう風にコンパイルしますよということが分かっているから書くのだし、何もambiguousではないよね。

Exploitまがいのコード

そーいうことはxbyakとか使えば楽にできるとおもう

http://anond.hatelabo.jp/20081231093830

×クラックされるから関数ポインタを使わない

メモリ上にプログラムを自力でロードして、それを関数ポインタに変換して関数コールすると、Exploit系のバグなのか、わざとやっているのかが外部ツールで判別付かない場合があるので、この方式は使わなくなり、現在はDLL呼び出しやSO呼び出しが一般的。

ちゃんとExploit系に使われる関数ポインタクラック対象ってExploitというキーワード書いたのに(T_T)。高々、コンパイラ保証してくれる範囲の関数ポインタは安全だから使えばいいと思うよ。

ポインタ曖昧性はこんな感じかなぁ。

void *(*psrc)(void *);

void *pdst = (void *)psrc;

究極

printf("%x\n",(int)psrc);

だもんなぁ、任意引数関数ジャンプテーブルなんかで

こういう技が必要になることもあるし。

Cって面白いと思う。

Expolitまがいコード

char *prog="\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00";

\x00は適当な実行コード

void *(*psrc)(void *) = void *(*)(void *)prog;

(*psrc)(NULL);

こんな感じで、データ配列プログラムとしての実行で、昔はあったけど、いまはこういうコードDLLとかSOとかで書くのがお作法だよねーと

さらにいえばWindwosならCOMで書けと・・・

どうみても、Code Exploitバグに見えるもの、この手のコードは。

外部ツールがバグとして引っかけちゃうから書かないのが最近の主流だと思う。書く必要もほとんど無いし。

Lispのようにプログラム自身がメモリ上に動的にプログラムを必要に応じて計算しながら書き込んで、それを実行すれば、ある意味人工知能的なプログラムとその美しさが実現できるけど、それは一般的なプログラムの範疇ではバグの検出が複雑になるので、やっちゃダメとはいわないが特殊分野の技法だなぁと思う限り。

http://anond.hatelabo.jp/20081231004901

ポインタと一口に言っても

メモリポインタもあるけど、関数ポインタもあるっしょ?

いまは、Code Exploitなどのクラックに使われちゃうので、やらないといえばやらないけど。

ディスクからプログラムをロードしてメモリに書き込んで、

そのメモリポインタ関数ポインタとしてジャンプする。

というのも、昔はよくやったこと。

今はDLLなりSOなりがシステムとしてやってくれるけど・・・

昔は違ったのさ

その辺のメモリポインタ関数ポインタあいまいさがCのポインタの面白いところだと思うよ?

あと、最近は、細かなチューニング用のコードコンパイラに入っているし、

昔は2PASSだったけど、今は1PASSが主流だったりして、結構コンパイラも複雑になったと思う。

ログイン ユーザー登録
ようこそ ゲスト さん