我对 python 很陌生,并试图移植一个我为堆栈溢出编写的简单漏洞(只是一个 nop 雪橇、shell 代码和返回地址)。这不是出于邪恶目的,而是为了在大学进行安全讲座。
给定一个十六进制字符串(deadbeef),最好的方法是:
- 将其表示为一系列字节
- 添加或减去一个值
- 颠倒顺序(对于 x86 内存布局,即 efbeadde)
任何有关在 python 中编写漏洞利用的常见任务的提示和技巧也非常感谢。
在 Python 2.6 及更高版本中,您可以使用内置bytearray
类。
要创建您的bytearray
对象:
b = bytearray.fromhex('deadbeef')
要更改字节,您可以使用数组表示法来引用它:
b[2] += 7
要反转bytearray
原位,请使用b.reverse()
. 要创建一个以相反顺序对其进行迭代的迭代器,您可以使用reversed
函数:reversed(b)
。
您可能还对bytes
Python 3 中的新类感兴趣,它类似bytearray
但不可变。
不确定这是否是最好的方法...
hex_str = "deadbeef"
bytes = "".join(chr(int(hex_str[i:i+2],16)) for i in xrange(0,len(hex_str),2))
rev_bytes = bytes[::-1]
或者可能更简单:
bytes = "\xde\xad\xbe\xef"
rev_bytes = bytes[::-1]