【问题标题】:How can i add bytearrays In python?如何在 python 中添加字节数组?
【发布时间】:2014-12-01 00:15:43
【问题描述】:

我是 python 新手。 我有一个 shellcode 的字节数组:

a=bytearray('\x31\xcb\x50\x69').

我要做的是给他们每个人 +1 以获得这个结果:

bytearray('\x32\xcc\x51\x6a').

有什么好的想法可以在 python 中实现这些吗?

谢谢你和最好的问候,

【问题讨论】:

  • 如果其中一个字节是0xff会发生什么?
  • 嗯,这个过程必须是可逆的。所以它必须环绕,所以当我将它反转时,它可以回到 0xff。

标签: python hex addition shellcode


【解决方案1】:
>>> a=bytearray('\x31\xcb\x50\x69')
>>> a
bytearray(b'1\xcbPi')    # repr uses a different but equivalent representation
>>> bytearray(x + 1 for x in a)
bytearray(b'2\xccQj')

您需要考虑对0xff +1 意味着什么

例如

bytearray((x + 1) % 0xff for x in a)  # wrap around

bytearray(min(x + 1), 0xff) for x in a)  # limit to 0xff

如果您正在执行其中一些操作,使用 translate 方法可能会更快

>>> trans_table = bytearray(range(1, 256)) + '\x00'
>>> a.translate(trans_table)
bytearray(b'2\xccQj')

如果您想将数组打印成这样,请使用repr() 函数

>>> print a
1�Pi
>>> print repr(a)
bytearray(b'1\xcbPi')

【讨论】:

  • translate 万岁。
  • 感谢您的回答!不知道我做错了什么。我尝试了所有的解决方案提供商,他们都给出了奇怪的结果:1�P�或2�Q...?
  • @Dionka,这就是您的控制台在打印时尝试表示字节数组的方式。 print 在字节数组上调用 __str__。您可以使用repr 来获取此处看到的表示
【解决方案2】:
a = bytearray('\x31\xcb\x50\x69')
a = bytearray(b + 1 if b < 255 else 0 for b in a)

如果您想剪裁该值而不是回绕为零,请将 0 更改为 255

【讨论】:

  • 这些给了我这个结果:“ 2�Qj ”为什么会这样?
  • 这些是字节数组中的字节,被解释为字符。试试你的原始值,它看起来会很相似。
【解决方案3】:

你可以这样做:

a=bytearray('\x31\xcb\x50\x69')
new_a = bytearray(b + 1 for b in a)


for b in new_a:
    print('{:02x}'.format(b))

输出:

32
cc
51
6a

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-20
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    • 2012-10-08
    • 1970-01-01
    相关资源
    最近更新 更多