Python中的漏洞 - 操作十六进制字符串
我刚开始学习Python,正在尝试把我写的一个简单的漏洞利用代码移植过来,这个代码是针对栈溢出的(只是一些无操作指令、壳代码和返回地址)。这不是为了坏事,而是为了在大学的安全讲座上用。
给定一个十六进制字符串(deadbeef),有什么好的方法可以:
- 把它表示成一系列字节
- 加上或减去一个数值
- 反转顺序(针对x86内存布局,比如变成efbeadde)
如果有关于在Python中编写漏洞利用时常见任务的小技巧和建议,也非常感谢。
3 个回答
0
不太确定这是不是最好的方法...
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]
4
在Python 2.6及以上版本中,你可以使用内置的bytearray
类。
要创建一个bytearray
对象,你可以这样做:
b = bytearray.fromhex('deadbeef')
如果你想修改某个字节,可以用数组的方式来引用它:
b[2] += 7
要在原地反转bytearray
,可以使用b.reverse()
。如果你想创建一个可以反向遍历它的迭代器,可以使用reversed
函数:reversed(b)
。
你可能还会对Python 3中的新bytes
类感兴趣,它和bytearray
类似,但不可变。