0

在 Python 2.7 的 pwntools 库中,地址被声明为address = p64(0x7fffffff0000). 我一直在绞尽脑汁想弄清楚如何增加这个地址,尽管我在编辑过程中不断遇到转换错误。我从基本的东西开始,最初:

from pwn import *
address = p64(0x7fffffff0000)    # starting hex value
for i in range(0, 65535):     # how many times you want to increment

    i +=1
    address = p64(0x7fffffff0000 + i)        # increment varhex by 1
    print address

尽管输出不是以十六进制方式递增,而是以 unicode 方式递增,如下所示:

...
_-\xff\xff\xff\x7f\x00\x00
`-\xff\xff\xff\x7f\x00\x00
a-\xff\xff\xff\x7f\x00\x00
...

有谁知道如何增加此变量以使输出显示为:

...
\x01\x00\xff\xff\xff\x7f\x00\x00
\x02\x00\xff\xff\xff\x7f\x00\x00
...
\x00\x01\xff\xff\xff\x7f\x00\x00
...
4

1 回答 1

1

p64只是一个微不足道的转换器strstr在 Python 2 上打印a时,repr将优先显示可打印的 ASCII 字符,而不是\x转义;如果你想防止这种情况发生,你需要以你喜欢的形式明确地写出来。一个简单的修复程序可能是:

from future_builtins import map, zip  # Gets Python 3 generator based version of map/zip
from itertools import repeat
import binascii

def bytes_to_x_escapes(s):
    hexstring = binascii.hexlify(s)
    escapecodes = map(''.join, zip(repeat(r'\x'), *[iter(hexstring)]*2))
    return ''.join(escapecodes)

使用此修复程序,您可以将prints 更改为:

print bytes_to_x_escapes(address)

它会以您期望的方式显示。

于 2018-08-23T02:35:57.527 回答