【问题标题】:Reversing a byte string in Python在 Python 中反转字节字符串
【发布时间】:2017-07-22 15:41:56
【问题描述】:

我在python中找到如下代码:

def ExtractShellcodeArm(_arg_name):
    ObjDumpOutput(_arg_name)
    print("\033[101m\033[1mExtracted Shellcode:\033[0m\n")

    proc = subprocess.Popen(['objdump','-d',_arg_name], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

    while True:
        line = proc.stdout.readline()
        if line != b'':
            array = line.decode().rstrip().split(':')
            if len(array) > 1:
                if array[1]:
                    array2 =  array[1].split(' ')
                    array2 = array2[0].lstrip().rstrip()
                    if array2:
                        sc_part = '\t"'
                        sc_part += '\\x'
                        sc_part += '\\x'.join(a+b for a,b in zip(array2[::2], array2[1::2]))
                        sc_part += '"+'
                        print(sc_part)
        else:
           break

我在 python3 中运行这段代码后,它给了我 objdump 工具的结果,如下所示:

"\xe2\x8f\x60\x01"+
"\xe1\x2f\xff\x16"+
"\x22\x0c"+
"\x46\x79"+
"\x31\x0e"+
"\x20\x01"+
"\x27\x04"+
"\xdf\x01"+
"\x1b\x24"+
"\x1c\x20"+
"\x27\x01"+
"\xdf\x01"+
"\x6c\x6c\x65\x48"+
"\x6f\x57\x20\x6f"+
"\x0a\x64\x6c\x72"+

但我希望它以大端格式显示结果。如何在 python 函数中更改此表示。例如我希望这段代码显示如下结果:

"\x01\x60\x8f\xe2"+
"\x16\xff\x2f\xe1"+
"\x0c\x22"+
"\x79\x46"+
...

【问题讨论】:

  • 试试:print(sc_part[::-1])
  • 这个命令反转了整个字符串。但我希望字符串反转 2 字节 2 字节。
  • 我想要字符串 "\xe2\x8f\x60\x01" 变成 "\x01\x60\x8f\xe2"。
  • 您可能需要struct 模块。等我来回答

标签: python python-3.x endianness


【解决方案1】:

这不是最漂亮的代码,但它有效:

''.join(a+b for a, b in zip(s[::-2], s[-2::-2]))

【讨论】:

    【解决方案2】:

    您应该在解析每个完整的操作码(字节集)时将它们存储为列表中的一个元素,然后遍历列表,一次翻转操作码中的字节。例如,使用opcodes = ["\xcd\x80", "\xeb\xfe" 而不是opcodes "\xcd\x80" + "\xeb\xfe"。遍历列表并反转每个操作码应该没有问题。

    另一种选择是使用 shell 实用程序在 Python 接收字节之前反转字节,方法是将 objdump 命令传递给 sed 和 awk 等工具,方法是将每行上的字节拆分为列,然后向后打印列。

    【讨论】:

      猜你喜欢
      • 2010-10-30
      • 2019-05-02
      • 1970-01-01
      • 2012-01-11
      • 2021-05-14
      相关资源
      最近更新 更多