質問: アセンブリ言語で直接CPUへ命令(システムコール) をすることによって、"Hello World"を出力させるプログラムを作りました。 1、winAPIを使ったパターン (winAPI関数を2回使用・・・) ``` LFB10: sub $20,%esp pushl $-11 call _GetStdHandle@4 pushl $0 leal 4(%esp), %ebx pushl $0 pushl %ebx pushl $14 pushl $LC0 pushl %eax call _WriteFile@20 add $20,%esp LC0: .ascii "Hello, world!\n" ``` 2、printf関数を読んだパターン ``` .text msg: .ascii "%s\0"; msg4: .ascii "Hello World!\0" .globl _main _main: LFB10: sub $20,%esp movl $msg4,4(%esp) movl $msg,(%esp) call _printf add $20,%esp ``` スライディングコード ---------- 実行される位置がランダムになってしまうため 無駄な処理をシェルコード先頭に配置してい置き 本命のコードが実行されることを期待する・・・ ための工夫(多分) 設定でランダムは消せると思うのでたぶんいらない。 バッファオーバーフロー でシェルコードを実行させたいときは工夫が必要いわれていますが 私は自分のパソコンで作成したシェルコードを 自分のパソコンで実行させようとしています。 それなら、アドレスのランダム化も無効化してしまえばどうにかなるし ヘッダーファイルの場所を記録するIATも 同じ端末で実行させるなら考慮しなくていいはずなので ほぼコードを変える必要性が無いと思うのですが 参考記事 IDA Proも導入したはいいものも・・・ ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/436ecbf9562e43ad986e58810b3eea87.png) (実行ファイルの中身を16進数で表したもの) 膨大な数のこのコード(?) バッファオーバーフローでシェルコードとして使いたい場合 どのようなところをアレンジする必要があるのでしょうか? ![![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/6a0bf15fd8def715b69b869361670542.gif)] (見た感じ全部必要ですよね?) 分からないのでお願いします。
回答: 先の質問に対する回答の中でも触れましたが、シェルコードとして実行させるというのは実行中の別の (脆弱性がある) プログラムの中に差し込んで実行させます。 それによって既に走っているプログラムの権限を乗っ取るのが基本的な形です。 ですから、シェルコード自体にはセクションも何もないです。 しいて言えば `.text` 相当のみがある状態と言えます。 失礼な言葉になってしまうかもしれませんが、質問者はシェルコードがどういうものなのか理解するのに充分な前提知識がありません。 先に触れたことを理解していな状態で似たような次の質問をどんどん連投するのはあまりよくないですね。 まずは普通のアプリケーションプログラムを満足に書ける程度にはなってから次の段階へ移るべきだと思いますが、どうしてもシェルコードというものに興味があるのだということであれば「Hacking: 美しき策謀 ―脆弱性攻撃の理論と実際」という本が手頃だと思います。 安価ですし。