ヒープスプレーが繰り返しNOP + Shellcode
のチャンクの割り当てで構成されている理由について知りたいのですが?フォーマットがNOP
を繰り返さず、最後にシェルコードだけが繰り返されるのはなぜですか。スタックピボットが発生すると、EIP
は、シェルコードに到達するまでスレッドを下にスライドさせませんか?さらに、ヒープスプレーでは、予測可能なアドレスが常にピボットするように選択されているように見えるため、チャンクの繰り返しは不要のようです。
スプレーのポイントは、オブジェクトがどのブロックに割り当てられているかを常に正確に把握できるとは限らないということです。ヒープがどれほど不安定になる可能性があるからだと思います。いつでもメモリのブロックが割り当てられ、NOP
スレッド/シェルコードが中断される可能性があります。
概念を学びやすくするため、予測可能なアドレスの例が表示されますが、実際には、ASLRはヒープが配置されている場所をランダム化します。したがって、可能な限り堅牢である必要があります。