我对python很陌生,试图移植一个我为堆栈溢出(只是一个nop sled,shell代码和返回地址)而写的简单漏洞。这不是为了恶意的目的,而是为了在大学进行安全讲座。在Python中的漏洞 - 操纵十六进制字符串
给出一个十六进制字符串(DEADBEEF),什么是最好的方式:
- 其表示为一系列字节
- 加或减的值
- 颠倒顺序(用于x86内存布局,即efbeadde)
任何提示和技巧关于利用python写作的常见任务也非常感激。
我对python很陌生,试图移植一个我为堆栈溢出(只是一个nop sled,shell代码和返回地址)而写的简单漏洞。这不是为了恶意的目的,而是为了在大学进行安全讲座。在Python中的漏洞 - 操纵十六进制字符串
给出一个十六进制字符串(DEADBEEF),什么是最好的方式:
任何提示和技巧关于利用python写作的常见任务也非常感激。
在Python 2.6及以上版本,可以使用内置的bytearray
类。
要创建bytearray
对象:
b = bytearray.fromhex('deadbeef')
要改变一个字节,则可以使用数组符号引用它:
b[2] += 7
为了扭转到位bytearray
,使用b.reverse()
。要创建一个以相反顺序遍历它的迭代器,可以使用reversed
函数:reversed(b)
。
您可能还对Python 3中的新类bytes
类感兴趣,它类似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]
bytearray也可在Python 2.6+ – zeekay 2011-05-07 01:31:59
@zeekay:太棒了。我认为这只是一个Python 3的东西。我会编辑我的答案。 – 2011-05-07 10:49:44