web-dev-qa-db-ja.com

シェルコードからnullバイトを削除する

バッファオーバーフローの悪用を学ぶことができるように、シェルコーディングの基本を学んでいます。問題は、私が書いたサンプルバイトコードにnullバイトが含まれていることです。次に例を示します。

xor    %edi,%edi      >       31 ff         
mov    $0x3c,%eax     >       b8 3c 00 00 00          
syscall               >       0f 05   

バイトコード:"\x31\xff\xb8\x3c\x00\x00\x00\x0f\x05"

Nullバイトを排除するために使用されるいくつかの一般的な手法は何ですか?人々はこの種のもののためにエンコーダーを使うと聞きました、しかし私はこれに関するどんな素晴らしいリソースも見つけることができません。

4
SivaDotRender

movは、Pushおよびpopに置き換えることができます。だから例えばこれ:

mov    $0x3c,%eax

これになることができます:

Push $0x3c
pop %eax

これにより、このnullバイトのないコードが得られます。

   0:   31 ff                   xor    %edi,%edi
   2:   6a 3c                   Push   $0x3c
   4:   58                      pop    %eax
   5:   0f 05                   syscall
4
tim