バッファオーバーフローの悪用を学ぶことができるように、シェルコーディングの基本を学んでいます。問題は、私が書いたサンプルバイトコードに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バイトを排除するために使用されるいくつかの一般的な手法は何ですか?人々はこの種のもののためにエンコーダーを使うと聞きました、しかし私はこれに関するどんな素晴らしいリソースも見つけることができません。
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