我對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