Delphiマンセー
■ このスレッドは過去ログ倉庫に格納されています
0468デフォルトの名無しさん
NGNG好きな番地に分岐させられたとしても、その分岐先が意味のないコードなら、やはりそう大きな問題ではない。
これを使って外部のパソコンから任意のプログラムが実行されてしまうとなると、これは大ききな問題だ。
どうして、任意のプログラムが実行されてしまうのだろうか?
まず、実行ファイルは 指定された場所が空いていれば常にそのアドレスにロードされる。
そのアドレスは プロジェクト->オプション->リンカタブ->メモリサイズ枠->イメージアドレス で指定される。
そして、スタックポインタも常に同じ場所からスタートする。
だから、この手続きが呼ばれる時のアドレス関係はは他のパソコンでも同じという事になる。
プログラムを解析されれば、絶対番地はどのパソコンでも通用する情報となってしまうという事だ。
さらに、Windowsはフラットメモリモデルを採用している。 だから、メモリ空間が読み取り可能であるならどこで
も実行出来てしまう。 それはデータ領域でも、スタック領域でもだ。
この結果、好きな番地に分岐させられるなら、文字列にコードを埋め込むなりして、任意のプログラムが実行
出来てしまうわけだ。
■ このスレッドは過去ログ倉庫に格納されています