我对python很新,并试图移植一个我为堆栈溢出编写的简单漏洞(只是一个nop sled,shell代码和返回地址)。这不是出于邪恶的目的,而是出于大学的安全讲座。
给定一个十六进制字符串(deadbeef),最好的方法是:
任何关于python漏洞利用中的常见任务的提示和技巧也非常感谢。
答案 0 :(得分:4)
在Python 2.6及更高版本中,您可以使用内置的bytearray
类。
创建bytearray
对象:
b = bytearray.fromhex('deadbeef')
要更改字节,可以使用数组表示法引用它:
b[2] += 7
要反转bytearray
,请使用b.reverse()
。要创建以相反顺序迭代它的迭代器,可以使用reversed
函数:reversed(b)
。
您可能也对Python 3中的新bytes
类感兴趣,类似bytearray
但不可变。
答案 1 :(得分: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]
答案 2 :(得分:0)
在Python 2.x中,常规str
值是二进制安全的。您可以使用binascii模块的b2a_hex
和a2b_hex
函数转换为十六进制和从十六进制转换。
您可以使用普通的字符串方法来反转或重新排列字节。但是,执行任何类型的算术都需要使用ord
函数来获取单个字节的数值,然后chr
将结果转换回来,然后连接以重新组合修改后的字符串。
对于算术更简单的可变序列,请使用类型代码为'B'
的{{3}}模块。如果您从十六进制开始,可以从a2b_hex
的结果初始化这些。